手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇)

这篇具有很好参考价值的文章主要介绍了手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文承接上篇上篇在此和中篇中篇在此,继续就Sepp Hochreiter 1997年的开山大作 Long Short-term Memory 中APPENDIX A.1和A.2所载的数学推导过程进行详细解读。希望可以帮助大家理解了这个推导过程,进而能顺利理解为什么那几个门的设置可以解决RNN里的梯度消失和梯度爆炸的问题。中篇介绍了各个权重的误差更新算法。本篇将继续说明梯度信息在LSTM的记忆单元中经过一定的时间步之后如何变化,并由此证明LSTM可实现CEC(Constant Error Carousel)。本篇为整个文章的终章,也是最关键的一篇,因为此篇正是理解LSTM实现CEC的关键。一家之言,若有任何错漏欢迎大家评论区指正。好了,Dig in!

6. 误差流

我们将计算误差值在记忆单元上流过 q q q时间步之后(也称误差流error flow)的变化情况。

6.1 记忆单元输出点的误差值计算

已知记忆单元的计算公式:
s c j ( t ) = s c j ( t − 1 ) + g ( n e t c j ( t ) ) y i n j ( t ) s_{c_j}(t) = s_{c_j}(t-1) + g(net_{c_j}(t)) y^{in_j}(t) scj(t)=scj(t1)+g(netcj(t))yinj(t)
我们使用截断求导规则来计算误差在时间步 t − k t-k tk t − k − 1 t-k-1 tk1之间的变化情况:
∂ s c j ( t − k ) ∂ s c j ( t − k − 1 ) = 1 + ∂ g ( n e t c j ( t − k ) ) y i n j ( t − k ) ∂ s c j ( t − k − 1 ) = 1 + ∂ y i n j ( t − k ) ∂ s c j ( t − k − 1 ) g ( n e t c j ( t − k ) ) + ∂ g ( n e t c j ( t − k ) ) ∂ s c j ( t − k − 1 ) y i n j ( t − k ) = 1 + ∑ u [ ∂ y i n j ( t − k ) ∂ y u ( t − k − 1 ) ∂ y u ( t − k − 1 ) ∂ s c j ( t − k − 1 ) ] g ( n e t c j ( t − k ) ) + y i n j ( t − k ) g ′ ( n e t c j ( t − k ) ) ∑ u [ ∂ n e t c j ( t − k ) ∂ y u ( t − k − 1 ) ∂ y u ( t − k − 1 ) ∂ s c j ( t − k − 1 ) ] ≈ t r 1. (30) \begin{aligned} \frac{\partial s_{c_j}(t-k)}{\partial s_{c_j}(t-k-1)} &= 1 + \frac{\partial g(net_{c_j}(t-k))y^{in_j}(t-k)}{\partial s_{c_j}(t-k-1)}\\ &=1+ \frac{\partial y^{in_j}(t-k)}{\partial s_{c_j}(t-k-1)}g(net_{c_j}(t-k)) + \frac{\partial g(net_{c_j}(t-k))}{\partial s_{c_j}(t-k-1)}y^{in_j}(t-k)\\ &=1 + \sum_u[\frac{\partial y^{in_j}(t-k)}{\partial y^u(t-k-1)}\frac{\partial y^u(t-k-1)}{\partial s_{c_j}(t-k-1)}]g(net_{c_j}(t-k)) \\ &\quad + y^{in_j}(t-k)g'(net_{c_j}(t-k))\sum_u [\frac{\partial net_{c_j}(t-k)}{\partial y^u(t-k-1)}\frac{\partial y^u(t-k-1)}{\partial s_{c_j}(t-k-1)}]\\ &\approx_{tr} 1.\tag{30} \end{aligned} scj(tk1)scj(tk)=1+scj(tk1)g(netcj(tk))yinj(tk)=1+scj(tk1)yinj(tk)g(netcj(tk))+scj(tk1)g(netcj(tk))yinj(tk)=1+u[yu(tk1)yinj(tk)scj(tk1)yu(tk1)]g(netcj(tk))+yinj(tk)g(netcj(tk))u[yu(tk1)netcj(tk)scj(tk1)yu(tk1)]tr1.(30)

根据截断求导的规则,上式中的 ∂ y i n j ( t − k ) ∂ y u ( t − k − 1 ) \frac{\partial y^{in_j}(t-k)}{\partial y^u(t-k-1)} yu(tk1)yinj(tk) ∂ n e t c j ( t − k ) ∂ y u ( t − k − 1 ) \frac{\partial net_{c_j}(t-k)}{\partial y^u(t-k-1)} yu(tk1)netcj(tk)都等于0。因此上式应用截断求导规则之后,最终结果等于1。上边这个式子有两个累加符号 ∑ u \sum_u u可能会让人感到迷惑,按照我们一般的理解,应用链式求导规则,
∂ y i n j ( t − k ) ∂ s c j ( t − k − 1 ) = ∂ y i n j ( t − k ) ∂ y u ( t − k − 1 ) ∂ y u ( t − k − 1 ) ∂ s c j ( t − k − 1 ) , \frac{\partial y^{in_j}(t-k)}{\partial s_{c_j}(t-k-1)}=\frac{\partial y^{in_j}(t-k)}{\partial y^u(t-k-1)}\frac{\partial y^u(t-k-1)}{\partial s_{c_j}(t-k-1)}, scj(tk1)yinj(tk)=yu(tk1)yinj(tk)scj(tk1)yu(tk1),为什么这里是
∂ y i n j ( t − k ) ∂ s c j ( t − k − 1 ) = ∑ u [ ∂ y i n j ( t − k ) ∂ y u ( t − k − 1 ) ∂ y u ( t − k − 1 ) ∂ s c j ( t − k − 1 ) ] . \frac{\partial y^{in_j}(t-k)}{\partial s_{c_j}(t-k-1)}=\sum_u[\frac{\partial y^{in_j}(t-k)}{\partial y^u(t-k-1)}\frac{\partial y^u(t-k-1)}{\partial s_{c_j}(t-k-1)}]. scj(tk1)yinj(tk)=u[yu(tk1)yinj(tk)scj(tk1)yu(tk1)].

