Attention Is All You Need


前言

谷歌于2017年发布论文《Attention Is All YouNeed》,提出了一种全新的模型架构——Transformer,该架构完全摒弃了循环和卷积网络结构,完全依赖于注意力机制来处理序列转换任务。
论文地址:https://paperswithcode.com/paper/attention-is-all-you-need


一、总述

传统的循环神经网络(RNN)和长短期记忆(LSTM)网络在处理长序列时,由于其固有的顺序性质,其输出依赖于之前的输入,存在计算受限的问题,因此只能顺序计算,即从左到右或者从右到左。这就导致模型难以实现并行化,从而限制了训练速度和规模,存在效率低的问题。《Attention Is All You Need》一文中完全舍弃了循环神经网络(RNN)、卷积神经网络(CNN)结构,重于解决序列建模和转换问题中的计算效率和性能瓶颈问题。

Transformer的设计带来最大性能提升的关键是将任意两个单词的距离是常量。通过建模依赖关系,从而不用考虑在输入或者输出序列中的距离问题,完全依赖于注意力来描绘输入和输出之间的全局依赖关系。Transformer可以同时处理输入序列的所有位置,而不是像递归或卷积方法那样逐个处理每个位置。这使得 Transformer 能够更好地捕捉输入序列中的长依赖关系,并且更容易并行计算,因此具有更高的训练和推理效率。

由于自注意力机制是对输入序列中的所有位置进行并行处理,没有明确的位置编码,因此,Transformer模型在处理输入序列时可能会失去一些位置信息。为了解决这个问题,Transformer 模型引入了位置编码(Positional Encoding)的机制,通过将位置信息编码到输入向量中,使得模型能够区分不同位置的单词或标记。位置编码通常是通过在输入向量中添加一个固定的位置编码向量来实现的,这个向量的设计通常是基于正弦和余弦函数的组合,以确保模型能够学习到位置信息的序列性质。

二、Transformer框架网络

Transformer模型包含编码器(Encoder)和解码器(Decoder),每个部分都有多个相同的层叠加而成,如下图所示。
T

(1)模型的输入:Input和Outputs(shifted right)

(2)模型的输出:Outputs Probabilities

(3)Input Embedding:单词序列to单词向量序列

(4)位置编码(Positional Encoding):将位置信息附加到原始的【单词向量序列】上,位置编码使用正弦函数和余弦函数的计算来实现

(5)编码器(encode):每个编码器层包含多头自注意力(Multi-Head Attention)机制和一个逐位置的全连接前馈网络(Feed-Forward Network)对数据进行编码

(6)多头注意力机制(Multi-Head Attention):即同时通过多个“自注意力机制”进行特征提取,以捕捉输入序列中的多种依赖关系,从而实现更好的序列建模

(7)前馈神经网络(Feed Forward Network):在每个位置上应用一个前馈神经网络,以进一步增强输入向量的表示能力。

(8)解码器(decode):基于带有掩码(Masked)的多头注意力机制(Multi-Head Attention)对真值进行编码

(9)编码器-解码器注意力层(Multi-Head Attention)对两组数据一起解码,得到解码器的最终输出。其中,编码器和解码器中的“自注意机制”能将输入数据中的全局信息计算并附加到解码结果中

三、训练过程(以英文翻译中文为例)

在这里插入图片描述

(1)输入英文和中文标注经过Input Embedding得到词向量序列

(2)经过Positional Encoding层对词向量添加位置编码

(3)英文向量会进入编码器(依次经过注意力机制层和前馈神经网络层)

(4)中文向量会进入解码器(依次经过掩码自注意层)

(5)添加注意力信息的英文变量和添加注意力信息的中文编码一起进入注意力机制层和前馈神经网络计算解码器的输出结果

(6)解码器的输出结果会输入到一个线性层和softmax层,计算最终的中文翻译结果

这就是Transformer训练过程中的前向传播计算过程。

四、Attention本质

为了方便讲述清楚Attention的本质,对此这里我们引入一个腰围与体重对应的例子(仅为一个例子,并不具有实际意义),具体数据是我们建立了一个腰围和体重所对应的数据字典表,如下图所示。
在这里插入图片描述

