Transformer:
一、 总体架构
Transformer是“编码器—解码器”架构,由编码器(encoder)和解码器(decoder)组成,其都是多头自注意力模块的叠加。其中,input sequence分成两部分,分别为源(input)输入序列和目标(output)输出序列。前者输入编码器,后者输入解码器,两个序列均需进行embedding表示并加入位置信息。
二、 encoder
1. 总体架构:
Transformer编码器由多个相同的层叠加而成,每个层都有两个子层(sublayer),第一个是多头自注意力(multi-head self-attention)汇聚;第二个子层是基于位置的前馈神经网络。每个子层都采用了残差链接。
2. 架构设计:
- 首先对输入序列进行词嵌入表示并加入位置信息。
- 之后,将当前编码器层的输入序列放入多头自注意力层生成新的向量。具体来说,在计算编码器的自注意力时,查询、键和值都来自于前一个编码器层的输出。
- 将多头自注意力层的输出与当前编码器层的输入做残差连接并将结果做layer normalization。
- 将layer normalization后的结果放入全连接层(feed forward)层。该层的作用是对自注意力层中输出的所有位置表示进行变换,所以其被称为基于位置的前馈神经网络。
- 之后进行残差连接并进行layer normalization。
- 将结果送入下一个编码器层重复 N N N次。
三、 decoder
1.总体架构
如图,解码器接入编码器最后的输出向量。假设编码器学习的序列是“机器学习”。当解码器接收到[BEGIN]
Token时会产生第一个字符“机”,之后由产生的第一个字符“机”产生第二个字符“器”,之后由前两个字符“机器”产生第三个字符“机器学”,之后由产生的前三个字符生成“习”,之后由产生的前四个字符产生[END]
token,序列生成结束。
如图,序列在经过decoder后,会对生成向量做softmax分类,从词表中查表得到生成的字符。
2. 架构设计:
如图:
如图,解码器与编码器组成很相似,其中:
- 解码器的第一个multi-head attention变成了masked multi-head attention,该自注意力层只能”向前“看不能”向后看“,因为在解码器中,字符是一个一个产生的,不能”向后“看到当前生成序列的后面字符。
- 采用了cross attention层
- 在经过 N N N个解码器层后,将输出的向量输入到全连接层并进行softmax分类,得到最终输出字符,并将所有输出字符作为下次输入,直到输出
[END]
。
3. cross attention
如图:
如图,cross attention的q
来自decoder,k
和v
来自encoder。该层可以很好的利用编码器学习的信息,也叫”编码器—解码器“注意力层。
4. 训练:
-
teacher forcing
图一:
图二:
如图一,训练与预测最大的不同是解码器的输入:
- 预测时,解码器的输入除了第一个
[BEGIN]
字符,其余字符都来自解码器的前一个预测字符。 - 训练时,解码器的所有输入都是真实的数据集输入,此时解码器的输出仅仅用来计算交叉熵来进行模型优化。这种方法被叫做
teacher forcing
如图二为Transformer的整体训练架构。
- 预测时,解码器的输入除了第一个
-
Tips
-
copy mechanism: 在对话和引用中,一些词汇不必由模型自己产生,而是直接复制输入即可。
如:–我是
小明
。 --你好
小明
。其中,
小明
可直接复制由会话中,而不用模型自己生成。 -
guide attention:
在特定的问题情境中,强迫注意力层的处理方向。如在语音识别中,处理方向为只有从左到右。
-
beam search:
greedy decoding: 在最初的解码器中,进行softmax时只选择当前字符得分最高的字符。但是,单个字符得分最高不代表整个句子中该字符得分最高。
beam search: 在每次进行字符选择时,选择得分排名前 n n n字符。最后得到的字符得分可能比每次只选择一个字符的得分要好。如图:
如图,若按照贪心策略,每次都选当前得分最高的字符,那就是红色路径,最后的得分只有0.6,但是若规定每次选择排名前2的字符,那按照绿色路径最后字符的得分为0.9优于红色路径。
注意:beam search时每次总共选择 n n n个而不是每个分叉选 n n n个。
当decoder的输出很确定时,使用beam search效果会变好。如:问答
当decoder的输出带有创造性时,使用beam search效果会变差。如:写文章
-
-
Optimizing Evaluation Metrics
- 训练时采用交叉熵
- 评估模型时采用 BULE score