强烈推荐!台大李宏毅自注意力机制和Transformer详解!

tips:这个视频开始讲的讲文章分类,文章可能属于多个不同类别的问题,联想到了关键点识别的骨架问题,可不可以把这个交给transformer让它去决定输出关键点的数量
- encoder的架构

transformer encoder用的就是自注意力,输入一排向量,输出同样长度的向量。

这里的block做了好多layer做的事情,输入一排向量,输出一排向量。其中block具体组成:
做一个自注意力,输入向量后,考虑整个sequence的资讯,输出另外一排向量,再丢到fully connected feed forward network 里面,输出另外一排向量作为block的输出。

输出的每个向量是考虑所有的输入得到的结果,在transformer加入了一个设计:
在输出的向量加上它的输入得到新的输出。
这个架构较residual connection。

再进行norm,不是batchnormization,是layernormization,不需要考虑batch的资讯,
batch是对不同example不同的feature的同个dimension去计算mean和standard deviation,layer是对同一个example里不同的dimension去计算mean和standard deviation,输入一个向量,输出一个normlize的向量,分号上面的xi不要、。这个输出才是fc的输出。

fc里也有一个residual 的架构,再做一个layer norm输出,这个输出才是residual network里面的block的输出。
回到论文中对比:

区别:在输入前加上positional encoding,因为只用自注意力,没有位置的资讯。这个
tips:block在之后一个bert的模型里会用到,bert其实就是transformer的encoder。
encoder的架构的改进设计:

1.改为先做residual后做normization,性能更好。
2.为什么不做batch,提出了一个power normiztion。——powernorm
- decoder——AT的架构

先给decoder 一个特殊的符号,代表begin,在decoder 产生的文本里产生一个开始的符号。token用one-hot表示。
decoder会产生一个向量,长度和vocabulary的长度一样,就是希望识别的词汇库的总词汇数。

在得到该向量前做一个softmax分类。把新得到的输出”机“表示一个one-hot向量,作为decoder新的输入,不断进行下去。每个输出
向量,都结合了在它之前的输入向量的资讯,比如”学“的输出是学习了输入的token、“机”、“器”的资讯。
decoder结构

与encoder比较

主要在于中间的部分。其中的masked部分:

就是从每个输出都考虑所有输出变为只考虑前面的输入。具体一点:

变为:

另外的关键点:decoder必须自己决定输出的长度。
——要让它输出一个断 的符号

begin和end可以用同一个符号,因为begin只在输入,end只在输出。不同亦可。
decoder-non-autoregressive(NAT)

如何NAT决定输入的begin数量:
两种解决:再加一个预测长度的predictor
输入一个最大的长度,把预测为end的输出后的输出当作无。
好处:
平行化:速度快
能控制输出长度:比如有个classifer,语音合成2倍速识别就除以2.
坏处:
表现一般不如at(autoregressive):muti—modality
- encoder-decoder如何传递资讯

cross attention部分,两个输入来自encoder,一个来自decoder。

把self-attention输出的向量乘上一个矩阵作为一个transform得到query,a1,a2,a3产生一个key,q与k1、k2、k3计算attention的分数,做一下softmax normization。再分别乘以v加起来得到v丢给fc。
decoder产生query到encoder里抽取资讯。

原始论文中decoder 的每一层都是encoder最后一层的输出,图右上角。当然还有其他结构,图下方。
- training

计算输出向量的one-hot与ground truth的one-hot的minimize cross entropy。

teacher force:decoder输入groud truth,机器要使输出与ground truch的loss越小越好,要包含end的token。
问题:测试中没有ground truth给decoder
训练的tips:
1、copy mechanism
就是机器并不理解资讯,而是从资讯中复制一些东西。

语音合成念四次发财没问题,反而念一次只念出来发。
2.guided attention

红色曲线代表attention分数,越高效果越好。
guided attention要求attention有一个固定的样貌,比如语音合成、tts的问题,要求attention由左向右。
关键词汇:monotonic attention
location-aware attention 自己google
Beam Search

假设只有两个输出A,B,每次找输出分数最高的路劲,叫做greedly decoding。绿色路径第一步不好,但总体是最好的。

beam search一直输出重复的结果,加入一些随机性后的结果反而比较正常。
当目标非常明确时,beam search性能好,如语音辨识。当需要一点创造力时,结果有多种可能时,需要在decoder中加入随机性。
反直觉:语音合成(TTS)。一般来说是训练时加入noise,但是tts需要在测试时加入noise效果才会好。
口诀:
不知道如何去优化,用reinforcement learning(RL),遇到无法优化的loss function,把它当成RL的 rewo,把decoder当作agen,把它当作RL的reinfore问题硬做
测试没有ground truch的问题,测试时decoder会看一些错的东西,从而带来的exposure bias:
给decoder一些错误的答案,可能会学的更好——scheduled sampling

会损害transformer平行化的能力和细节,因此transformer对scheduled sampling进行了改进。