为了解释这个情况,我们需要先看一下下边从 y i n j ( t − k ) y^{in_j}(t-k) yinj(tk) s c j ( t − k − 1 ) s_{c_j}(t-k-1) scj(tk1)的误差传播路径示意图:

手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp
我们把传播路径上的各个节点展开一下(如下图所示),这里边 y i n j ( t − k ) y^{in_j}(t-k) yinj(tk) s c j ( t − k − 1 ) s_{c_j}(t-k-1) scj(tk1)所属的向量长度是一样的, y u ( t − k − 1 ) y^u(t-k-1) yu(tk1)所属向量的长度与其他两个不同。
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

上图分别显示了 ∂ y i n j ( t − k ) ∂ y u ( t − k − 1 ) \frac{\partial y^{in_j}(t-k)}{\partial y^u(t-k-1)} yu(tk1)yinj(tk) ∂ y u ( t − k − 1 ) ∂ s c j ( t − k − 1 ) \frac{\partial y^u(t-k-1)}{\partial s_{c_j}(t-k-1)} scj(tk1)yu(tk1)的现实含义。从上图可以看出,在给定 c j c_j cj i n j in_j inj值的情况下,由于大部分的 y u ( t − k − 1 ) y^u(t-k-1) yu(tk1)的单元和 s c j s_{c_j} scj节点连接。因此当且仅当 u = c j u=c_j u=cj时, ∂ y i n j ( t − k ) ∂ y u ( t − k − 1 ) ∂ y u ( t − k − 1 ) ∂ s c j ( t − k − 1 ) ≠ 0 \frac{\partial y^{in_j}(t-k)}{\partial y^u(t-k-1)}\frac{\partial y^u(t-k-1)}{\partial s_{c_j}(t-k-1)} \ne 0 yu(tk1)yinj(tk)scj(tk1)yu(tk1)=0。所以我们有:
∑ u [ ∂ y i n j ( t − k ) ∂ y u ( t − k − 1 ) ∂ y u ( t − k − 1 ) ∂ s c j ( t − k − 1 ) ] = ∂ y i n j ( t − k ) ∂ y c j ( t − k − 1 ) ∂ y c j ( t − k − 1 ) ∂ s c j ( t − k − 1 ) \sum_u[\frac{\partial y^{in_j}(t-k)}{\partial y^u(t-k-1)}\frac{\partial y^u(t-k-1)}{\partial s_{c_j}(t-k-1)}]= \frac{\partial y^{in_j}(t-k)}{\partial y^{c_j}(t-k-1)}\frac{\partial y^{c_j}(t-k-1)}{\partial s_{c_j}(t-k-1)} u[yu(tk1)yinj(tk)scj(tk1)yu(tk1)]=ycj(tk1)yinj(tk)scj(tk1)ycj(tk1)
同理可得:
∑ u [ ∂ n e t c j ( t − k ) ∂ y u ( t − k − 1 ) ∂ y u ( t − k − 1 ) ∂ s c j ( t − k − 1 ) ] = ∂ n e t c j ( t − k ) ∂ y c j ( t − k − 1 ) ∂ y c j ( t − k − 1 ) ∂ s c j ( t − k − 1 ) \sum_u [\frac{\partial net_{c_j}(t-k)}{\partial y^u(t-k-1)}\frac{\partial y^u(t-k-1)}{\partial s_{c_j}(t-k-1)}]=\frac{\partial net_{c_j}(t-k)}{\partial y^{c_j}(t-k-1)}\frac{\partial y^{c_j}(t-k-1)}{\partial s_{c_j}(t-k-1)} u[yu(tk1)netcj(tk)scj(tk1)yu(tk1)]=ycj(tk1)netcj(tk)scj(tk1)ycj(tk1)
我们用 v j ( t ) v_j(t) vj(t)表示 t t t时刻从记忆单元输出点的误差信号, v i ( t ) v_i(t) vi(t)表示隐藏单元的误差信号, v k ( t ) v_k(t) vk(t)表示输出单元的误差信号。如下图所示:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

我们可以如此定义 v j ( t ) v_j(t) vj(t)
v j ( t ) : = ∑ k w k c j v k ( t + 1 ) + ∑ i w i c j v i ( t + 1 ) v_j(t):=\sum_kw_{kc_j}v_k(t+1) + \sum_iw_{ic_j}v_i(t+1) vj(t):=kwkcjvk(t+1)+iwicjvi(t+1)
原文中采用了一种更加通用的表达方式,即使用 i :   i   n o   g a t e   a n d   n o   m e m o r y   c e l l i:\ i\ no\ gate\ and\ no\ memory\ cell i: i no gate and no memory cell同时代表上式中的 k , i k,i k,i。我们可以将上式改写为原文中的形式:
v j ( t ) : = ∑ i :   i   n o   g a t e   a n d   n o   m e m o r y   c e l l w i c j v i ( t + 1 ) . (31) v_j(t):=\sum_{i:\ i\ no\ gate\ and\ no\ memory\ cell}w_{ic_j}v_i(t+1)\tag{31}. vj(t):=i: i no gate and no memory cellwicjvi(t+1).(31)
由于这个表示会跟隐藏单元误差信号的标识冲突,所以我们把式31重新写成:
v j ( t ) : = ∑ u :   u   n o   g a t e   a n d   n o   m e m o r y   c e l l w u c j v u ( t + 1 ) . (31*) v_j(t):=\sum_{u:\ u\ no\ gate\ and\ no\ memory\ cell}w_{uc_j}v_u(t+1).\tag{31*} vj(t):=u: u no gate and no memory cellwucjvu(t+1).(31*)

