[深度学习笔记] Transformer

1 Seq2seq 输入一段序列,输出一段序列,输出长度由模型来决定 1.1 seq2seq for …

2021-11-24

1 Seq2seq

输入一段序列,输出一段序列,输出长度由模型来决定

image-20210928212724081

1.1 seq2seq for chatbot

我们需要一个输入,机器人得到一个相应的回复输出

1.2 QA can be done by seq2seq

1.3 Seq2seq for Syntactic Parsing(句法剖析)

image-20210928214011445

1.4 Seq2seq for Multi-label Classification

这里要区分一下Multi-class 和 Multi-label的区别,Multi-class:应用于对象可能属于多个类别

image-20210928214614912

image-20210928214706148

输入序列喂入编码器,输出结果通过解码器

image-20210928214835880

RNN和CNN本身就可以看成编码器,在Transformer中的Encoder则是Self-attention

image-20210928215046959

image-20210928215216795

其实Transformer中的工作更加复杂,如下图:

image-20210928215806264

输入b通过self-attention得到a,再把输入b与a相加得到残差连接a+b,把a+b再进行层标准化,之后在进行FC,FC也需要进行残差连接的到结果在进行一次标准化得到的是最终结果

image-20210928215920982

上图即为原始的Transformer架构,该架构不代表最好,后面陆续提出了很多优化原始Transformer的方法

2 Autoregressive(AT)

image-20210929164131920

把sequence输入Encoder之后得到一个sequence,把该sequence喂入Decoder再经过softmax得到最大概率输出—-“机”,再把“机”喂入Decoder,如下图:

image-20210929164434435

接下来看一下具体Decoder的内部构造:

image-20210929164615283

需要注意的的是Self-attention -> Mask Self-attention

image-20210929164853077

计算b1时,只需要考虑a1,计算b2时,只需要考虑a1、a2,后面的不需要考虑,以此类推。那么为什么需要掩码呢(masked)?decoder输出的token是一个一个产生的,而且只能考虑左边的东西,右边的无法考虑,而且Decoder需要自己去决定输出的长度,所以有的时候可能会遇到Decoder会无止境的在输出,那么我们就是需要要引入一个断符号(Adding stop token)

image-20210929165917974

3 Decoder–Non-autoregressive(NAT)

3.1 AT v.s. NAT

image-20210929170157557

AT的Decoder依次喂入token再依次输出, NAT的Decoder是全部同时喂入再同时输出。

如何决定NAT Decoder输出的长度呢?
● 再搞一个预测器用于预测输出长度。
● 输出一个很长的序列,忽略END之后的tokens

优势:平行化、输出长度的可控性
●NAT通常比AT表现差(Why? 多模态)

4 Transformer

image-20210929183558119

Encoder中的两个输出与Decoder自己Masked attention的一个输出进行Cross-attention

image-20210929185204151

cross-attention :Decoder中出一个q,从Encoder中提取k,两者Dot-product后得到分数再合成加权得到v用于FC的输入。以下是提出的不同的Cross Attention

image-20210929190659843

5 Training

image-20210929190848153

Decoder输出的是一个概率分布,我们希望的是“机”的分布概率是最大的,最接近我们想要的真实结果的独热编码,其实就类似一个分类问题!

image-20210929191027927

​ 其中每一个Decoder的输出都要与正确的one-hot做一个Cross Entropy,我们需要所有的Cross Entropy总和最小! 在学习过程中不是只学习如上的四个字,还要学习引入“断”这个符号,在最终第五个位置输出的向量要与我们的“断”的one-hot做最小的cross entropy。

​ 在训练过程中,我们会给Decoder输入真实值,这个过程叫做Teacher Forcing: using the ground truth as input

6 Tips

6.1 Copy Mechanism

image-20210929192058230

6.2 Guided Attention

在语音生成任务中,有的时候会出现漏字的情况。In some tasks, input and output are monotonically aligned. For example, speech recognition, TTS, etc.

image-20210929192854759

本身attention应该如第一个图,从左向右依次生成。但有的时候难以避免会发生错误的情况如第二个图。那么Guided Attention的作用就是强制按照正确的顺行执行任务。

6.3 Beam Search

image-20210929193406420

但Beam Search也并不是一个特别好的solution,例如如下自动补句案例中,Beam Search会不停陷在死循环中

image-20210929193740172

所以有的时候对于decoder来说,或许分数不是最高的有可能才是最佳的答案哈哈哈!所以这就要看任务本身的特性了,当任务需要一些创造力的时候,beam search的作用就很小,在decoder生成时加入一些随机性或许表现会更不错。

image-20210929194227616

6.4 Optimizing Evaluation Metrics

image-20210929194358566

这里引入一个新的评估方法:BLEU score 与 minimize cross entropy(训练时用的)是不同的

image-20210929194641858

所以在训练时不要全给decoder正确的东西,也要加入一些错误的东西或许会学的更好,所以这里引入下图:

image-20210929194805962

打赏 0

共有 0 条评论