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

8.7 通过时间反向传播

我们已经反复提到梯度爆炸或者梯度消失以及需要对循环神经网络分离梯度8.5我们序列上调detach函数,为了能够快速构建模型了解工作原理上面所说这些概念需要进行充分解释更深入探讨序列模型反向传播细节以及相关数学原理

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

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

8.7.1 循环神经网络梯度分析

我们从一个描述循环神经网络工作原理简化模型开始忽略了状态以及更新方式细节这里数学表示没有原先那样明确区分标量向量矩阵因为i这些细节对于分析并不重要反而使得本节中符号变得混乱

这个简化模型我们可以时间同步t状态表示h输入表示Xt输出表示为Ot回想一下我们8.4.2讨论输入状态可以拼接后隐藏一个权重变量相乘我们使用WkWo分别表示隐藏输出权重时间状态输出可以

h1 = f(xt,ht-1,wk)

Ol = g(ht,wk)

fg分别是隐藏层和输出变换我们有一个通过循环计算彼此依赖前向床薄相当简单一次一个时间步遍历三元组(Xn,Hn,Ot),然后通过一个目标函数L所有T时间步评估输出Ot对应标签Yt之间差距

反向传播特别是当前计算目标函数L对于参数Wk梯度具体来说按照链式法则

8.28乘积第一项第二项很容易计算第三项ht/wh使问题棘手地方因为我们需要循环的计算参数Wh Ht影响根据递归计算ht依赖ht-1依赖wh, 其中ht-1计算也依赖Wk, 因此使用链式法则产生

Ht/Wh

为了导出上述梯度假设我们3序列{at},{bt} {ct} 序列满足a0=0而且at = ht + cat-1,

虽然我们可以使用链式法则递归计算sigmaHt/sigmaWkt很大时候这个就会变得很长我们需要想办法处理这一问题

1 完整计算

我们可以计算全部总和这样计算非常缓慢并且可能发生梯度爆炸初始条件微小变化就可能会对结果产生巨大影响我们可以观察类似蝴蝶效应现象对于我们想要估计模型非常不可取毕竟我们正在寻找能够很好泛化稳定性模型估计在实践中这种方法几乎从未使用过

2 截断时间

我们可以r截断式求和计算这是我们目前为止一直讨论内容例如8.5 节中分离梯度这回带来真实梯度近似只需求和终止Ht-1/Wk 实践中这种方式工作很好通常被称为截断通过时间反向传播这样导致模型主要侧重于短期影响而不是长期影响这在现实中可取估计偏向简单稳定模型

3 随机截断

我们可以一个随机变量替换sigmaht/sigmaWk, 随机变量预期正确但是截断序列这个随机变量通过使用序列sigma实现序列与定义0 < Xt <1

4 比较策略

8-6说明基于循环神经网络使用通过时间反向传播分析时间机器数据集中几个字符3策略

第一行 采样随机截断方法文本拆分不同长度片段

第二行 采用常规截断方法文本拆分相同长度序列这也是我们循环神经网络一直采用

第三行采用通过时间完全反向传播结果产生计算上不可行表达式

遗憾的是虽然随机截断理论上具有吸引力由于多种时间经过反向传播观测结果足以捕获实际依赖关系第二增加方差抵消时间步越多梯度精确效果第三我们真正想要小范围交互模型因此模型需要正是截断通过时间反向传播方法具备轻度正则化效果

8.7.2 通过时间反向传播细节

在讨论一般性原则之后看一下通过时间反向传播问题细节8.7.1分析不同下面我们展示如何计算目标函数对于所有分解模型参数梯度位了保持简单我们考虑一个没有偏置参数循环神经网络激活函数使用函数对于时间步t单个样本输入及其对应标签分别Xt属于Rdy计算状态Ht属于Rk输出sigma 属于Rk公式

Ht = WhxXt + EkhHt-1

Sigma t = WqhHt

权重参数Whx属于RhxdmWhk属于Rh-kWqh属于Rqxhl(Ot, Yt)表示时间t损失函数我们目标函数总体损失

L = 1/T Sigma(Ot, Yt)

为了在循环神经网络计算过程可视化模型变量参数之间依赖关系我们可以模型绘制一个计算如图所示时间步3状态h3计算取决于模型参数WhWhk以及最终时间步状态h2 以及当前时间步输入Xt

X3, ->Wh3 <- h2

X2, ->Wh2 <- h1

X1 ->Wh1 <- h0

8-7 具有3时间循环神经网络模型依赖关系计算图

如上面所述8-7模型参数Whx,WhhWqh通常, 训练模型需要这些参数分别进行梯度计算L/W,L/WhhL/Wqh.根据8-7的依赖关系我们可以沿着箭头所指反向遍历计算图依次计算存储梯度位了灵活表示链式法则中不同形状矩阵向量标量乘法我们继续使用4.7 所述prod运算符

在任意时间步t目标函数关于模型微分计算相当简单

我们可以计算目标函数对于输出参数Wqh梯度L/W, 基于8-7.目标函数L通过O1,...Ot依赖Wqh,依据链式法则

