引言

上一节介绍了 Softmax \text{Softmax} Softmax回归的反向传播过程。本节将介绍递归神经网络的反向传播过程。

回顾:递归神经网络的前馈计算过程

场景构建

已知某特定时刻的递归神经网络神经元表示如下:
深度学习笔记之递归网络(五)递归神经网络的反向传播过程-LMLPHP
其中:

  • x t x_t xt表示数据在 t t t时刻的输入,其维度格式为 。其中 n x n_x nx表示当前时刻输入向量的维数 m m m表示样本数量; 1 1 1则表示当前所在时刻 t t t

    • 输入向量可能是‘词向量’,或者是其他描述序列单位的向量。而 n x n_x nx描述该向量的大小。
    • m m m可表示为当前 Batch \text{Batch} Batch内的样本数量。
    • 对应完整序列数据 X \mathcal X X可表示为如下形式。其中 T \mathcal T T表示输入时刻的具体数量。
      X = ( x 1 , x 2 , ⋯   , x t , x t + 1 , ⋯   , x T ) T ∈ R n x × m × T \mathcal X = (x_1,x_2,\cdots,x_t,x_{t+1},\cdots,x_{\mathcal T})^T \in \mathbb R^{n_x \times m \times \mathcal T} X=(x1,x2,,xt,xt+1,,xT)TRnx×m×T
  • h t h_t ht表示 t t t时刻的序列信息,也是要传递到 t + 1 t+1 t+1时刻的值;它的维度格式表示为:
    这里 n h n_h nh表示隐藏状态的维数大小;它由参数 W H ⇒ H , W H ⇒ X \mathcal W_{\mathcal H \Rightarrow \mathcal H},\mathcal W_{\mathcal H \Rightarrow \mathcal X} WHH,WHX决定;同理。
    h t ∈ R n h × m × 1 h_t \in \mathbb R^{n_h \times m \times 1} htRnh×m×1
    对应的隐藏层矩阵 H ∈ R n h × m × T \mathcal H \in \mathbb R^{n_h \times m \times \mathcal T} HRnh×m×T。因为每一进入一个输入,都会得到一个相应更长的序列信息。因此 X , H \mathcal X,\mathcal H X,H共用同一个 T \mathcal T T

  • O t + 1 \mathcal O_{t+1} Ot+1表示数据传入后计算产生的预测值,它的维度格式表示为:
    其中 n O n_{\mathcal O} nO表示预测输出结果的长度。
    O t + 1 ∈ R n O × m × 1 \mathcal O_{t+1} \in \mathbb R^{n_{\mathcal O} \times m \times \mathcal 1} Ot+1RnO×m×1
    同理,对应的输出矩阵 O ∈ R n O × m × T O \mathcal O \in \mathbb R^{n_{\mathcal O} \times m \times \mathcal T_{\mathcal O}} ORnO×m×TO,这里的 T O \mathcal T_{\mathcal O} TO表示输出时刻的数量。需要注意的是, T O \mathcal T_{\mathcal O} TO T \mathcal T T是两个概念。输出的序列长度和输入长度无关,它与权重参数 W H ⇒ O \mathcal W_{\mathcal H \Rightarrow \mathcal O} WHO相关。

前馈计算描述

为了方便描述,将上述过程中的序列下标表示为序列上标
x t , h t , h t + 1 , O t + 1 ⇒ x ( t ) , h ( t ) , h ( t + 1 ) , O ( t + 1 ) x_t,h_t,h_{t+1},\mathcal O_{t+1} \Rightarrow x^{(t)},h^{(t)},h^{(t+1)},\mathcal O^{(t+1)} xt,ht,ht+1,Ot+1x(t),h(t),h(t+1),O(t+1)

关于第 t t t时刻神经元前馈计算过程表示如下:
需要注意的是,这里的 h ( t + 1 ) , O ( t + 1 ) h^{(t+1)},\mathcal O^{(t+1)} h(t+1),O(t+1)表示对下一时刻信息的预测,而这个预测过程是在 t t t时刻完成的。

  • 序列信息 h ( t + 1 ) h^{(t+1)} h(t+1)的计算过程:
    { Z 1 ( t ) = W h ( t ) ⇒ h ( t + 1 ) ⋅ h ( t ) + W x ( t ) ⇒ h ( t + 1 ) ⋅ x ( t ) + b h ( t + 1 ) h ( t + 1 ) = Tanh ( Z 1 ( t ) ) \begin{cases} \mathcal Z_1^{(t)} = \mathcal W_{h^{(t)} \Rightarrow h^{(t+1)}}\cdot h^{(t)} + \mathcal W_{x^{(t)} \Rightarrow h^{(t+1)}} \cdot x^{(t)} + b_{h^{(t+1)}} \\ \quad \\ h^{(t+1)} = \text{Tanh}(\mathcal Z_1^{(t)}) \end{cases} Z1(t)=Wh(t)h(t+1)h(t)+Wx(t)h(t+1)x(t)+bh(t+1)h(t+1)=Tanh(Z1(t))
  • 预测值 O ( t + 1 ) \mathcal O^{(t+1)} O(t+1)的计算过程:
    关于后验概率 P m o d e l [ O ( t + 1 ) ∣ x ( t ) , h ( t + 1 ) ] \mathcal P_{model}[\mathcal O^{(t+1)} \mid x^{(t)},h^{(t+1)}] Pmodel[O(t+1)x(t),h(t+1)]本质上是一个分类任务——从该分布中选择概率最高的结果作为 x ( t + 1 ) x^{(t+1)} x(t+1)的结果,这里使用 Softmax \text{Softmax} Softmax函数对各结果对应的概率分布信息进行评估。
    { Z 2 ( t + 1 ) = W h ( t + 1 ) ⇒ O ( t + 1 ) ⋅ h ( t + 1 ) + b O ( t + 1 ) O ( t + 1 ) = Softmax ( Z 2 ( t + 1 ) ) = exp ⁡ { Z 2 ( t + 1 ) } ∑ i = 1 n O exp ⁡ { Z 2 ; i ( t + 1 ) } \begin{cases} \mathcal Z_2^{(t+1)} = \mathcal W_{h^{(t+1)} \Rightarrow \mathcal O^{(t+1)}} \cdot h^{(t+1)} + b_{\mathcal O^{(t+1)}} \\ \quad \\ \begin{aligned} \mathcal O^{(t+1)} & = \text{Softmax}(\mathcal Z_2^{(t+1)}) \\ & = \frac{\exp \left\{\mathcal Z_2^{(t+1)}\right\}}{\sum_{i=1}^{n_{\mathcal O}}\exp \left\{\mathcal Z_{2;i}^{(t+1)}\right\}} \\ \end{aligned} \end{cases} Z2(t+1)=Wh(t+1)O(t+1)h(t+1)+bO(t+1)O(t+1)=Softmax(Z2(t+1))=i=1nOexp{Z2;i(t+1)}exp{Z2(t+1)}

其中,公式中出现的各参数维度格式表示如下:
Z 1 : { W h ( t ) ⇒ h ( t + 1 ) ∈ R 1 × n h ⇒ W H ⇒ H ∈ R n h × n h W x ( t ) ⇒ h ( t + 1 ) ∈ R 1 × n x ⇒ W X ⇒ H ∈ R n h × n x b h ( t + 1 ) ∈ R 1 × 1 ⇒ b H ∈ R n h × 1 Z 2 : { W h ( t + 1 ) ⇒ O ( t + 1 ) ∈ R ⇒ W H ⇒ O ∈ R n O × n h b O ( t + 1 ) ∈ R 1 × 1 ⇒ b O ∈ R n O × 1 \begin{aligned} & \mathcal Z_1:\begin{cases} \mathcal W_{h^{(t)} \Rightarrow h^{(t+1)}} \in \mathbb R^{1 \times n_h} \Rightarrow \mathcal W_{\mathcal H \Rightarrow \mathcal H} \in \mathbb R^{n_h \times n_h} \\ \mathcal W_{x^{(t)} \Rightarrow h^{(t+1)}} \in \mathbb R^{1 \times n_x} \Rightarrow \mathcal W_{\mathcal X \Rightarrow \mathcal H} \in \mathbb R^{n_h \times n_x} \\ b_{\mathcal h^{(t+1)}} \in \mathbb R^{1 \times 1} \Rightarrow b_{\mathcal H} \in \mathbb R^{n_h \times 1} \end{cases} \\ & \mathcal Z_2:\begin{cases} \mathcal W_{h^{(t+1)} \Rightarrow \mathcal O^{(t+1)}} \in \mathbb R^{} \Rightarrow \mathcal W_{\mathcal H \Rightarrow \mathcal O} \in \mathbb R^{n_{\mathcal O} \times n_h} \\ b_{\mathcal O^{(t+1)}} \in \mathbb R^{1 \times 1} \Rightarrow b_{\mathcal O} \in \mathbb R^{n_{\mathcal O} \times 1} \end{cases} \end{aligned} Z1: Wh(t)h(t+1)R1×nhWHHRnh×nhWx(t)h(t+1)R1×nxWXHRnh×nxbh(t+1)R1×1bHRnh×1Z2:{Wh(t+1)O(t+1)RWHORnO×nhbO(t+1)R1×1bORnO×1

反向传播过程各参数的梯度计算

各时刻损失函数梯度计算

假设损失函数 J \mathcal J J是描述真实目标 [ y ] n O × m × T O [y]_{n_{\mathcal O} \times m \times \mathcal T_{\mathcal O}} [y]nO×m×TO预测结果 O n O × m × T O \mathcal O_{n_{\mathcal O} \times m \times \mathcal T_{\mathcal O}} OnO×m×TO之间的交叉熵 ( CrossEntropy ) (\text{CrossEntropy}) (CrossEntropy)累积结果。具体表示如下:
J = ∑ t = 1 T O L ( t ) L ( t ) = − ∑ i = 1 n O y i ( t ) log ⁡ O i ( t ) \begin{aligned} \mathcal J & = \sum_{t = 1}^{\mathcal T_{\mathcal O}} \mathcal L^{(t)} \\ \mathcal L^{(t)} & = -\sum_{i=1}^{n_{\mathcal O}} y_i^{(t)} \log \mathcal O_i^{(t)} \end{aligned} JL(t)=t=1TOL(t)=i=1nOyi(t)logOi(t)
首先计算 J \mathcal J J L ( t ) \mathcal L^{(t)} L(t)梯度结果 ∂ J ∂ L ( t ) \begin{aligned} \frac{\partial \mathcal J}{\partial \mathcal L^{(t)}}\end{aligned} L(t)J
牛顿-莱布尼兹公式。
∂ J ∂ L ( t ) = ∑ k = 1 T O ∂ L ( k ) ∂ L ( t ) = 0 + 0 + ⋯ + 0 ⏟ k ≠ t + 1 ⏟ k = t = 1 \begin{aligned} \frac{\partial \mathcal J}{\partial \mathcal L^{(t)}} & = \sum_{k=1}^{\mathcal T_{\mathcal O}} \frac{\partial \mathcal L^{(k)}}{\partial \mathcal L^{(t)}} \\ & = \underbrace{0 + 0 + \cdots + 0}_{k \neq t} + \underbrace{1}_{k=t} \\ & = 1 \end{aligned} L(t)J=k=1TOL(t)L(k)=k=t 0+0++0+k=t 1=1

损失函数对各时刻神经元输出的梯度计算

其次,计算 L ( t ) \mathcal L^{(t)} L(t) O ( t ) \mathcal O^{(t)} O(t)梯度结果 ∂ L ( t ) ∂ O ( t ) \begin{aligned}\frac{\partial \mathcal L^{(t)}}{\partial \mathcal O^{(t)}}\end{aligned} O(t)L(t)
这仅仅是交叉熵的梯度结果。这里需要使用‘标量对向量求导’。
∂ L ( t ) ∂ O ( t ) = ∂ ∂ O ( t ) [ − ∑ i = 1 n O y i ( t ) log ⁡ O i ( t ) ] = { ∂ ∂ O 1 ( t ) [ − ( y 1 ( t ) log ⁡ O 1 ( t ) ⏟ O 1 ( t ) 相关 + ⋯ + y n O ( t ) log ⁡ O n O ( t ) ⏟ O 1 ( t ) 无关 ) ] , ⋯   , ∂ ∂ O n O ( t ) [ − ( y 1 ( t ) log ⁡ O 1 ( t ) + ⋯ ⏟ O n O ( t ) 无关 + y n O ( t ) log ⁡ O n O ( t ) ⏟ O n O ( t ) 相关 ) ] } = [ ∂ ∂ O 1 ( t ) ( − y 1 ( t ) log ⁡ O 1 ( t ) ) , ⋯   , ∂ ∂ O n O ( t ) ( − y n O ( t ) log ⁡ O n O ( t ) ) ] = [ − y 1 ( t ) O 1 ( t ) , ⋯   , − y n O ( t ) O n O ( t ) ] 1 × n O \begin{aligned} \frac{\partial \mathcal L^{(t)}}{\partial \mathcal O^{(t)}} & = \frac{\partial}{\partial \mathcal O^{(t)}} \left[- \sum_{i=1}^{n_{\mathcal O}} y_i^{(t)} \log \mathcal O_i^{(t)}\right] \\ & = \left\{\frac{\partial}{\partial \mathcal O_1^{(t)}} \left[-(\underbrace{y_1^{(t)} \log \mathcal O_1^{(t)}}_{\mathcal O_1^{(t)}相关} + \underbrace{\cdots + y_{n_{\mathcal O}}^{(t)} \log \mathcal O_{n_{\mathcal O}}^{(t)}}_{\mathcal O_1^{(t)}无关})\right] ,\cdots, \frac{\partial}{\partial \mathcal O_{n_{\mathcal O}}^{(t)}} \left[-(\underbrace{y_1^{(t)} \log \mathcal O_1^{(t)} + \cdots}_{\mathcal O_{n_{\mathcal O}}^{(t)}无关} + \underbrace{y_{n_{\mathcal O}}^{(t)} \log \mathcal O_{n_{\mathcal O}}^{(t)}}_{\mathcal O_{n_{\mathcal O}}^{(t)}相关})\right] \right\} \\ & = \left[\frac{\partial}{\partial \mathcal O_1^{(t)}}(-y_1^{(t)} \log \mathcal O_1^{(t)}),\cdots,\frac{\partial}{\partial \mathcal O_{n_{\mathcal O}}^{(t)}}(-y_{n_{\mathcal O}}^{(t)} \log \mathcal O_{n_{\mathcal O}}^{(t)})\right] \\ & = \left[-\frac{y_1^{(t)}}{\mathcal O_1^{(t)}},\cdots,-\frac{y_{n_{\mathcal O}}^{(t)}}{\mathcal O_{n_{\mathcal O}}^{(t)}}\right]_{1 \times n_{\mathcal O}} \end{aligned} O(t)L(t)=O(t)[i=1nOyi(t)logOi(t)]= O1(t) (O1(t)相关 y1(t)logO1(t)+O1(t)无关 +ynO(t)logOnO(t)) ,,OnO(t) (OnO(t)无关 y1(t)logO1(t)++OnO(t)相关 ynO(t)logOnO(t)) =[O1(t)(y1(t)logO1(t)),,OnO(t)(ynO(t)logOnO(t))]=[O1(t)y1(t),,OnO(t)ynO(t)]1×nO

Softmax \text{Softmax} Softmax回归的梯度计算

计算 O ( t ) \mathcal O^{(t)} O(t) Z 2 ( t ) \mathcal Z_2^{(t)} Z2(t)梯度结果 ∂ O ( t ) ∂ Z 2 ( t ) \begin{aligned}\frac{\partial \mathcal O^{(t)}}{\partial \mathcal Z_2^{(t)}}\end{aligned} Z2(t)O(t)
这里用到了 Softmax \text{Softmax} Softmax回归的反向传播过程。详见Softmax函数的反向传播过程
其中 Z 2 ( t ) = ( Z 2 ; 1 ( t ) , Z 2 ; 2 ( t ) , ⋯   , Z 2 ; n O ( t ) ) 1 × n O \mathcal Z_2^{(t)} = (\mathcal Z_{2;1}^{(t)},\mathcal Z_{2;2}^{(t)},\cdots,\mathcal Z_{2;n_{\mathcal O}}^{(t)})_{1 \times n_{\mathcal O}} Z2(t)=(Z2;1(t),Z2;2(t),,Z2;nO(t))1×nO
∂ O ( t ) ∂ Z 2 ( t ) = [ ∂ O i ( t ) ∂ Z 2 ; j ( t ) ] n O × n O i , j ∈ { 1 , 2 , ⋯   , n O } \frac{\partial \mathcal O^{(t)}}{\partial \mathcal Z_2^{(t)}} = \left[\frac{\partial \mathcal O_i^{(t)}}{\partial \mathcal Z_{2;j}^{(t)}}\right]_{n_{\mathcal O} \times n_{\mathcal O}} \quad i,j \in \{1,2,\cdots,n_{\mathcal O}\} Z2(t)O(t)=[Z2;j(t)Oi(t)]nO×nOi,j{1,2,,nO}
对应地, ∂ L ∂ Z 2 ( t ) = ∂ L ∂ L ( t ) ⋅ ∂ L ( t ) ∂ O ( t ) ⋅ ∂ O ( t ) ∂ Z 2 ( t ) \begin{aligned}\frac{\partial \mathcal L}{\partial \mathcal Z_2^{(t)}} = \frac{\partial \mathcal L}{\partial \mathcal L^{(t)}} \cdot \frac{\partial \mathcal L^{(t)}}{\partial \mathcal O^{(t)}} \cdot \frac{\partial \mathcal O^{(t)}}{\partial \mathcal Z_2^{(t)}} \end{aligned} Z2(t)L=L(t)LO(t)L(t)Z2(t)O(t)可表示为:
并且将 ∂ O i ( t ) ∂ Z 2 ; j ( t ) ( i , j = 1 , 2 , ⋯   , n O ) = { O i ( t ) ⋅ ( 1 − O j ( t ) ) i = j − O i ( t ) ⋅ O j ( t ) i ≠ j \begin{aligned}\frac{\partial \mathcal O_i^{(t)}}{\partial \mathcal Z_{2;j}^{(t)}}(i,j=1,2,\cdots,n_{\mathcal O}) = \begin{cases} \mathcal O_i^{(t)} \cdot (1 - \mathcal O_j^{(t)}) \quad i=j \\ -\mathcal O_i^{(t)} \cdot \mathcal O_j^{(t)} \quad i \neq j \end{cases}\end{aligned} Z2;j(t)Oi(t)(i,j=1,2,,nO)={Oi(t)(1Oj(t))i=jOi(t)Oj(t)i=j代入到式子中。
∂ L ∂ Z 2 ( t ) = 1 × [ − y 1 ( t ) O 1 ( t ) , ⋯   , − y n O ( t ) O n O ( t ) ] 1 × n O ⋅ [ ∂ O i ( t ) ∂ Z 2 ; j ( t ) ] n O × n O = [ − ∑ i = 1 n O y i ( t ) O i ( t )   ⋅ ∂ O i ( t ) ∂ Z 2 ; j ( t ) ] 1 × n O j = 1 , 2 , ⋯   , n O \begin{aligned} \frac{\partial \mathcal L}{\partial \mathcal Z_2^{(t)}} & = 1 \times \left[-\frac{y_1^{(t)}}{\mathcal O_1^{(t)}},\cdots,-\frac{y_{n_{\mathcal O}}^{(t)}}{\mathcal O_{n_{\mathcal O}}^{(t)}}\right]_{1 \times n_{\mathcal O}} \cdot \left[\frac{\partial \mathcal O_i^{(t)}}{\partial \mathcal Z_{2;j}^{(t)}}\right]_{n_{\mathcal O} \times n_{\mathcal O}} \\ & = \left[-\sum_{i=1}^{n_{\mathcal O}} \frac{y_i^{(t)}}{\mathcal O_i^{(t)}}\ \cdot \frac{\partial \mathcal O_i^{(t)}}{\partial \mathcal Z_{2;j}^{(t)}}\right]_{1 \times n_{\mathcal O}} \quad j = 1,2,\cdots,n_{\mathcal O} \end{aligned} Z2(t)L=1×[O1(t)y1(t),,OnO(t)ynO(t)]1×nO[Z2;j(t)Oi(t)]nO×nO=[i=1nOOi(t)yi(t) Z2;j(t)Oi(t)]1×nOj=1,2,,nO
可以看出,该结果是一个 1 × n O 1 \times n_{\mathcal O} 1×nO的向量。以其中第一项为例:
j = 1 ⇒ − ∑ i = 1 n O y i ( t ) O i ( t ) ⋅ ∂ O i ( t ) ∂ Z 2 ; 1 ( t ) = O 1 ( t ) − y 1 ( t ) \begin{aligned} j = 1 & \Rightarrow -\sum_{i=1}^{n_{\mathcal O}} \frac{y_i^{(t)}}{\mathcal O_i^{(t)}} \cdot \frac{\partial \mathcal O_i^{(t)}}{\partial \mathcal Z_{2;1}^{(t)}} \\ & = \mathcal O_1^{(t)} - y_1^{(t)} \end{aligned} j=1i=1nOOi(t)yi(t)Z2;1(t)Oi(t)=O1(t)y1(t)
同理,其他项同第一项操作,最终得到 ∂ L ∂ Z 2 ( t ) \begin{aligned}\frac{\partial \mathcal L}{\partial \mathcal Z_2^{(t)}}\end{aligned} Z2(t)L为:
很简练的一个结果,基于交叉熵与 Softmax \text{Softmax} Softmax的反向传播梯度结果。
∂ L ∂ Z 2 ( t ) = [ O j ( t ) − y j ( t ) ] 1 × n O j = 1 , 2 , ⋯   , n O = O ( t ) − y ( t ) \begin{aligned} \frac{\partial \mathcal L}{\partial \mathcal Z_2^{(t)}} & = \left[\mathcal O_j^{(t)} - y_j^{(t)}\right]_{1 \times n_{\mathcal O}} \quad j=1,2,\cdots,n_{\mathcal O}\\ & = \mathcal O^{(t)} - y^{(t)} \end{aligned} Z2(t)L=[Oj(t)yj(t)]1×nOj=1,2,,nO=O(t)y(t)
但由于 [ y ( t ) ] n O × m × 1 [y^{(t)}]_{n_{\mathcal O} \times m \times 1} [y(t)]nO×m×1 t t t时刻的真实分布,因此它有如下性质:
y ( t ) y^{(t)} y(t)内仅有一个值为 1 1 1其余值均为 0 0 0,这是真实样本给出的分布。
∑ j = 1 n O y j ( t ) = 1 ; y j ( t ) ∈ { 0 , 1 } \sum_{j=1}^{n_{\mathcal O}} y_j^{(t)} = 1;y_j^{(t)} \in \{0,1\} j=1nOyj(t)=1;yj(t){0,1}
因此,描述每个分量 ( ∇ Z 2 ( t ) L ) j = [ ∂ L ∂ Z 2 ; j ( t ) ] ( j = 1 , 2 , ⋯   , n O ) \begin{aligned} \left(\nabla_{\mathcal Z_2^{(t)}}\mathcal L \right)_j = \left[\frac{\partial \mathcal L}{\partial \mathcal Z_{2;j}^{(t)}}\right](j=1,2,\cdots,n_{\mathcal O})\end{aligned} (Z2(t)L)j=[Z2;j(t)L](j=1,2,,nO)可表示为如下形式:
其中 1 j , y ( t ) 1_{j,y^{(t)}} 1j,y(t)表示向量 y ( t ) y^{(t)} y(t)中第 j j j个分量 y j ( t ) ∈ { 0 , 1 } y_j^{(t)}\in \{0,1\} yj(t){0,1}的具体结果。
该式子对应《机器学习》(花书) P234 10.2.2 公式10.18。
( ∇ Z 2 ( t ) L ) j = O j ( t ) − 1 j , y ( t ) (\nabla_{\mathcal Z_2^{(t)}}\mathcal L)_j = \mathcal O_j^{(t)} - 1_{j,y^{(t)}} (Z2(t)L)j=Oj(t)1j,y(t)

关于 h ( t ) h^{(t)} h(t)的综合反向传播梯度

继续反向传播,计算梯度 ∂ L ∂ h ( t ) \begin{aligned} \frac{\partial \mathcal L}{\partial h^{(t)}}\end{aligned} h(t)L
后续的线性计算结果不展开写了。
∂ L ∂ h ( t ) = ∂ L ∂ Z 2 ( t ) ⋅ ∂ Z 2 ( t ) ∂ h ( t ) = [ W h ( t ) ⇒ O ( t ) ] T ⋅ ∇ Z 2 ( t ) L \begin{aligned} \frac{\partial \mathcal L}{\partial h^{(t)}} & = \frac{\partial \mathcal L}{\partial \mathcal Z_2^{(t)}} \cdot \frac{\partial \mathcal Z_2^{(t)}}{\partial h^{(t)}} \\ & = \left[\mathcal W_{h^{(t)} \Rightarrow \mathcal O^{(t)}}\right]^T \cdot \nabla_{\mathcal Z_2^{(t)}}\mathcal L \end{aligned} h(t)L=Z2(t)Lh(t)Z2(t)=[Wh(t)O(t)]TZ2(t)L
实际上,关于 h ( t ) h^{(t)} h(t)梯度一共包含两个部分:一个是从 O ( t ) \mathcal O^{(t)} O(t)传播过来的梯度结果;另一个是从 h ( t + 1 ) h^{(t+1)} h(t+1)方向传播过来的梯度结果
上图并没有描述出来,这里进行补充。
上面的梯度结果是从 O ( t ) \mathcal O^{(t)} O(t)传播下来的梯度。
深度学习笔记之递归网络(五)递归神经网络的反向传播过程-LMLPHP
关于 h ( t + 1 ) h^{(t+1)} h(t+1) h ( t ) h^{(t)} h(t)传播的梯度表示为:
其中 ∇ h ( t + 1 ) L \nabla_{h^{(t+1)}}\mathcal L h(t+1)L就是 ∂ L ∂ h ( t + 1 ) \begin{aligned}\frac{\partial \mathcal L}{\partial h^{(t+1)}}\end{aligned} h(t+1)L,它和 ∂ L ∂ h ( t ) \begin{aligned}\frac{\partial \mathcal L}{\partial h^{(t)}}\end{aligned} h(t)L的情况完全相同,只是下标不同而已。为书写方便,后面不再展开。
( ∂ h ( t + 1 ) ∂ h ( t ) ) T ⋅ ∇ h ( t + 1 ) L ( ∇ h ( t + 1 ) L = [ W h ( t + 1 ) ⇒ O ( t + 1 ) ] T ⋅ ∇ Z 2 ( t + 1 ) L ) \left(\frac{\partial h^{(t+1)}}{\partial h^{(t)}}\right)^T \cdot \nabla_{h^{(t+1)}} \mathcal L \quad \left(\nabla_{h^{(t+1)}} \mathcal L = \left[\mathcal W_{h^{(t+1)} \Rightarrow \mathcal O^{(t+1)}}\right]^T \cdot \nabla_{\mathcal Z_2^{(t+1)}}\mathcal L \right) (h(t)h(t+1))Th(t+1)L(h(t+1)L=[Wh(t+1)O(t+1)]TZ2(t+1)L)

其中, ∂ h ( t + 1 ) ∂ h ( t ) \begin{aligned}\frac{\partial h^{(t+1)}}{\partial h^{(t)}}\end{aligned} h(t)h(t+1)中包含 W h ( t ) ⇒ h ( t + 1 ) \mathcal W_{h^{(t)} \Rightarrow h^{(t+1)}} Wh(t)h(t+1)梯度以及 Tanh \text{Tanh} Tanh激活函数的梯度
其中 Diag [ 1 − Tanh ( Z 1 ( t ) ) 2 ] \text{Diag}[1 - \text{Tanh}(\mathcal Z_1^{(t)})^2] Diag[1Tanh(Z1(t))2]数值稳定性一节中介绍过与其相似的 ReLU \text{ReLU} ReLU激活函数的表达形式。它实际上是关于 Tanh \text{Tanh} Tanh梯度的雅可比矩阵。除去对角线元素外,其余位置元素均为 0 0 0
∂ h ( t + 1 ) ∂ h ( t ) = ∂ h ( t + 1 ) ∂ Z 1 ( t ) ⋅ ∂ Z 1 ( t ) ∂ h ( t ) = Diag [ 1 − Tanh ( Z 1 ( t ) ) 2 ] ⋅ W h ( t ) ⇒ h ( t + 1 ) \begin{aligned} \frac{\partial h^{(t+1)}}{\partial h^{(t)}} & = \frac{\partial h^{(t+1)}}{\partial \mathcal Z_1^{(t)}} \cdot \frac{\partial \mathcal Z_1^{(t)}}{\partial h^{(t)}} \\ & = \text{Diag}[1 - \text{Tanh}(\mathcal Z_1^{(t)})^2] \cdot \mathcal W_{h^{(t)} \Rightarrow h^{(t+1)}} \end{aligned} h(t)h(t+1)=Z1(t)h(t+1)h(t)Z1(t)=Diag[1Tanh(Z1(t))2]Wh(t)h(t+1)
因此,从 h ( t + 1 ) h^{(t+1)} h(t+1)方向传播过来的梯度可表示为:
[ W h ( t ) ⇒ h ( t + 1 ) ] T ⋅ ( ∇ h ( t + 1 ) L ) ⋅ Diag [ 1 − Tanh ( Z 1 ( t ) ) 2 ] [\mathcal W_{h^{(t)} \Rightarrow h^{(t+1)}}]^T\cdot (\nabla_{h^{(t+1)}} \mathcal L) \cdot \text{Diag}[1 - \text{Tanh}(\mathcal Z_1^{(t)})^2] [Wh(t)h(t+1)]T(h(t+1)L)Diag[1Tanh(Z1(t))2]
最终,将两个角度的梯度结果相加,得到最终 h ( t ) h^{(t)} h(t)梯度结果:
对应《机器学习》(花书) P234 10.2.2 公式10.21。
∂ L ∂ h ( t ) = ∂ L ( t ) ∂ h ( t ) + ∂ L ( t + 1 ) ∂ h ( t + 1 ) ⋅ ∂ h ( t + 1 ) ∂ h ( t ) = [ W h ( t ) ⇒ O ( t ) ] T ⋅ ∇ Z 2 ( t ) L + [ W h ( t ) ⇒ h ( t + 1 ) ] T ⋅ ( ∇ h ( t + 1 ) L ) ⋅ Diag [ 1 − Tanh ( Z 1 ( t ) ) 2 ] \begin{aligned}\frac{\partial \mathcal L}{\partial h^{(t)}} & = \frac{\partial \mathcal L^{(t)}}{\partial h^{(t)}} + \frac{\partial \mathcal L^{(t+1)}}{\partial h^{(t+1)}} \cdot \frac{\partial h^{(t+1)}}{\partial h^{(t)}} \\ & = \left[\mathcal W_{h^{(t)} \Rightarrow \mathcal O^{(t)}}\right]^T \cdot \nabla_{\mathcal Z_2^{(t)}}\mathcal L + [\mathcal W_{h^{(t)} \Rightarrow h^{(t+1)}}]^T\cdot (\nabla_{h^{(t+1)}} \mathcal L) \cdot \text{Diag}[1 - \text{Tanh}(\mathcal Z_1^{(t)})^2] \end{aligned} h(t)L=h(t)L(t)+h(t+1)L(t+1)h(t)h(t+1)=[Wh(t)O(t)]TZ2(t)L+[Wh(t)h(t+1)]T(h(t+1)L)Diag[1Tanh(Z1(t))2]

总结

  • Softmax \text{Softmax} Softmax函数与交叉熵结合,其梯度结果变得非常简洁。即输出分布与真实分布间的差值
  • 递归神经网络中,隐变量 h ( t ) ( t = 1 , 2 , ⋯   , T ) h^{(t)}(t=1,2,\cdots,\mathcal T) h(t)(t=1,2,,T)在反向传播过程中,既要获取当前时刻输出 O ( t ) \mathcal O^{(t)} O(t)的梯度,也要获取下一时刻隐变量 h ( t + 1 ) h^{(t+1)} h(t+1)的梯度。

推荐一个递归神经网络的反向传播流程,见下方链接,侵删。

相关参考:
关于 RNN 循环神经网络的反向传播求导
《深度学习》(花书) P233-235 10.2.2 计算循环神经网络的梯度

05-24 08:22