机器学习笔记(李宏毅 2021/2022)——第五节:Transformer

视频

2021-Transformer(上)
2021-Transformer(下)
self-attention变形

一、Transformer应用

Transformer就是一个Sequence-to-sequence的model,他的缩写,我们会写做Seq2seq。而Seq2seq有以下这些应用。

  1. 语音辨识
    在这里插入图片描述

  2. 机器翻译
    在这里插入图片描述

  3. 语音翻译
    直接由语音到翻译后的语言。
    在这里插入图片描述

  4. 语音合成(Text-to-Speech (TTS) Synthesis)

  5. 聊天机器人
    在这里插入图片描述

  6. QA
    在这里插入图片描述

  7. 文法剖析(Seq2seq for Syntactic Parsing)
    需要预先把结构对应到这样的Sequence。
    在这里插入图片描述

  8. 多类别分类(multi-label classification)
    在这里插入图片描述

  9. Object Detection
    在这里插入图片描述

二、Transformer结构

0.整体结构

一般的seq2seq’s model,它裡面会分成两块。一块是Encoder,另外一块是Decoder。
你input一个sequence有Encoder,负责处理这个sequence,再把处理好的结果丢给Decoder,由Decoder决定,它要输出什麼样的sequence。在这里插入图片描述下图是Transformer原文中的结构图。
(Tip.这里讲的Transformer结构是论文的原始设计,不代表是最Optimal的设计。)
在这里插入图片描述

1.Encoder

在这里插入图片描述

  1. Input Embedding
    所谓的Embedding其实就是查字典或者叫查表,也就是将一个句子里的每一个字转化为一个维度为embedding dimension的向量来表示,因此 X X X经过嵌入后变成 X e m b e d d i n g X_{embedding} Xembedding,三个维度分别表示一个批次的句子数,每个句子的字数,每个字的嵌入维度。

  2. Positional Encoding
    位置编码,按照字面意思理解就是给输入的位置做个标记,简单理解比如你就给一个字在句子中的位置编码1,2,3,4这样下去,高级点的比如作者用的正余弦函数
    [公式]
    其中pos表示字在句子中的位置,i指的词向量的维度。经过位置编码,相当于能够得到一个和输入维度完全一致的编码数组 X p o s X_{pos} Xpos,当它叠加到原来的词嵌入上得到新的词嵌入 X e m b e d d i n g X_{embedding} Xembedding= X e m b e d d i n g X_{embedding} Xembedding+ X p o s X_{pos} Xpos
    此时的维度为:一个批次的句子数 + 一个句子的词数 + 一个词的嵌入维度

  3. Multi-Head Attention
    注意力机制,其实可以理解为就是在计算相关性,很自然的想法就是去更多地关注那些相关更大的东西。

  4. Add & Norm
    这里主要做了两个操作。
    a.一个是残差连接(Reisidual connection),说得直白点就是把上一层的输入 X X X 和上一层的输出加起来 S u b L a y e r ( X ) SubLayer(X) SubLayer(X) ,即 X X X+ S u b L a y e r ( X ) SubLayer(X) SubLayer(X) ,举例说明,比如在注意力机制前后的残差连接:
    X e m b e d d i n g X_{embedding} Xembedding+ A t t e n t i o n ( Q , K , V ) Attention(Q,K,V) Attention(Q,K,V)
    b.一个是LayerNormalization(作用是把神经网络中隐藏层归一为标准正态分布,加速收敛),具体操作是将每一行的每一个元素减去这行的均值, 再除以这行的标准差, 从而得到归一化后的数值。

这里要注意一下,
——batch normalization是对不同example,不同feature的同一个dimension,去计算mean跟standard deviation
——但layer normalization,它是对同一个feature,同一个example裡面,不同的dimension,去计算mean跟standard deviation
在这里插入图片描述

  1. Feedforward + Add & Norm
    前馈网络也就是简单的两层线性映射再经过激活函数一下
    残差操作和层归一化同步骤3.

上述的1,2,3,4就构成Transformer中的一个encoder模块,经过1,2,3,4后得到的就是encode后的隐藏层表示,可以发现它的维度其实和输入是一致的!即:
一个批次中句子数 X X X一个句子的字数 X X X 字嵌入的维度

然后在现在的Transformer中,这个block会重复n次
在这里插入图片描述

2.Decoder

2.1. AT(Autoregressive) 和 NAT(Non-autoregressive)

