Transformer详解

2021/10/24 6:13:14

本文主要是介绍Transformer详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文是根据台大李宏毅教授网课整理,主要是记笔记以供自己复习。

这里写目录标题

  • Transformer
      • 是什么
      • 应用
  • Seq2Seq架构详解
    • Encoder
    • Decoder
      • Autoregressive(AT)
      • Non-autoregressive(NAT)
  • 训练
    • exposure bias
    • 训练Seq2Seq Model的Tips
        • 1、Copy Mechanism复制机制
        • 2、Beam Search

Transformer

是什么

Transformer其实就是一个Seq2Seq Model(输入是一个序列输出也是一个序列但是长度由机器决定)。

应用

  • Seq2Seq Model的应用很多,主要用于自然语言处理。
  • 比如输入一段语音,可以输出该语音对应的文字翻译。
  • 但是Seq2Seq也可以用于Image处理:比如物体检测,输入一个image序列,然后输出是class label和检测出的所有bounding box。
  • 还可以用与多分类问题(Multi-label classification):输入一段文本,输出对应的类别(类别数目不确定)
    应用很广泛,主要就是处理输出序列长度不确定的情况下。(哈哈哈好多任务都是 硬train)

Seq2Seq架构详解

在这里插入图片描述
是一个Encoder和Decoder架构。

Encoder

实现,输入一个序列输出一个序列,RNN和CNN都可以实现。

总体架构如下图所示:
包含多个block块,每个block块中有多个层。
在这里插入图片描述block的详细计算过程如下:
input----->Self-Attention层------>residual计算------>layer norm------>FC------>residual计算------>layer norm
在这里插入图片描述
对应Transformer中的Encoder结构图如下(是原始的Transformer的架构):
在这里插入图片描述
当然可以修改该Encoder的架构,已有的工作对该结构进行了修改,如下图所示,论文1对应图(b)将layer norm的位置进行了调整。
论文2解释了为什么要是用layer norm而不是batch norm,而且设计了power norm。
(哈哈哈这两个论文没有看呢~)
在这里插入图片描述

Decoder

Decoder有两种:

  • Autoregressive(AT)
  • Non-Autoregressive(NAT)

Autoregressive(AT)

Decoder就是实现将Encoder的输出转换为最终的结果序列。

(下面以语音辨识为例讲解:输入一段声音输出一段文字。)

一开始Decoder的输入是“begin”符号。然后Decoder输出一个vector,表征各个汉字的得分。
在这里插入图片描述
选取得分最高的,与begin一起做为Decoder下一步的输入,
在这里插入图片描述
Decoder的输入输出过程如下:
在这里插入图片描述
Transformer中Decoder的详细结构如下:
在这里插入图片描述
可以注意到在Transformer的Decoder结构中,Attention模块是Masked Multi-Head Attention。
在这里插入图片描述
其实使用Masked Multi-head Attention的原因很简单,思考前面Decoder的输入,是一个依序的过程,有b1之后才能得到a2.……

最重要的一个问题:机器如何知道何时结束Decoder呢?
加入一个结束符号,
在这里插入图片描述
期望的Decoder的运作过程变成:
在这里插入图片描述

Non-autoregressive(NAT)

下图是AT和NAT的比较。
NAT输入是一串Begin符号,然后直接输出结果序列。
在这里插入图片描述
疑问,对于NAT如何知道输出序列的长度呢?

  • 另外设计一个网络输出决定序列的长度
  • 将End符号加入到字符序列中,对于Decoder的输出,忽略End之后的部分。

NAT Decoder的优点:

  • 并行输出:对于AT的Decoder需要从前往后一次一次的Decoder。
  • 可以控制输出的长度:上面说到我们可以设计一个网络去得到Decoder的输出长度,因此我们仅需对网络输出的长度大小进行(手动)操作就可以死控制Decoder的输出。

NAT的Decoder效果通常比AT差。

那么Decoder是如何处理Encoder的输入的呢?
如图,Encoder的输出同个两个分支进入到Decoder的Masked Multi-Head Attention中。处理过程称为cross-attention。
在这里插入图片描述
Cross-Attention的处理过程:
类比Self-Attention的计算过程。
在这里插入图片描述

训练

label使用one-hot编码。
在这里插入图片描述

Teacher Forcing:使用ground truth作为输入。

训练时,Decoder输入为ground truth。
将输出与ground truth的one-hot编码进行计算cross entropy loss。

思考:BLEU Score(bilingual evaluation understudy)是计算两个句子语义相似程度的方法,为什么不使用该函数作为训练的Loss呢?
该函数的计算非常复杂无法微分。

exposure bias

在训练Decoder是输入是ground truth,但是在测试时使用的是Decoder的输出,因此会出现Decoder输出错误而导致错误向后传播的情况。

如何处理?
Scheduled Sampling:在训练时给Decoder的输入加些错误。
下面有些论文讲述Scheduled Sampling(没看,留坑)
在这里插入图片描述

训练Seq2Seq Model的Tips

1、Copy Mechanism复制机制

2、Beam Search

在这里插入图片描述



这篇关于Transformer详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程