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


1.1.3.3 结构化注意力 1.1.3.4 指针网络
注意力机制主要用来做信息筛选,从输入信息中选取相关的信息 。
指针网络( )是一种序列到序列模型,输入是长度为 N N N的向量序列 X = [ x 1 , ? , x N ] \{X}=\left[\{x}_{1}, \cdots, \{x}_{N}\right] X=[x1?,?,xN?],输出是长度为 M M M的下标序列 c 1 : M = c 1 , c 2 , ? , c M , c m ∈ [ 1 , N ] , ? m \{c}_{1: M}=c_{1}, c_{2}, \cdots, c_{M}, c_{m} \in[1, N], \ m c1:M?=c1?,c2?,?,cM?,cm?∈[1,N],?m
和一般的序列到序列的任务不同,这里的输出序列是输入序列的下标(索引) 。比如输入一组乱序的数字,输出为按大小排序的输入数字序列的下标 。如输入 20,5,10,输出 1,3,2 。
条件概率 p ( c 1 : M ∣ x 1 : N ) p\left(c_{1: M} \mid \{x}_{1: N}\right) p(c1:M?∣x1:N?)可以写为

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

文章插图
p ( c 1 : M ∣ x 1 : N ) = ∏ m = 1 M p ( c m ∣ c 1 : ( m ? 1 ) , x 1 : N ) ≈ ∏ m = 1 M p ( c m ∣ x c 1 , ? , x c m ? 1 , x 1 : N ) \begin{} p\left(c_{1: M} \mid \{x}_{1: N}\right) &=\prod_{m=1}^{M} p\left(c_{m} \mid c_{1:(m-1)}, \{x}_{1: N}\right) \\ & \ \prod_{m=1}^{M} p\left(c_{m} \mid \{x}_{c_{1}}, \cdots, \{x}_{c_{m-1}}, \{x}_{1: N}\right) \end{} p(c1:M?∣x1:N?)?=m=1∏M?p(cm?∣c1:(m?1)?,x1:N?)≈m=1∏M?p(cm?∣xc1??,?,xcm?1??,x1:N?)?其中条件概率 p ( c m ∣ x c 1 , ? , x c m ? 1 , x 1 : N ) p\left(c_{m} \mid \{x}_{c_{1}}, \cdots, \{x}_{c_{m-1}}, \{x}_{1: N}\right) p(cm?∣xc1??,?,xcm?1??,x1:N?)可以通过注意力分布来计算 。假设用一个循环神经网络对 x c 1 , ? , x c m ? 1 , x 1 : N \{x}_{c_{1}}, \cdots, \{x}_{c_{m-1}}, \{x}_{1: N} xc1??,?,xcm?1??,x1:N?进行编码得到向量 h m \{h}_m hm?,则
p ( c m ∣ c 1 : ( m ? 1 ) , x 1 : N ) =? ( s m , n ) p\left(c_{m} \mid c_{1:(m-1)}, x_{1: N}\right)=\{}\left(s_{m, n}\right) p(cm?∣c1:(m?1)?,x1:N?)=(sm,n?)
其中 s m , n s_{m,n} sm,n?为在解码过程的第 m m m步时,h m \{h}_m hm?对 h n \{h}_n hn?的未归一化的注意力分布,即
s m , n = v ? tanh ? ( W x n + U h m ) , ? n ∈ [ 1 , N ] s_{m, n}=\{v}^{\top} \tanh \left(\{W} \{x}_{n}+\{U} \{h}_{m}\right), \ n \in[1, N] sm,n?=v?tanh(Wxn?+Uhm?),?n∈[1,N]
其中 v \{v} v, W \{W} W, U \{U} U为可学习的参数 。
下图给出了指针网络的实例,其中 h 1 \{h}_1 h1?,h 2 \{h}_2 h2?,h 3 \{h}_3 h3?为输入数字 20,5,10 经过循环神经网络的隐状态,h 0 \{h}_0 h0?对应特殊字符‘’时,网络一步一步输出桑输入数字从大到小排列的下标 。
1.2 自注意力机制
虽然循环网络理论上可以建立长距离依赖关系,但由于信息传递的容量以及梯度消失问题,实际上也只能建立短距离依赖关系 。
如果要建立序列之间的长距离依赖关系,可以使用以下两种方法:
1)增加物理的层数,通过一个深层网络来获取远距离的信息交互;
2)使用全连接网络 。
全连接网络是一种非常直接的建模远距离依赖的模型,但是无法处理变长的输入序列,不同的输入长度,其连接权重的大小也不同 。这时我们可以利用注意力机制来“动态”的生成不同连接的权重,这就是自注意力模型(self- model) 。自注意力模型更容易捕获中长距离的相互依赖关系 。
为提高模型能力,自注意力模型经常采用查询-键-值(query-key-velue,QKV)模式,其计算过程如下图所示,其中红色字母表示矩阵的维度 。
假设输入序列为 X = [ x 1 , ? , x N ] ∈ R D x × N \{X}=\left[\{x}_{1}, \cdots, \{x}_{N}\right] \in \{R}^{D_{x} \times N} X=[x1?,?,xN?]∈RDx?×N,输出序列为 H = [ h 1 , ? , h N ] ∈ R D v × N \{H}=\left[\{h}_{1}, \cdots, \{h}_{N}\right] \in \{R}^{D_{v} \times N} H=[h1?,?,hN?]∈RDv?×N,自注意力模型的具体计算过程如下:
1)对于每个输入 x i \{x}_{i} xi?,我们首先将其线性映射到三个不同的空间,得到查询向量KaTeX parse error:'}', got 'EOF' at end of input: …athbb{R}^{D_{k}、键向量 k i ∈ R D k \{k}_{i} \in \{R}^{D_{k}} ki?∈RDk?和值向量 v i ∈ R D v \{v}_{i} \in \{R}^{D_{v}} vi?∈RDv? 。