Press "Enter" to skip to content

循环神经网络 – 通过时间反向传播

文章目录

1 – 循环神经网络的梯度分析
2 – 通过实践反向传播的细节

通过时间反向传播

 

到目前为止,我们已经反复提到像“梯度爆炸”、“梯度消失”,以及需要对循环神经网络“分离梯度”。例如在序列上调用detach函数。为了能够快速构建模型并了解其工作原理,上面所说的这些概念都没有得到充分的解释。在本节中,我们将更深入地探讨序列模型反向传播的细节,以及相关的数学原理

 

当我们首次实现循环神经网络时,遇到了梯度爆炸的问题,梯度截断对于模型收敛至关重要。为了更好地理解此问题,本节将回顾序列模型梯度的计算方式,它的工作原理没有上面新概念,毕竟我们使用的任然是链式法则来计算梯度

 

通过时间反向传播实际上是循环神经网络中反向传播技术的一个特定应用。它要求我们将循环神经网络的计算图一次展开一个时间步,以获得模型变量和参数之间的依赖关系。然后,基于链式法则,应用反向传播来计算和存储梯度。由于序列可能相当长,因此依赖关系也可能相当长。例如,某1000个字符的序列,其第一个词元可能会对最后位置的词元产生重大影响。这在计算上是不可行的(它需要的时间和内存都太多了),并且还需要超过1000个矩阵的乘积才能得到非常难以捉摸的梯度。这个过程充满了计算与统计的不确定性。在下文中,我们将阐明会发生什幺以及如何在实践中解决它们

 

1 – 循环神经网络的梯度分析

 

 

完全计算

 

 

截断时间步

 

 

随机截断

 

 

比较策略

 

 

图8.7.1说明了基于循环神经网络使用通过时间反向传播分析《时间机器》书中前几个字符的二种策略:

第一行采用随机截断,方法是将文本划分为不同长度的片段
第二行采用常规截断,方法是将文本分解为相同长度的子序列。这也是我们在循环神经网络实验中一直在做的
第三行采用通过时间的完全反向传播,结果是产生了在计算上不可行的表达式

遗憾的是,虽然随机截断在理论上具有吸引⼒,但很可能是由于多种因素在实践中并不⽐常规截断更好。⾸先,在对过去若⼲个时间步经过反向传播后,观测结果⾜以捕获实际的依赖关系。其次,增加的⽅差抵消了时间步数越多梯度越精确的事实。第三,我们真正想要的是只有短范围交互的模型。因此,模型需要的正是截断的通过时间反向传播⽅法所具备的轻度正则化效果

 

2 – 通过实践反向传播的细节

 

 

3 – 小结

“通过时间反向传播”仅仅适用于反向传播在具有隐状态的序列模型
截断是计算方便性和数值稳定性的需要。截断包括:规则截断和随机截断
矩阵的高次幂可能会导致神经网络特征值的发散或消失,将以梯度爆炸或梯度消失的形式表现
为了计算的效率,“通过时间反向传播”在计算期间会缓存中间值

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注