摘自《动手学习深度学习》
这里介绍循环神经网络中梯度的计算和存储方法
在 深度学习理论:正向传播与反向传播中讲了正向传播和反向传播的计算过程,主要依据求导链式法则,需要对中间变量(参数)进行计算与存储。当反向传播应用到循环审计网络时,则要将循环神经网络按时间步展开,得到模型变量和参数之间的依赖关系,并依据链式法则应用反向传播计算并存储梯度
考虑一个无偏差项的循环神经网络,且激活函数为恒等映射
设时间步 t 的输入为单样本: ,标签为
,则隐藏状态
的计算式为:
和
为隐藏层权重,设输出层权重参数
,时间步 t 的输出层变量
计算为:
设时间步 t 的损失为 ,时间步数为 T 的损失函数 L 定义为
,将L称为有关给定时间步(T范围)的数据样本的目标函数
如上图所示,时间步3的隐藏状态 h3 的计算依赖模型参数 、
、上一时间步隐藏状态
以及当前时间步输入
,所以这里模型参数是:
,
,
,需要求得梯度为:
,
,
目标函数有关各时间步输出层变量的梯度 为:
目标函数有关模型参数 的梯度
的计算:
L通过o1,…,oT依赖,由链式法则:
注意到隐藏状态之间也存在依赖关系,L只通过oT依赖最终时间步T的隐藏状态hT,因此先计算目标函数有关最终时间步隐藏状态的梯度 ,由链式法则:
对于时间步t<T,图中 L 通过ht+1 和ot 依赖 ht,根据链式法则,目标函数有关时间步t<T的隐藏状态的梯度 需要按照时间步从大到小依次计算(从后往前推),递推关系为:
将其展开,对任意时间步1≤t≤T,我们可以得到目标函数有关隐藏状态梯度的通项公式
由上式中的指数项可见,当时间步数 T较大或者时间步 t 较小时,目标函数有关隐藏状态的梯度较容易出现衰减和爆炸,影响其他包含 项的梯度,如隐藏层中模型参数的梯度
,
,在图中,L通过h1,…,hT依赖这些模型参数:
- 每次迭代中,在依次计算完以上各个梯度后会将它们存储起来,从而避免重复计算。例如,由于隐藏状态梯度
被计算和存储,之后的模型参数梯度
和
的计算可以直接读取
的值。
- 反向传播中的梯度计算可能依赖变量的当前值,是通过正向传播计算出来的,如
的计算需要依赖隐藏状态在时间步t=0,…,T−1 的当前值 ht(h0是初始化得到的),是通过从输入层到输出层的正向传播计算并存储得到
转自: