Antoine J.-P. Tixier作者思源编译arXIv选自

从各种注意力机制窥探深度学习在NLP中的神威

随着层级表征的兴起,自然语言处理在很多方面都应用了深度神经网络。它们可以实现语言建模、情感分析、机器翻译、语义解析等非常多的任务,这些序列建模任务可以使用循环神经网络、卷积神经网络甚至近来比较流行的 Transformer。机器之心也介绍过基于循环与卷积的序列建模方法,而近日一篇综述文章进一步介绍了 NLP 中各种深度技术。由于很多基础知识读者可能已经比较熟悉了,因此本文只重点介绍该综述文章讨论的注意力机制。

综述文章地址:https://arxiv.org/abs/1808.09772

作者 Antoine Tixier 表示整篇综述笔记也是他学习过程的一部分,所以这一文章还会在 arXiv 上继续更新。为了完成整篇文章,作者主要借鉴了各种卷积神经网络的原论文、斯坦福 CS231n 课程笔记、 Zhang 和 Wallace 关于在 NLP 中运用 CNN 的实战指南、基于 CNN 的文本分类论文等,这些构建了该综述文章卷积神经网络部分的主体内容。

对于循环神经网络,作者参考了 Denny Britz 的 RNN 教程、Chris Colah 关于理解 LSTM 单元的技术博客、关于 GRU 单元的新颖论文、编码器-解码器架构和注意力机制方面的论文。最后,Yoav Golderg 的 NLP 神经网络入门和 Manning 关于神经机器翻译的教程也都非常有帮助。

作者在完成综述文章的同时,还根据 Keras 与 IMDB 数据集实现了很多模型算法,这些代码都能在作者的 GitHub 项目中找到。

项目地址:https://github.com/Tixierae/deep_learning_NLP

整个综述文章分为七章,我们仅会展示第七章的编码器解码器架构与注意力机制。其余关于卷积神经网络和循环神经网络的具体内容可查阅原文章,以下展示了整篇综述文章的目录:

7 注意力机制

注意力机制 [1] 是在编码器-解码器结构下用于神经机器翻译(NMT)[2, 24] 的一种结构,它已经非常快速地扩展到了其它相关任务,例如图像描述 [25] 和文本摘要 [21] 等。直观而言,注意力机制通过允许解码器在多个向量中关注它所需要的信息,从而使编码器避免了将输入嵌入为定长向量,因此能保留更多的信息 [1]。

如今,注意力机制在深度模型中已经非常普遍,它已经不再仅流行于编码器-解码器架构。尤其是一些注意力变体,它们仅作用于编码器而解决文本分类表征学习等问题,这些变体适用于自注意力或内部注意力。

在本文中,我们会首先讨论编码器-解码器架构中的注意力机制,它们常用于神经机器翻译,随后本文会介绍自注意力与层级注意力等。

7.1 编码器-解码器注意力机制

7.1.1 编码器解码器架构

从概念上来说,如图 10 所示编码器希望将输入嵌入为一个向量,而解码器根据该向量生成一些输出。

图 10:编码器-解码器架构概览。

神经机器翻译中,输入与输出都是由单词组成的序列,即 x=(x_1, ... , x_T) 和 y=(y_1, ... , y_T),其中 x 和 y 通常表示原语句子与目标语句子。因为输入与输出都是序列,编码器-解码器架构也称为序列到序列的模型(Seq2Seq)。因为编码器-解码器架构处处可微,所以它们的参数θ可以根据平行语料库最大似然估计同时得到优化,这种训练类型也称为端到端的训练。

如上所示,我们希望最大化的函数即正确翻译的对数概率。

7.1.2 编码器

原语句子可以通过 CNN 或全连接网络等某个模型编码为一个向量,机器翻译通常会选择 RNN 作为编码器。Bahdanau[1] 等人最开始使用双向深度 RNN 网络,该模型使用两条深度单向 RNN 构建模型,且方向相反的两条 RNN 不会共享参数。第一个前向 RNN 从左到右处理原语句子,而第二条反向的 RNN 由右到左处理原语句子。两个 RNN 编码的隐向量在每一个时间步都会拼接在一起,从而作为双向 RNN 的内部表征:

双向 RNN 在考虑整个句子所有信息的情况下再编码原语句子,它不会仅考虑当前时间步之前的单词。因此 h_t 偏向于利用以 x_t 为中心的小区间信息,而在单向 RNN 中,h_t 偏向于利用 x_t 的信息。关注 x_t 周围小区间的信息可能会产生一些优势,但并不是绝对性的。Luong et al. [20] 使用一般的单向深度 RNN 编码器同样获得了当前最优的模型性能。在下文中,编码器的隐藏状态将写为 h_t bar。

