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


其中W \{W} W,U \{U} U,v \{v} v 为可学习的参数,D D D为输入向量的维度 。
理论上加性模型和点积模型的复杂度差不多,但点积模型可以更好的利用矩阵乘积,计算效率更高 。
当输入向量的维度较高时,点积模型的值通常由较大的方差,从而导致函数的梯度会比较小 。而缩放点积模型可以较好的解决这个问题 。
双线性模型是一种泛化的点积模型,假设模型参数 W = U T V \{W}=\{U}^T\{V} W=UTV,双线性模型可写为 s ( x , q ) = x ? U ? V q = ( U x ) ? ( V q ) s(\{x}, \{q})=\{x}^{\top} \{U}^{\top} \{V} \{q}=(\{U} \{x})^{\top}(\{V} \{q}) s(x,q)=x?U?Vq=(Ux)?(Vq),即分别对 x \{x} x,q \{q} q进行线性变换后计算点积 。相比点积模型,双线性模型在计算相似度时引入了非对称性 。

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

文章插图
1.1.2.2 加权平均
注意力分布 α n \ αn?可以解释为在给定任务相关的查询 q \{q} q时,第 n n n个输入向量受关注的程度 。我们采用一种“软性”的信息选择机制对输入信息进行汇总,即软性注意力机制(Soft):
att ? ( X , q ) = ∑ n = 1 N α n x n = E z ~ p ( z ∣ X , q ) [ x z ] \begin{} \{att}(\{X}, \{q}) &=\sum_{n=1}^{N} \{n} \{x}_{n} \\ &=\{E}_{z \sim p(z \mid \{X}, \{q})}\left[\{x}_{z}\right] \end{} att(X,q)?=n=1∑N?αn?xn?=Ez~p(z∣X,q)?[xz?]?
软性注意力机制选择的信息是所有输入向量在注意力分布下的期望 。
下图为软性注意力机制示例:
另一种注意力是只关注某一输入向量,叫作硬性注意力(Hard ) 。硬性注意力有两种实现方式:
1)选取注意力分布中概率最高的输入向量,即最大采样:
att ? ( X , q ) = x n ^ \{att}(\{X}, \{q})=\{x}_{\hat{n}} att(X,q)=xn^?
其中 n ^ \hat{n} n^为概率最大的输入向量的下标,即n ^ = arg ? max ? n = 1 N α n \hat{n}={\arg \max}^{N}_{n=1} \{n} n^==1N?αn? 。
2)在注意力分布式上随机采样 。
硬性注意力的一个缺点是损失函数与注意力分布之间的函数关系不可导,无法使用反向传播算法进行训练 。因此硬性注意力通常使用强化学习来进行训练 。
注意力机制可以单独使用,但更多的是作为神经网络中的一个组件 。
1.1.3 注意力机制的变体 1.1.3. 1 键值对注意力
用键值对(key-velue pair)格式表示输入信息,其中“键”用来计算注意力分布 α n \ αn?,“值”用来计算聚合信息 。
用 ( K , V ) = [ ( k 1 , v 1 ) , ? , ( k N , v N ) ] (\{K}, \{V})=\left[\left(\{k}_{1}, \{v}_{1}\right), \cdots,\left(\{k}_{N}, \{v}_{N}\right)\right] (K,V)=[(k1?,v1?),?,(kN?,vN?)]表示 N N N组输入信息,给定任务相关的查询向量 q \{q} q时,注意力函数为:
att ? ( ( K , V ) , q ) = ∑ n = 1 N α n v n = ∑ n = 1 N exp ? ( s ( k n , q ) ) ∑ j exp ? ( s ( k j , q ) ) v n \begin{} \{att}((\{K}, \{V}), \{q}) &=\sum_{n=1}^{N} \{n} \{v}_{n} \\ &=\sum_{n=1}^{N} \frac{\exp \left(s\left(\{k}_{n}, \{q}\right)\right)}{\sum_{j} \exp \left(s\left(\{k}_{j}, \{q}\right)\right)} \{v}_{n} \end{} att((K,V),q)?=n=1∑N?αn?vn?=n=1∑N?∑j?exp(s(kj?,q))exp(s(kn?,q))?vn??
当 K = V \{K}=\{V} K=V时,键值对模式就等价于普通的注意力机制 。
键值对模式图示:
1.1.3.2 多头注意力
Multi-Head是利用多个查询 Q = [ q 1 , ? , q M ] \{Q}=\left[\{q}_{1}, \cdots, \{q}_{M}\right] Q=[q1?,?,qM?]来并行地从输入信息中选取多组信息,每个注意力关注输入信息的不同部分 。
【六神经网络与深度学习——注意力机制】att ? ( ( K , V ) , Q ) = att ? ( ( K , V ) , q 1 ) ⊕ ? ⊕ att ? ( ( K , V ) , q M ) \{att}((\{K}, \{V}), \{Q})=\{att}\left((\{K}, \{V}), \{q}_{1}\right) \oplus \cdots \oplus \{att}\left((\{K}, \{V}), \{q}_{M}\right) att((K,V),Q)=att((K,V),q1?)⊕?⊕att((K,V),qM?)⊕ \oplus ⊕表示向量拼接 。