欢迎光临散文网 会员登陆 & 注册

Transformer论文逐段精读【论文精读】

2022-09-16 11:40 作者:不败阿豪  | 我要投稿

Transformer是基础模型,对整个领域影响很大

标题:你只要注意就行了

作者:8个,对文章贡献均等,星号表示贡献值,当作者比较多时把每个作者的贡献明白写出来很好

摘要:


1、主流的序列转录模型,序列转录:给你一个序列生成另一个序列

2、在性能最好的模型里面,通常也会在编码器解码器之间使用注意力机制

3、简单架构,(1)“变形金刚”比较有意思的取名,让大家更容易记住(2)本模型仅仅用注意力机制,而没有用循环或卷积

4、模型打到28.4 BLEU,BLEU是机器翻译里的一个常用衡量标准,英语到德语的翻译工作,比目前最好的模型好了2个 BLEU

5、Transformer架构泛化到别的任务上面都很好

结论:

1、把之前所有做序列转录模型的循环层全部转换为多头自注意力机制,主要是提出这么一个层

2、在机器翻译上,Transformer能够训练的比其他架构快很多,事迹结果比较好

3、想把这种纯基于注意力机制的模型应用到别的任务上,包括图片、语音、视频。使得生成不那么时序化也是一个研究方向。


引言:


1、在时序模型(2017年之前RNN,包括LSTM、GRU)

2、RNN特点(缺点):给你一个序列,计算顺序是从左往右一步步往前做(假设是一个句子,一个词一个词的看,对第t个词会计算输出ht,即词的隐藏状态,ht由ht-1和当前词本身决定)

(1)难以并行,算ht时必须保证ht-1输入完成了(假设100个词,则必须时序算100步,导致时间上无法并行)

(2)如果时序较长,早期的时序信息在后面可能会丢掉

3、注意力机制已经在RNN的应用,transformer之前注意力机制已经成功用在编码器和解码器了,主要用在怎么把编码器的东西有效传递给解码器

4、Transformer不再使用循环神经层,而是纯注意力机制,并行度高,用更短的时间实现更好的结果

相关工作:

1、如何使用CNN替换RNN来减少时序计算

主要问题:CNN对于比较长的序列难以建模。CNN计算时每次去看一个个比较小的窗口(3x3像素块)如果两个像素相隔较远需要很多层卷积才能把两个隔得远的像素融合起来

Transformer里的注意力机制:每一次可以看到所有像素,一层就能把一个序列看到

为了模拟CNN中多输出通道效果,提出多头注意力机制

2、自注意力机制,之前已经有人提到

3、记忆网络(2017年研究重点)

4、Transformer是第一个只依赖于自注意力来做encoder-decoder的架构模型

模型架构:


16:52


编码器和解码器的输出(m、n)可以不等长

什么叫自回归?


19:07


N x Transformer block


22:38


每一个子层用残差连接,最后使用layer normalization,



25:07


LN和BN对比,为什么在变长的应用里不使用BN

BN:每次把一列(1 个 feature)放在一个 mini-batch 里,均值变成 0, 方差变成 1 的标准化。

How:(该列向量 - mini-batch 该列向量的均值)/(mini - batch 该列向量的方差)

训练时:mini-batch 计算均值;

测试时:使用 全局 均值、方差。


LN:很多时候和BN一样,就是BN转置一下

LayerNorm 和 BatchNorm 的例子理解

BatchNorm:n本书,每本书的第一页拿出来,根据 n 本书的第一页的字数均值 做 Norm

LayerNorm:针对某一本书,这本书的每一页拿出来,根据次数每页的字数均值,自己做 Norm


32:07





33:38


虽然k、v不变,但是随着q的改变,因为权重分配不一样导致输出不同


35:55




39:32


2 种常见的注意力机制:

1、加性的注意力机制(它可以处理你的 query 和 key 不等长的情况)

2、点积 dot-product 的注意力机制 (本文采用 scaled,➗ sqrt(dk) ),所以你可以看到它的名字它叫做 scale 的。

选用 dot-product 原因:两种注意力机制其实都差不多, 点乘实现 简单、高效,两次矩阵乘法计算。

