The Transformer

如题所述

第1个回答  2022-05-31

Transformer是个叠加的“自注意力机制(Self Attention)”构成的深度网络,是目前NLP里最强的特征提取器。
论文: Attention Is All You Need

整体上还是由Encoders和Decoders两部分组成的,而每一个部分是由6个Encoder和Decoder堆栈成的,每个的结构完全相同,但不共享权重。

每个Encoder由两部分组成:Multi-head self-attention层和Feed Forward NN层。

每个Decoder由三部分组成:Multi-head self-attention层,Encoder-Decoder Attention层和Feed Forward NN层。

动机:当模型处理每个单词(输入序列中的每个位置)时,self-attention允许它查看输入序列中的其他位置以寻找可以帮助导致对该单词更好的编码的线索。

使用矩阵形式可以并行计算。
图示

动机:将信息映射到不同的子空间,可能会抓取到不同位置的注意信息。
按照self-attention方式进行相同的几次计算(论文中使用8头),每次使用不同的权重矩阵( , 和 ),最终会得到几个不同的 矩阵,将它们直接拼接起来得到一个很长的矩阵 ,再乘以一个参数矩阵 将矩阵压缩到低维(同Embedding维数)。

单词顺序是NLP中非常重要的信息,所以加入Position encoding是考虑输入序列中单词顺序的一种方法。将位置编码与Embedding向量直接加起来得到真正的单词输入向量。
论文中给出了两个位置编码公式:

该层为简单的全连接层,使用了RELU激活函数,论文中该全连接的隐藏层维数为2048,公式如下:

在每一个子层的结束,输出矩阵为 ,我们将该层的输入矩阵 和 直接相加,再做Normalize操作 ,该Norm函数引用了 参考文献1: Layer Normalization 。
Norm方法有很多,但它们都有一个共同的目的,那就是把输入转化成均值为0方差为1的数据。我们在把数据送入激活函数之前进行normalization,因为我们不希望输入数据落在激活函数的饱和区。

该层是一个简单的全连接网络,将最后一个Decoder输出的向量投影到一个更高维度的空间去(词典维数)。
softmax层将Linear层的输出向量转化为概率输出,选择最大概率的单词作为输出。

Encoders最后将 和 输出给每个Decoder的Encoder-Decoder层:

Padding mask在所有的scaled dot-product attention里面都需要用到,而Sequence mask只有在Decoder的self-attention里面用到。

语料库中每个句子的长度是不同的,我们需要对齐。使用我们设置的阈值(一般为255),对于较长的序列,直接截取左边的序列,对于较短的序列,在其后添加0。
而在scaled dot-product attention中,不能对这部分添加了0的单词位置加上较高的注意力,所以在self-attention中的softmax之前,直接将这些位置的值设为 ,经过softmax后这些位置的概率值会变为0。
即下图中的 Mask(opt.) 块:

Sequence mask是为了使得Decoder不能看见未来的信息,使得解码器的attention只能关注当前解码单词之前的输出单词,而不能依赖后面未解码出来的。
所以跟Padding mask一样,对其后的单词位置直接设为 ,经过softmax后这些位置的概率值会变为0。
这步操作对应Decoder中第一个构件:Masked Multi-head Attention。

使用交叉熵或者KL散度去比较两个输出之间的差距,然后使用反向传播优化其中的所有参数。

在最后的softmax层我们直接输出了最大值位置的单词,叫做贪婪解码。
另一种更合理的解码方式叫做 束搜索 。假设第1#位置解码出的概率值,前两大的位置单词为 I 和 me ,那么在第2#位置解码时,依赖的第1#位置单词分别取为 I 和 me ,分别跑两次算法,在其中再选两个得分最高(或误差最小)的结果,依次类推。最终会得到两个得分最高的序列。

相似回答
大家正在搜