其实光看Datawhale的教程我有点晕乎,感觉更适合有一定计算机基础的同学,所以我自己改了一下笔记的结构。
我的理解是,像Transformer等模型/架构其实是通过一些思想上的方法,产生了一些模型,通过机器来解决一些现实世界中的问题。这个过程包括:
1.把现实世界中跟问题有关的数据(Question)转化为所选择的方法中机器能处理/计算的数据形式,在Transformer中就是刚刚说的Embedding。关于文本是怎么被向量化的,Datawhale的教程里写得特别好:https://www.datawhale.cn/learn/content/87/3128。所以我这次的笔记里就不写啦。
2.选择合适的方法,针对Q输出A,在Transformer中,这个方法是用Seq2Seq的框架,叠加了合适的深度学习模型+Attention机制。
上一篇笔记也讲了点1,所以这一篇笼统地讲一下2,我看教程后面还有Encoder和Decoder的部分,所以具体的就不展开啦。
1. 什么是深度学习?
深度学习是一种模拟人脑处理信息方式的方法,简单来说可以理解成像一个超多层的筛子,每一层筛选数据中更复杂的特征,可以自动提取数据中的模式和特征。
2. 在RNN与LSTM的基础上,Transformer做了什么?
在介绍Transformer时,发现很多博客和教程会提到RNN和LSTM,是两种常见的深度学习模型(不过现在基本是Transformer和其变体独霸天下了),以前就是胡乱学了,写博客的时候思考了下,应该是因为Transformer在处理序列数据时解决了RNN和LSTM的一些局限性。
1. RNN和LSTM为什么不好
RNN和LSTM是处理序列数据(比如文本、语音、时间序列数据等等)的重要方法。它们通过循环结构来处理序列中的每一个元素,并在计算中保留前一个时刻的“记忆”,就是这种结构让它们能够有效处理具有时间顺序关系的数据。然而,RNN和LSTM也有它们的缺点,比如:
- 计算效率低:RNN和LSTM是序列性处理的,意味着它们不能并行处理序列中的各个元素,而是一个接着一个地处理,所以它们在计算上会比较慢。
- 长距离依赖问题:尽管LSTM通过引入门控机制来解决传统RNN的长期依赖问题,但当序列非常长的时候,LSTM仍然会受到梯度消失或爆炸的影响,导致模型难以捕捉序列开头与结尾之间的长期依赖关系。
2. Transformer的创新:
Transformer的提出,正是为了克服这些问题。它不再依赖于RNN或者LSTM的逐步处理,而是完全基于自注意力机制(Self-Attention)。这一机制的优势包括:
- 并行处理:Transformer可以并行处理输入序列中的所有元素,因为它不依赖于序列的顺序。这样可以显著提高训练和推理的效率(特别是对长序列)。
- 捕捉长距离依赖:自注意力机制能够在每一个位置之间计算直接的依赖关系,因此可以更加灵活地捕捉长距离的依赖信息,而不受序列长度的限制。
- 全局信息建模:不同于RNN和LSTM在处理序列时的局部信息传递,Transformer通过计算输入序列中每个元素与其他所有元素的关系,从而构建了全局的上下文表示。
3. 什么是Attention机制?
教程里有一个很有意思的观点,说Attention的核心思想是“加权求和”,让模型能够根据输入的不同部分重要性,动态地调整它们在输出中的贡献。具体来说,Attention的工作原理如下:
-
分解输入:假设你有一段话或者一组数据,计算机首先将这些输入数据分解成更小的部分(例如单词)。
-
挑选出重要的部分:接着,计算机会查看这些部分并决定哪些部分更重要。它通过将每个部分与一个“查询”进行比较来实现这一点。
-
分配重要性:根据每个部分与查询的匹配程度,给它们分配一个分数。得分越高,部分就越重要。
-
集中注意力:然后,系统会确定应该给每个部分多少注意力。重要部分得到更多关注,而不重要的部分则得到较少关注。
-
加权求和:最后,模型会将所有的信息结合起来,但会对重要的信息赋予更大的权重,从而帮助模型更好地理解输入数据。
总结:
- Attention 的核心是计算序列中各位置之间的关系,并根据这种关系动态调整重要性权重。
- 通俗地说,它就像是阅读一篇文章时会根据上下文找到关键词,并重点关注与当前目标相关的内容。
- 在深度学习和Transformer模型中,**全局注意力(Global Attention)和局部注意力(Local Attention)**是两种常见的注意力机制,它们在如何计算注意力权重和处理序列数据上有所不同。以下是对这两种注意力机制的详细说明:
Attention 的公式
既然上面都说加权求和了,感觉不来个公式不太合适!对于序列中的每个位置,Attention 的核心公式是:
Attention(Q,K,V)=softmax(QKTdk)V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V
- QQQ:查询(Query),表示我们当前关注的目标。
- KKK:键(Key),表示序列中其他元素的信息。
- VV