【深度学习】李宏毅2021/2022春深度学习课程笔记 - Transformer


一、什么是Transormer?

  • Transformer是一个用于解决Seq2Seq问题的模型,用来解决输出长度不确定的问题
  • Transformer是一个利用自注意力机制来提高模型训练速度的深度学习模型
  • 它适用于并行化计算
  • 它本身模型的复杂程度较高
  • 它在精度和性能上都要高于之前流行的RNN循环神经网络。

二、Seq2Seq模型

2.1 什么是Seq2Seq?

Seq2Seq模型是输出的长度不确定时采用的模型,这种情况一般是在机器翻译的任务中出现,将一句中文翻译成英文,那么这句英文的长度有可能会比中文短,也有可能会比中文长,所以输出的长度就不确定了。它的输入是一个序列,输出也是一个序列。

2.2 Seq2Seq的具体应用

语音辨识(输入语音,输出文字)

在这里插入图片描述

语音合成(输入文字,输出语音)

在这里插入图片描述

聊天机器人(输入一段话,输出一段话)

在这里插入图片描述

三、Transformer网络结构

前面说过,Transormer属于Seq2Seq模型的一种,所以其也是Encoder-Decoder的结构。

在这里插入图片描述

3.1 Encoder

输入一个向量,输出一个同样长度的向量

在这里插入图片描述

输入和输出之间有很多个Block,每个Block里面一般有好几层,例如下图所示,输入先通过一层Self-Attention收集自身咨询,然后再通过全连接层进行特征提取

在这里插入图片描述

实际上,它还会更复杂一些。如下图所示,通过Self-Attention地输出还会加上其本身,这被称为Residual Connection,残差连接,主要为了缓解梯度弥散和梯度爆炸的问题。然后a+b的结果会进行Layer Normalization,最终得到输出。
在FC层也是一样,用到了残差连接和层标准化。

在这里插入图片描述

关于Encoder的设计不一定要局限于上面的结构,有人做了研究,如果把层标准化放在addition之前效果会更好(下图右边的结构)。

在这里插入图片描述

3.2 Decoder

3.2.1 Autoregressive(AT)

Decoder的输入是Encoder的输出和一个开始标识符(One-Hot向量表示),Decoder的输出是一个长度等于字典大小的概率分布(输出之前用SoftMax做归一化),然后以概率最大的字作为最终的输出。

在这里插入图片描述

接下来,Decoder会把自己上一阶段的输出,当成现阶段的输入,继续输出。

在这里插入图片描述

比较一下Encoder和Decoder的差异

在这里插入图片描述

把Decoder中间部分遮挡起来,先不看,我们发现Encoder和Decoder其实非常相似。

在这里插入图片描述

有点不同的是,Decoder最后还加了一个线性层和SoftMax进行概率的输出;Decoder使用了比较特殊的Masked Self-Attention,什么是Masked Self-Attention呢?

Masked Self-Attention 要求每一个输出,不能考虑其右边的资讯。如下图所示,输出b1,只考虑了a1的资讯;输出b2,只考虑了a1和a2的资讯,以此类推。

在这里插入图片描述

为什么Decoder要用Masked Self-Attention呢?这是因为Decoder在运作的时候,是依靠前面的输出,作为当前输入的,也就是说,在当前时刻,Decoder没有办法知道后面的咨询,所以就使用了Masked Self-Attention

END终止符:存在于字典里的一个特殊符号,当Decoder输出END符号时,其运作就可以停止了。

Tips:因为BEGIN开始符只在最开始作为输入使用了一次,所以其实END终止符和BEGIN起始符可以是同一个符号,以缩小字典大小

在这里插入图片描述

3.2.2 Non-Autoregressive(NAT)

NAT的做法是:一次性丢给DecoderN个BEGIN起始符,然后Decoder输出长度为N的字符,如果输出的N个字符中没有END符,则N个字符就是最终输出,否则以第一个出现的END符左边的内容作为最终的输出。

所以NAT的关键点是如何确定一次性丢给Decoder多少个BEGIN。有两种思路:

  • 训练另一个Classifier,它的输入是Encoder的输出,它的输出是一个数字,比如输出6,则代表要给Decoder输入6个BEGIN
  • 不管三七二十一,直接丢给Decoder足够多的BEGIN,比如一次性给300个(其使用前提是,已知输出文本最多不超过300字)

