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

一文梳理NLP中的Attention机制的起源与发展

2023-03-06 08:00 作者:小牛翻译NiuTrans  | 我要投稿

本文首发于网站 机器翻译学堂

转载事宜请后台询问哦

作者|Nikolas Adaloglou

译者|翰宇晨 穆永誉

单位|东北大学自然语言处理实验室

引言

今天给大家介绍的外文精品博客是关于注意力机制在自然语言处理中发展脉络的整理。博客中包含大量的图例,讲述了Attention的历史渊源及如何在NLP中产生,并点出了Attention与记忆的关系。作者Nikolas Adaloglou还总结了多种经典的Attention计算方法,以及Transformer的关键组件:self-attention。最后作者总结了Attention的优势,展望了它在其他领域中的前景。

作者介绍

Nikolas Adaloglou 是一名电气和生物医学工程师,对开发以人为中心的 AI 解决方案感兴趣。他目前是一名机器学习研究工程师,应用于癌症患者的放射治疗。他曾参与的研究项目包括希腊手语解决方案系统和残疾人教育游戏。他的人工智能研究兴趣包括 3D 医学成像、图像和视频分析、基于图形的深度学习模型和生成深度学习。

译者说

注意力机制的广泛应用是人工智能领域的一大突破,其灵感来自人类的视觉系统,始于CV领域,通过机器翻译任务被首次引入NLP领域。其出现改变了机器翻译的历史进程,使得神经机器翻译有了超越统计机器翻译的可能。自Transformer针对机器翻译任务被提出后,其最核心的部分——自注意力机制也逐渐成为了各领域的通用架构,有一统江山的趋势。

我将其核心思想总结如下:加权平均,动态赋权。将其应用在序列任务时,由于序列元素总有时间上的先后,对序列的每一个元素进行动态赋权,就产生了跨越时间的记忆力。能够对序列中出现很早,但很重要的元素有更深的记忆,这是以往基于RNN的Seq2Seq模型所难以企及的(文中提到的瓶颈问题)。同时,通过赋权操作与整个序列上的元素直接连接,这也缓解了经典的梯度消失问题

注意力机制不仅在数学上攻克了基于RNN的Seq2Seq的一些历史问题,还带来了一个十分重要的性质:可解释性。有人说,深度学习是一个炼丹炉,把数据、模型丢进去,调一调火候,等着便是了,谁也不知道里边发生了什么。那么我想说,注意力机制便是炼丹炉壁上的一个监控装置,让我们尽管看不到炉内的变化,但也能对炉内发生的事情有了些许的掌握。

通过分析注意力矩阵,我们可以获得一些有趣发现。比如本实验室发表在ACL 21的端到端语音翻译(E2E ST)工作:Stacked Acoustic-and-Textual Encoding: Integrating the Pre-trained Models into Speech Translation Encoders。由于“语音-文本”(源语是语音形式,目标语是文本形式)这样的数据非常少,所以E2E ST属于低资源任务。使用预训练的语音识别(ASR)和机器翻译(MT)模型对E2E ST模型进行初始化,是一个有效的迁移学习策略,通常使用ASR编码器和MT解码器分别初始化E2E ST的编码器和解码器。

然而,E2E ST涉及到跨模态和跨语言,ASR编码器能否很好的完成E2E ST中的编码任务呢?基于此,针对E2E ST任务编码困难的问题。作者从注意力矩阵入手,对ASR、MT、E2E ST的编码器进行分析,首先定义了局部性的概念——在序列中,一个位置的局部性为它对周围位置(序列长度的10%)的注意力之和。结果如下图(a)所示,随着层数的升高,ASR和E2E ST的局部性也逐渐升高,而MT的局部在逐渐下降,这意味着:翻译任务需要捕获更多的全局(语义)信息;而E2E ST的编码与ASR一样,过多地关注了局部信息,这对翻译来说是不利的。

由于ASR和E2E ST在训练时使用了CTC损失函数,作者对CTC损失的位置对局部性的影响进行了比较,图(b)显示CTC下面的层有更高的局部性,而其上面的层更能关注到一些全局信息。

根据以上分析可以得出,E2E ST编码器并不是ASR编码器或MT编码器的简单替代。相反,它们是相辅相成的,也就是说:既需要ASR编码器来处理声学输入,也需要MT编码器来产生更具有语义信息、并能够与解码器更好配合的表示,从而证明了堆叠ASR编码器和MT编码器对于E2E ST的重要意义。

更多的论文细节可以自行阅读,这里主要希望以一个实际例子,来证明注意力机制是具有可解释性的,以及是如何将这种可解释性加以利用,得到有用的结论。实际上,论文中仅针对编码器的自注意力进行了分析,便可以得出很多有趣的发现。而编码器-解码器间的注意力所蕴含的对齐信息是更加直观有趣的,想了解更多关于注意力的奥秘,就请阅读这篇博客吧。

原英文博客翻译

原作者注:我之前一直致力于计算机视觉应用程序。老实说,我从未花时间研究Transformers和基于注意力的方法这些“花哨的东西”。然而,最近它们在 ImageNet [3] 中达到了最先进的性能。在 NLP 中,Transformers 和 attention 已成功地用于许多任务,包括阅读理解、抽象摘要、单词补全等。经过大量阅读和搜索,我认为一个至关重要的事就是了解注意力是如何从 NLP 和机器翻译中产生的,这也是本文的全部内容。

什么是注意力,它能产生记忆吗?

记忆是跨越时间的注意力。~ Alex Graves 2020 [1]

注意力机制产生于处理时变数据(如序列)的问题。因此,让我们先从机器学习的角度来表述这类处理"序列"的问题。

1.序列到序列地学习

Seq2Seq的目标是将输入(源)序列转换为新(目标)序列,这两个序列可以具有相同或任意长度。在attention和Transformers之前,其工作方式非常像下图这样:

序列的元素x_1 ,x_2等通常称为tokens,它们实际上可以是任何东西,例如:文字表述、像素,甚至是视频中的图像。在早期(2014-2017年),循环神经网络 ( RNNs ) 在这类任务中占主导地位,因为按顺序处理序列很自然、理想,直到Transformers的出现。

编码器(Encoder)解码器(Decoder)仅仅是堆叠的 RNN 层,例如LSTM (opens new window)。编码器处理输入序列并从所有输入时间步生成一个紧凑的表示,称为上下文向量z,它可以看作是输入序列的压缩格式。

另一方面,解码器接收上下文向量z并生成输出序列。Seq2Seq 最常见的应用是机器翻译,我们可以输入英语句子,而输出法语句子。

事实上,基于 RNN 的架构在过去工作得非常好,尤其是与LSTM和GRU组件一起使用。但问题在于它仅适用于短序列(<20 个时间步)。下面,让我们进一步来看看这一点。

2.RNN's的局限性

我们希望上下文向量 z可以捕获源句子的所有信息,尽管数学证明这是理论上可能的,但实际上z并不能对来自所有输入时间步的信息进行编码,这通常被称为瓶颈问题。在实践中,我们能看到的过去的时间步(所谓的参考窗口)是有限的,RNN's 倾向于忘记距离现在较远的过去时间步的信息。

让我们看一个具体的例子。想象一个97个单词的句子:

“On offering to help the blind man, the man who then stole his car, had not, at that precise moment, had any evil intention, quite the contrary, what he did was nothing more than obey those feelings of generosity and altruism which, as everyone knows, are the two best traits of human nature and to be found in much more hardened criminals than this one, a simple car-thief without any hope of advancing in his profession, exploited by the real owners of this enterprise, for it is they who take advantage of the needs of the poor.” ~ Jose Saramago, “Blindness.”

注意到有什么现象吗?整个段落的关键词(粗体的词)之间的距离很长。

在大多数情况下,向量z难以压缩序列最前面的单词以及第 97 个单词的信息。最终,系统会更加关注序列的最后部分。然而,这通常不是处理序列任务的最佳方式,并且与人类翻译甚至理解语言的方式不兼容。此外,堆叠的 RNN 层通常会产生众所周知的梯度消失问题,正如 RNN 的解析文章中可视化的那样:

要解决此问题,我们可能需要把视野移出标准的Seq2Seq框架。

3.Attention来了

Attention 的诞生是为了解决 Seq2Seq 模型的瓶颈问题和梯度消失问题。其核心思想是:

上下文向量z应该可以访问输入序列的所有部分,而不仅仅是最后一个。换句话说,我们需要与每个时间步形成直接连接

这个想法最初是在计算机视觉中萌生的,Larochelle 和 Hinton [5]提出,通过观察图像的不同部分(一瞥),我们可以学习积累有关形状的信息并对图像进行相应的分类。同样的原理后来也被扩展到序列上:我们可以同时查看所有不同的单词,并学会根据手头的任务“注意”正确的单词。这就是我们现在所说的注意力,它只是记忆的一个概念,是通过同时关注沿着时间的多个输入而获得的。

理解这个概念的一般性至关重要。为此,我们将介绍所有不同类型的注意力机制。

4.Attention类型:隐式VS显式

在我们具体说明如何在Seq2Seq中使用注意力之前,需要先澄清一件事:

非常深的神经网络已经学习了一种形式的隐式注意力[6]

深度网络是非常强大的函数逼近器。因此,在没有任何进一步修改的情况下,它们往往会自动学会忽略部分输入并专注于其他输入。例如,在进行人体姿态估计时,网络将对图片中人体所在位置的像素更加敏感(“许多激活单元表现出对人体部位和姿势的偏好。” ~ Misra et al. 2016 )。以下是视频自监督方法的例子:

查看关于输入的偏导数(在数学上是雅可比矩阵 )是可视化隐式注意力的一种方法。然而,我们是否可以强制执行这种隐式注意力?因为注意力是非常直观的,并且对人类的大脑来说是可以解释的。因此,通过令网络根据先前输入的记忆来“权衡”其对新输入的敏感性,我们引入了显式注意力。从现在起,我们将其简称为注意力。

5.Attention类型:硬VS软

注意力机制的另一个区分点是硬注意力和软注意力。在之前的所有例子中,我们都提到了由可微函数参数化的注意力,这在文献中一般被称为软注意力

注意力意味着函数在其域内平滑变化,因此它是可微的。

从历史上看,有另一个概念叫做硬注意力。下图是一个直观的例子:你可以想象一个迷宫中的机器人必须艰难地决定走哪条路,如红点所示。

下一个例子是从图像中的随机位置出发,尝试找到“重要像素”并进行分类。粗略地说,该算法必须在训练期间选择进入图像内部的方向。

硬注意力可以看作是一种切换机制来决定是否关注某个区域,这意味着该函数在其域上有许多突变

一般来说,硬注意力意味着它可以用离散变量来描述,而软注意力可以用连续变量来描述,也可以说硬注意力用随机抽样模型代替了确定性方法。这也导致了硬注意力是不可微的,我们不能使用标准的梯度下降。这就是为什么我们需要使用强化学习 ( RL ) 技术来训练它们,例如策略梯度和 REINFORCE 算法[6] 。然而,REINFORCE 算法和类似的 RL 方法的主要问题是它们具有高方差。

实际上,鉴于已经有了序列中所有tokens(译者注:也就是已经有了一个完整的序列),我们可以放宽对硬注意力的定义。这样,就有了一个平滑的可微函数,可以用反向传播来进行端到端的训练。

讲完分类,让我们回过头来以具体的例子来介绍注意力。

编码器-解码器中的注意力

在Seq2Seq的RNN编码器-解码器例子中,设解码器的上一个状态为y_%7Bi-1%7D,隐藏状态(译者注:编码器对输入的每一个时间步编码得到的状态)为h%3Dh_1%2Ch_2%2C...%2Ch_n,我们有如下公式:

e_i%3Dattention_%7Bnet%7D(y_%7Bi-1%7D%2Ch)%5Cin%20R%5En%20

其中下标i代表预测的步数。本质上,我们在解码器的当前状态和编码器的所有隐藏状态之间定义了一个分数。更具体的说,对于每一个隐藏状态(用j标记)h_1%2Ch_2%2C...h_n,我们会计算一个标量:

e_%7Bij%7D%3Dattention_%7Bnet%7D(y_%7Bi-1%7D%2Ch_j)

下面是一个图例:

注意到,我在公式中使用了符号e,在图中使用了 %5Calpha%20。这是为什么?因为,我们需要一些额外的属性:a)使其从向量变为概率分布,b)使分数差距扩大,这导致了更自信的预测。这就是我们众所周知的softmax函数 :

%5Calpha%20%20ij%3D%5Cfrac%7Bexp(e_%7Bij%7D)%7D%7B%5Csum%5Cnolimits_%7Bk%3D1%7D%5E%7BT_x%7D%20exp(e_%7Bik%7D)%7D%20

最后这里便是注意力发挥作用的地方:

z_i%3D%5Csum_%7Bj%3D1%7D%5ET%5Calpha%20_%7Bij%7Dh_j

理论上,注意力被定义为加权平均。但在这里,赋权操作是一个被学习的函数!直觉上,我们可以想到%5Calpha%20_%7Bij%7D作为数据相关的动态权重。至此,一个记忆的概念产生了,正如之前所说,注意力权重存储了沿着时间获得的记忆

上述所有内容都与如何计算注意力无关,我们会在后面具体讲。

7.注意力作为可训练权重对机器翻译的意义

在 NLP 任务中理解注意力最直观的方法是将其视为单词之间的(软)对齐。在机器翻译中,我们可以使用如下所示的热图来可视化一个训练好的网络的注意力(分数是动态计算的)。

注意那些颜色较亮的非对角元素中发生了什么:在标记的红色区域中,模型学会了在翻译时交换单词顺序。另外还能发现,这不是一对一的关系,而是一对多的关系,也就是一个输出词受多个输入词的影响(每个输入词具有不同的重要性)。

8.如何计算注意力

在之前的RNN编码器-解码器例子中,我们将注意力表示为attention_%7Bnet%7D(y_%7Bi-1%7D%2Ch),这表明注意力是一个函数(小型神经网络)的输出,其输入是decoder的上一个状态y_%7Bi-1%7D和隐藏状态h%3Dh_1%2Ch_2%2C...h_n。事实上,我们所需要的只是一个描述两个状态之间关系并捕捉它们的“一致”程度的分数

多年来,对于该分数的计算衍生了许多不同的想法。最简单的一种,如 Luong [7] 所示,将注意力计算为两种状态之间的点积y_%7Bi-1%7Dh。简单扩展此想法,我们可以在两种状态之间加入一个可训练的权重矩阵W_%7Ba%7D%20,得到y_%7Bi-1%7DW_%7Ba%7Dh%20。进一步延伸,我们还可以不进行点乘,而使用状态拼接的方式送入带有激活函数的神经网络,如Bahdanau [2]提出的v_a%5ETtanh(W_%7Ba%7D%5Bh%3By_%7Bi-1%7D%5D)%20。在某些情况下,对齐仅受隐藏状态位置的影响,这可以简单地用一个softmax函数来表述:softmax(y_%7Bi-1%7Dh)。最后一个值得一提的是Graves A. [8]在神经图灵机背景下,将注意力计算为余弦相似度cosine%5By_%7Bi-1%7D%2Ch%5D

为了总结不同的技术,我将从Lillian Weng的文章 中借用这个表格。符号s_%7Bt%7D%20表示预测值(即本文中的y_%7Bt%7D%20 ),而不同的W表示可训练的矩阵。

然而,经受住时间考验的是 Bahdanau 等人[2]提出的方法。他们将注意力参数化为一个小的全连接神经网络(显然也可以使用更多层),这实际上意味着注意力现在是一组可训练的权重,可以使用标准反向传播算法进行调整,正如 Bahdanau 等人[2]所说的那样:

“直观地说,这在解码器中实现了一种注意力机制,解码器决定要注意哪部分源语句。通过让解码器具有注意力机制,我们减轻了编码器必须将源语句中的所有信息编码为固定长度向量的负担。使用这种新方法,信息可以分布在整个源语句中,解码器可以相应地选择性地检索这些信息。” ~ Neural machine translation by jointly learning to align and translate

9.全局注意力VS局部注意力

