基于时间的反向传播算法BPTT(Backpropagation through time)

本文详细介绍了基于时间的反向传播算法BPTT,结合RNN网络结构,解释了如何计算V、W和U的梯度,并通过代码分析解释了算法的实现细节,包括初始化、公共部分、V的梯度和W及U的梯度的计算,同时讨论了在实际应用中对回溯长度的限制。

本文是读“Recurrent Neural Networks Tutorial, Part 3 – Backpropagation Through Time and Vanishing Gradients”的读书笔记,加入了自己的一些理解,有兴趣可以直接阅读原文。

1. 算法介绍

这里引用原文中的网络结构图
RNN
其中 x x x为输入, s s s为隐藏层状态,o为输出,按时间展开
这里写图片描述
为了与文献中的表示一致,我们用 y ^ \hat y y^来代替o,则
s t = t a n h ( U x t + W s t − 1 ) y ^ = s o f t m a t ( V s t ) s_t=tanh(Ux_t+Ws_{t-1}) \\ \hat y=softmat(Vs_t) st=tanh(Uxt+Wst1)y^=softmat(Vst)
使用交叉熵(cross entropy)作为损失函数
E t ( y , y ^ ) = − y t l o g y ^ E ( y , y ^ ) = ∑ t E t ( y t , y ^ t ) = − ∑ t y t l o g y ^ E_t(y,\hat y)=-y_tlog\hat y \\ E(y, \hat y) = \sum_t E_t(y_t, \hat y_t)=-\sum_t y_tlog\hat y Et(y,y^)=ytlogy^E(y,y^)=tEt(yt,y^t)=tytlogy^
我们使用链式法则来计算后向传播时的梯度,以网络的输出 E 3 E_3 E3为例,
y ^ 3 = e z 3 ∑ i e z i E 3 = − y 3 l o g y ^ 3 = − y 3 ( z 3 − l o g ∑ i e z i ) z 3 = V s 3 s 3 = t a n h ( U x 3 + W s 2 ) \hat y_3=\frac{e^{z_3}}{\sum_ie^{z_i}} \\ E_3=-y_3log\hat y_3=-y_3(z_3-log\sum_ie^{z_i}) \\ z_3=Vs_3 \\ s_3=tanh(Ux_3+Ws_2) y^3=ie

普通反向传播算法Backpropagation)和随时间反向传播算法Backpropagation Through TimeBPTT)都是基于链式法则的反向传播算法,用于训练循环神经网络(Recurrent Neural Network,RNN)。 两者的技术上的不同主要在于计算梯度的方式: 1. 普通反向传播算法是针对一次前向传播和一次反向传播的,它将网络的损失函数对每个参数的导数计算出来,然后用梯度下降等优化方法来更新参数。普通反向传播算法可以高效地计算在前向传播过程中所有层的梯度,但对于循环神经网络这种有着时间序列依赖性的模型,它并不能直接应用。因为在循环神经网络中,同一个参数在每个时间步都会被使用,所以需要对参数的梯度进行累加,而普通反向传播算法并不能处理这种情况。 2. 随时间反向传播算法是针对循环神经网络的一种特殊反向传播算法,它能够计算网络在整个时间序列上的梯度。BPTT时间序列展开成一个有向无环图,然后按照拓扑排序的方式,从最后一个时间步开始,依次计算每个时间步上的梯度,最终得到整个时间序列上的梯度。BPTT的计算方式比普通反向传播算法更复杂,但能够处理循环神经网络中的时间序列依赖性问题。 综上所述,虽然普通反向传播算法和随时间反向传播算法都是基于链式法则的反向传播算法,但由于循环神经网络的特殊性质,它们在计算梯度的方式上存在很大的不同。普通反向传播算法只能计算单个时间步上的梯度,而BPTT可以计算整个时间序列上的梯度,因此BPTT是循环神经网络中常用的梯度计算方法之一。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值