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

news2024/11/25 20:40:01

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

引言

上一节介绍了 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 计算循环神经网络的梯度

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA将xml数据转为实体类

使用 JAXB(Java Architecture for XML Binding) 实现XML与Bean的相互转换 介绍 JAXB是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象…

2023年7大人工智能技术趋势你有了解过嘛

人工智能 (AI) 已经接管世界,并且将在2023年继续向前发展。在2023年,它将完全实现自动化供应链、虚拟助手等多个产品与形态。 如今,世界正在经历一波人工智能驱动的全球经济转型浪潮。 当前之态势,人工智能 (AI) 技术几乎在每个领…

如何用Python进行屏幕录制?

文章目录 引言gpt3.5给出的代码更换截图函数——ImageGrab.grab禁用imshow解决递归现象摄像头录制代码后期需求 引言 关于屏幕录制这个功能需求,之前用过基于ffmpeg的Capture录屏软件,但是fps拉高以后会变得很卡,声音也同样出现卡顿。也自己…

cpu 内核 逻辑处理器的关系

6核CPU,12个逻辑处理器 一颗内核在一个时间片内只能执行一个内核线程;当物理CPU使用了超线程技术后,在CPU的一颗内核中,利用就是利用其中空闲的执行单元,模拟出另外一个核心(并不是真正的物理运算核心&…

公司招人,面了一个5年经验不会自动化的测试人,他凭什么要18K?

在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…

【算法训练(day5)】前缀和与差分

目录 一.一维前缀 二.二维前缀和 三.一维差分 四.二维差分 一.一维前缀 1.前缀的作用 前缀用于在求一部分区间的和,比方说有一组数据a1,a2,a3,a4,我们想知道从第一个元素一直相加到最后一个元素的和或者是从第二个元素加到第三个元素,这种情况下就能…

docker部署elasticsearch:8.6.2, kibana,logstash 版本以及kibana的使用

文章目录 1、参考2、安装elasticsearch:8.6.22.1 创建网络2.2 创建无密码访问的elasticsearch服务2.3 访问验证2.4 建一个索引试试,此索引名为my-book,有六个字段2.5 用GET命令获取索引信息试试,如下,符合预期2.6 再试试批量导入一…

redis集群的架构、问题,附脑洞

本文首发自「慕课网」(www.imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号! 作者:一凡 | 慕课网讲师 Redis 是一种开源(BSD 许可&…

魔术表演-第14届蓝桥杯省赛Scratch中级组真题第1题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第136讲。 魔术表演,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组真题第1题&#xf…

【arxiv】论文找 idea : 关于 OVD 的论文扫读(四)

文章目录 一、DetCLIPv2: Scalable Open-Vocabulary Object Detection Pre-training via Word-Region Alignment二、Prompt-Guided Transformers for End-to-End Open-Vocabulary Object Detection三、Bridging the Gap between Object and Image-level Representations for Op…

2023年京东618预售数据免费开放(往年618热门品类数据回顾)

2023年618京东平台整体的活动节奏分为五个时期: 第一时期为预售期:2023年5月23日晚8点-5月31日 第二时期为开门红:5月31日20点-6月3日 第三时期为场景期:6月4日-6月15日 第四时期为高潮期:6月15日20点-6月18日 第五…

前端HTML之基础扫盲

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 本篇文章将讲解HTML的基础,认识HTML的基本结构,学会使用常用的HTML标签,愿诸位喜欢 目录 文章目录 一、创建第一个HTML程序 二、HTML基本标签介绍 2.1 HT…

AAAI2024 The Thirty-Eighth Conference on Artificial Intelligence

Past Conferences For information about past AAAI Conferences, please consult the following pages. https://aaai.org/conference/aaai/ Future Conferences https://aaai.org/aaai-conference/ 2024 年 2 月在加拿大温哥华举行的第 38 届 AAAI 人工智能年度会议 The…

Linkage Mapper 中 Climate Linkage Mapper功能解析(含实例分析)

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Linkage Mapper解密数字世界链接 Climate Linkage Mapper的输出结果,应用于华盛顿州和英属哥伦比亚省之间跨境地区的白松树效果图 图片来源地址 文

解决weekofyear跨年问题

目录 前言跨年问题计算当年第几周前言 前段时间,做了一个日期维度表的需求,发现 计算当年第几周 有误,发现 Hive 中 weekofyear 函数存在跨年问题! 跨年问题 这一周算上一年还是下一年,取决于这一周的大多数日期(4天及以上)在哪一年。算在前一年,就是前一年的最后一…

K8s in Action 阅读笔记——【1】Introducing Kubernetes

K8s in Action 阅读笔记——【1】Introducing Kubernetes 多年前,大多数软件应用程序都是庞大的单体应用,运行在单个进程或少量进程分布在几台服务器上。这些传统系统今天仍然广泛存在。它们具有缓慢的发布周期,更新相对不频繁。在每个发布周…

【软考数据库案例分析】(全)

目录 1.1 案例分析概述 1.2 数据流图设计 1.3 概念结构设计 1.4 关系模式设计 1.5 SQL语言设计 1.5.1 创建表(create table) 1.5.2 修改表 (alter table) 1.5.3 删除表 (drop table) 1.5.4 索引 1.5.5 视图 1.5.6 查询语句格式 1.6.7 分组查询 1.5.8 其他操作 1.5…

图书系统小练习

1.对于任何系统,我们最先想到的就是普通用户和管理员,所以我们第一件事情就是创建一个包,里面包含 管理员 Admin(继承User) 普通用户 NormalUser(继承User) abstract类的 User 2.然后就是我们的菜单了 我们将管…

“云端”医学馆 | 平行云助力拜科打造医疗虚仿新模式

“云端”医学馆——拜科医疗虚仿新体验 当前,各个行业都正经历着一场深刻的数字化变革,医疗领域也没有例外,很多医疗厂商都在积极拥抱数字化技术的融入与应用。拜科数字生物科技(中国)有限公司正是医疗虚仿潮流中的领…

数字图像处理 使用C#进行图像处理八 Unsharp Masking

一、Unsharp Masking简述 Unsharp Masking是一种线性图像处理技术,用于锐化图像。清晰的细节被识别为两者之间的差异原始图像及其模糊版本。然后缩放这些细节, 并添加回原始图像: 增强图像 = 原始图像 + 数量 *(原始图像 - 模糊) 模糊步骤可以使用任何图像滤波方法,例如…