到目前为止,我们都在假设注意力是在整个输入序列上计算的(全局注意力),尽管它很简单,但牺牲了计算复杂度O(T%5E2)的复杂度(T代表输入序列和输出序列的长度)。对于长序列来说,二次复杂度通常是一个严重问题(其计算成本可能很高,有时甚至是不必要的,除非您拥有 Google 这样的计算能力;),因此研究者们也考虑到了局部注意力:

在局部注意力中,我们只考虑输入单元/tokens的一个子集。

显然,这对于非常长的序列有时会更好。局部注意力也可以被视为硬注意力,因为我们需要首先做出一个硬性决定,以排除一些输入单元。让我们用一个简单的图来总结这些操作:

注意中的颜色表明这些权重在不断变化,而在卷积层和全连接层中,它们通过梯度下降缓慢变化。

最后一个,也是无可否认的最著名的类别便是自注意力机制。

10.自注意力:Transformer架构的关键组件

自注意力是定义在同一个序列内的注意力,它不寻找输入-输出序列间的关系/对齐,而是寻找序列内各个元素之间的关系,如下所示:

就个人而言,我喜欢将自注意力视为图:一个(k个节点)连通的无向带权图(无向表示邻接矩阵是对称的)。在数学中,我们有:self-attention_%7Bnet%7D(x%2Cx),可以用任何刚才提到的可训练的方式来计算。一句话总结其意义:在把一个序列a转换到另一个序列b之前,先通过上下文学习序列a的更有意义的表示。

11.语言翻译之外的Attention

虽然Transformer被提出时用于机器翻译任务,但其架构被认为是通用的 NLP 模型,在文本分类、聊天机器人、文本生成等任务上也很有效,如 Google 的BERT或 OpenAI 的GPT-3。

除了自然语言,序列也无处不在,我们可以把目光放在NLP以外。事实上,最近视觉注意力模型在性能上也超过了最先进的 Imagenet 模型[3] 。我们还看到了医疗保健、推荐系统甚至图神经网络中的例子。

简而言之,注意力远不止于Transformers,Transformers也不仅仅是 NLP 方法。

12.总结

这篇文章主要讲对注意力机制的理解。注意力是一种引入记忆概念的通用机制,记忆随着时间的推移存储在注意力权重中,它给了我们一个关于看向哪里的指导。

注意力的优势在于:由于它提供了编码器状态和解码器之间的直接连接(从概念上讲,其作用类似于卷积神经网络中的跳接 ),这通常消除了瓶颈问题和梯度消失问题。另一个方面是可解释性:通过检查注意力权重的分布,我们可以深入了解模型的行为(例如刚刚展示的英法翻译热图中的单词交换),以及了解其局限性。

最后,我们阐明了注意力的所有可能的类别,并展示了几种著名的计算方法。

更多精彩内容请参见原文。


References

[1] DeepMind’s deep learning videos 2020 with UCL, Lecture: Attention and Memory in Deep Learning , Alex Graves

[2] Bahdanau, D., Cho, K., & Bengio, Y. (2014). Neural machine translation by jointly learning to align and translate. arXiv preprint arXiv:1409.0473.

[3] an image is worth 16x16 words: transformers for image recognition at scale, Anonymous ICLR 2021 submission

[4] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. In Advances in neural information processing systems (pp. 5998-6008).

[5] Larochelle H., Hinton G, (2010), Learning to combine foveal glimpses with a third-order Boltzmann machine.

[6] Mnih V., Heess N., Graves A., Kavukcuoglu K., (2014), Recurrent Models of Visual Attention.

[7] Luong M., Pham H , Manning C. D., (2015), Effective Approaches to Attention-based Neural Machine Translation.

[8] Graves A., Wayne G. ,Danihelka I., (2014), Neural turing machines

[9] Weng L., (2018), Attention? Attention! , lilianweng.github.io/lil-log

[10] Stanford University School of Engineering, (2017), Lecture 10: Neural Machine Translation and Models with Attention


原文链接:
https://theaisummer.com/attention/#attention-beyond-language-translation

hi,这里是小牛翻译~

想要看到更多我们的文章,可以关注下

机器翻译学堂(公号或网站)

笔芯~

往期精彩文章


一文梳理NLP中的Attention机制的起源与发展的评论 (共 条)

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