深度学习之循环神经网络(3)梯度传播

本文详细推导了循环神经网络(RNN)的梯度传播公式,展示了Whh权重矩阵的连乘对训练难度的影响。重点在于链式法则的应用和∂ht/∂hi的计算,揭示了RNN中梯度消失/爆炸问题的根源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深度学习之循环神经网络(3)梯度传播

 通过循环神经网络的更新表达式可以看出输出对张量 W x h \boldsymbol W_{xh} Wxh W h h \boldsymbol W_{hh} Whh和偏置 b \boldsymbol b b均是可导的,可以利用自动梯度算法来求解网络的梯度。此处我们仅简单地推导一下RNN的梯度传播公式,并观察其特点。

 考虑梯度 ∂ L ∂ W h h \frac{∂\mathcal L}{∂\boldsymbol W_{hh}} WhhL,其中 L \mathcal L L为网络的误差,只考虑最后一个时刻 t t t的输出 o t \boldsymbol o_t ot与真实值之间的差距。由于 W h h \boldsymbol W_{hh} Whh被每个时间戳i上权值共享,在计算 ∂ L ∂ W h h \frac{∂\mathcal L}{∂\boldsymbol W_{hh}} WhhL时需要将每个中间时间戳 i i i上面的梯度求和,利用链式法则展开为
∂ L ∂ W h h = ∑ i = 1 t ∂ L ∂ o t ∂ o t ∂ h t ∂ h t ∂ h i ∂ + h i ∂ W h h \frac{∂\mathcal L}{∂\boldsymbol W_{hh}}=\sum_{i=1}^t\frac{∂\mathcal L}{∂\boldsymbol o_t} \frac{∂\boldsymbol o_t}{∂\boldsymbol h_t} \frac{∂\boldsymbol h_t}{∂\boldsymbol h_i} \frac{∂^+ \boldsymbol h_i}{∂\boldsymbol W_{hh}} WhhL=i=1totLhtothihtWhh+hi
其中 ∂ L ∂ o t \frac{∂\mathcal L}{∂\boldsymbol o_t} otL可以基于损失函数直接求得, ∂ o t ∂ h t \frac{∂\boldsymbol o_t}{∂\boldsymbol h_t} htot o t = h t \boldsymbol o_t=\boldsymbol h_t ot=ht的情况下:
∂ o t ∂ h t = 1 \frac{∂\boldsymbol o_t}{∂\boldsymbol h_t}=1 htot=1
∂ + h i ∂ W h h \frac{∂^+ \boldsymbol h_i}{∂\boldsymbol W_{hh}} Whh+hi的梯度将 h i \boldsymbol h_i hi展开后也可以求得:
∂ + h i ∂ W h h = ∂ σ ( W x h x t + W h h h t − 1 + b ) ∂ W h h \frac{∂^+ \boldsymbol h_i}{∂\boldsymbol W_{hh}}=\frac{∂σ(\boldsymbol W_{xh} \boldsymbol x_t+\boldsymbol W_{hh} \boldsymbol h_{t-1}+\boldsymbol b)}{∂\boldsymbol W_{hh}} Whh+hi=Whhσ(Wxhxt+Whhht1+b)
其中 ∂ + h i ∂ W h h \frac{∂^+ \boldsymbol h_i}{∂\boldsymbol W_{hh}} Whh+hi只考虑到一个时间戳的梯度传播,即“直接”偏导数,与 ∂ L ∂ W h h \frac{∂\mathcal L}{∂\boldsymbol W_{hh}} WhhL考虑 i = 1 , … , t i=1,…,t i=1,,t所有的时间戳的偏导数不同。

 因此,只需要推导出 ∂ h t ∂ h i \frac{∂\boldsymbol h_t}{∂\boldsymbol h_i} hiht的表达式即可完成循环神经网络的梯度推导。利用链式法则,我们把 ∂ h t ∂ h i \frac{∂\boldsymbol h_t}{∂\boldsymbol h_i} hiht分拆分连续时间戳的梯度表达式:
∂ h t ∂ h i = ∂ h t ∂ h t − 1 ∂ h t − 1 ∂ 2 … ∂ h i + 1 ∂ h i = ∏ k = i t − 1 ∂ h k + 1 ∂ h k \frac{∂\boldsymbol h_t}{∂\boldsymbol h_i}=\frac{∂\boldsymbol h_t}{∂\boldsymbol h_{t-1}} \frac{∂\boldsymbol h_{t-1}}{∂2} … \frac{∂\boldsymbol h_{i+1}}{∂\boldsymbol h_i}=\prod_{k=i}^{t-1}{\frac{∂\boldsymbol h_{k+1}}{∂\boldsymbol h_k}} hiht=ht1ht2ht1hihi+1=k=it1hkhk+1
考虑
h k + 1 = ∂ σ ( W x h x k + 1 + W h h h k + b ) \boldsymbol h_{k+1}=∂σ(\boldsymbol W_{xh} \boldsymbol x_{k+1}+\boldsymbol W_{hh} \boldsymbol h_k+\boldsymbol b) hk+1=σ(Wxhxk+1+Whhhk+b)
那么
∂ h k + 1 ∂ h k = W h h T d i a g ( σ ′ ( W x h x k + 1 + W h h h k + b ) ) = W h h T d i a g ( σ ′ ( h k + 1 ) ) \begin{aligned}\frac{∂\boldsymbol h_{k+1}}{∂\boldsymbol h_k}&=\boldsymbol W_{hh}^T diag(σ' (\boldsymbol W_{xh} \boldsymbol x_{k+1}+\boldsymbol W_{hh} \boldsymbol h_k+\boldsymbol b))\\ &=\boldsymbol W_{hh}^T diag(σ' (\boldsymbol h_{k+1}))\end{aligned} hkhk+1=WhhTdiag(σ(Wxhxk+1+Whhhk+b))=WhhTdiag(σ(hk+1))
其中 d i a g ( x ) diag(\boldsymbol x) diag(x)把向量 x \boldsymbol x x的每个元素作为矩阵的对角元素,得到其它元素全为0的对角矩阵,例如:
d i a g ( [ 3 , 2 , 1 ] ) = [ 3 0 0 0 2 0 0 0 1 ] diag([3,2,1])=\begin{bmatrix}3&0&0\\0&2&0\\0&0&1\end{bmatrix} diag([3,2,1])=300020001
因此
∂ h t ∂ h i = ∏ j = i t − 1 d i a g ( σ ′ ( W x h x k + 1 + W h h h k + b ) ) W h h \frac{∂\boldsymbol h_t}{∂\boldsymbol h_i}=\prod_{j=i}^{t-1}diag(σ' (\boldsymbol W_{xh} \boldsymbol x_{k+1}+\boldsymbol W_{hh} \boldsymbol h_k+\boldsymbol b)) \boldsymbol W_{hh} hiht=j=it1diag(σ(Wxhxk+1+Whhhk+b))Whh
至此, ∂ L ∂ W h h \frac{∂\mathcal L}{∂\boldsymbol W_{hh}} WhhL的梯度推导完成。

 由于深度学习框架可以帮助我们自动推导梯度,只需要简单地了解循环神经网络的梯度传播方式即可。我们在推导 ∂ L ∂ W h h \frac{∂\mathcal L}{∂\boldsymbol W_{hh}} WhhL的过程中发现, ∂ h t ∂ h i \frac{∂\boldsymbol h_t}{∂\boldsymbol h_i} hiht的梯度包含了 W h h \boldsymbol W_{hh} Whh的连乘运算,我们会在后面介绍,这是导致循环神经网络训练困难的根本原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值