6.2 输出门的误差值计算

此时我们可以计算 t t t时刻,输出门得到的误差值 v o u t j ( t ) v_{out_j}(t) voutj(t),该误差值的设定为处于 n e t o u t j net_{out_j} netoutj处,如下图所示:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp
v o u t j ( t ) ≈ t r ∂ y c j ( t ) ∂ n e t o u t j ( t ) v j ( t ) ≈ t r ∂ y c j ( t ) ∂ y o u t j ( t ) ∂ y o u t j ( t ) ∂ n e t o u t j ( t ) v j ( t ) . (32) \begin{aligned} v_{out_j}(t) &\approx_{tr} \frac{\partial y^{c_j(t)}}{\partial net_{out_j}(t)}v_j(t)\\ &\approx_{tr}\frac{\partial y^{c_j(t)}}{\partial y^{out_j}(t)} \frac{\partial y^{out_j}(t)}{\partial net_{out_j}(t)}v_j(t)\tag{32}. \end{aligned} voutj(t)trnetoutj(t)ycj(t)vj(t)tryoutj(t)ycj(t)netoutj(t)youtj(t)vj(t).(32)

6.3 CEC的误差值计算

我们现在来计算在 t t t时刻传播到记忆单元内部的 s c j s_{c_j} scj处的误差值。误差值传播路径示意图:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp
为了便于理解,我们把上边这个传播路径按时间顺序展开一下:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

从上图我们可以明显地看出来,因为 s c j ( t ) s_{c_j}(t) scj(t)同时作为两个分支的输入,因此 v s c j ( t ) v_{s_{c_j}}(t) vscj(t)等于两个分支传过来的误差值之和:
v s c j ( t ) = ∂ s c j ( t + 1 ) ∂ s c j ( t ) v s c j ( t + 1 ) + ∂ y c j ( t ) ∂ s c j ( t ) v j ( t ) . (33) v_{s_{c_j}}(t) = \frac{\partial s_{c_j}(t+1)}{\partial s_{c_j}(t)}v_{s_{c_j}}(t+1) + \frac{\partial y^{c_j}(t)}{\partial s_{c_j}(t)}v_j(t)\tag{33}. vscj(t)=scj(t)scj(t+1)vscj(t+1)+scj(t)ycj(t)vj(t).(33)

6.4 CEC之间的误差流

接下来算一个中间公式,后边有用:
∂ v j ( t ) ∂ v s c j ( t + 1 ) = ∂ ∑ u w i c j v i ( t + 1 ) ∂ v s c j ( t + 1 ) ( 代入式 31 ∗ ) = ∑ u w u c j ∂ v u ( t + 1 ) ∂ v s c j ( t + 1 ) = 0. (34) \begin{aligned} \frac{\partial v_j(t)}{\partial v_{s_{c_j}}(t+1)}&= \frac{\partial \sum_u w_{ic_j}v_i(t+1)}{\partial v_{s_{c_j}}(t+1)}&(代入式31*)\\ &=\sum_u w_{uc_j}\frac{\partial v_u(t+1)}{\partial v_{s_{c_j}}(t+1)}\\ &=0\tag{34}. \end{aligned} vscj(t+1)vj(t)=vscj(t+1)uwicjvi(t+1)=uwucjvscj(t+1)vu(t+1)=0.(代入式31)(34)

为什么 ∑ u w u c j ∂ v u ( t + 1 ) ∂ v s c j ( t + 1 ) = 0 \sum_u w_{uc_j}\frac{\partial v_u(t+1)}{\partial v_{s_{c_j}}(t+1)}=0 uwucjvscj(t+1)vu(t+1)=0呢?我们用 v y u ( t ) v_{y^u}(t) vyu(t)来表示 t t t时刻传导到 y u y^u yu处的误差值,我们把LSTM模型按时间展开一下:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

