注意力机制与外部记忆
前馈网络和循环网络拟合能力很强,但由于优化算法和计算能力的限制,实践中难以达到通用近似的能力。处理复杂任务时,计算机的计算能力仍是限制神经网络发展的瓶颈。
为减少计算复杂度,借鉴生物神经网络的机制,引入了局部连接、权重共享、汇聚操作简化神经网络结构,缓解模型复杂度和表达能力之间的矛盾,但仍希望通过不过度增加模型复杂度来提高模型表达能力。
神经网络中可以存储的信息量称为网络容量。一组神经元的存储容量和神经元的数量和网络的复杂度成正比。
人脑同样存在网络容量问题,人脑记忆只有几秒,但人脑有注意力机制和记忆机制两个问重要机制来解决信息过载的问题。
借鉴人脑的机制,提高神经网络处理信息的能力,注意力:通过自上而下的信息选择机制来过滤大量无关信息;引入外部记忆:优化神经网络的记忆结构来提高神经网络存储信息的容量。
1. 认知神经学中的注意力
注意力是指,人可以关注一些信息的同时忽略另一些信息的选择能力。人脑接受大量感觉输入,但人脑可以有意或无意地从大量输入信息中选择小部分有用信息来重点处理,并忽略其他信息,这种能力注意力(Attention),注意力可用在外部刺激(听觉、视觉、味觉),也可以作用在内部意识(思考、回忆)。注意力常分为两类:
- 自上而下的有意识的注意力,聚焦式注意力(Focus Attention):有预订目的、依赖任务的,主动有意识地聚焦于某一对象的注意力
- 自下而上的无意识的注意力,基于显著性的注意力(Saliency-Based Attention):由外界刺激驱动的注意,不需要主动干预,和任务无关。如果一个对象的刺激信息不同于其周围信息,一种无意识的的赢者通吃(Winner-Take-All)或者门控(Gating)机制就可以把注意力转向这个对象。记忆信息、阅读、思考等大部分人脑活动依赖于有意识、无意识的注意力。
鸡尾酒会效应:一个人在吵闹的鸡尾酒会上和朋友聊天,周围噪声多,仍可以听到朋友的谈话,而忽略其他人的声音(聚焦式注意力),如果未注意到背景中有重要的词(如他的名字),他会马上注意到(显著性注意力)。
聚焦式注意力会随着环境、情景或任务不同而选择不同的信息。找人时,专注于每个人的脸部,统计人数时,专注于每个人的轮廓。
2. 注意力机制
计算能力有限的情况下,注意力机制(Attention Mechanism)作为一种资源分配方案,将有限计算资源用来处理更重要的信息,是解决信息过载的主要手段。
目前的网络中,最大汇聚(池化)、门控机制可近似地看做自下而上的基于显著性的注意力机制。自上而下的聚焦式注意力,也是有效的信息选择方式,以阅读理解为例,对长文章的内容提问,问题之和段落中的一两个句子相关,其余无关,为减小神经网络的计算负担,只需把相关的片段挑选出来,让后续的神经网络处理,而不是输入所有的文章给网络。
用 X = [ x 1 , ⋯ , x N ] ∈ R D × N \pmb{X} = [\pmb{x_1}, \cdots, \pmb{x_N}] \in \R^{D \times N} XXX=[x1x1x1,⋯,xNxNxN]∈RD×N 表示 N 组输入信息,其中 D 维向量 x n ∈ R D \pmb{x}_n \in \R^D xxxn∈RD, n ∈ [ 1 , N ] n \in [1, N] n∈[1,N] 表示一组输入信息。注意力机制从 X \pmb{X} XXX中挑选一些和任务相关的信息输入到网络,计算步骤:
- 在所有输入信息上计算注意力分布
- 根据注意力分布计算输入信息的加权平均
注意力分布 为了从 N 个输入向量 [ x 1 , ⋯ , x N ] [\pmb{x}_1, \cdots,\pmb{x}_N] [xxx1,⋯,xxxN] 中选出和某个特定任务相关的信息,引入一个和任务相关的表示,称为查询向量(Query Vector) ,并通过一个打分函数来计算每个输入向量和查询向量之间的相关性。
给定一个和任务相关的查询向量 q \pmb{q} qqq,我们用注意力机制 z ∈ [ 1 , N ] z \in [1,N] z∈[1,N] 来表示被选择信息的索引位置,即 z = n 表示选择了第 n 个输入向量,为了便于计算,采用软性信息选择机制。首先计算在给定 q \pmb{q} qqq 和 X \pmb{X} XXX下,选择第 i 个输入向量的概率 α n \alpha_n αn:
其中 α n \alpha_n αn 称为注意力分布(Attention Distribution), s ( x , q ) s(\pmb{x}, \pmb{q}) s(xxx,qqq) 为注意力打分函数,可以使用以下几种方式计算:
其中 W , U , v \pmb{W}, \pmb{U}, \pmb{v} WWW,UUU,vvv 为可学习的参数,D为输入向量的维度。理论上,\pmb{W}, 加性模型和点积模型的复杂度差不多,但点积模型在实现上可以更好地利用矩阵乘积,计算效率更高。当输入向量的维度D比较高时,点积模型的值通常具有较大的方差,从而导致softmax函数的梯度比较小。故缩放点积模型可以很好地解决这个问题。双线性模型课看做是一种泛化的点积模型,假设 W = U T V \pmb{W} = \pmb{U}^T\pmb{V} WWW=UUUTVVV ,双线性模型可写成 s ( x , q ) = x T U T V q = ( U x ) T V q s(\pmb{x} ,\pmb{q}) = \pmb{x}^T\pmb{U}^T\pmb{V}\pmb{q}= (\pmb{Ux})^T\pmb{Vq} s(xxx,qqq)=xxxTUUUTVVVqqq=(UxUxUx)TVqVqVq,即分别对 x \pmb{x} xxx和 q \pmb{q} qqq进行线性变换后计算点积。相比点积模型,双线性模型在计算相似度时引入了非对称性。
加权平均 注意力分布 α n \alpha_n αn可以用来解释在给定任务相关的查询 q \pmb{q} qqq 时,第 n 个输入向量受关注的程度,采用一种软性的信息选择机制对输入信息进行汇总,即:
上式称为软性注意力机制(Soft Attention Mechanism)。注意力机制可以单独使用,但更多作为神经网络汇总的一个组件,示例:
2.1 注意力机制的变体
2.1.1 硬性注意力
软性注意力所选择的信息是所有输入向量在注意力分布下的期望,而硬性注意力(Hard Attention)只关注某一个输入向量。两种实现方式:
- 选取最高概率的一个输入向量,即
a t t ( X , q ) = x n ^ att(\pmb{X},\pmb{q}) = \pmb{x}_{\hat{n}} att(XXX,qqq)=xxxn^
其中 n ^ \hat{n} n^为概率最大的输入向量的下标,即 n ^ = arg n = 1 N m a x α n \hat{n} = \arg_{n=1}^{N}max \alpha_n n^=argn=1Nmaxαn。
- 通过在注意力分布式上随机采样的方式实现。
硬性注意力缺点:基于最大采样或随机采样的方式选择信息,会使得最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用反向传播算法训练。为使用反向传播算法,常采用软性注意力代替硬性注意力。
2.1.2 键值对注意力
用键值对格式来表示输入信息,其中“键”用来计算注意力分布 α n \alpha_n αn,“值”用来计算聚合信息。
用 ( K , V ) = [ ( k 1 , v 1 ) , ⋯ , ( k N , v N ) ] (K,V)=[(\pmb{k}_1,\pmb{v}_1),\cdots,(\pmb{k}_N,\pmb{v}_N)] (K,V)=[(k