在这里插入图片描述

使用NAT的好处:

  • 平行化,AT的Decoder在输出句子的时候,是一个一个字产生的(如果句子长度为100,那就药要进行101次的Decoder);而NAT的Decoder是一次性产生整个句子的,所以,在速度上NAT要快于AT
  • NAT可以更好地控制输出句子的最大长度

使用NAT的缺点:

  • NAT的表现往往不如AT的好

3.3 Encoder-Decoder

还记得之前讲Decoder的时候,有一块我们将其暂时忽略了吗?现在我们就来揭开它的神秘面纱。

如下图所示,它其实是Encoder和Decoder之间的桥梁,被称为 Cross Attention

在这里插入图片描述

在计算Attention的时候,Q来自Decoder,K和V来自Encoder,然后进行Attention的计算,这被称为是Cross Attention

在这里插入图片描述

在原始论文中,Cross Attention是拿Encoder最后一层进行Cross的,但是一定要拿Encoder最后一层吗?下面这篇论文给出了答案:不一定。可以尝试各种各样的Cross方式,这都是可以研究的课题。

在这里插入图片描述

3.4 Training 训练过程

假设Label是“机器学习”四个字,那我们希望Decoder输出的第一个字和“机”越接近越好,对应的损失用“机”字对应One-Hot向量和Decoder输出的概率分布计算一个交叉熵损失

在这里插入图片描述

假设Decoder输出了四个字,和一个END符号,那我就希望前四个字和Label的交叉熵总和+后面的字符和END符号的交叉熵损失总和越小越好;
在训练的时候,我们不会拿上一时刻的输出作为Decoder的输入,而是会直接拿正确的Label作为Decoder的输入。这个技术叫做 Teacher Forcing

在这里插入图片描述

3.5 Tips 小技巧

3.5.1 Copy Mechanism 复制机制

聊天机器人:有时候,当聊天机器人听不懂对方说的话的时候,需要“复制”它听不懂的话,并进行询问,例如下图的第二个案例所示。

在这里插入图片描述

自动生成文章摘要:根据文章生成摘要的时候,其实摘要中大部分词汇都是从原文中复制的。

在这里插入图片描述

3.5.2 Guided Attention 引导性注意力机制

guided attention把该条件带入到attention的限制中,每当对齐的值偏离该对角线,就要对齐惩罚。

在这里插入图片描述

3.5.3 Beam Search

在这里插入图片描述

3.5.4 Optimizing Evaluation Metrics

3.5.4.1 BLEU Score评估模型

BLEU的全名为:bilingual evaluation understudy,即:双语互译质量评估辅助工具。它是用来评估机器翻译质量的工具。BLEU的设计思想:机器翻译结果越接近专业人工翻译的结果,则越好。BLEU算法实际上就是在判断两个句子的相似程度。想知道一个句子翻译前后的表示是否意思一致,直接的办法是拿这个句子的标准人工翻译与机器翻译的结果作比较,如果它们是很相似的,说明我们的翻译很成功。

BLEU Score的缺点是它不能微分。所以不能直接作为神经网络的损失函数进行梯度下降优化。遇到这种不能微分的函数,我们有一个方法,就是使用强化学习,将BLEU Score作为RL的奖励,Decoder作为RL的智能体,进行训练和学习。

在这里插入图片描述

3.5.5 Scheduled Sampling

之前我们说过,Train的过程中,我们会给Decoder输入正确的Label,但是这样有个缺点,就是在训练的时候,Decoder只看过正确的输入,所以可能在正确的输入下,它也能正确的输出,但是一旦有错误输出,它就很难得到正确的输出了,即很容易出现“一步错,步步错”的情况。

最简单的做法:为了缓解这种问题,我们可以在训练时就输入一些错误的Label给Decoder,以增强它的容错能力。

在这里插入图片描述

正如上面所说,标准的序列到序列模型中,如果序列前面生成了错误的元素,后面的输入状态将会收到影响,而该误差会随着生成过程不断向后累积。
Scheduled Sampling以一定概率将生成的元素作为解码器输入,这样即使前面生成错误,其训练目标仍然是最大化真实目标序列的概率,模型会朝着正确的方向进行训练。因此这种方式增加了模型的容错能力

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WSKH0929

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值