《Attention Is All You Need》论文阅读

读书笔记及总结:

(一)Transformer 提出的背景:

Transformer 提出前,RNN、LSTM 在 nlp 领域发挥了巨大作用,但此类模型有很大的 缺陷。①RNN、LSTM 在时间上不能并行计算导致模型的训练时间较长。②在当前位置,LSTM 很难捕获到相距较远单词的含义,即两个对象的联系依赖于两个对象的距离,此外还有会导 致梯度消失现象。Transformer 使用的纯 Attention 机制,解决了这两个问题。

(二)模型的架构:

在这里插入图片描述
Transformer 有 Encoder-Decoder 组成。每个 Encoder 包含 6 个 EncoderLayer 子层, 每个 Decoder 包含 6 个 DecoderLayer 子层。每个 EncoderLayer 由两个小部分构成,下半部分为 attention 层,上半部分为 feed forward 层,两层都有 residual 连接,缓解了梯度消 失的现象。此外两层都有 Norm 层,能加快模型的训练。每个 DecoderLayer 由三小部分组成, 其中两部分和 EncoderLayer 中的相似,另一部分是 Masked Multi-Head Attention 层,它 的作用是确保 position i 的预测只依赖于 position i 之前位置的已经输出,而与 position i 后面的单词无关。

(三)注意力机制:

①Scaled Dot-Product Attention
在这里插入图片描述
Transformer 使用的是 Scaled Dot-Product Attention,即缩放的点积注意力机制。即从输 入 x 得到 query,key,value 向量(由向量 x 与矩阵 Q,K,V 相乘得到)。然后 qikj 的大小代表 position i 和 position j 的依赖程度。当单词的 Embedding 向量维度较大时, qikj 的结果会比较大,然后通过 softmax 函数后,大者更大,小者更小(即 position i 可能只和自己依赖程度较大,而和其他位置的依赖程度几乎为 0)。所以要把 qikj 的 值进行缩放,由于 qikj 的大小和向量的维度 dk 有关联,所以通常将 qi*kj 的值除于 dk 的平方根进行缩放。然后再经过 Mask 层,忽略掉 position i 与 i 后面的位置的依赖程度, 最后通过 softmax 层求出 position i 和它前面个位置的依赖程度。最后依赖程度与各自的 key 向量相乘,然后把所有向量相加就得到了输出。
实际上这些操作都是矩阵操作,使得模型的并行能力得到提升。
在这里插入图片描述
②Multi-Head Attention
在这里插入图片描述
把 key 和 value,query 向量投影到低维(d_model/h 维,d_model 为词向量的维度,h是 Attention Head 的个数),进行 h 次,就得到了 Multi-Head Attention,最后把多个注 意力得到的结果合并,然后再投影到原来的维度上就行了(其实是做了矩阵乘法做投影)。 多头的注意力有助于网络捕捉到更丰富的特征和信息,提高了模型的学习效果。
在这里插入图片描述

(四)Position-wise Feed-Forward Networks

每个 EncoderLayer 和 DecoderLayer 中都有一个 deed Forward 子层,前馈神经网络层包 含了两层全连接和 Relu 激活函数。
在这里插入图片描述
W1 将 x 的维度从 512 为投影到 2048,W2 将 x 的维度从 2048 投影到 512。

(五)Embeddings and Softmax

Embedding 层将输入的单词转换为固定维度的词向量,Softmax 求出每个单词的概率, 选择概率最大的单词作为输出。

(六)Positional Encoding

当我们向 self-Attention 层输入所有单词进行单词间依赖度计算时,没有考虑位置信息 带来的影响(即当句子中单词的位置进行改变,单词两两之间的依赖度保持不变),这 显然和现实不符,所以我们要把单词的输入加上位置信息(位置信息的维度和单词 Embedding 维度相同),这就是 Positional Encoding 的作用。 论文中使用了不同频率的 sin 和 cos 函数。
在这里插入图片描述

(七)为什么使用 Self-Attention 机制

在这里插入图片描述
使用 self-Attention 的时间复杂度为 O(n^2d), 即 1n 的矩阵和 n*d 的矩阵做乘法(由 输入x和Q,K,V做乘法得到q,k,v),和RNN、Conv的时间复杂度差不多,但是self-Attention 可以并行计算,而 RNN 由于时间序列的关系只能串行计算。此外 self-Attention 可以在 一个长的序列中看到所有单词,所以计算任意两个的相关性的复杂度为 O(1)。而 RNN 是串行计算,计算复杂度为 O(n),卷积计算两个的相似度需要多多层卷积增大感受 野才能得到相距较远的两个单词的相似度。所以使用 Self-Attention 能获得更好的效果。

(八)训练

训练数据使用 WMT English-German 数据集,包含 450w 对语句。句子都被编码过了, 使用了一个大小约 37000 个 token 的字典。样本被分为若干个 batch,每个 batch 大概 25000 个 token,每个 batch 中的句子长度保持基本一致。Optimizer 使用了 Adam在这里插入图片描述
正 则 化 方 面 使 用 了 dropout 和 Label Smoothing。

(九)结果

不论是英语-德语还是英语-法语的翻译任务,对比之前的一些模型,本文提出的模型都 达到更好的 BELU 值,同时 Training Cost 也最低。
在这里插入图片描述

心得与感受

(一)Transformer 的优缺点

优点:
①突破了 RNN 模型不能并行计算的限制,使 Transformer 模型训练更快。 ②解决了 RNN、LSTM 长距离依赖问题。
③相比于 CNN,计算两个位置直接的依赖度所需的操作次数不随着距离而增长。 (Transformer 只需计算一次,CNN 需要计算 次卷积。
④自注意力可以产生更具可解释性的模型。我们可以从模型中检查注意力分布。 各个注意头 (attention head) 可以学会执行不同的任务。
缺点:
①训练 Transformer 需要更大的数据集,模型的参数也较大。
②局部信息获取不如 RNN、CNN 强。
③位置信息编码存在问题。位置信息编码并不能完全体现出句子中单词的位置信 息。

(二)Transformer 目前的应用

除了被应用于机器翻译领域,Transformer 还可以应用于图像、音频、视频等领域。 目前 Transformer 已经应用于物体检测与分割、图像分类等任务中,并且取得了很好的 效果。Transformer 是一个简单的、可扩展的框架,与传统的模型相比,Transformer 在 训练效率上更有优势。此外,Transformer 正在成为学习序列数据(包括文本、图像和 时间序列数据)的更通用的框架。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值