scale dot-product➗ sqrt(dk)  原因 :当dk不是很大的时候,除不除无所谓;当dk比较大时,相对差距就比较大,导致值最大的那一个做出来softmax值会更加靠近1,剩下的值会靠近于0,这时梯度就会比较小,跑不动


41:36


怎么做mask:避免在 t 时刻,看到 t 时刻以后的输入。

假设Q和K等长,都为n,时间上能对应起来,对于第t时刻qt,做计算时应该只看k1,...kt-1,不要看kt及其之后的东西,因为kt在当前时刻还没有,在注意力机制中qt会和K中所有k1,...kt,...kn计算,算出来之后我们要保证计算权重的时候不要用到后面的东西。

把 t 时刻以后 qt 和 kt 的值换成一个很大的负数,如 1 ^ (-10),进入 softmax 后,权重为0。 --> 和 V 矩阵做矩阵乘法时,没看到 t 时刻以后的内容,只看 t 时刻之前的 key - value pair。


44:11


与其做一个单个的注意力函数,不如说把整个 query、key、value 整个投影 project 到 1个低维,投影 h 次。 然后再做 h 次的注意力函数,把每一个函数的输出 拼接在一起,然后 again projected,会得到最终的输出。



46:17




47:47


3 种 不一样的注意力层

encoder 的注意力层

假设句子长度是 n,encoder 的输入是一个 n 个长为 d 的向量。

encoder 的注意力层,有三个输入,它分别表示的是key、value 和 query。

一根线过来,它复制成了三下:同样一个东西,既 key 也作为 value 也作为 query,所以叫做自注意力机制。key、value 和 query 其实就是一个东西,就是自己本身。

decoder 的 masked multi-head attention

在解码器的时候,后面的东西要设置成0

decoder 的 multi-head attention 

不再是 self-attention。

key - value 来自 encoder 的输出。


query 是来自 decoder 里 masked multi-head attention 的输出。

图中红色方块:encoder 的输出 value 和 key 。

encoder 最后一层的输出: n 个 长为 d 的向量。

图中绿色方块:decoder 的 masked multi-head attention + Add & Norm 的输出是 m 个 长为 d 的向量。

图中蓝色方块:decoder 的输出

根据 query 算 输出: value 的加权和 (权重 取决于 红色方块 和 绿色方块 的相似度)


54:56


3.3 Position-wise Feed-Forward Networks

作用在最后一个维度的 MLP



56:53


最简单情况:没有残差连接、没有 layernorm、 attention 单头、没有投影。看和 RNN 区别。

RNN 跟 transformer 异:如何传递序列的信息

RNN 是把上一个时刻的信息输出传入下一个时候做输入。Transformer 通过一个 attention 层,去全局的拿到整个序列里面信息,再用 MLP 做语义的转换。


RNN 跟 transformer 同:语义空间的转换 + 关注点

用一个线性层 or 一个 MLP 来做语义空间的转换。

关注点:怎么有效的去使用序列的信息。


60:38


3.4 Embeddings and Softmax

embedding:将输入的一个词、词语 token 映射成 为一个长为 d 的向量。学习到的长为 d 的向量 来表示整个词、词语 token。

embedding:将输入的一个词、词语 token 映射成 为一个长为 d 的向量。学习到的长为 d 的向量 来表示整个词、词语 token。

本文 d = 512

编码器、解码器、最后 softmax 之前的 3 个 embedding 共享权重。--> 训练更简单。

3.5 Positional Encoding

Why? attention 不会有时序信息。

顺序会变,但是值不会变,有问题!


在处理时序数据的时候,一句话里面的词完全打乱,那么语义肯定会发生变化,但是 attention 不会处理这个情况。 --> 加入时序信息

How:RNN 把上一时刻的输出 作为下一个时刻的输入,来传递时序信息。

How:attention 在输入里面加入时序信息 --> positional encoding

计算机表示一个 32 位的整数:32个 bit,每个 bit 上有不同的值来表示。


01:05:49




01:13:01




01:19:10




Transformer论文逐段精读【论文精读】的评论 (共 条)

分享到微博请遵守国家法律