深度学习笔记之递归网络(五)递归神经网络的反向传播过程

机器学习笔记之递归网络——递归神经网络的反向传播过程

引言

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

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

场景构建

已知某特定时刻的递归神经网络神经元表示如下:
在这里插入图片描述
其中:

  • x t x_t xt表示数据在 t t t时刻的输入,其维度格式 x t ∈ R n x × m × 1 x_t \in \mathbb R^{n_x \times m \times 1} xtRnx×m×1。其中 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 + 1 ∈ R n h × m × 1 h_{t+1} \in \mathbb R^{n_h \times m \times 1} ht+1Rnh×m×1同理。
    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)传播下来的梯度。
来自不同角度的梯度结果
关于 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 计算循环神经网络的梯度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/22303.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习git

文章目录 02-为什么要学习Git软件?03 概念:版本控制04 概念:版本控制软件基础功能05 概念:集中式、分布式版本控制系统、多人协作开发5.1 文件冲突问题5.2集中式版本控制(CVS,SVN)5.3 分布式版本…

【KVM虚拟化】· virsh管理命令

目录 🍁libvirt架构概述 🍁使用virsh管理虚拟机 🍂常用命令总结 🍁kvm基本功能管理 🍂帮助命令 🍂KVM的配置文件存放目录 🍂查看虚拟机状态 🍂虚拟机关机与开机 🍂强制虚…

使用FFMPEG进行音频重采样

准备 1. ffmpeg 4.4 2. sdl2 3.一段原始的音频PCM数据 重采样流程 1.设置输入音频参数和输出音频参数 2.根据设置的参数初始化SwrContent上下文 3.创建一个输入buffer, 根据输入的音频参数(采样率,通道数,样本位深度)申请空间…

数据库sql语句-----游标和存储过程

关键词: create procedure xxx()as.......go 查询: exec ... 从例子中感悟一下: create table cartoon( linenum int, name varchar(50) not null, line varchar(100) not null )insert into cartoon values(1,灰太…

Linux文件与目录管理笔记1

鸟哥私房菜笔记 这里写目录标题 常用文件命令cd,pwd,mkdir,rmdir 执行文件的路径的变量:$PATHls,cp,rm,mv 文件内容查看指令(cat,tac,nl)可翻页查看(more,less)More(一页一页翻动)less 数据截取(head,tail)非纯文本文件:od 常用文件命令 cd…

信创办公–基于WPS的PPT最佳实践系列 (插入表格或图标)

信创办公–基于WPS的PPT最佳实践系列 (插入图表或图标) 目录 项目背景操作步骤1、插入表格2、实现放映功能 项目背景 当表格数据过大时,将其复制粘贴到PPT上时会显得插入的表格内容小、拥挤,使PPT看起来不美观。这个问题我们可以…

关于多线程

概念 进程:正在运行的程序,不仅指处于执行期的程序本身,还包括它所管理的资源,比如由它打开的窗口,地址的资源,进程状态等等 线程:CPU调度和分派的基本单位 进程好比工厂的车间,它…

[组合数学] 排列组合

文章目录 加法法则 --每一类都能够独立的完成任务乘法法则 --集合论 任务分步骤1000和9999之间有多个具有不同数位的奇数n 7 3 1 1 2 1 3 4 ^311^213^4 3112134 求除尽n的整数个数0到10000之间有多少个整数恰好是有一位数字是5两位数字可以组成多少两位互异且非零的两位数 减…

Flutter音乐播放audioplayers

简介 Flutter的audioplayers是一个Flutter插件,可以播放多个同时的音频文件,支持Android、iOS、Linux、macOS、Windows和web平台。它有以下特点: 可以从本地文件、网络资源或内存中加载音频可以控制音量、进度、速度和循环可以播放多个音频…

pg事务:隔离级别历史与SSI

事务隔离级别的历史 ANSI SQL-92定义的隔离级别和异常现象确实对数据库行业影响深远,甚至30年后的今天,绝大部分工程师对事务隔离级别的概念还停留在此,甚至很多真实的数据库隔离级别实现也停留在此。但后ANSI92时代对事物隔离有许多讨论甚至…

Everypixel: AI图片搜索引擎

【产品介绍】 Everypixel是一个基于人工智能的图片搜索引擎。可以搜索超过 50 个图片来源的优质的授权图库版权素材图片,还可以使用免费图案功能,找到适合自己需求的可定制无缝图案。 Everypixel利用深度学习和计算机视觉技术,为客户提供先进…

黑客入门指南,学习黑客必须掌握的技术

黑客一词,原指热心于计算机技术,水平高超的电脑专家,尤其是程序设计人员。是一个喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域,例如电脑编程等等。 提起黑客,总是那么神秘莫测。…

VONR排查指导分享

不能注册或呼叫到SIP服务器端30秒挂断呼叫的黄金法则咬线或摘机状态单通或无语音收到400 bad request收到413,513 Request Entity Too Large或Message Too Large消息收到408, 480或者487 消息483 - Too Many Hops488 – Not Acceptable Here语音质量和思…

iptables 防火墙(一)

目录 一:iptables概述 二:netfilter/iptables关系 三:四表五链 1.规则表和规则链的作用 2. 四表 3.五链 ​4.规则链之间的匹配顺序 (1)主机型防火墙 (2)网络型防火墙 5.规则链内的匹配…

【JVM】5. 本地方法接口和本地方法栈

文章目录 5.1. 什么是本地方法?5.2. 为什么使用Native Method?5.3. 本地方法栈 5.1. 什么是本地方法? 简单地讲,一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现…

UE Http Server 插件说明

1. Create Http Server 创建Http服务器。 Port : 监听端口,范围 1 - 65535,要保证系统唯一,不然会监听失败。 2. Bind 绑定网页路由回调。 Target :HttpServer 对象 Http Path: 绑定路径,如 ”/index“ Http Verbs…

与vCenter无法通讯时更改虚拟机的网络配置

客户的VCSA由于虚拟机的配置问题导致无法启动,需要通过重新创建VCSA的虚拟机配置的方式来恢复。但是,由于ESXi主机上的所有物理网口都已分配给了分布式网络交换机,在重建虚拟机配置时不能指定标准交换机的端口组来配置网络。而如果将虚拟机的…

【C++进阶之路】模板

前言 假如需要你写一个交换函数,交换两个相同类型的值,这时如果交换的是int 类型的值,你可能会写一个Swap函数,其中参数是两个int类型的,假如再让你写一个double类型的呢?你可能又要写一个Swap的函数重载&…

GD32F4x 加密(开启读保护功能)

参考链接1:(设置读保护) GD32F4x 如何开启读保护功能(芯片加密)?_EmbeddedOsprey的博客-CSDN博客 参考链接2:读取芯片ID进行加密 《嵌入式 – GD32开发实战指南》第19章 程序加密_gd32大小端…

训练/测试、过拟合问题

在机器学习中,我们创建模型来预测某些事件的结果,比如之前使用重量和发动机排量,预测了汽车的二氧化碳排放量 要衡量模型是否足够好,我们可以使用一种称为训练/测试的方法 训练/测试是一种测量模型准确性的方法 之所以称为训练…