Self Attention(Transformer)
- 在17年被提出于《Attention Is All You Need, Ashish Vaswani》,也称为 Transformer结构;
- 内部包含Multi-Head Attention以及Rest残差结构。
- Transformer是Bert网络结构的基础。
Transformer
1>Tr-ansformer解决的问题是,由于循环神经网络它的执行一定是按照时间顺序一个一个来计算的这个问题。而Transformer是并行化的是把所有时刻的信息一起计算,内部是没有循环神经网络的,它的内部是全连接,速度快,训练快。
2>在循环神经网络中输入是多少个时刻是没有限制的,但是在Transformer由于内部是全连接,所以输入的大小必须是固定的。
- 传统缺点:seq2seq使用循环网络固有的顺序特性阻碍样本训练的并行化, 这在更长的序列长度上变得至关重要,因为有限的内存限制样本的批次 大小。
- 新结构:Transformer,这种模型架构避免循环并完全依赖于attention机制 来绘制输入和输出之间的全局依赖关系。 Transformer允许进行更多的并行化。
- Self-attention:有时称为intra-attention(内部Attetion),是一种attention机制,它关联单个序列的不同位置以计算序列的表示。 Self-attention已成功用于各种任务, 包括阅读理解、摘要概括、文本蕴涵和学习与任务无关的句子表征。
Transformer整体结构
Encoder-Decoder结构
self-Attention的计算
计算Attention的时候,我们最需要的一共有三个值分别为Q,K,V。在self-Attention中每一个输入就对应的一个输出,说明每一个时刻就对应的有Q,K,V这三个值。如下图:
Q-K-V的计算
V代表当前时刻Value值,但是我们不知道当前时刻具体是什么,但是我们知道当前时刻输入是一个向量,所以我们可以做一个转换。假设当前时刻输入为1*4的向量V,使用当前的向量V乘上一个系数 W v W_v Wv, W v 大 小 是 4 ∗ 3 W_v大小是4*3 Wv大小是4∗3的向量,那么现在的 W v W_v Wv就可以表示为当前时刻数据的高阶特征向量。Q,K同理如下图:
Attention的计算
单个样本矩阵乘法的形式
带批次样本矩阵乘法的形式:
Multi-Headed-Attention的计算
Multi-Headed-Attention就是多头的Attention。因为Transformer中编码器的每一层都是一样的,所以输入和输出都是一致的,输入形状为[2,4],所以在下一的输入大小也是[2,4],但是在计算多头后拼接时,如果
z
z
z=[2,3],那么一共8个头,那么得到的
Z
Z
Z=[2,24]。所以最后得到的输出需要做一个转换,如下图:
矩阵形式计算如下图:
效果图如下:
左边是计算一个普通的Attention,右边则是计算多头的Attention(俩个头)
Positional Encoding
- 因为Transformer中是全连接,没有循环神经网络。所以为了让模型具有序列特征信息在输入的时候加入了位置编码。
- 模型还没有描述词之间的顺序关系,也就是如果将一个句子打乱其中的位置,也应该获得相同的注意力
- 为了解决这个问题,论 文加入了自定义位置编码,位置编码和word embedding长度相同的特征向量,然后和word embedding进行求和操作。
LayerNorm&Residuals
Decoder结构
Decoder中的self-Attention
- 和编码部分的multi-head attention类似, 但是多了一 次masked,因为在解码部分, 解码的时候时从左到右依次解码的,当解 出第一个字的时候,第一个字只能与第一 个字计算相关性,当解出第二个字的时候, 只能计算出第二个字与第一个字和第二个 字的相关性。;
- 因此这里引入Mask的概念进行掩码操作。
- Transformer在翻译中应用的流程图
- 可以看出,初始的词向量经过Encoder后生成高阶向量R,而这个高阶向量R也作为Key和Value,Decoder中经过归一化(Add&Normalize)后的Z向量作为Query, 在Decoder中的Encoder-Decoder Attention这一步进行Attention value的计算(可以在上文中找到含有Encoder-Decoder Attention的详细流程图帮助你理解)。完整的步骤见下图,直到Decoder 中输入最后一个单词student的时候输出,标志着Decoder输出结束为止。
Final Linear and Softmax Layer
Transformer Training
小结
多头注意力(Multi-headed attention)机制 Transformer
- 由编码器和解码器组成,在编码器的一个 网络块中,由一个多头attention子层和一个前 馈神经网络子层组成,整个编码器栈式搭建了 N个块。类似于编码器,只是解码器的一个网 络块中多了一个多头attention层。为了更好的 优化深度网络整个网络使用了残差连接和对层 进行了规范化(Add&Norm)。
放缩点积attention(scaled dot-Product attention)。
- 对比我在前面背景知识里提到的attention的 一般形式,其实scaled dot-Product attention就是我们常用的使用点积进行相似度计算的attention, 只是多除了一个(为K的维度)起到调节作用,使得内积不至于太大。
多头attention的Q,K,V
- 多头attention的Query,Key,Value首先进过一个线性变换,然后输入到放缩点积attention注意这里要做h次,其实也就是所谓的多头,每一次算一个头。而且每次Q,K,V进行线性变换的参 数W是不一样的。然后将h次的放缩点积attention结果进行拼接,再进行一次线性变换得到的值作 为多头attention的结果。