RNN里的BPTT算法

本文介绍了RNN循环神经网络的学习过程,重点解析了BPTT(Backpropagation Through Time)算法的推导。通过BPTT,作者对RNN中权重的梯度计算有了更清晰的理解,尤其是在状态之间传递导致的复杂性。文章详细阐述了如何计算∂V∂L、∂W∂L和∂U∂L,并总结了不同时刻的梯度求和过程。
摘要由CSDN通过智能技术生成

这两天对RNN循环神经网络进行了学习,由一无所知到现在对什么是RNN以及它的前向传播和反向传播有了认识,尤其是BPTT算法的推导有些繁琐,但是推过一次后,对RNN反向传播求梯度的过程有了更清晰的认识。

下面是朴素的RNN循环神经网络图。(图1)
RNN网络图

我在写博客前,自己先手写了一份推导过程。(图2)
手写BTPP推导

为何BPTT更难?

因为多了状态之间的传递(即隐层单元之间的“交流”),根据前向传播算法,我们知道 s t ∗ = W s t − 1 + U x t , s_t^* = Ws_{t-1} + Ux_t , st=Wst1+Uxt, s t − 1 = f ( s t − 1 ∗ ) = f ( W s t − 2 + U x t − 1 ) s_{t-1} = f(s_{t-1}^*) = f(Ws_{t-2}+Ux_{t-1}) st1=f(st1)=f(Wst2+Uxt1),这说明 s t − 1 s_{t-1} st1也是关于 W W W的式子。

这样层层嵌套下去…就会追溯到 s 0 s_0 s0。可以意识到我们对 W 、 U W、U WU的梯度求解是繁琐的,而这正是BPTT的难点所在。对于 V V V的梯度求解,并没有受到状态之间传递的影响,因此和我们BP算法求解方式是一样的。

我们用 ∗ * 表示element-wise, × × ×表示矩阵乘法。
我们采用交叉熵损失函数,即 L t = − ( y t l o g ( o t ) + ( 1 − y t ) l o g ( 1 − o t ) ) L_t = - (y_tlog(o_t)+(1-y_t)log(1-o_t)) Lt=(ytlog(ot)+(1yt)log(1ot))
我们定义隐藏层的激活函数为sigmoid函数 s t = f ( s t ∗ ) s_t = f(s_t^*) st=f(st),输出层的激活函数也为sigmoid函数 o t = g ( o t ∗ ) o_t = g(o_t^*) ot=g(ot) f ′ = s t ∗ ( 1 − s t ) , g ′ = o t ∗ ( 1 − o t ) f' = s_t*(1-s_t), g' = o_t*(1-o_t) f=st

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值