Decoder有两种形式,AT和NAT。
在这里插入图片描述

  • AT: 先输入 BEGIN,然后出现 w1,然后再把 w1 当做输入,再输出 w2,直到输出 END 為止
  • NAT:NAT 的 Decoder可能吃的是一整排的 BEGIN 的 Token,你就把一堆一排 BEGIN 的 Token 都丢给它,让它一次產生一排 Token 就结束了

这里有个问题,那么怎么知道输出的长度呢?这里有两种办法。

  • 一个做法是,你另外learn一个 Classifier,这个 Classifier ,它吃 Encoder 的 Input,然后输出是一个数字,这个数字代表 Decoder 应该要输出的长度,这是一种可能的做法
  • 另一种可能做法就是,你就不管三七二十一,给它一堆 BEGIN 的 Token,你就假设说,你现在输出的句子的长度,绝对不会超过 300 个字,你就假设一个句子长度的上限,然后 BEGIN ,你就给它 300 个BEGIN,然后就会输出 300 个字嘛,然后,再看看什麼地方输出 END,输出 END 右边的,就当做它没有输出,就结束了。

NAT相比AT的优点:一是并行化,二是比较能控制输出的长度。

2.2 结构讲解

在这里插入图片描述
一个Decoder分成这样6个部分,其中1、2、5和之前的Encoder一样,所以主要讲解一下3、4、6。

  • pass
  • pass
  • Masked Multi-Head Attention
    这里与Encoder稍微不一样的地方是,在 Decoder 这边,Multi-Head Attention 这一个 Block 上面,还加了一个 Masked
    这里masked的意思是,在你考虑生成b1的时候只能考虑a1,考虑b2的时候只能考虑a1、a2,依此类推。也就是说,它输出的东西是一个一个产生的,所以它只能考虑它左边的东西,它没有办法考虑它右边的东西。
    设计的原因是我们一开始 Decoder 的运作方式,它是一个一个输出,所以是先有 a 1 a^1 a1 再有 a 2 a^2 a2 ,再有 a 3 a^3 a3 再有 a 4 a^4 a4 这跟原来的 Self-Attention 不一样。
    在这里插入图片描述
  • Cross attention
    可以看到,有两个箭头是来自于encoder,有一个箭头是来自于decoder自己的输入。具体细节如下。
    在这里插入图片描述
    所谓的两个箭头+一个箭头,实际上就是encoder输出之后的向量产生 k e y key key , v a l u e value value 与带掩膜的self-attention的 q i q_i qi进行相似度计算(dot-product)得到 v i v_i vi
    在这里插入图片描述
  • pass
  • Linear + Softmax
    这里采用Softmax的原因是产生的vector是一个one-hot vector。需要用softmax来做分类器,分数最高的一个中文字,它就是最终的输出。
    在这里插入图片描述

2.3各种tip

  • Teacher Forcing
    在 Decoder 训练的时候,我们会在输入的时候给它正确的答案,那这件事情叫做 Teacher Forcing
  • Copy mechanism
    在我们刚才的讨论裡面,我们都要求 Decoder 自己產生输出,但是对很多任务而言,也许 Decoder 没有必要自己创造输出出来,它需要做的事情,也许是从输入的东西裡面复製一些东西出来。
    最早有从输入复製东西的能力的模型,叫做 Pointer Network
  • Guided Attention
    Guided Attention 要做的事情就是,要求机器它在做 Attention 的时候,是有固定的方式的
  • Beam Search
    就假设一个任务,它的答案非常地明确
    举例来说,什麼叫答案非常明确呢,比如说语音辨识,说一句话辨识的结果就只有一个可能,就那一串文字就是你唯一可能的正确答案,并没有什麼模糊的地带
    对这种任务而言,通常 Beam Search 就会比较有帮助。而对于需要机器发挥一点创造力的时候,这时候 Beam Search 就比较没有帮助。
    在这里插入图片描述
  • Scheduled Sampling
    假设 Decoder 在训练的时候,永远只看过正确的东西,那在测试的时候,你只要有一个错,那就会一步错,步步错,因為对 Decoder 来说,它从来没有看过错的东西,它看到错的东西会非常的惊奇,然后接下来它產生的结果可能都会错掉。
    这时候给 Decoder 的输入加一些错误的东西,就叫做Scheduled Sampling

三、各种各样变形的former

视频中讲到的所有xformer们(ps.好多啊,就不记录了)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/toro180/article/details/125501853