本文是根据台大李宏毅教授网课整理,主要是记笔记以供自己复习。
Transformer其实就是一个Seq2Seq Model(输入是一个序列输出也是一个序列但是长度由机器决定)。
是一个Encoder和Decoder架构。
实现,输入一个序列输出一个序列,RNN和CNN都可以实现。
总体架构如下图所示:
包含多个block块,每个block块中有多个层。
block的详细计算过程如下:
input----->Self-Attention层------>residual计算------>layer norm------>FC------>residual计算------>layer norm
对应Transformer中的Encoder结构图如下(是原始的Transformer的架构):
当然可以修改该Encoder的架构,已有的工作对该结构进行了修改,如下图所示,论文1对应图(b)将layer norm的位置进行了调整。
论文2解释了为什么要是用layer norm而不是batch norm,而且设计了power norm。
(哈哈哈这两个论文没有看呢~)
Decoder有两种:
Decoder就是实现将Encoder的输出转换为最终的结果序列。
(下面以语音辨识为例讲解:输入一段声音输出一段文字。)
一开始Decoder的输入是“begin”符号。然后Decoder输出一个vector,表征各个汉字的得分。
选取得分最高的,与begin一起做为Decoder下一步的输入,
Decoder的输入输出过程如下:
Transformer中Decoder的详细结构如下:
可以注意到在Transformer的Decoder结构中,Attention模块是Masked Multi-Head Attention。
其实使用Masked Multi-head Attention的原因很简单,思考前面Decoder的输入,是一个依序的过程,有b1之后才能得到a2.……
最重要的一个问题:机器如何知道何时结束Decoder呢?
加入一个结束符号,
期望的Decoder的运作过程变成:
下图是AT和NAT的比较。
NAT输入是一串Begin符号,然后直接输出结果序列。
疑问,对于NAT如何知道输出序列的长度呢?
NAT Decoder的优点:
NAT的Decoder效果通常比AT差。
那么Decoder是如何处理Encoder的输入的呢?
如图,Encoder的输出同个两个分支进入到Decoder的Masked Multi-Head Attention中。处理过程称为cross-attention。
Cross-Attention的处理过程:
类比Self-Attention的计算过程。
label使用one-hot编码。
Teacher Forcing:使用ground truth作为输入。
训练时,Decoder输入为ground truth。
将输出与ground truth的one-hot编码进行计算cross entropy loss。
思考:BLEU Score(bilingual evaluation understudy)是计算两个句子语义相似程度的方法,为什么不使用该函数作为训练的Loss呢?
该函数的计算非常复杂无法微分。
在训练Decoder是输入是ground truth,但是在测试时使用的是Decoder的输出,因此会出现Decoder输出错误而导致错误向后传播的情况。
如何处理?
Scheduled Sampling:在训练时给Decoder的输入加些错误。
下面有些论文讲述Scheduled Sampling(没看,留坑)