首页 > 其他分享 >从attention到transformer

从attention到transformer

时间:2023-02-02 23:11:40浏览次数:45  
标签:编码 transformer 位置 attention encoder decoder

从attention到transformer

总体看transformer

首先说明的是NLP中一类做向量集到向量集任务的模型统称为 seq2seq

transformer的结构分为encoder 和 decoder:

encoder通过encoder模块多层累加,提取输入特征;

decoder通过已生成词汇和encoder信息,完成文本生成任务。

大体的框架如下图所示:

transformer的大概框架

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:

自回归decoder的transformer

1) 结构区别:交叉验证层

可以看到decoder的输入是不仅是encoder的结果

其基本模块与encoder的区别就是加入了交叉注意力机制也就是(encoder-decoder attention层)

前面说过交叉注意力机制,即Q是encoder 的输出,KV来自decoder自身。

2)结构区别:输入和masked attention

decoder的输出文本是在前面的词产生以后的基础上接着生成文本的。

其需要两个特殊的词向量来代表开始和结束,begin 和 end 的token

大致流程可以看下图(李宏毅课程的ppt):

以文本预测为例的transformer实现过程

而正是由于考虑到了实际上生成文本的自然的这种先后顺序,我们需要做masked attention,即在生成“器”这个单词的时候,“学”不应该被考虑到。

???可能是并行效果不好的原因)

李宏毅老师还在课上提到过一些transformer对于不同任务的训练技巧,后续做具体代码任务再学习总结。

标签:编码,transformer,位置,attention,encoder,decoder
From: https://www.cnblogs.com/moonlight1209/p/17087687.html

相关文章