7.1.3 解码器

编码器可以使用不同的模型,而在 NMT 中,解码器通常会使用深度的单向 RNN,这主要因为单向 RNN 会比较自然地适应于序列生成任务。解码器的目标是在每一个时间步生成目标语中的一个词,直到读到停止词而完成整句话的输出。

解码器的关键思想是仅使用原语句子最后时间步编码的隐藏向量来生成目标语句子,这会强迫编码器拟合尽可能多的原语句子信息,并整合到最后的隐藏向量 h_T 中。因为 h_T 是一个定长的向量,因此表征能力十分有限,很多信息也会损失掉。另一方面,注意力机制允许解码器在每一个时间步考虑整个编码器的隐藏状态序列 (h_1, ... , h_T),也就是说解码器在生成每一个目标语单词中能决定需要注意哪些编码向量。

更具体而言,目标语序列 y=(y_1, ... , y_T) 中每一个词 y_t 的生成都基于条件分布:

其中 h_t tilde 为注意的隐藏状态,它的计算表达式为:

h_t 为解码器的隐藏状态,当解码器是深度 RNN 时,h_t 就是编码器顶层的隐藏状态,它提供了前面所生成目标语词序列 {y_1, ... , y_(t-1)} 的信息。c_t 为原语的上下文向量,而「;」则表示了拼接操作。W_s 和 W_c 矩阵为可训练的参数,且该式子为了简化并没有展示偏置项。如下图 11 所示,上下文向量 c_t 能通过两种方式计算:全局和局部。本文在后面会讨论这两种方法。

图 11:全局注意力(左)和局部注意力(右)。

7.1.4 全局注意力

在全局注意力中,上下文向量 c_t 为整个原语序列隐藏状态 h_i bar 的加权和,即编码器所有时间步上隐藏状态的加权和。其中每一个隐藏状态向量的维度为编码器隐藏层的神经元数量,c_t 的维度与编码器的隐藏状态相等。校准向量α_t 的维度等于原语句子序列长度 T_x,所以它是一个变量。

校准向量(alignment vector)α_t 需要先对当前目标语隐藏状态 h_t 和所有原语隐藏状态 h_i bar 之间做校准运算(score()),然后再对运算结果应用 Softmax:

换而言之,α_t 为所有原语隐藏状态上的概率分布,即所有α_t 都在 0 和 1 之间,且加和为 1。α_t 表明原语句子中哪一个单词对预测目标语下一个单词最重要。score() 在理论上可以是任何对比函数,Luong et al. [20] 通过点乘试验该函数

,而更一般的公式是通过参数矩阵与全连接层确定

。他们发现点乘在全局注意力中有更好的效果,而全连接层在局部注意力中有更好的效果。全局注意力在图 12 中有所总结:

图 12:全局注意力机制总结。

7.1.5 局部注意力

每生成单个目标词都需要考虑原语句子的所有词在计算上是非常昂贵的,也不是必需的。为了减少这种问题,Luong et al. [20] 提出了一种仅关注固定窗口大小 2D+1 的局部注意力机制

D 是开发者指定的超参数,位置 p_t 为窗口的中心,它可以设置为 t(单调性校准)或者由可微分机制确定(预测性校准),其中预测性校准基于前面生成的目标语单词信息 {y_1, ... , y_t-1},即储存在 h_t 中的信息:

其中 T_x 为原语句子的长度、σ为 Sigmoid 函数、v_p 和 w_p 为可训练参数。校准权重的计算方式与全局注意力相同(公式 19),只是加了一个均值为 p_t、标准差为 D/2 的正态分布项:

注意

。增加的高斯分布项会确保校准权重会随着 i 远离窗口中心 p_t 而衰减,即它会认为窗口中心附近的词更重要。同样不同于全局注意力,α_t 的维度固定等于 2D+1,只有在窗口内的隐藏向量才会得到考虑。局部注意力其实也可以视为全局注意力,只不过校准权重会乘上一个截断的正态分布。下图 13 总结了局部注意力机制

图 13:局部注意力的总结,其带有预测性的校准机制。

7.2 自注意力

现在假定单个 RNN 编码器采用序列 (x_1, ..., x_T) 作为输入,其长度为 T,该 RNN 会将输入序列映射到隐藏向量序列 (h_1, ..., h_T)。该模型的目标与编码器-解码器架构中的注意力机制一样:它不希望仅考虑最后一个隐藏向量 h_T 作为对整个序列的总结,这会引起输入信息的损失,它希望考虑所有时间步下的隐藏状态,并计算一个新的上下文向量。为了这个目标,2016/2017 年提出了自注意力或内部注意力机制

如下公式 23 所示,隐藏向量 h_t 首先会传递到全连接层。然后校准系数 α_t 会对比全连接层的输出 u_t 和可训练上下文向量 u(随机初始化),并通过 Softmax 归一化而得出。注意力向量 s 最后可以为所有隐藏向量的加权和。

score 函数理论上可以是任意校准函数,一个比较直接的方式是使用点乘 score(u_t , u) =u_t*u。上下文向量可以解释为在平均上表征的最优单词。但模型面临新的样本时,它会使用这一知识以决定哪一个词需要更加注意。在训练中,模型会通过反向传播更新上下文向量,即它会调整内部表征以确定最优词是什么。

7.2.1 与 Seq2Seq 注意力的不同

自注意力中定义的上下文向量与 Seq2Seq 注意力中定义的上下文向量是不同的。在 Seq2Seq 中,上下文向量 c_t 等于加权和

,它用来计算需要注意的隐藏状态 h_t tilde = tanh(W_c [c_t; h_t]。在自注意力中,上下文向量用来替代解码器的隐藏状态,因为模型没有解码器。所以在自注意力中,校准向量 α 表示每一个输入单词与平均最优单词的相似性,而在 Seq2Seq 注意力中,α 表示每一个原语单词对生成下一个目标语单词的相关性。

7.2.2 层级注意力

图 14 展示了一个很好的案例,它表示自注意力机制为什么在实践中非常有用。在该架构中,自注意力机制共使用了两次:在词层面与在句子层面。该方法因为两个原因而非常重要,首先是它匹配文档的自然层级结构(词——句子——文档)。其次在计算文档编码的过程中,它允许模型首先确定哪些单词在句子中是非常重要的,然后再确定哪个句子在文档中是非常重要的。

图 14:层级注意力架构。

理论注意力机制深度学习自然语言处理
8
相关数据
权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

高斯分布技术

正态分布是一个非常常见的连续概率分布。由于中心极限定理(Central Limit Theorem)的广泛应用,正态分布在统计学上非常重要。中心极限定理表明,由一组独立同分布,并且具有有限的数学期望和方差的随机变量X1,X2,X3,...Xn构成的平均随机变量Y近似的服从正态分布当n趋近于无穷。另外众多物理计量是由许多独立随机过程的和构成,因而往往也具有正态分布。

神经机器翻译技术

2013 年,Nal Kalchbrenner 和 Phil Blunsom 提出了一种用于机器翻译的新型端到端编码器-解码器结构 [4]。该模型可以使用卷积神经网络(CNN)将给定的一段源文本编码成一个连续的向量,然后再使用循环神经网络(RNN)作为解码器将该状态向量转换成目标语言。他们的研究成果可以说是神经机器翻译(NMT)的诞生;神经机器翻译是一种使用深度学习神经网络获取自然语言之间的映射关系的方法。NMT 的非线性映射不同于线性的 SMT 模型,而且是使用了连接编码器和解码器的状态向量来描述语义的等价关系。此外,RNN 应该还能得到无限长句子背后的信息,从而解决所谓的「长距离重新排序(long distance reordering)」问题。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

最大似然估计技术

极大似然估计是统计学中用来估计概率模型参数的一种方法

文本分类技术

该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

注意力机制技术

我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。当解码器生成一个用于构成目标句子的词时,源句子中仅有少部分是相关的;因此,可以应用一个基于内容的注意力机制来根据源句子动态地生成一个(加权的)语境向量(context vector), 然后网络会根据这个语境向量而不是某个固定长度的向量来预测词。

表征学习技术

在机器学习领域,表征学习(或特征学习)是一种将原始数据转换成为能够被机器学习有效开发的一种技术的集合。在特征学习算法出现之前,机器学习研究人员需要利用手动特征工程(manual feature learning)等技术从原始数据的领域知识(domain knowledge)建立特征,然后再部署相关的机器学习算法。虽然手动特征工程对于应用机器学习很有效,但它同时也是很困难、很昂贵、很耗时、并依赖于强大专业知识。特征学习弥补了这一点,它使得机器不仅能学习到数据的特征,并能利用这些特征来完成一个具体的任务。

机器翻译技术

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

语料库技术

语料库一词在语言学上意指大量的文本,通常经过整理,具有既定格式与标记;事实上,语料库英文 "text corpus" 的涵意即为"body of text"。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

序列到序列技术

推荐文章
暂无评论
暂无评论~