当我们有新的查询(Query),查询腰围为57时,预测其体重对应为多少,我们自然而然的推算体重在43~48之间,因为57到56和58的距离相同,所以有一种取体重的平均值,我们计算方式会如下图所示。
在这里插入图片描述
因为57距离56、58最近,我们自然的会非常“注意”它们,所以我们会分给它们的注意力权重各为0.5,不过我们没有用上其它的(Key, Value),似乎我们应该调整一下注意力的权重,但是权重又该如何计算呢?

假设用 α \alpha α(q , k i k_i ki) 来表示 q 和 k 对应的注意力权重,则体重预测值 f(q) 为:

f(q) = α \alpha α(q, k 1 k_1 k1) v 1 v_1 v1 + α \alpha α(q, k 2 k_2 k2) v 2 v_2 v2 + α \alpha α(q, k 3 k_3 k3) v 3 v_3 v3

α \alpha α(q, k i k_i ki) v i v_i vi = softmax(- 1 2 \frac{1}{2} 21(q- k i k_i ki) 2 ^2 2)

其中, α \alpha α 表示任意能刻画相关性的函数,但是需要归一化,可以是高斯核或者softmax函数等等。另外 α \alpha α 就是在计算 q 和 k 的相似度,越相似就越注意,v 理解为 k 这个数据的价值,因为 k 对应的这个数据有可能是异常,q 虽然和它相似但是价值不高,(q*k)*v 也会比较小的情况。

所以,对应的预测腰围57对应的体重的表达式就应该为:

f(57) = α \alpha α(57, 51)*40 + α \alpha α(57, 56)*43 + α \alpha α(57, 58)*48

通过这种方式我们就可以求得体重的估计值,这也就是注意力机制(Attention),所以我们把上面的 q 叫做query(请求),k 叫做 key(键),v 叫做 value(值)。因此,Attention的计算公式就可以表示为:

f(Q) = softmax(QK T ^T T/ d k \sqrt d_k d k)V
其中,为了缓解梯度消失的问题,还会除以一个特征维度,将这一系列的操作称为注意力模型。

对此,我们就更容易理解Transformer 的自注意力机制所包含的三个部分: Query、Key 和 Value。它们都是输入序列的向量表示,通过三个线性变换得到。自注意力机制计算输入序列中每个位置与所有位置之间的注意力权重,然后将这些权重与 Value 向量相乘并求和,得到最终的输出。

当Q、K、V是同一矩阵时,这就变成了自注意力(Self-Attention),则表达式就变成

f(X) = softmax(XX T ^T T/ d x \sqrt d_x d x)X

在现实的运用中,会对X先做不同的线性变换在输入,提前训练好的矩阵 W Q W_Q WQ W K W_K WK W V W_V WV,即可以变换为:

f(X) = softmax(X W Q W_Q WQX T ^T T W K W_K WK/ d x \sqrt d_x d x)X W V W_V WV

通过转换到不同的空间后,能够更好地适应于数据,更加专注注意力的学习,使得学习的效果更好。

总结

每一次写一篇都是为了让自己有更深的思考,当然也希望大家能读懂。

总结一下,本文从自然语言本身的特性出发,完全舍弃了RNN/CNN结构,提出一种新的网络结构,即完全基于注意力机制的Transformer网络结构。Transformer 模型的核心思想是通过在输入序列中引入位置编码,并通过自注意力机制同时处理输入序列的所有位置来捕捉输入序列中的长依赖关系,实现并行计算,从而获得更高的训练和推理效率,从而更好的序列建模。

Transformer 模型是一种高效、灵活、强大的序列到序列建模架构,具有很好的泛化能力,被广泛地应用于各种自然语言处理任务。

自己理解的可能有些偏差,有问题欢迎指正!

参考文献

[1] https://mp.weixin.qq.com/s?__biz=MjM5NzEyMzg4MA==&mid=2649500881&idx=3&sn=0491ff505fcea44e4ffee9cb045dedbf&chksm=bfaca9cc29590dbe2de7b565234884f89f25324e5ffc909e662f475557508cc4d48122cca2ac&scene=27
[2] https://zhuanlan.zhihu.com/p/48508221
[3] https://blog.csdn.net/xhtchina/article/details/128697238

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值