自注意力模型的问题:
- 计算自注意力时,没有考虑输入的位置信息,因此无法对序列进行建模
- 输入向量同时作为计算注意力权重时两个向量以及被加权的向量,导致其不容易学习
- 只考虑两个输入序列单元之间的关系,无法建模多个输入序列单元之间更复杂的关系
- 自注意力计算结果互斥,无法同时关注多个输入
就以上问题给出解决方案融合自注意力模型——Transformer
seq2seq
应用
各式各样nlp任务都可以用seq2seq来解
(特制化model求解可能效果更好)
结构
最经典的模型:Transformer
Transformer
一个seq2seq的model
Transformer 就是一个 Seq2seq (Sequence-to-sequence) 的模型
原理:encoder+decoder
Encoder
Encoder 要做的事情就是给一排向量,输出一排向量,这可利用多种模型实现,如 CNN, RNN 等。Transformer 中的 Encoder 就是用的 Self-attention。
encoder里面分成很多个block,每个block都是输入一排向量输出一排向量
每个block里:vector1先做一次self-attention考虑整个seq的信息后输出一组vector2,然后将此组vector2作为输入投入一个全连接层,然后输出一组vector3,作为一个block的输出
PS:有一种network架构——residual connection将输出a再加上原始输入b作为新的vector a+b;然后再将其经过一个layer-norm得到的output才是全连接层的输入,同样也有residual架构(output+=input)+layer norm——residual network中一个block输出
注:Transformer 的Encoder架构不一定要这么设计,此处为原始论文中的架构设计。
还有其他实现方式
Decoder
autoregressive
下图中,Multi-head Attention其实就是多个Self-Attention结构的结合1。Decoder相比Encoder,在Multi-Head Attention上还加了一个 “Masked”(Masked Self-attention):decoder是一个一个按顺序产生的,只能考虑左边的信息
目前的Decoder的运行中,机器并不知道什么时候停下来,一直重复操作,如同“词语接龙”:机、器、学、习、惯、… 因此需要增加一个终止符号END来结束执行。
非自回归 Non-autoregressive (NAT)
NAT 只需要一次性输入就可以产生整个句子。
Q:如何确定NAT decoder的输出长度?
A1:另外学习出一个分类器,它输入Encoder的input,输出Encoder应该输出的长度
A2:输出一个很长的序列,忽略END标识后的token(如上图)
优点:并行处理,速度快;输出长度可控。
缺点:NAT的表现往往逊色于AT:多模态问题 Multi-modality.
encoder和decoder的连接
cross attention 连接encoder和decoder的桥梁,此处有两个输入来自encoder一个来自decoder,此模组运作过程如下图所示
训练模型
eg:语音辨识任务,人工标注label
在输入的时候会给Decoder正确答案,这种方式叫做"Teacher Forcing";使用交叉熵对模型进行评估(越小越好)。
测试的时候,Decoder会产生错误的输出,但是训练的时候是完全正确的,这种不一致的现象叫做 Exposure Bias4。可以在训练的时候类似“加入扰动”的方式来解决——scheduled sampling(定时采样),这种方式会影响Transformer的并行化。
beam search
有唯一可能确切答案——beam search
需要创造力,不唯一答案——需要一定随机性
transformer优缺点
优点
- transformer可以直接建模输入序列单元之间更长距离的依赖关系,对长序列建模能力更强
- 可以利用GPU等多核计算设备并行计算transformer块内部的自注意力模型,具有更高的训练速度,而RNN需要逐个计算
缺点
-
参数量过大:每个transformer块中包括了自注意力模型中输入向量的三个角色映射矩阵,多头机制导致相应参数倍增,引入非线性的多层感知器等,整个模型还需要堆叠多层transformer块,参数量成倍扩大
-
巨大的参数量导致模型训练难度大,尤其是训练数据较小时
因此为了降低模型训练难度,基于大规模数据的预训练模型应运而生,只有这样才能发挥transformer模型强大的表示能力——bert
模型表示
基于pytorch实现的
[Transformer.ipynb](http://localhost:8888/notebooks/pre-trained model approach NLP/Transformer.ipynb)