目录
一、Transformer概述
二、输入和输出
三、Encoder
四、Decoder
五、正则化处理
六、对于结构的改进?
七、AT vs NAT
八、Cross-attention
一、Transformer概述
Transformer模型发表于2017年Google团队的Attention is All you need这篇论文,完全基于自注意力机制模型和前馈神经网络绘制输入和输出之间的全局依赖关系,摆脱CNN和RNN的模型束缚,具有并行计算能力,能够捕捉长期依赖关系进行建模,处理长序列时效果更好,并对全局的信息获取更为完善。
当下,Transformer作为一个新兴主流模型在多个领域的发展上都有了显著的成功,如机器翻译,大语言模型,文本分类,问答系统,随着计算资源的增加,算力的不断提升,Transformer也逐步推向大模型,多模态的领域。
Transformer模型从整体上看仍然是Encoder-Decoder结构,论文中给定的Encoder和Decoder数目都是六个,如下图所示。
注意:在Transformer结构中左右两侧的N×就是Encoder和Decoder的个数,另外最后一个Encoder将输出两个值(输出序列和注意力机制的权重)到每一个Decoder模块结合,后面会说这个过程。
二、输入和输出
假设当前利用Transformer模型做语音识别任务。
Transformer的Encoder输入是一个序列数据,可能是不同的词向量形式如Word2Vec或One-hot, 这里为真实的录音。
Transformer的Decoder输入也是一个序列数据,数据为应识别出来的汉字(labels),类似于让Decoder提前知道了真实的数据,但在实际的语音识别中可以在Decoder的输入中添加一些噪音,提高训练的泛化能力和鲁棒性,避免过度依赖训练中的某些特征,出现过拟合。
Transformer的自注意力机制也添加了Position Encoding的环节,在输入的一开始加入了词在序列中的位置偏移量进入Encoder。论文中使用正弦和余弦两种方式进行编码(最后好像采用了正弦),公式中pos是位置量,i是位置编码向量中的维度,也可以看做是正弦和余弦的编号或波长 。
另外在Transformer中还要设计Begin和End两个起始符,在Decoder的输入中设定Begin符,用来开始训练生成出第一个字,最后一个字输入Decoder后可以输出End符切断输出,避免无限输出。
最后一个Decoder的输出连接了Linear线性器和Softmax用于归一化输出。
三、Encoder
Encoder中由两个部分构成,多头自注意力机制模块和前馈神经网络,这两个模块都进行Residual+Layer norm(残差+层标准化)的处理。
首先介绍多头自注意力机制(Multi-Head Attention),在论文中head的个数设置为8,也就是说在自注意力机制的Q,K,V各有8个,自注意力机制请参考NLP基础和自注意力机制 。
前馈神经网络(Feed Forward Network)是一个完全连接的前馈神经网络,由两个线性变换,中间一个ReLU激活构成。线性变换在不同的位置上需要不同的参数,另一种的解释是使用了两个卷积层作为前馈神经网络,输入输出为512维数,中间层为2048维。
在Transformer中使用了LayerNorm作为归一化处理,而没有使用BatchNorm?
由于Layer Normalization是对每一个层进行归一化,不仅仅考虑了每一个Batch的统计信息,也考虑了每个样本在每个特征维度上的特征信息,由于NLP领域输入的序列长度可能有很大差异,而使用LN不会受到batchsize的影响,另外LN也有一定的正则化效果,防止模型过拟合。
相比之下Batch Normalization对每一个Batch输入进行归一化来减少神经网络中的内部协变量偏移,在NLP领域下不同长度的序列可能由于强制归一化而产生的信息损失,归一化不准确的效果。
BN和LN的公式都是下面这个,但是数据的选择有所不同。
另外,使用残差结构(Residual),可以提高特征的融合效果,增强非线性网络的表达能力,提高泛化能力。
四、Decoder
Decoder由三部分构成,掩膜多头注意力机制模块,多头自注意力机制,前馈神经网络。其中,多头自注意力机制需要接收Encoder输出的输出序列、注意力权重和Decoder模块中掩膜多头自注意力机制模块的输出。
掩膜多头注意力机制(Masked Multi-Head Attention)是自注意力机制的一个变体,序列中每一个词只关注前面的词不在关注后面的词(自注意力机制要考虑每个词与前后的词的相关性)。
其中Mask存在两种,一种是Sequence Mask也就是不能看到未来的信息,即只关注前面的词,另一种是Padding Mask,由于不同的batch可能序列长度不同,将输入的序列进行对齐,并对短序列填0处理,过长序列截断处理。在论文中提到,使用添加负无穷,在Softmax过滤后,他们的概率为0,从而保证自回归特性。
另外在论文中提到一种Scale Dot-Product Attention,就是对自注意力机制做的矩阵合并运算。
五、正则化处理
在论文中提到正则化处理,使用残差dropout和标签平滑处理。
残差dropout用于每个子层的输出之中,在残差结构和LayerNorm环节之前进行,dropout=0.1。
标签平滑处理设定,让模型更加不确定性,但提高了准确性和BLEU分数。
六、对于结构的改进?
在https://arxiv.org/pdf/2002.04745.pdf这篇论文中提到一种Pre-LN Transformer结构,如下图(图a为原Tranformer,图b为新模型),将LayerNorm提前到Encoder的多头自注意力机制模块和前馈神经网络以前进行。
论文中提到可以更好的进行训练,减少学习率的预热环节和超参数的调整环节,特别是在大规模数据集的训练可以有显著的速度提升。但随之而来的缺点就是,不易收敛,对模型的表示能力可能有一定的改变。
七、AT vs NAT
自回归解码器(AT Decoder):每次输入一个词,生成一个词,因此生成速度较慢,无法并行生成输出序列,训练推断的效率较低,但可以生成高质量输出序列,适用于机器翻译这一类高度依赖前面生成词的问题。
非自回归解码器(NAT Decoder):可以同时输入多个词,一次前向传播生成一串词,提高了训练和推断的效率,但可能造成生成的输出出现错误,而来不及处理,造成一系列错误,对于长期依赖关系的任务会受到限制。
八、Cross-attention
在https://arxiv.org/pdf/2005.08081.pdf文章中提到了一个Layer-Wise Multi-View Decoding的结构,通过引入交叉注意力机制改进传统的自注意力机制结构,尝试去在多层Encoder和Decoder中寻找更好的融合方式,可以更好的捕捉全局上下文信息,具体的应用在扩散模型中有一定体现。
参考视频:2021 - Transformer (下)_哔哩哔哩_bilibili