李宏毅2021春季机器学习课程笔记7: Seq2seq & Transformer

1. Seq2seq

对于seq2seq的问题,有时我们并不知道输出的长度是多少,这时候我们需要机器自己决定输出的长度
比如把语音的英文数据直接输出为对应的中文文字(长度与格式都不一样),我猜这就是呢篇paper叫做Transformer的原因
在这里插入图片描述
在NLP领域很多问题都可以看作成Q&A的问题,这时就转化成立一个对话的seq2seq的问题,但一般会针对各个问题有针对性的进行相关处理最适合的模型。
在这里插入图片描述
我们可以对于文字的语法解析问题也强行转化成一个seq2seq的问题
在这里插入图片描述
我们对于multi-label的问题也可以转化成一个seq2seq的问题
在这里插入图片描述
对于object Detection的问题也可以用seq2seq的模型来硬解在这里插入图片描述

2. Encoder

一般seq2seq的问题都由Encoder和Decoder组成,Encoder处理输入序列,结果给Decoder决定输出
Encoder做的事情就是对输入的一组向量,输出一组相同长度的向量,这点很多模型都可以做到(比如RNN或CNN),在Transformer中就使用了Self-attention。
在这里插入图片描述

2.1 Block

首先,整体的Encoder会分成很多block,最终得到输出,每一个block里面还有很多个layer
在这里插入图片描述
其中每一个Block的结构又被分为一层注意力层和全连接层,
在这里插入图片描述
在transformer,在attention层后还多了一个类似残差网络(residual)的设计,将输入加到了输出中,之后再做了一次layer Normalization(对于同一个feature不同的dimension计算平均值和标准差,进行normalization),这时得到的是全连接的输入,然后对全连接的输出在进行残差操作
在这里插入图片描述
transformer的block中,输入还加了Positional Encoding(Self-attention中有讲过,位置信息的vector),其中的Attention用的也是Multi-Head Attention,之后再过一个正向网络,Add & Norm就是残差+标准化
这个复杂的block在BERT中也有用到
在这里插入图片描述

2. Decoder

Decoder有两种,比较常见的是Autoregressive(AT),这里用语音辨识作为例子

2.1 Autoregressive(AT)

对于Encoder给出的输入,Decoder要首先给一个BEGIN的特殊符号(用独热码表示),代表开始
然后Decoder会softmax后输出一个向量,这个向量的长度是输出语言单词或词汇种类的个数,这个向量是一个distribution,然后数值最大的值就是第一个输出,如下图就是“机”字,然后这个“机”字就成了下一个输入。
在这里插入图片描述
反复进行这个操作,就得到“机器学习”四个输出
在这里插入图片描述
在transformer中Decoder的结构如下

在这里插入图片描述
通过比较我们可以发现,Encoder和Decoder大概结构类似,只有中间部分不相同,还有Masked Attention在这里插入图片描述
Masked Self-attention相比于Self-attention,每一个输入只能考虑之前输入的咨询,即下图中每个输入左边的输入,而不是考虑全部的输入
因为decoder的步骤中,我们是一个输出成为下一个输入所以决定了这样特殊的Attention结构。

在这里插入图片描述
为了让机器自己学习什么时候结束输出,我们还确定了一个结束符号END,有时候会用跟BEGIN一样的符号表示(因为只会出现两次)

在这里插入图片描述

2.2 Non-autoregressive(NAT)

相比于AT一次一个字产生的形式m,NAT一次产生一整个句子,给多少个START就输出多少个字,这样就得确定输入多少个START标识符的数量
在这里插入图片描述
有几种确定输出数量常见的作法:

  1. 训练一个Classifier,它的输入是Encoder的输出,输出是应该所求的输出数量
  2. 给N个START,假定输出不会超过一个N值,看什么地方输出END,END右边的舍弃

优点

  1. NAT一次就产生整个句子,比AT的速度快
  2. 能够控制输出的长度,比如语音合成时,将Classifer的输出除2,那么讲话速度就会变两倍快,反之亦然

但是NAT的效果一般不如AT,因为会遇到Multi-modality的问题等等,所以现在很多研究在试图提升NAT的效果。

2.3 Cross attention

连接Encoder和Decoder之间的桥梁叫做Cross attention

在这里插入图片描述
Cross attention的具体结构如下,其中q qq来自Decoder
在这里插入图片描述
每一次Decoder运作的过程都类似,考虑到了Encoder产生的所有输出
在这里插入图片描述
也有人尝试用Encoder中间层与Decoder中间层做一些Cross Attention等连接方式
在这里插入图片描述

4. Training

我们希望每一个输出的distribution和Ground truth的cross entropy越小越好,最后还有一个结束符的cross entropy
在这里插入图片描述
在训练的时候我们会给Decoder 正确答案作为输入,这叫做Teacher Forcing
在这里插入图片描述

4.1 Copy Mechanism

有很多时候Decoder并不需要自己产生输出,而是可以从输入的东西里复制一些东西(如聊天机器人)
在这里插入图片描述
在做摘要的时候也会需要用这样的功能
在这里插入图片描述
在这里插入图片描述

4.2 Guided Attention

在语音辨识和语音合成中会使用,要求机器在做attention时有固定的模式,比如固定从左到右进行attention
在这里插入图片描述

4.3 Beam Search

在进行输出时,一般会找分数最高的作为输出叫做Greedy Decoding
但有时候我们会先选择一些较差的,但之后的结果反而比较好
所以我们用Beam Search找一些较好的路径
在这里插入图片描述
这种方法有时候好用有时候效果很差 :)
在语言辨识这种输出结果确定的情况下,Beam Search会较好用
在需要机器发挥一些创造力的情况时,Beam Search比较没有帮助
在这里插入图片描述

4.4 Cross entropy & BLEU score

训练用的是Cross entropy但最后测试的是BLEU score,所以之间存在差距
当不知道怎么优化时,用reinforcement learning(RL)硬做!
在这里插入图片描述

4.5 Scheduled Sampling

如果在训练的Decoder一直看到的是完全正确的数据,那么在测试的时候如果出现一步错误,就会步步错
所以从直觉性上我们给Decoder加入一些错误的数据
在这里插入图片描述
这种方法叫做Scheduled Sampling
在这里插入图片描述


版权声明:本文为An_dy_code原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。