L/Wqh = Sigmaprod()

8-7所示在最后时间步T目标函数L仅仅通过Ot依赖状态Ht我们通过使用链式法则可以很容易得到L/Ht = Rh

当目标函数L通过Ht+1Ot依赖Ht任意时间t<T来说棘手根据链式法则状态梯度L/Ht属于Rh 在任何时间t<T都可以递归计算

位了进行分析对于任何时间步l<=t<=T展开递归计算得到

L/Ht

我们可以看到简单线性例子已经展现长序列模型一些关键问题陷入Whk潜在非常大1特征将会消失1特征值将会发散数值是不稳定表现形式梯度消失梯度爆炸解决问题一种方法根据计算方便需要截断时间步尺寸实际上这种截断通过给定数量时间之后分离梯度实现我们学习更复杂序列模型如何进一步缓解这一问题

目标函数L通过状态h1,...ht依赖模型参数Whk,Whh 为了计算对于这些参数梯度我们应用链式法则得到

L/H递归计算得到影响数值稳定性关键

正如我们4.7解释 那样由于通过时间反向传播循环神经网络应用方式训练循环神经网络交替使用前向传播通过时间反向传播通过时间反向传播依次计算存储梯度具体而言存储中间重复使用以免重复计算

小结

通过时间反向传播适用于反向传播具有状态序列模型

截断计算方便数值稳定性需要截断包括常规截断随机截断

矩阵高次可能导致神经网络特征值发散或者消失梯度爆炸或者梯度消失形式表现

为了确保计算效率通过时间反向传播 计算期间缓存中间


文章转载自:

http://2PEvp6LP.gmjbp.cn
http://CdTbotB2.gmjbp.cn
http://8aVfnjN0.gmjbp.cn
http://1NsodoGI.gmjbp.cn
http://Xf0HCW4c.gmjbp.cn
http://L28c1qgT.gmjbp.cn
http://REdlgyWe.gmjbp.cn
http://aeWwXGXq.gmjbp.cn
http://QUhWrJaX.gmjbp.cn
http://eNAnSYfK.gmjbp.cn
http://4wuGvWVQ.gmjbp.cn
http://oxV1crS2.gmjbp.cn
http://FUqfuvPI.gmjbp.cn
http://YIUMLgXN.gmjbp.cn
http://lQwlF2t2.gmjbp.cn
http://IugYGKyj.gmjbp.cn
http://B7r10nzg.gmjbp.cn
http://HFQ54Ufa.gmjbp.cn
http://whqJR3Ve.gmjbp.cn
http://WguYjfhq.gmjbp.cn
http://D7L986NO.gmjbp.cn
http://LVOTGAHQ.gmjbp.cn
http://VakipCTZ.gmjbp.cn
http://Wxan9VcD.gmjbp.cn
http://QTi5QW6J.gmjbp.cn
http://oFoqR2r9.gmjbp.cn
http://ulhKGaU9.gmjbp.cn
http://JmTKjEuX.gmjbp.cn
http://p4zuvlQO.gmjbp.cn
http://1LkaB9hq.gmjbp.cn
http://www.dtcms.com/a/367317.html

相关文章:

  • 基于扣子平台构造AutoGen框架的多智能体使用-----封装成FastAPI接口供调用
  • 谈谈你对ThreadLocal的理解
  • YOLOv11全方位改进指南:从Backbone到检测头的深度优化
  • PLC编程入门精通全套教程(附视频资料)
  • Spring启示录
  • Fiddler辅助标签+工具面板(柠檬班公开课2-2)
  • 云手机运行是否消耗自身流量?
  • Grafana - 监控磁盘使用率Variables使用
  • Elixir通过Onvif协议控制IP摄像机,扩展ExOnvif的摄像头连续移动功能 ContinuousMove
  • P13929 [蓝桥杯 2022 省 Java B] 山 题解
  • 基于 epoll 的高并发服务器原理与实现(对比 select 和 poll)
  • Docker Compose 与 Kubernetes 全面对比
  • 基于单片机水流量气体流量检测系统/水表燃气表设计
  • C/C++关键字——union
  • 基于单片机智能热水器设计
  • MySQL 全库备份迁移后索引失效问题深度解析与解决
  • 代码随想录训练营第三十一天|LeetCode56.合并区间、LeetCode738.单调递增的数字
  • 深入理解 @FeignClient 注解:应用场景与实战示例
  • 分享一个基于大数据应用的食物营养健康管理与可视化系统,基于python的食物营养信息交互式可视化系统源码
  • 残差神经网络的案例
  • 机器学习中决策树
  • 算法 --- 分治(归并)
  • 深入探索 WebSocket:构建实时应用的核心技术
  • javaweb(AI)-----前端
  • C++11 类功能与包装器
  • Qt---connect建立对象间的通信链路
  • vLLM显存逆向计算:如何得到最优gpu-memory-utilization参数
  • 第15章 Jenkins最佳实践
  • 【倒计时2个月】好•真题资源+专业•练习平台=高效备赛2025初中古诗文大会
  • openEuler2403安装部署Kafbat