当前位置: 首页 > news >正文

人工智能-循环神经网络通过时间反向传播

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

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

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

完全计算

计算全部总和, 然而,这样的计算非常缓慢,并且可能会发生梯度爆炸, 因为初始条件的微小变化就可能会对结果产生巨大的影响。 也就是说,我们可以观察到类似于蝴蝶效应的现象, 即初始条件的很小变化就会导致结果发生不成比例的变化。 这对于我们想要估计的模型而言是非常不可取的。 毕竟,我们正在寻找的是能够很好地泛化高稳定性模型的估计器。 因此,在实践中,这种方法几乎从未使用过。

截断时间步

在实践中,这种方式工作得很好。 它通常被称为截断的通过时间反向传播 (Jaeger, 2002)。 这样做导致该模型主要侧重于短期影响,而不是长期影响。 这在现实中是可取的,因为它会将估计值偏向更简单和更稳定的模型。

比较策略

比较RNN中计算梯度的策略,3行自上而下分别为:随机截断、常规截断、完整计算

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

  • 第一行采用随机截断,方法是将文本划分为不同长度的片断;

  • 第二行采用常规截断,方法是将文本分解为相同长度的子序列。 这也是我们在循环神经网络实验中一直在做的;

  • 第三行采用通过时间的完全反向传播,结果是产生了在计算上不可行的表达式。

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

 

 

 

http://www.lryc.cn/news/238232.html

相关文章:

  • Delphi 取消与设置CDS本地排序
  • 智能门禁刷脸照片格式gif、bmp,png转换,转换base64
  • 听GPT 讲Rust源代码--src/librustdoc
  • hosts 配置本地映射不生效
  • Linux难学?大神告诉你,Linux到底该怎么自学!
  • GAMES101—Lec 05~06:光栅化
  • R语言——taxize(第三部分)
  • 用于神经网络的FLOP和Params计算工具
  • CUDA核函数,如何设置grid和block即不超过大小又能够遍历整个volume
  • 【Linux】软连接和硬链接:创建、管理和解除链接的操作
  • Matlab群体智能优化算法之海象优化算法(WO)
  • go语言学习-结构体
  • Stable Diffusion进阶玩法说明
  • PDF控件Spire.PDF for .NET【转换】演示:将PDF 转换为 HTML
  • 二分查找——34. 在排序数组中查找元素的第一个和最后一个位置
  • MFC中的主窗口以及如何通过代码找到主窗口
  • Typora下载安装 (Mac和Windows)图文详解
  • 32位单片机PY32F040,主频72M,外设丰富,支持断码LCD
  • Shell判断:模式匹配:case(二)
  • 从android.graphics.Path中取出Point点,Kotlin
  • 力扣C++学习笔记——C++ 给vector去重
  • Flutter笔记:使用相机
  • 包装类型的缓存机制
  • 【BUG】第一次创建vue3+vite项目启动报错Error: Cannot find module ‘worker_threads‘
  • 多目标应用:基于非支配排序的鲸鱼优化算法NSWOA求解微电网多目标优化调度(MATLAB代码)
  • 网络爬虫|Selenium——find_element_by_xpath()的几种方法
  • 【Kingbase FlySync】命令模式:部署双轨并行,并实现切换同步
  • echarts 多toolti同时触发图表实现
  • 2023.11.22使用flask做一个简单的图片浏览器
  • 万字解析设计模式之桥接模式、外观模式