由于:
∑ u :   u   n o   g a t e   n o   m e m o r y   c e l l w u c j v u ( t + 1 ) = ∑ i w i c j v i ( t + 1 ) + ∑ k w k c j v i ( t + 1 ) \sum_{u:\ u\ no\ gate\ no\ memory\ cell} w_{uc_j}v_u(t+1)=\sum_{i} w_{ic_j}v_i(t+1) + \sum_{k} w_{kc_j}v_i(t+1) u: u no gate no memory cellwucjvu(t+1)=iwicjvi(t+1)+kwkcjvi(t+1)
可得:
∑ u w u c j ∂ v u ( t + 1 ) ∂ v s c j ( t + 1 ) = ∑ i w i c j ∂ v i ( t + 1 ) ∂ v s c j ( t + 1 ) + ∑ k w k c j ∂ v k ( t + 1 ) ∂ v s c j ( t + 1 ) \sum_u w_{uc_j}\frac{\partial v_u(t+1)}{\partial v_{s_{c_j}}(t+1)}=\sum_{i}\frac{w_{ic_j}\partial v_i(t+1)}{\partial v_{s_{c_j}}(t+1)} + \sum_{k} \frac{w_{kc_j}\partial v_k(t+1)}{\partial v_{s_{c_j}}(t+1)} uwucjvscj(t+1)vu(t+1)=ivscj(t+1)wicjvi(t+1)+kvscj(t+1)wkcjvk(t+1)
通过上图,我们容易看出, v i ( t + 1 ) v_i(t+1) vi(t+1) v s c j ( t + 1 ) v_{s_{c_j}}(t+1) vscj(t+1)互相独立,且 v k ( t + 1 ) v_k(t+1) vk(t+1) v s c j ( t + 1 ) v_{s_{c_j}}(t+1) vscj(t+1)互相独立,因此 w i c j ∂ v i ( t + 1 ) ∂ v s c j ( t + 1 ) = 0 , ∀ i \frac{w_{ic_j}\partial v_i(t+1)}{\partial v_{s_{c_j}}(t+1)}=0, \forall i vscj(t+1)wicjvi(t+1)=0,i,且 w k c j ∂ v k ( t + 1 ) ∂ v s c j ( t + 1 ) = 0 , ∀ k \frac{w_{kc_j}\partial v_k(t+1)}{\partial v_{s_{c_j}}(t+1)}=0, \forall k vscj(t+1)wkcjvk(t+1)=0,k。所以式子34得证。

