(未完待续)翻译:一份注意力机制的综合性向导,适合所有人
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(未完待续)翻译:一份注意力机制的综合性向导,适合所有人相关的知识,希望对你有一定的参考价值。
原文链接:A Comprehensive Guide to Attention Mechanism in Deep Learning for Everyone
文章概述(Overview)
- 注意力机制已改变我们使用深度学习算法的方式
- 自然语言处理甚至计算机视觉领域都因为注意力机制而发生变革
- 我们将学习如何让注意力机制在深度学习中奏效,甚至用Python去实现它
引言(Introduction)
“每过一小会,就会出现一个改变一切的变革性产品。” - Steve Jobs
这句二十一世纪最著名的格言之一和深度学习的关系是什么呢?嗯,让我们想想看。多亏算力的提升,我们正处在史无前例的大量突破之中。
如果我们去回溯这一切的开端,将会被引向注意力机制(Attention Mechanism)。简单来说,它是一个改变我们应用深度学习方式的革命性概念。
注意力机制是上一个十年深度学习研究中最具价值的突破之一。它直接促成了进来NLP领域的众多突破的出现,包括Transformer架构和谷歌的BERT。
如果你在NLP领域工作(或者有志于此),你的确必须知道注意力机制是什么,以及它是如何奏效的。
本文会讨论几种注意力机制的基本要素、它们是如何工作的,以及它们背后的本质假设和直觉知识。我们也会提供表达注意力机制的数学公式,配合让你能够用Python轻松实现注意力架构的有关代码。
内容列表(Table of Contents)
1.注意力是什么
在心理学中,注意力指的是有选择性的认知过程:聚焦一个事物而忽略其他。
一个神经网络被视作一次用简化的方式模拟人脑活动的努力。注意力机制也是在深度神经网络中企图实现有选择性地关注一系列相关的事物而忽略其他的相同动作。
让我来解释一下。比方说你在看你的第一所学校的一张合影。通常会有一群孩子做成几排,老师会坐在他们中间某处。现在如果有人问:“照片里有多少人?”你会怎么回答?
数一下人头就好,对吧?你不必考虑照片中的任何其他事物,现在要是有人问一个不同的问题:“照片中谁是老师?”你的大脑也会精准地知道要做什么。那将会是在照片中找到具有成人特征的人。余下的特征只会被忽略掉。这就是我们的大脑非常擅长的“注意力”。
1.1.注意力机制怎样被引入深度学习
注意力机制作为自然语言处理中基于编解码器的神经机器翻译系统的一种提升而出现。随后这一机制包括它的变种被应用到了其他应用当中,包括计算机视觉、语音处理等。
在Bahdanau等人与2015年第一次提出注意力模型之前,神经机器翻译是基于编解码器的RNNs或LSTMs。编解码器都是一堆LSTM或者RNN的单元。按照以下两步进行工作:
1. 编码器LSTM用于处理一整个输入序列并将其编码成内容向量,该向量是LSTM/RNN的最后一层隐藏层状态。它最好是对输入序列的良好总结。编码器的所有中间状态会被忽视,最后的状态会被作为解码器的初始隐藏层状态。
2. 解码器LSTM/RNN单元会一个接一个地产生一句话中的词
简而言之,这里有两个RNN堆或LSTM堆。我们称其中一个为编码器,编码器的作用是读入输入序列,尝试搞清楚它的意思,然后总结。它将总结(内容向量)传递给解码器,解码器以此为据来翻译输入的句子。
这种方式的主要缺陷也很明显。要是编码器做了一个坏的总结,翻译结果也会是糟糕的。事实上人们已经发现面对长句子时编码器就会做出坏的总结。这被称作RNN或者LSTMs中的长程依赖问题。
由于梯度消失和爆炸,RNNs不能记住更长的句子和序列。它只能够记住它刚刚看过的部分。甚至提出了编解码器网络的Cho等人,也已证明随着输入句子长度的提升,编解码器网络的性能会急剧下降。
尽管LSTM相较于RNN来说能更好地捕捉长程依赖,但在一些特例中它显得很健忘。另一个问题是,在翻译时没有办法给某些词赋予更多的重视。
现在,比方说,我们想要预测一句话中的下一个词,它的上下文定位于几个词之后。这有个例子——“尽管他生于北方省,但由于在孟加拉被抚养大,他在孟加拉人中更舒适。”在这个句子群中,如果我们想要预测“孟加拉人”这个词,短语“抚养”和“孟加拉”就应该在预测时被给与更多的权重。尽管“北方省”是另一个州的名字,也是要被“忽视”的。
所以在创造内容向量时,有能够保存输入句子中的所有相关信息完好无损的方式吗?
Bahdanau等人想出了一个简单而精妙的点子:他们建议不但要将内容向量中所有输入的词纳入建议,还要赋予个体相对的重要性。
因此,他们所提出的模型无论何时生成一个句子,都会想办法去编码器的隐藏层中搜索可用的最相关的信息所在的一组位置。这个点子就叫做“注意力”。
1.2.理解注意力机制
这是Bahdanau的论文中的图解。用在这里的双向LSTM为每个输入句子生成了一序列的注释(h1,h2,...,hTx)。它们工作中用到的所有的向量h1,h2......基本是编码器中前向和反向隐藏层状态的结合。
简单来说,所有的向量h1,h2,...,hTx是输入序列中Tx个词的表示。在这个简单的编码器和解码器模型中,只有编码器LSTM的最后一个状态(在这一例中是Tx)会被用作内容向量。
但Bahdanau等人强调创造内容向量时在输入(被隐藏状态替代)中所有词的嵌入。他们仅仅通过对隐藏状态求加权和做到了这一点。
那么问题来了,权重该怎样计算呢?权重也是由一个前馈神经网络学到的,在我下面要提到的他们的公式中。
用于输出词yi的内容向量ci是使用注释的加权和生成的:
权重aij是由下面的归一化函数计算得到的
eij是由函数a描述的前馈神经网络的输出得分,这个函数企图捕捉输入j和输出i之间的一致性。
2.在Python中用Keras实现一个简单的注意力模型
3.全局 vs 局部注意力
4.变形金刚(transformer) - 只需注意力
5.计算机视觉中的注意力
以上是关于(未完待续)翻译:一份注意力机制的综合性向导,适合所有人的主要内容,如果未能解决你的问题,请参考以下文章
(译)JavaScript 中的正则表达式(RegEx)实操——快速掌握正则表达式,伴有随手可练的例子————(翻译未完待续)