递归神经网络
循环神经网络可以用来处理包含序列结构的信息。但是对于树、图等更复杂的结构,循环神经网络无法处理。
递归神经网络
神经网络的输入层单元数是固定的,因此必须用循环或递归的方式处理可变长度的输入。循环神经网络实现了前者,通过将长度不定的输入分割成为等长的小块,然后再依次输入到网络中,从而实现对变长输入的处理。递归神经网络可以把一个树/图结构信息编码为一个向量,也就是把信息映射到一个语义向量空间中。此语义向量空间满足某些性质,如语义相似的向量距离更近。也就是说,如果两句话意思相近,那么分别编码后的两个向量距离也相近。如下图所示:
图中可见,递归神经网络将所有的词、句都映射到一个二维向量空间中,这样通过向量的距离就得到了一种语义的表示。
上图还显示了⾃然语⾔可组合 的性质:词可以组成句、句可以组成段落、段落可以组成篇章,⽽更⾼层的语义取决于底层的语义以及它们的组合⽅式。递归神经⽹络是⼀种表示学习 ,它可以将词、句、段、篇按照他们的语义映射到同⼀个向量空间中,也就是把可组合(树/图结构)的信息表示为⼀个个有意义的向量。⽐如上⾯这个例⼦,递归神经⽹络把句⼦"the country of my birth"表示为⼆维向量[1,5]。有了这个『编码器』之后,我们就可以以这些有意义的向量为基础去完成更⾼级的任务(⽐如情感分析等)。
如下图所示,递归神经⽹络在做情感分析时,可以⽐较好的处理否定句,这是胜过其他⼀些模型的:
在上图中,蓝⾊表示正⾯评价,红⾊表示负⾯评价。每个节点是⼀个向量,这个向量表达了以它为根的⼦树的情感评价。其中,模型能够正确处理doesn’t的含义,将正面评价转为负面评价。
尽管递归神经网络具有更为强大的表示能力,但是在实际应用中并不太流行。其中⼀个主要原因是,递归神经⽹络的输⼊是树/图结构,⽽这种结构需要花费很多⼈⼯去标注。循环神经⽹络处理句⼦可以直接把句⼦作为输⼊,而递归神经⽹络 处理句⼦必须把每个句⼦标注为语法解析树的形式。很多时候,相对于递归神经⽹络能够带来的性能提升,这个投⼊是不太划算的。
递归神经网络的前向计算
这里以树型信息为例介绍。
递归神经网络的输入是两个子节点,输出就是这两个子节点编码后产生的父节点,父节点的维度和每个子节点是相同的。
其中,c 1 c_1 c 1 和c 2 c_2 c 2 分别是表示两个子节点的向量,p p p 是表示父节点的向量。子节点和父节点组成一个全连接网络。用矩阵W W W 表示这些连接上的权重,它的维度将是d × 2 d d\times 2d d × 2 d 。其中,d d d 表示每个节点的维度。父节点的计算公式可以写成
p = tanh ( W [ c 1 c 2 ] + b ) p=\tanh(W\begin{bmatrix}c_1\\c_2\end{bmatrix}+b)
p = tanh ( W [ c 1 c 2 ] + b )
上式中tanh \tanh tanh 是激活函数(也可以是其他激活函数),b b b 是偏置项,它也是一个维度为d d d 的向量。
随后将产生的父节点的向量再次作为网络的输入,产生它们的父节点,如此递归下去,直至整棵树处理完毕。最终将得到根结点的向量,可认为它是整棵树的表示,这样就把一棵树映射为一个向量。
上式就是递归神经网络的前向计算方法,和全连接神经网络的计算没有区别,只是在输入过程中需要根据输入的树结构依次输入每个子节点。
递归神经网络的权重W W W 和偏置项b b b 在所有的节点都是共享的 。
递归神经网络的训练算法
递归神经网络的训练算法和循环神经网络类似。不同之处在于前者将δ \delta δ 从根结点反向传播到各个子节点,后者将δ \delta δ 从当前时刻t k t_k t k 反向传播到初始时刻t 1 t_1 t 1 。
下面介绍用于递归神经网络的训练算法BPTS 算法。
误差项的传递
首先推导将误差从父节点传递到子节点的公式,如下图:
定义δ p \delta_p δ p 为误差函数E E E 相对于父节点p p p 的加权输入n e t p net_p n e t p 的导数,即
δ p = ∂ E ∂ net p \delta_p=\frac{\partial E}{\partial \text{net}_p}
δ p = ∂ net p ∂ E
设n e t p net_p n e t p 是父节点的加权输入,则
net p = W [ c 1 c 2 ] + b \text{net}_p=W\begin{bmatrix}c_1\\c_2\end{bmatrix}+b
net p = W [ c 1 c 2 ] + b
其中,n e t p , c 1 , c 2 net_p,c_1,c_2 n e t p , c 1 , c 2 都是向量,而W W W 是矩阵。
将其展开可得:
[ net p 1 net p 2 ⋮ net p n ] = [ ω p 1 c 11 ω p 1 c 12 ⋯ ω p 1 c 1 n ω p 1 c 21 ω p 1 c 22 ⋯ ω p 1 c 2 n ω p 2 c 11 ω p 2 c 12 ⋯ ω p 2 c 1 n ω p 2 c 21 ω p 2 c 22 ⋯ ω p 2 c 2 n ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋱ ⋮ ω p n c 11 ω p n c 12 ⋯ ω p n c 1 n ω p n c 21 ω p n c 22 ⋯ ω p n c 2 n ] [ c 11 c 12 ⋮ c 1 n c 21 c 22 ⋮ c 2 n ] + [ b 1 b 2 ⋮ b n ] \begin{bmatrix}\text{net}_{p_1} \\\text{net}_{p_2} \\\vdots \\\text{net}_{p_n}\end{bmatrix}=\begin{bmatrix}\omega_{p_1 c_{11}} & \omega_{p_1 c_{12}} & \cdots & \omega_{p_1 c_{1n}} & \omega_{p_1 c_{21}} & \omega_{p_1 c_{22}} & \cdots & \omega_{p_1 c_{2n}} \\\omega_{p_2 c_{11}} & \omega_{p_2 c_{12}} & \cdots & \omega_{p_2 c_{1n}} & \omega_{p_2 c_{21}} & \omega_{p_2 c_{22}} & \cdots & \omega_{p_2 c_{2n}} \\\vdots & \vdots & \ddots & \vdots & \vdots & \vdots & \ddots & \vdots \\\omega_{p_n c_{11}} & \omega_{p_n c_{12}} & \cdots & \omega_{p_n c_{1n}} & \omega_{p_n c_{21}} & \omega_{p_n c_{22}} & \cdots & \omega_{p_n c_{2n}}\end{bmatrix}\begin{bmatrix}c_{11} \\c_{12} \\\vdots \\c_{1n} \\c_{21} \\c_{22} \\\vdots \\c_{2n}\end{bmatrix}+\begin{bmatrix}b_1 \\b_2 \\\vdots \\b_n\end{bmatrix}
net p 1 net p 2 ⋮ net p n = ω p 1 c 11 ω p 2 c 11 ⋮ ω p n c 11 ω p 1 c 12 ω p 2 c 12 ⋮ ω p n c 12 ⋯ ⋯ ⋱ ⋯ ω p 1 c 1 n ω p 2 c 1 n ⋮ ω p n c 1 n ω p 1 c 21 ω p 2 c 21 ⋮ ω p n c 21 ω p 1 c 22 ω p 2 c 22 ⋮ ω p n c 22 ⋯ ⋯ ⋱ ⋯ ω p 1 c 2 n ω p 2 c 2 n ⋮ ω p n c 2 n c 11 c 12 ⋮ c 1 n c 21 c 22 ⋮ c 2 n + b 1 b 2 ⋮ b n
其中,p i p_i p i 表示父节点p p p 的第i i i 个分量,c j k c_{jk} c jk 表示c j c_j c j 子节点的第k k k 个分量,ω p i c j k \omega_{p_ic_{jk}} ω p i c jk 表示子节点c j c_j c j 的第k k k 个分量到父节点p p p 的第i i i 个分量的权重。因此,对于子节点c j k c_{jk} c jk 来说,它会影响到父节点所有的分量。求误差函数E E E 对c j k c_{jk} c jk 的导数时,需要用到全导数公式:
∂ E ∂ c j k = ∑ i ∂ E ∂ net p i ⋅ ∂ net p i ∂ c j k = ∑ i δ p i ω p i c j k \begin{aligned}
\frac{\partial E}{\partial c_{jk}}
&= \sum_i \frac{\partial E}{\partial \text{net}_{p_i}} \cdot \frac{\partial \text{net}_{p_i}}{\partial c_{jk}} \\
&= \sum_i \delta_{p_i} \, \omega_{p_i c_{jk}}
\end{aligned}
∂ c jk ∂ E = i ∑ ∂ net p i ∂ E ⋅ ∂ c jk ∂ net p i = i ∑ δ p i ω p i c jk
这样就可以将其表示为矩阵形式,从而得到一个向量化表达:
∂ E ∂ c j k = U j δ p \frac{\partial E}{\partial c_{jk}}=U_j\delta _p
∂ c jk ∂ E = U j δ p
其中,矩阵U j U_j U j 是从矩阵W W W 中提取部分元素组成的矩阵,其单元为:
u j i k = ω p k c j i u_{j_{ik}}=\omega_{p_kc_{ji}}
u j ik = ω p k c ji
以下是对上式的解释:
首先将W W W 矩阵拆分为两个矩阵W 1 W_1 W 1 和W 2 W_2 W 2 ,如下图所示:
显然子矩阵W 1 W_1 W 1 和W 2 W_2 W 2 分别对应子节点c 1 c_1 c 1 和c 2 c_2 c 2 的到父节点p p p 的权重。则矩阵U j U_j U j 为:
U j = W j T U_j=W_j^T
U j = W j T
也就是说,将误差项反向传递到相应子节点c j c_j c j 的矩阵U j U_j U j 就是其对应权重矩阵W j W_j W j 的转置。
设n e t c j net_{c_j} n e t c j 是子节点c j c_j c j 的加权输入,f f f 是子节点c c c 的激活函数,则
c j = f ( n e t c j ) c_j=f(net_{c_j})
c j = f ( n e t c j )
因此,
δ c j = ∂ E ∂ n e t c j = ∂ E ∂ c j ∂ c j ∂ n e t c j = W j T δ p ∘ f ′ ( n e t c j ) \begin{aligned}\delta_{c_j}&=\frac{\partial E}{\partial net_{c_j}}\\&=\frac{\partial E}{\partial c_j}\frac{\partial c_j}{\partial net_{c_j}}\\&=W_j^T\delta _p\circ f'(net_{c_j})\end{aligned}
δ c j = ∂ n e t c j ∂ E = ∂ c j ∂ E ∂ n e t c j ∂ c j = W j T δ p ∘ f ′ ( n e t c j )
上式就是将误差项从父节点传递到其子节点的公式。
反复应用上式,即可得到逐层传递的公式。
上图是在树型结构中反向传播误差项的全景图,在已知δ p ( 3 ) \delta_p^{(3)} δ p ( 3 ) 的情况下,δ p ( 1 ) \delta_p^{(1)} δ p ( 1 ) 为:
δ ( 2 ) = W T δ p ( 3 ) ∘ f ′ ( net ( 2 ) ) δ p ( 2 ) = [ δ ( 2 ) ] p δ ( 1 ) = W T δ p ( 2 ) ∘ f ′ ( net ( 1 ) ) δ p ( 1 ) = [ δ ( 1 ) ] p \begin{aligned}\delta^{(2)} &= W^T \delta_p^{(3)} \circ f'(\text{net}^{(2)})\\\delta_p^{(2)} &= [ \delta^{(2)} ]_p\\\delta^{(1)} &= W^T \delta_p^{(2)} \circ f'(\text{net}^{(1)})\\\delta_p^{(1)} &= [ \delta^{(1)} ]_p\end{aligned}
δ ( 2 ) δ p ( 2 ) δ ( 1 ) δ p ( 1 ) = W T δ p ( 3 ) ∘ f ′ ( net ( 2 ) ) = [ δ ( 2 ) ] p = W T δ p ( 2 ) ∘ f ′ ( net ( 1 ) ) = [ δ ( 1 ) ] p
在上面的公式中,
δ ( 2 ) = [ δ c ( 2 ) δ p ( 2 ) ] \delta^{(2)} =\begin{bmatrix}\delta_c^{(2)} \\\delta_p^{(2)}\end{bmatrix}
δ ( 2 ) = [ δ c ( 2 ) δ p ( 2 ) ]
[ δ ( 2 ) ] p [\delta^{(2)}]_p [ δ ( 2 ) ] p 表示从向量δ ( 2 ) \delta^{(2)} δ ( 2 ) 中取出属于节点p p p 的部分。
权重梯度的计算
根据加权输入的计算公式
n e t p ( l ) = W c ( l ) + b net_p^{(l)}=Wc^{(l)}+b
n e t p ( l ) = W c ( l ) + b
其中n e t p ( l ) net_p^{(l)} n e t p ( l ) 表示第l l l 层父节点的加权输入,c ( l ) c^{(l)} c ( l ) 表示第l l l 层的子节点,W W W 是权重矩阵,b b b 是偏置项。展开可得:
n e t p j l = ∑ i ω j i c i l + b j net_{p_j}^l=\sum_i\omega_{ji}c_i^l+b_j
n e t p j l = i ∑ ω ji c i l + b j
可以求得误差函数在第l l l 层对权重的梯度为:
∂ E ∂ ω j i ( l ) = ∂ E ∂ net p j ( l ) ⋅ ∂ net p j ( l ) ∂ ω j i ( l ) = δ p j ( l ) c i ( l ) \frac{\partial E}{\partial \omega_{ji}^{(l)}} = \frac{\partial E}{\partial \text{net}_{p_j}^{(l)}} \cdot \frac{\partial \text{net}_{p_j}^{(l)}}{\partial \omega_{ji}^{(l)}} = \delta_{p_j}^{(l)} c_i^{(l)}
∂ ω ji ( l ) ∂ E = ∂ net p j ( l ) ∂ E ⋅ ∂ ω ji ( l ) ∂ net p j ( l ) = δ p j ( l ) c i ( l )
上式用来计算一个ω \omega ω ,将其写成矩阵形式:
∂ E ∂ ω ( l ) = [ ∂ E ∂ ω 11 ( l ) ∂ E ∂ ω 12 ( l ) ⋯ ∂ E ∂ ω 1 m ( l ) ∂ E ∂ ω 21 ( l ) ∂ E ∂ ω 22 ( l ) ⋯ ∂ E ∂ ω 2 m ( l ) ⋮ ⋮ ⋱ ⋮ ∂ E ∂ ω n 1 ( l ) ∂ E ∂ ω n 2 ( l ) ⋯ ∂ E ∂ ω n m ( l ) ] = [ δ p 1 ( l ) c 1 ( l ) δ p 1 ( l ) c 2 ( l ) ⋯ δ p 1 ( l ) c m ( l ) δ p 2 ( l ) c 1 ( l ) δ p 2 ( l ) c 2 ( l ) ⋯ δ p 2 ( l ) c m ( l ) ⋮ ⋮ ⋱ ⋮ δ p n ( l ) c 1 ( l ) δ p n ( l ) c 2 ( l ) ⋯ δ p n ( l ) c m ( l ) ] = δ ( l ) ( c ( l ) ) T \begin{aligned}\frac{\partial E}{\partial \boldsymbol{\omega}^{(l)}} &= \begin{bmatrix}\frac{\partial E}{\partial \omega_{11}^{(l)}} & \frac{\partial E}{\partial \omega_{12}^{(l)}} & \cdots & \frac{\partial E}{\partial \omega_{1m}^{(l)}} \\\frac{\partial E}{\partial \omega_{21}^{(l)}} & \frac{\partial E}{\partial \omega_{22}^{(l)}} & \cdots & \frac{\partial E}{\partial \omega_{2m}^{(l)}} \\\vdots & \vdots & \ddots & \vdots \\\frac{\partial E}{\partial \omega_{n1}^{(l)}} & \frac{\partial E}{\partial \omega_{n2}^{(l)}} & \cdots & \frac{\partial E}{\partial \omega_{nm}^{(l)}}\end{bmatrix}\\&=\begin{bmatrix}\delta_{p_1}^{(l)} c_1^{(l)} & \delta_{p_1}^{(l)} c_2^{(l)} & \cdots & \delta_{p_1}^{(l)} c_m^{(l)} \\\delta_{p_2}^{(l)} c_1^{(l)} & \delta_{p_2}^{(l)} c_2^{(l)} & \cdots & \delta_{p_2}^{(l)} c_m^{(l)} \\\vdots & \vdots & \ddots & \vdots \\\delta_{p_n}^{(l)} c_1^{(l)} & \delta_{p_n}^{(l)} c_2^{(l)} & \cdots & \delta_{p_n}^{(l)} c_m^{(l)}\end{bmatrix}\\&= \delta^{(l)} \left( \mathbf{c}^{(l)} \right)^T\end{aligned}
∂ ω ( l ) ∂ E = ∂ ω 11 ( l ) ∂ E ∂ ω 21 ( l ) ∂ E ⋮ ∂ ω n 1 ( l ) ∂ E ∂ ω 12 ( l ) ∂ E ∂ ω 22 ( l ) ∂ E ⋮ ∂ ω n 2 ( l ) ∂ E ⋯ ⋯ ⋱ ⋯ ∂ ω 1 m ( l ) ∂ E ∂ ω 2 m ( l ) ∂ E ⋮ ∂ ω nm ( l ) ∂ E = δ p 1 ( l ) c 1 ( l ) δ p 2 ( l ) c 1 ( l ) ⋮ δ p n ( l ) c 1 ( l ) δ p 1 ( l ) c 2 ( l ) δ p 2 ( l ) c 2 ( l ) ⋮ δ p n ( l ) c 2 ( l ) ⋯ ⋯ ⋱ ⋯ δ p 1 ( l ) c m ( l ) δ p 2 ( l ) c m ( l ) ⋮ δ p n ( l ) c m ( l ) = δ ( l ) ( c ( l ) ) T
上式就是第l l l 层权重项的梯度计算公式。由于权重W W W 在所用层共享 ,因此,递归神经网络的最终权重梯度是各个层权重梯度之和,即:
∂ E ∂ W = ∑ i ∂ E ∂ W ( l ) \frac{\partial E}{\partial W}=\sum_i\frac{\partial E}{\partial W^{(l)}}
∂ W ∂ E = i ∑ ∂ W ( l ) ∂ E
下面求偏置项b b b 的梯度计算公式。先计算误差函数对第l l l 层偏置项b ( l ) b^{(l)} b ( l ) 的梯度:
∂ E ∂ b j ( l ) = ∂ E ∂ net p j ( l ) ⋅ ∂ net p j ( l ) ∂ b j ( l ) = δ p j ( l ) \frac{\partial E}{\partial b_j^{(l)}} = \frac{\partial E}{\partial \text{net}_{p_j}^{(l)}} \cdot \frac{\partial \text{net}_{p_j}^{(l)}}{\partial b_j^{(l)}} = \delta_{p_j}^{(l)}
∂ b j ( l ) ∂ E = ∂ net p j ( l ) ∂ E ⋅ ∂ b j ( l ) ∂ net p j ( l ) = δ p j ( l )
将其扩展为矩阵的形式:
∂ E ∂ b ( l ) = [ ∂ E ∂ b 1 ( l ) ∂ E ∂ b 2 ( l ) ⋮ ∂ E ∂ b n ( l ) ] = [ δ p 1 ( l ) δ p 2 ( l ) ⋮ δ p n ( l ) ] = δ p ( l ) \frac{\partial E}{\partial \mathbf{b}^{(l)}} =\begin{bmatrix}\frac{\partial E}{\partial b_1^{(l)}} \\\frac{\partial E}{\partial b_2^{(l)}} \\\vdots \\\frac{\partial E}{\partial b_n^{(l)}}\end{bmatrix}=\begin{bmatrix}\delta_{p_1}^{(l)} \\\delta_{p_2}^{(l)} \\\vdots \\\delta_{p_n}^{(l)}\end{bmatrix}= \delta_p^{(l)}
∂ b ( l ) ∂ E = ∂ b 1 ( l ) ∂ E ∂ b 2 ( l ) ∂ E ⋮ ∂ b n ( l ) ∂ E = δ p 1 ( l ) δ p 2 ( l ) ⋮ δ p n ( l ) = δ p ( l )
最终的偏置项梯度是各个层偏置项梯度之和,即:
∂ E ∂ b = ∑ l ∂ E ∂ b ( l ) \frac{\partial E}{\partial \mathbf{b}} = \sum_l \frac{\partial E}{\partial \mathbf{b}^{(l)}}
∂ b ∂ E = l ∑ ∂ b ( l ) ∂ E
权重更新
如果使用梯度下降优化算法,则权重更新公式为:
W ← W + η ∂ E ∂ W W\leftarrow W+\eta\frac{\partial E}{\partial W}
W ← W + η ∂ W ∂ E
同理,偏置项的更新公式为:
b ← b + η ∂ E ∂ b b\leftarrow b+\eta\frac{\partial E}{\partial b}
b ← b + η ∂ b ∂ E
以上。