此时我们来计算时刻 t + 1 t+1 t+1流入 s c j s_{c_j} scj的误差值对 t t t时刻,流入 s c j s_{c_j} scj的误差值的影响:
∂ v s c j ( t ) ∂ v s c j ( t + 1 ) = ∂ s c j ( t + 1 ) ∂ s c j ( t ) ∂ v s c j ( t + 1 ) ∂ v s c j ( t + 1 ) + ∂ y c j ( t ) ∂ s c j ( t ) ∂ v j ( t ) ∂ v s c j ( t + 1 ) (代入式 33 ) = ∂ s c j ( t + 1 ) ∂ s c j ( t ) (代入式 34 ) ≈ t r 1 (代入式 30 ) . (35) \begin{aligned} \frac{\partial v_{s_{c_j}}(t)}{\partial v_{s_{c_j}}(t+1)} &= \frac{\frac{\partial s_{c_j}(t+1)}{\partial s_{c_j}(t)}\partial v_{s_{c_j}}(t+1)}{\partial v_{s_{c_j}}(t+1)} + \frac{\frac{\partial y^{c_j}(t)}{\partial s_{c_j}(t)}\partial v_j(t)}{\partial v_{s_{c_j}}(t+1)}&(代入式33)\\ &=\frac{\partial s_{c_j}(t+1)}{\partial s_{c_j}(t)}& (代入式34)\\ &\approx_{tr}1&(代入式30)\tag{35}. \end{aligned} vscj(t+1)vscj(t)=vscj(t+1)scj(t)scj(t+1)vscj(t+1)+vscj(t+1)scj(t)ycj(t)vj(t)=scj(t)scj(t+1)tr1(代入式33(代入式34(代入式30.(35)

式35意味着:
v s c j ( t ) = v s c j ( t + 1 ) + C . v_{s_{c_j}}(t) = v_{s_{c_j}}(t+1) + C. vscj(t)=vscj(t+1)+C.
记忆单元内部的误差值是恒定的,或者说, t + 1 t+1 t+1时刻,流到 v s c j v_{s_{c_j}} vscj的误差值是多少,再往上流到 t t t时刻的 v s c j v_{s_{c_j}} vscj那里,就还是多少。(这是最理想的情况,我们这个模型还有一个 C C C)。

6.5 记忆单元的误差值计算

记忆单元输入处的误差值 v c j ( t ) v_{c_j}(t) vcj(t)为:
v c j ( t ) = ∂ g ( n e t c j ( t ) ) ∂ n e t c j ( t ) ∂ s c j ( t ) ∂ g ( n e t c j ( t ) ) v s c j ( t ) . (36) v_{c_j}(t)=\frac{\partial g(net_{c_j}(t))}{\partial net_{c_j}(t)}\frac{\partial s_{c_j}(t)}{\partial g(net_{c_j}(t))}v_{s_{c_j}}(t)\tag{36}. vcj(t)=netcj(t)g(netcj(t))g(netcj(t))scj(t)vscj(t).(36)
这个公式太简单了,不需要再进一步解释。我们放个误差流的示意图用以说明上式所说的标记的位置:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

6.6 输入门的误差值计算

v i n j ( t ) ≈ t r ∂ y i n j ( t ) ∂ n e t i n j ( t ) ∂ s c j ( t ) ∂ y i n j ( t ) v s c j ( t ) . (37) v_{in_j}(t)\approx_{tr}\frac{\partial y^{in_j}(t)}{\partial net_{in_j}(t)}\frac{\partial s_{c_j}(t)}{\partial y_{in_j}(t)}v_{s_{c_j}}(t)\tag{37}. vinj(t)trnetinj(t)yinj(t)yinj(t)scj(t)vscj(t).(37)
误差值传播示意图:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

6.7 外部误差流的计算

t + 1 t+1 t+1时刻,各个门或记忆单元(记为 l l l)的误差值 v l ( t + 1 ) v_l(t+1) vl(t+1),沿着 w l v w_{lv} wlv传播到上一个时间时刻 t t t的某一个记忆单元、门、输出单元或者隐藏单元(记为 v v v)中去,这就叫外部误差流(external error flow),我们计算一下任何节点 v v v t t t时刻收到的外部误差值(记为 v v e ( t ) v_v^e(t) vve(t)):
v v e ( t ) = ∂ y v ( t ) ∂ n e t v ( t ) ∑ l ∂ n e t l ( t + 1 ) ∂ y v ( t ) v l ( t + 1 ) = ∂ y v ( t ) ∂ n e t v ( t ) ( ∂ n e t o u t j ( t + 1 ) ∂ y v ( t ) v o u t j ( t + 1 ) + ∂ n e t i n j ( t + 1 ) ∂ y v ( t ) v i n j ( t + 1 ) + ∂ n e t c j ( t + 1 ) ∂ y v ( t ) (38) \begin{aligned} v_v^e(t) &= \frac{\partial y^v(t)}{\partial net_v(t)}\sum_l \frac{\partial net_l(t+1)}{\partial y^v(t)}v_l(t+1)\tag{38}\\ &= \frac{\partial y^v(t)}{\partial net_v(t)}( \frac{\partial net_{out_j}(t+1)}{\partial y^v(t)}v_{out_j}(t+1)+ \frac{\partial net_{in_j}(t+1)}{\partial y^v(t)}v_{in_j}(t+1) + \frac{\partial net_{c_j}(t+1)}{\partial y^v(t)} \end{aligned} vve(t)=netv(t)yv(t)lyv(t)netl(t+1)vl(t+1)=netv(t)yv(t)(yv(t)netoutj(t+1)voutj(t+1)+yv(t)netinj(t+1)vinj(t+1)+yv(t)netcj(t+1)(38)
可以通过下图理解外部误差的传播路径:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

此时我们可以得到外部误差与记忆单元 v v e ( t − 1 ) v_v^e(t-1) vve(t1) v j ( t ) v_j(t) vj(t)的关系,先看下边的传播路径示意图理解一下这个公式想计算的是什么东西,我们这里为了便于理解,只画出 v = i n j v=in_j v=inj的情况:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

∂ v v e ( t − 1 ) ∂ v j ( t ) = ∂ y v ( t − 1 ) ∂ n e t v ( t − 1 ) ( ∂ v o u t j ( t ) ∂ v j ( t ) ∂ n e t o u t j ( t ) ∂ y v ( t − 1 ) + ∂ v i n j ( t ) ∂ v j ( t ) ∂ n e t i n j ( t ) ∂ y v ( t − 1 ) + ∂ v c j ( t ) ∂ v j ( t ) ∂ n e t c j ( t ) ∂ y v ( t − 1 ) ) ≈ t r 0. (39) \begin{aligned} \frac{\partial v_v^e(t-1)}{\partial v_j(t)}&= \frac{\partial y^v(t-1)}{\partial net_v(t-1)}( \frac{\partial v_{out_j}(t)}{\partial v_j(t)}\frac{\partial net_{out_j}(t)}{\partial y^v(t-1)}+ \frac{\partial v_{in_j}(t)}{\partial v_j(t)}\frac{\partial net_{in_j}(t)}{\partial y^v(t-1)} + \frac{\partial v_{c_j}(t)}{\partial v_j(t)}\frac{\partial net_{c_j}(t)}{\partial y^v(t-1)}) \\ &\approx_{tr}0\tag{39}. \end{aligned} vj(t)vve(t1)=netv(t1)yv(t1)(vj(t)voutj(t)yv(t1)netoutj(t)+vj(t)vinj(t)yv(t1)netinj(t)+vj(t)vcj(t)yv(t1)netcj(t))tr0.(39)
根据截断求导规则,上式中的 ∂ n e t o u t j ( t ) ∂ y v ( t − 1 ) ≈ t r 0 \frac{\partial net_{out_j}(t)}{\partial y^v(t-1)}\approx_{tr}0 yv(t1)netoutj(t)tr0 ∂ n e t i n j ( t ) ∂ y v ( t − 1 ) ≈ t r 0 \frac{\partial net_{in_j}(t)}{\partial y^v(t-1)}\approx_{tr}0 yv(t1)netinj(t)tr0 ∂ n e t c j ( t ) ∂ y v ( t − 1 ) ≈ t r 0 \frac{\partial net_{c_j}(t)}{\partial y^v(t-1)}\approx_{tr}0 yv(t1)netcj(t)tr0,因此上式应用截断求导之后为0。

上式的意义就在于,证明了应用截断规则后,从记忆单元出口处的误差值,不会经由 i n j , o u t j , c j in_j,out_j,c_j inj,outj,cj传播到其他任何门和单元。(其实用眼睛看也可以一眼看出来)

6.8 记忆单元内部的误差流计算

最后,让我们来关注从记忆单元出口处的误差,传递到记忆单元内的CEC的情况。这也是整个模型中唯一的错误信息会跨时间步传递的误差流。
给定时间步 q q q,我们计算 ∂ v s c j ( t − q ) ∂ v j ( t ) \frac{\partial v_{s_{c_j}}(t-q)}{\partial v_j(t)} vj(t)vscj(tq)
q = 0 q=0 q=0时,我们可以看下图的误差传播路径:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp
根据上图,容易得到:
∂ v s c j ( t − q ) ∂ v j ( t ) = ∂ v s c j ( t ) ∂ v j ( t ) = ∂ y c j ( t ) ∂ s c j ( t ) \begin{aligned} \frac{\partial v_{s_{c_j}}(t-q)}{\partial v_j(t)}&=\frac{\partial v_{s_{c_j}}(t)}{\partial v_j(t)}=\frac{\partial y^{c_j}(t)}{\partial s_{c_j}(t)} \end{aligned} vj(t)vscj(tq)=vj(t)vscj(t)=scj(t)ycj(t)
q = 1 q=1 q=1时,误差传播路径如下图所示(隐藏了无关的单元,只保留记忆单元):
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

∂ v s c j ( t − q ) ∂ v j ( t ) = ∂ v s c j ( t − 1 ) ∂ v j ( t ) ≈ t r ∂ v j ( t ) ∂ y c j ( t ) ∂ s c j ( t ) ∂ s c j ( t ) ∂ s c j ( t − 1 ) ∂ v j ( t ) ≈ t r ∂ y c j ( t ) ∂ s c j ( t ) ∂ s c j ( t ) ∂ s c j ( t − 1 ) ≈ t r ∂ s c j ( t ) ∂ s c j ( t − 1 ) ∂ v s c j ( t ) ∂ v j ( t ) \begin{aligned} \frac{\partial v_{s_{c_j}}(t-q)}{\partial v_j(t)}&=\frac{\partial v_{s_{c_j}}(t-1)}{\partial v_j(t)}\\ &\approx_{tr}\frac{\partial v_j(t)\frac{\partial y^{c_j}(t)}{\partial s_{c_j}(t)}\frac{\partial s_{c_j}(t)}{\partial s_{c_j}(t-1)}}{\partial v_j(t)}\\ &\approx_{tr}\frac{\partial y^{c_j}(t)}{\partial s_{c_j}(t)}\frac{\partial s_{c_j}(t)}{\partial s_{c_j}(t-1)}\\ &\approx_{tr}\frac{\partial s_{c_j}(t)}{\partial s_{c_j}(t-1)}\frac{\partial v_{s_{c_j}}(t)}{\partial v_j(t)} \end{aligned} vj(t)vscj(tq)=vj(t)vscj(t1)trvj(t)vj(t)scj(t)ycj(t)scj(t1)scj(t)trscj(t)ycj(t)scj(t1)scj(t)trscj(t1)scj(t)vj(t)vscj(t)
q > 1 q>1 q>1时:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp

∂ v s c j ( t − q ) ∂ v j ( t ) ≈ t r ∂ v j ( t ) ∂ y c j ( t ) ∂ s c j ( t − q + 1 ) ∂ s c j ( t − q + 1 ) ∂ s c j ( t − q ) ∂ v j ( t ) ≈ t r ∂ y c j ( t ) ∂ s c j ( t − q + 1 ) ∂ s c j ( t − q + 1 ) ∂ s c j ( t − q ) ≈ t r ∂ v s c j ( t − q + 1 ) ∂ v j ( t ) ∂ s c j ( t − q + 1 ) ∂ s c j ( t − q ) \begin{aligned} \frac{\partial v_{s_{c_j}}(t-q)}{\partial v_j(t)}&\approx_{tr}\frac{\partial v_j(t)\frac{\partial y^{c_j}(t)}{\partial s_{c_j}(t-q+1)}\frac{\partial s_{c_j}(t-q+1)}{\partial s_{c_j}(t-q)}}{\partial v_j(t)}\\ &\approx_{tr}\frac{\partial y^{c_j}(t)}{\partial s_{c_j}(t-q+1)}\frac{\partial s_{c_j}(t-q+1)}{\partial s_{c_j}(t-q)}\\ &\approx_{tr}\frac{\partial v_{s_{c_j}}(t-q+1)}{\partial v_j(t)}\frac{\partial s_{c_j}(t-q+1)}{\partial s_{c_j}(t-q)} \end{aligned} vj(t)vscj(tq)trvj(t)vj(t)scj(tq+1)ycj(t)scj(tq)scj(tq+1)trscj(tq+1)ycj(t)scj(tq)scj(tq+1)trvj(t)vscj(tq+1)scj(tq)scj(tq+1)

因此我们可得:
∂ v s c j ( t − q ) ∂ v j ( t ) ≈ t r { ∂ y c j ( t ) ∂ s c j ( t ) ( q = 0 ) ∂ s c j ( t − q + 1 ) ∂ s c j ( t − q ) ∂ v s c j ( t − q + 1 ) ∂ v j ( t ) ( q > 0 ) . (40) \frac{\partial v_{s_{c_j}}(t-q)}{\partial v_j(t)}\approx_{tr} \begin{cases} \frac{\partial y^{c_j}(t)}{\partial s_{c_j}(t)} &(q=0)\\ \frac{\partial s_{c_j}(t-q+1)}{\partial s_{c_j}(t-q)}\frac{\partial v_{s_{c_j}}(t-q+1)}{\partial v_j(t)}&(q>0) \end{cases}\tag{40}. vj(t)vscj(tq)tr scj(t)ycj(t)scj(tq)scj(tq+1)vj(t)vscj(tq+1)(q=0)(q>0).(40)

将式40扩展为计算记忆节点在时刻 t t t的误差值,传播到 t − q t-q tq时刻任意节点 v v v时的误差,误差传播路经如下图所示:
手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇),nlp,lstm,人工智能,深度学习,nlp
从上图可知在 t − q t-q tq时刻,只有 n e t i n j net_{in_j} netinj n e t c j net_{c_j} netcj处,即 v ∈ { i n j , c j } v\in\{in_j,c_j\} v{inj,cj}时,可以得到 v j ( t ) v_j(t) vj(t)传过来的非零误差。其他位置都是0。我们标记任意节点 v v v t − q t-q tq时刻收到的误差信息为 v v ( t − q ) v_v(t-q) vv(tq),我们计算 t t t时刻记忆单元出口处与 v v ( t − q ) v_v(t-q) vv(tq)之间的误差流:
∂ v v ( t − q ) ∂ v j ( t ) ≈ t r ∂ v v ( t − q ) ∂ v s c j ( t − q ) ∂ v s c j ( t − q ) ∂ v j ( t ) ≈ t r ∂ v v ( t − q ) ∂ v s c j ( t − q ) ∂ s c j ( t − q + 1 ) ∂ s c j ( t − q ) ∂ v s c j ( t − q + 1 ) ∂ v j ( t ) ≈ t r ∂ v v ( t − q ) ∂ v s c j ( t − q ) ( ∂ s c j ( t − q + 1 ) ∂ s c j ( t − q ) ∂ s c j ( t − q + 2 ) ∂ s c j ( t − q + 1 ) ∂ s c j ( t − q + 3 ) ∂ s c j ( t − q + 2 ) ⋯ ∂ s c j ( t + 1 ) ∂ s c j ( t ) ) ∂ v s c j ( t ) ∂ v j ( t ) ≈ t r ∂ v v ( t − q ) ∂ v s c j ( t − q ) ( ∏ m = 0 q ∂ s c j ( t − m + 1 ) ∂ s c j ( t − m ) ) ∂ v s c j ( t ) ∂ v j ( t ) ≈ t r ∂ v v ( t − q ) ∂ v s c j ( t − q ) ∂ v s c j ( t ) ∂ v j ( t ) ≈ t r y o u t j ( t ) h ′ ( s c j ( t ) ) { g ′ ( n e t c j ( t − q ) ) y i n j ( t − q ) v = c j g ( n e t c j ( t − q ) ) f i n j ′ ( n e t i n j ( t − q ) ) v = i n j 0 O t h e r w i s e . (41) \begin{aligned} \frac{\partial v_v(t-q)}{\partial v_j(t)}&\approx_{tr}\frac{\partial v_v(t-q)}{\partial v_{s_{c_j}}(t-q)}\frac{\partial v_{s_{c_j}}(t-q)}{\partial v_j(t)}\\ &\approx_{tr} \frac{\partial v_v(t-q)}{\partial v_{s_{c_j}}(t-q)}\frac{\partial s_{c_j}(t-q+1)}{\partial s_{c_j}(t-q)}\frac{\partial v_{s_{c_j}}(t-q+1)}{\partial v_j(t)}\\ &\approx_{tr} \frac{\partial v_v(t-q)}{\partial v_{s_{c_j}}(t-q)}(\frac{\partial s_{c_j}(t-q+1)}{\partial s_{c_j}(t-q)}\frac{\partial s_{c_j}(t-q+2)}{\partial s_{c_j}(t-q+1)}\frac{\partial s_{c_j}(t-q+3)}{\partial s_{c_j}(t-q+2)}\cdots\frac{\partial s_{c_j}(t+1)}{\partial s_{c_j}(t)})\frac{\partial v_{s_{c_j}}(t)}{\partial v_j(t)}\\ &\approx_{tr}\frac{\partial v_v(t-q)}{\partial v_{s_{c_j}}(t-q)}(\prod_{m=0}^q\frac{\partial s_{c_j}(t-m+1)}{\partial s_{c_j}(t-m)})\frac{\partial v_{s_{c_j}}(t)}{\partial v_j(t)}\\ &\approx_{tr}\frac{\partial v_v(t-q)}{\partial v_{s_{c_j}}(t-q)}\frac{\partial v_{s_{c_j}}(t)}{\partial v_j(t)}\\ &\approx_{tr}y^{out_j}(t)h'(s_{c_j}(t)) \begin{cases} g'(net_{c_j}(t-q))y^{in_j}(t-q)&v=c_j\\ g(net_{c_j}(t-q))f'_{in_j}(net_{in_j}(t-q)) &v=in_j\\ 0&Otherwise \end{cases}\tag{41}. \end{aligned} vj(t)vv(tq)trvscj(tq)vv(tq)vj(t)vscj(tq)trvscj(tq)vv(tq)scj(tq)scj(tq+1)vj(t)vscj(tq+1)trvscj(tq)vv(tq)(scj(tq)scj(tq+1)scj(tq+1)scj(tq+2)scj(tq+2)scj(tq+3)scj(t)scj(t+1))vj(t)vscj(t)trvscj(tq)vv(tq)(m=0qscj(tm)scj(tm+1))vj(t)vscj(t)trvscj(tq)vv(tq)vj(t)vscj(t)tryoutj(t)h(scj(t)) g(netcj(tq))yinj(tq)g(netcj(tq))finj(netinj(tq))0v=cjv=injOtherwise.(41)

通过上式可以看出,误差流的变化只有分别与 t t t t − q t-q tq时刻有关,在不同时间步之间流经CEC时未受影响。最后Sepp Hochreiter指出以下几点:

  1. y o u t j ( t ) y^{out_j}(t) youtj(t)可以在误差流进入记忆单元之前就缩小误差值。也会在之后的训练步骤中降低记忆单元产生的误差值。
  2. 根据式35可知, v s c j ( t ) = v s c j ( t + 1 ) + C v_{s_{c_j}}(t) = v_{s_{c_j}}(t+1) + C vscj(t)=vscj(t+1)+C,因此随着时间步数的增加, s c j s_{c_j} scj会出现漂移的情况,如果 s c j ( t ) s_{c_j}(t) scj(t)产生一个大值(大正值或大负值),该值会被 h ′ ( s c j ( t ) ) h'(s_{c_j}(t)) h(scj(t))截断。同时,也可通过给 i n j in_j inj设置适当的偏移量来优化该问题(现在我们通过增加遗忘门解决该问题,这个遗忘门也成为新的标准LSTM模型的一部分)。
  3. 如果我们给 i n j in_j inj设置了用与抗衡 s c j s_{c_j} scj漂移的反向偏移值,那么会导致 y i n j ( t − q ) y^{in_j}(t-q) yinj(tq) ( n e t i n j ( t − q ) ) (net_{in_j}(t-q)) (netinj(tq))的值变小,这样的影响对比放任 s c j s_{c_j} scj漂移的影响来说微不足道。

总之一句话,LSTM模型比没有记忆单元的RNN模型好很多。

由于文章太长,我把整个文章分为上中下三篇,本篇为最后一篇。
上篇:上篇在此
中篇:中篇在此
下篇:下篇在此文章来源地址https://www.toymoban.com/news/detail-570805.html

到了这里,关于手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉:卷积核的参数可以通过反向传播学习到吗?

    在深度学习中,卷积神经网络(Convolutional Neural Networks, CNN)是一种常用的神经网络结构,其中卷积核是CNN的核心组件之一。卷积核是一个小矩阵,用于对输入数据进行卷积操作。卷积操作可以提取输入数据的特征,通过不同的卷积核可以提取不同的特征。   在前面课程中我

    2024年02月16日
    浏览(39)
  • 手搓GPT系列之 - chatgpt + langchain 实现一个书本解读机器人

    ChatGPT已经威名远播,关于如何使用大模型来构建应用还处于十分前期的探索阶段。各种基于大模型的应用技术也层出不穷。本文将给大家介绍一款基于大模型的应用框架:langchain。langchain集成了做一个基于大模型应用所需的一切。熟悉java web应用的同学们应该十分熟悉spring

    2024年02月05日
    浏览(46)
  • pytorch 前向传播与反向传播代码+ fp16

    optim.zero_grad() : 将模型的梯度参数设置为0,即清空之前计算的梯度值,在训练模型过程中,每次模型反向传播完成后,梯度都会累加到之前的梯度值上,如果不清空,这些过时的梯度将会影响下一次迭代的结果。因此,使用 optim.zero_grad() 来清空梯度避免这种情况的发生。保证

    2024年02月05日
    浏览(44)
  • pytorch(三)反向传播

    前馈过程的目的是为了计算损失loss 反向传播的目的是为了更新权重w,这里权重的更新是使用随机梯度下降来更新的。 前馈过程 反馈过程 运行结果 在神经网路中,经常对线性的结果做一个非线性函数的变幻的展开,这就是激活函数。激活函数可以使得模型具有非线性。激活

    2024年01月24日
    浏览(38)
  • 误差反向传播算法

    通过单个感知机或者单层神经网络只能够实现线性分类的问题,而多层神经网络可以解决非线性分类问题。 神经网络中的模型参数,是神经元模型中的连接权重以及每个功能神经元的阈值, 这些模型参数并不是我们人工设计或者指定的,而是通过算法自动学习到的。 和其他

    2024年02月06日
    浏览(34)
  • 【09】损失函数与反向传播

    损失函数大致可以分成两类:回归(Regression)和分类(Classification)。 回归模型中的三种损失函数包括: 均方误差(Mean Square Error,MSE) 平均绝对误差(Mean Absolute Error,MAE) Huber Loss。 ① Loss损失函数一方面计算实际输出和目标之间的差距。 ② Loss损失函数另一方面为我们

    2023年04月09日
    浏览(33)
  • 深度学习之反向传播

    (在pytorch包中)Tensor数据成员:data(存放数据w,也是Tensor变量,但是取data不会构建计算图)和grad(存放梯度loss对w的导,调用bacward之后grad也是个Tensor,每次引用结束要zero) backward会释放计算图,每一次运行神经网络时计算图可能是不同的,所以没进行一次反向传播就释放

    2024年02月16日
    浏览(34)
  • 8. 损失函数与反向传播

    ① Loss损失函数一方面计算实际输出和目标之间的差距。 ② Loss损失函数另一方面为我们更新输出提供一定的依据。  ① L1loss数学公式如下图所示,例子如下下图所示。 结果: 结果:  ① MSE损失函数数学公式如下图所示。   结果: ① 交叉熵损失函数数学公式如下图所示。

    2024年02月10日
    浏览(34)
  • 【剑指offer】反向传播

    BN层详解 梯度消失和梯度爆炸 交叉熵损失函数 1*1卷积的作用 原文地址:反向传播 深度学习中的反向传播( Backpropagation )是一种基于梯度下降法的优化方法,用于计算神经网络中每个参数的梯度值,以便利用梯度下降法或其他优化方法来更新参数,从而最小化损失函数。

    2023年04月17日
    浏览(36)
  • 机器学习 day27(反向传播)

    1. 导数 函数在某点的导数为该点处的斜率,用height / width表示,可以看作若当w增加ε,J(w,b)增加k倍的ε,则k为该点的导数 2. 反向传播 tensorflow中的计算图,由有向边和节点组成。从左向右为正向传播,神经网络模型使用正向传播来输出结果 从右向左为反向传播,tensorflow使用

    2024年02月16日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包