从attention到transformer
总体看transformer
首先说明的是NLP中一类做向量集到向量集任务的模型统称为 seq2seq
transformer的结构分为encoder 和 decoder:
encoder通过encoder模块多层累加,提取输入特征;
decoder通过已生成词汇和encoder信息,完成文本生成任务。
大体的框架如下图所示:
encoder
encoder的构成是多层的,每层的结构如上图所示,包括自注意力机制层,残差连接和归一化层,以及FNN前馈神经网络。
1) positional encoding
位置编码是为了弥补attention无法考虑句子中所潜在的词语时序而创造的。
编码形式有多种,在最原版的transformer里,使用的是如下的公式(了解):
其中,pos是词的位置,i是该编码的维度,dmodel是总维度。
这个公式可以考虑到不同位置词语的关系,所以可以包含词的相对位置信息,通过以下的公式变换可以理解:
比如:对于在第五位的词,5=2+3 or 5 = 1+4,根据上面的sin变换公式,位置5可以拆分为位置2和3的位置编码,所以这种编码形式可以包含(相对)位置信息。
2)add + Norm
残差连接是为了防止梯度消失
Norm则是防止梯度爆炸。
3)前馈神经网络FNN
对于encoder层,前面做的是都是线性变换,这里FNN为这些线性变换加上一个激活函数,这样我们可以得到非线性的变化,从而获取更好的信息提取效果。
decoder
在李宏毅老师的课上,有说明过,有两类decoder 1)autoregression 2) 非自回归;
前者生成词是一个一个的,而后者可以并行;但是前者的performance更好。
主要先学习自回归的decoder:
1) 结构区别:交叉验证层
可以看到decoder的输入是不仅是encoder的结果
其基本模块与encoder的区别就是加入了交叉注意力机制也就是(encoder-decoder attention层)
前面说过交叉注意力机制,即Q是encoder 的输出,KV来自decoder自身。
2)结构区别:输入和masked attention
decoder的输出文本是在前面的词产生以后的基础上接着生成文本的。
其需要两个特殊的词向量来代表开始和结束,begin 和 end 的token
大致流程可以看下图(李宏毅课程的ppt):
而正是由于考虑到了实际上生成文本的自然的这种先后顺序,我们需要做masked attention,即在生成“器”这个单词的时候,“学”不应该被考虑到。
(???可能是并行效果不好的原因)
李宏毅老师还在课上提到过一些transformer对于不同任务的训练技巧,后续做具体代码任务再学习总结。
标签:编码,transformer,位置,attention,encoder,decoder From: https://www.cnblogs.com/moonlight1209/p/17087687.html