六 神经网络与深度学习——注意力机制

邱锡鹏《神经网络与深度学习》学习笔记 。
神经网络与深度学习(六)—— 注意力机制1.1.3 注意力机制的变体1.2 自注意力机制
为了减少计算复杂度,我们引入了局部连接,权重共享以及池化操作来简化网络结构 。但目前计算机的计算能力依然是限制神经网络发展的瓶颈 。因此我们依然希望在不过度增加模型复杂度(主要是模型参数)的情况下来提高模型的表达能力 。
神经网络中可以存储的信息量称为网络容量( ) 。一般来讲神经网络的存储容量和神经元的数量以及网络的复杂度成正比 。
我们可以借鉴人脑解决输入信息过载的机制,从两个方面来提高神经网络处理信息的能力:
注意力机制 。通过自上而下的信息选择机制来过滤掉大量的无关信息;外部记忆 。引入额外的外部记忆,优化神经网络结构来提高网络存储信息的容量 。
本文仅探讨注意力机制 。
1.1 注意力机制
在计算能力有限的情况下,作为资源分配方案,是解决信息超载问题的主要手段 。
一个非常有助于理解的链接:深度学习中的注意力模型 。
1.1.1 认知神经学中的注意力
大脑从大量的输入信息中,重点关注一小部分有用的信息同时忽略其他信息的选择能力,叫做注意力 () 。
大脑的注意力一般分为两种:
聚焦式注意力(Focus ) 。有预定目标、依赖任务的、主动有意识的聚焦于某一对象的注意力 。基于显著性的注意力( Based ) 。由外界刺激驱动的注意力,不需要主动干预,也和任务无关 。如果一个对象的刺激信息不同于其周围信息,一种无意识的“赢者通吃(-Take-All)”或者门控机制()就可以把注意力转向这个对象 。
目前的神经网络模型中最大池化(Max )、门控机制()近似可以看做基于显著性的注意力机制 。
1.1.2 注意力机制
此处注意力机制指主动的聚焦式注意力 。
用 X = [ x 1 , ? , x N ] ∈ R D × N \{X}=\left[\{x}_{1}, \cdots, \{x}_{N}\right] \in \{R}^{D \times N} X=[x1?,?,xN?]∈RD×N表示N N N 组输入信息,其中 D D D维向量 x n ∈ R D , n ∈ [ 1 , N ] \{x}_{n}\in\{R}^{D},n\in[1,N] xn?∈RD,n∈[1,N]表示一组输入信息 。为了节省计算资源,只需要从X \{X} X 中选择一些和任务相关的信息 。
注意力机制的计算可以分为两步:
在所有输入信息上计算注意力分布,根据注意力分布计算输入信息的加权平均 。1.1.2.1 注意力分布
为了从N N N 个输入向量 [ x 1 , ? , x N ] [\{x}_{1}, \cdots, \{x}_{N}] [x1?,?,xN?]中选择出和某个特定任务相关的信息,我们需要引入一个和任务相关的表示,称为查询向量(Query ) 。并通过一个打分函数来计算每个输入向量和查询向量之间的相关性 。
给定一个和任务相关的查询向量 q \{q} q(查询向量可以是动态生成的,也可以是可学习的参数),我们用注意力变量 z ∈ [ 1 , N ] z\in[1,N] z∈[1,N]来表示被选择信息的索引位置,即z = n z=n z=n 表示选择了第 n n n个输入向量 。为了方便计算,我们采用一种“软性”的信息选择机制 。首先计算在给定 q \{q} q和 X \{X} X下,选择第 i i i个输入向量的概率 α n \ αn?:
α n = p ( z = n ∣ X , q ) =? ( s ( x n , q ) ) = exp ? ( s ( x n , q ) ) ∑ j = 1 N exp ? ( s ( x j , q ) ) \begin{} \{n} &=p(z=n \mid \{X}, \{q}) \\ &=\{}\left(s\left(\{x}_{n}, \{q}\right)\right) \\ &=\frac{\exp \left(s\left(\{x}_{n}, \{q}\right)\right)}{\sum_{j=1}^{N} \exp \left(s\left(\{x}_{j}, \{q}\right)\right)} \end{} αn??=p(z=n∣X,q)=(s(xn?,q))=∑j=1N?exp(s(xj?,q))exp(s(xn?,q))??
其中 α n \{n} αn?称为注意力分布( ),s ( x n , q ) s\left(\{x}_{n}, \{q}\right) s(xn?,q)为注意力打分函数(s即,计算两者的相似性或者相关性),可以使用以下几种方式来计算: