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

《动手学深度学习 Pytorch版》 8.7 通过时间反向传播

8.7.1 循环神经网络的梯度分析

本节主要探讨梯度相关问题,因此对模型及其表达式进行了简化,进行如下表示:

h t = f ( x t , h t − 1 , w h ) o t = g ( h t , w o ) \begin{align} h_t&=f(x_t,h_{t-1},w_h)\\ o_t&=g(h_t,w_o) \end{align} htot=f(xt,ht1,wh)=g(ht,wo)

参数字典:

  • t t t 表示时间步

  • h t h_t ht 表示时间步 t t t 的隐状态

  • x t x_t xt 表示输入

  • o t o_t ot 表示输出

  • w h w_h wh 表示隐藏层权重

  • w o w_o wo 表示输出层权重

  • f f f 表示隐藏层变换

  • g g g 表示输出层权重

前向传播相当简单,一次一个时间步的遍历三元组 ( x t , h t , o t ) (x_t,h_t,o_t) (xt,ht,ot),然后通过一个目标函数在所有 T T T 个时间步内评估输出 o t o_t ot 和对应的标签 y t y_t yt 之间的差异:

L ( x 1 , … , x T , y 1 , … , y T , w h , w o ) = 1 T ∑ t = 1 T l ( y t , o t ) L(x_1,\dots,x_T,y_1,\dots,y_T,w_h,w_o)=\frac{1}{T}\sum^T_{t=1}l(y_t,o_t) L(x1,,xT,y1,,yT,wh,wo)=T1t=1Tl(yt,ot)

对于反向传播,就很棘手了,特别是计算目标函数 L L L 关于参数 w h w_h wh 的梯度时,按照链式法则:

∂ L ∂ w h = 1 T ∑ t = 1 T ∂ l ( y t , o t ) ∂ w h = 1 T ∑ t = 1 T ∂ l ( y t , o t ) ∂ o t ∂ g ( h t , w o ) ∂ h t ∂ h t ∂ w h \begin{align} \frac{\partial L}{\partial w_h}&=\frac{1}{T}\sum^T_{t=1}\frac{\partial l(y_t,o_t)}{\partial w_h}\\ &=\frac{1}{T}\sum^T_{t=1}\frac{\partial l(y_t,o_t)}{\partial o_t}\frac{\partial g(h_t,w_o)}{\partial h_t}\frac{\partial h_t}{\partial w_h} \end{align} whL=T1t=1Twhl(yt,ot)=T1t=1Totl(yt,ot)htg(ht,wo)whht

乘积的第一项和第二项很容易计算, 而第三项 ∂ h t / ∂ w h \partial h_t/\partial w_h ht/wh 是使事情变得棘手的地方,因为我们需要循环地计算参数 w h w_h wh h t h_t ht 的影响。根据定义式中的递归计算, h t h_t ht 既依赖于 h t − 1 h_{t-1} ht1 又依赖于 w h w_h wh,其中 h t − 1 h_{t-1} ht1 的计算也依赖于 w h w_h wh。因此,使用链式法则产生:

∂ h t ∂ w h = ∂ f ( x t , h t − 1 , w h ) ∂ w h + ∂ f ( x t , h t − 1 , w h ) ∂ h t − 1 ∂ h t − 1 ∂ w h \frac{\partial h_t}{\partial w_h}=\frac{\partial f(x_t,h_{t-1},w_h)}{\partial w_h}+\frac{\partial f(x_t,h_{t-1},w_h)}{\partial h_{t-1}}\frac{\partial h_{t-1}}{\partial w_h} whht=whf(xt,ht1,wh)+ht1f(xt,ht1,wh)whht1

消掉递归计算得

∂ h t ∂ w h = ∂ f ( x t , h t − 1 , w h ) ∂ w h + ∑ i = 1 t − 1 ( ∏ j = i + 1 t ∂ f ( x t , h j − 1 , w h ) ∂ h j − 1 ) ∂ f ( x i , h i − 1 , w h ) ∂ w h \frac{\partial h_t}{\partial w_h}=\frac{\partial f(x_t,h_{t-1},w_h)}{\partial w_h}+\sum^{t-1}_{i=1}(\prod^t_{j=i+1}\frac{\partial f(x_t,h_{j-1},w_h)}{\partial h_{j-1}})\frac{\partial f(x_i,h_{i-1},w_h)}{\partial w_h} whht=whf(xt,ht1,wh)+i=1t1(j=i+1thj1f(xt,hj1,wh))whf(xi,hi1,wh)

虽然我们可以使用链式法则递归地计算 ∂ h t / ∂ w h \partial h_t/\partial w_h ht/wh,但当 t t t 很大时这个链就会变得很长。需要想办法来处理这一问题.

8.7.1.1 完全计算

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

8.7.1.2 随即截断

可以用一个随机变量替换 ∂ h t / ∂ w h \partial h_t/\partial w_h ht/wh,该随机变量在预期中是正确的,但是会截断序列。 这个随机变量是通过使用序列 ξ t \xi_t ξt 来实现的,序列预定义了 0 < π t < 1 0<\pi_t<1 0<πt<1,其中 P ( ξ t = 0 ) = 1 − π t P(\xi_t=0)=1-\pi_t P(ξt=0)=1πt P ( ξ t = π t − 1 = π t ) P(\xi_t=\pi_t^{-1}=\pi_t) P(ξt=πt1=πt),因此 E ∣ ξ t ∣ = 1 E|\xi_t|=1 Eξt=1。 我们使用它来替换梯度 ∂ h t / ∂ w h \partial h_t/\partial w_h ht/wh 得到:

(8.7.8)

z t = ∂ f ( x t , h t − 1 , w h ) ∂ w h + ξ t ∂ f ( x t , h t − 1 , w h ) ∂ h t − 1 ∂ h t − 1 ∂ w h z_t=\frac{\partial f(x_t,h_{t-1},w_h)}{\partial w_h}+\xi_t\frac{\partial f(x_t,h_{t-1},w_h)}{\partial h_{t-1}}\frac{\partial h_{t-1}}{\partial w_h} zt=whf(xt,ht1,wh)+ξtht1f(xt,ht1,wh)whht1

ξ t \xi_t ξt 的定义中推导出来 E ∣ ξ t ∣ = ∂ h t / ∂ w h E|\xi_t|=\partial h_t/\partial w_h Eξt=ht/wh。每当 ξ t = 0 \xi_t=0 ξt=0 时,递归计算终止在这个 t t t 时间步。这导致了不同长度序列的加权和,其中长序列出现的很少,所以将适当地加大权重。

8.7.1.3 比较策略

在这里插入图片描述

行自上而下分别为:

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

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

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

虽然随机截断在理论上具有吸引力,但很可能是由于多种因素在实践中并不比常规截断更好:

  • 首先,在对过去若干个时间步经过反向传播后,观测结果足以捕获实际的依赖关系。

  • 其次,增加的方差抵消了时间步数越多梯度越精确的事实。

  • 第三,我们真正想要的是只有短范围交互的模型。因此,模型需要的正是截断的通过时间反向传播方法所具备的轻度正则化效果。

8.7.2 通过时间反向传播

在这里插入图片描述

  • “通过时间反向传播”仅仅适用于反向传播在具有隐状态的序列模型。

  • 截断是计算方便性和数值稳定性的需要。截断包括:规则截断和随机截断。

  • 矩阵的高次幂可能导致神经网络特征值的发散或消失,将以梯度爆炸或梯度消失的形式表现。

  • 为了计算的效率,“通过时间反向传播”在计算期间会缓存中间值。

相关文章:

《动手学深度学习 Pytorch版》 8.7 通过时间反向传播

8.7.1 循环神经网络的梯度分析 本节主要探讨梯度相关问题&#xff0c;因此对模型及其表达式进行了简化&#xff0c;进行如下表示&#xff1a; h t f ( x t , h t − 1 , w h ) o t g ( h t , w o ) \begin{align} h_t&f(x_t,h_{t-1},w_h)\\ o_t&g(h_t,w_o) \end{ali…...

2023-10-20 游戏开发-cocos旧版本2.0.6-下载地址-记录

官方下载地址: Cocos Creator 下载 - 轻量高效的开发引擎 Tags cocos/cocos-engine GitHub cocos creater 旧版本: Tool/Package/REAMDE.md adofsauron/CocosCreatorFAQ - Gitee.com v2.0.6版本: Mac版&#xff1a;http://cocos2d-x.org/filedown/CocosStudioForMac-v2.0.…...

Python 框架学习 Django篇 (三) 链接数据库

只要你是做后端开发的&#xff0c;那么就离不开各种数据库&#xff0c;Django框架对各种数据库都非常友好&#xff0c;比如常见的PostgreSQL、MySQL、SQLite、Oracle&#xff0c;django都对他们提供了统一调用api&#xff0c;我们这里主要使用mysql数据库作为演示 一、ORM机制 …...

【debug】安装diffusion的bug解决合集

环境问题 ImportError: cannot import name ‘CLIPImageProcessor’ from ‘transformers’ (D:\Python\lib\site-packages\transformers_init_.py) https://github.com/huggingface/transformers/issues/23340 解决&#xff1a;查看更详细信息&#xff0c;安装环境 transfor…...

面试题 01.02. 判定是否互为字符重排

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;面试题 01.02. 判定是否互为字符重排 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 遍历计数即可。 解题代码&#xff1a; class Solution { public:bool CheckPermutation(string s1, …...

笔记39:在Pycharm中为项目添加新解释器

很久不用pycharm都生疏了 a a a 第一步&#xff1a;创建虚拟环境 略 a a a 第二步&#xff1a;将虚拟环境应用到项目中去 【File】----【Settings】----【Project:~~~】-----【Project Interpreter】----【选择合适的解释器】 ​​​​​​​ 因为我们要用新的解释…...

C#—VB.NET的相同点与不同点

目录 前言 一、相同之处 二、不同之处 三、总结 前言 VB.NET 和C#是两种由微软公司开发的面向对象编程语言。它们在语法上有很多相似之处&#xff0c;但也有一些不同之处。本文将讨论 VB.NET 和C#之间的相同之处和不同之处。 一、相同之处 1.面向对象编程语言&#xff1a…...

【Edabit 算法 ★☆☆☆☆☆】【返回数组第一个元素】 Return the First Element in an Array

【Edabit 算法 ★☆☆☆☆☆】【返回数组第一个元素】 Return the First Element in an Array arrays language_fundamentals Instructions Create a function that takes an array containing only numbers and return the first element. Examples getFirstValue([1, 2, 3…...

在Qt中怎么操作MySQL数据库

一、安装驱动 &#xff08;1&#xff09;安装 在Qt中操作MySQL数据库首先要安装mysql的驱动文件&#xff0c;将MySQL下的libmusql.dll文件复制到Qt的安装路径下的bin文件夹下即可。 本文福利&#xff0c;莬费领取Qt开发学习资料包、技术视频&#xff0c;内容包括&#xff08;…...

C/C++网络编程基础知识超详细讲解上部分(系统性学习day11)

目录 前言 一、网络的含义与构成 含义&#xff1a; 构成&#xff1a; 二、网络的体系结构 1>OSI七层模型 2>TCP/IP协议体系结构 3>数据经过体系结构&#xff0c;怎么封装? 4>端口号 5>大小端序 6>TCP/UDP传输层的协议 三、系统函数API学习框…...

chrome Driver 使用教程

ChromeDriver是一款实用的chrome浏览器驱动工具,能够用于自动化测试、网络爬虫和操作浏览器,其主要作用是模拟浏览器操作。 ## 下载地址 [Chrome for Testing availability]&#xff08;Chrome for Testing availability&#xff09;...

目标检测YOLO实战应用案例100讲-面向恶劣环境下的多模态 行人识别

目录 前言 国内外研究现状 可见光行人目标识别 红外行人目标识别...

react-router-dom v6版本实现Tabs路由缓存切换

目录 文章目录 概要 效果 完整代码 概要 摆了半年摊&#xff0c;好久没写代码了&#xff0c;今天有人问我怎么实现React-Router-dom类似标签页缓存。后面看了一下router的官网。很久以前用的是react-router v5那个比较容易实现。v6变化挺大&#xff0c;但了解react的机制和rea…...

ArcGIS笔记9_数据源缺少空间参考信息?如何定义坐标系?

本文目录 前言Step 1 确定好要赋予给目标文件的恰当坐标系Step 2 定义坐标系 前言 有时从其他软件转换得到了shp文件&#xff0c;拖到ArcGIS后却出现“未知的空间参考&#xff1a;添加的数据源缺少空间参考信息 不能投影”的提示&#xff0c;如下图所示&#xff1a; 这种情况就…...

Elasticsearch实践:ELK+Kafka+Beats对日志收集平台的实现

可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个全文搜索引擎&#xff0c;它还提供了分布式的多用户能力&#xff0c;实时的分析&#xff0c;以及对复杂搜索语句的处理能力&#xff0c;使其在众多场景下&#xff0c;如企业搜索&#xff0c;日志和事件数据分析等…...

离线语音与IoT结合:智能家居发展新增长点

离线语音控制和物联网&#xff08;IoT&#xff09;相结合在家居中具有广泛的应用和许多优势。离线语音控制是指在设备在本地进行语音识别和处理&#xff0c;而不需要依赖云服务器进行处理。IoT是指借助网络&#xff0c;通过手机APP、小程序远程控制家居设备。 启英泰伦基于AI语…...

STM32MP135和STM32MP157的区别

本文介绍了STMicroelectronics公司推出的两款多核处理器STM32MP135和STM32MP157之间的区别&#xff0c;包括主频、集成硬件模块数量、内存大小和电压调节模块等方面。 STMicroelectronics是一家领先的半导体解决方案提供商&#xff0c;在嵌入式系统领域有着丰富的经验。他们…...

微信小程序文本横向无缝滚动

背景&#xff1a; 微信小程序中列表宽度不够长&#xff0c;其中某字段显示不完整&#xff0c;因此要使其自动滚动。 &#xff08;最初看网上很多用定时器实现&#xff0c;但他们的案例中都只是一个横幅、用定时器也无所谓。但是我的需求中是一个上下无限滚动的列表&#xff0c;…...

Layui 主窗口调用 iframe 弹出框模块,获取控件的相应值

var iframeWindow window[layui-layer-iframe index]; iframeWindow.layui.tree............(这里就可以操作tree里面的内容了)。var chrild layero.find(iframe).contents(); chrild.layui.tree (这样是调用不到的)。var child layer.getChildFrame(); child.layui.tree(这…...

镜头边缘的解析力通常比中心差很多的原因是什么?

1、问题背景 之前有总结过一篇文章&#xff0c;“ 相机出图画面一半清晰&#xff0c;一半模糊的原因是什么&#xff1f;”里面有描述到关于镜头边缘的清晰度通常比中心要差的原因主要是光的折射导致的&#xff0c;有读者指出问题&#xff0c;折射率是和传输介质相关&#xff0…...

如何深度解析OpenCore Legacy Patcher:让老款Mac重获新生的技术实现

如何深度解析OpenCore Legacy Patcher&#xff1a;让老款Mac重获新生的技术实现 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher作为…...

别再手动清理AL11了!用ABAP函数EPS2_GET_DIRECTORY_LISTING自动管理SAP服务器文件

告别手动清理&#xff1a;用ABAP自动化管理SAP服务器文件的终极方案 每次打开AL11看到堆积如山的日志文件和临时数据时&#xff0c;你是否感到一阵无力&#xff1f;那些需要定期清理的接口文件、归档数据&#xff0c;是否总在消耗你宝贵的时间&#xff1f;作为SAP系统管理员或A…...

Shader 中的 if:Uniform 分支 vs 动态分支

分支语句在 Shader 中并非一律昂贵。理解 GPU 执行模型&#xff0c;才能准确判断何时可以放心使用 if&#xff0c;何时需要替代方案。 01 GPU 执行模型&#xff1a;先理解 Warp GPU 不像 CPU 那样逐线程独立运行&#xff0c;而是将若干线程捆绑为一个 Warp&#xff08;NVIDI…...

AssetRipper高效数据存储架构:深入解析Unity资产提取工具的核心设计

AssetRipper高效数据存储架构&#xff1a;深入解析Unity资产提取工具的核心设计 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper Asset…...

ENSP实验避坑指南:搞定三层交换、路由器与Cloud互联的那些‘坑’(附完整配置备份)

ENSP实验避坑指南&#xff1a;三层交换、路由器与Cloud互联的实战排错 1. 实验环境搭建的常见陷阱 在ENSP实验中&#xff0c;环境搭建是第一步&#xff0c;也是最容易出问题的地方。很多初学者在配置Cloud、三层交换机和路由器时&#xff0c;常常因为一些细节问题导致整个实验无…...

猿创征文 | 初见乍惊欢,久处亦怦然--我web前端的技术成长之路

目录 致看此篇的读者 初识vue 分享毕设系统作品 分享七夕情人节码源(仅登录部分码源) 学习路线 祝福语 致看此篇的读者 各位不管是新的朋友还是粉丝,大家好!很荣幸大家能在茫茫的C站博文世界中浏览我这一篇博文,在这里由衷的感谢大家!!!然后借着这一次C站举办的这…...

大一C语言课设:手把手教你用链表和文件操作实现网吧计费系统(附完整源码)

从零构建C语言网吧计费系统&#xff1a;链表与文件操作的实战指南 刚接触C语言课程设计时&#xff0c;许多同学都会陷入"知道语法却不知如何应用"的困境。网吧计费系统这个经典课题&#xff0c;恰好能让我们把课本上的结构体、指针、文件操作等知识点串联起来&#x…...

如何用Mithril.js快速集成GPS与地图服务:完整指南

如何用Mithril.js快速集成GPS与地图服务&#xff1a;完整指南 【免费下载链接】mithril.js A JavaScript Framework for Building Brilliant Applications 项目地址: https://gitcode.com/gh_mirrors/mi/mithril.js Mithril.js是一款轻量级JavaScript框架&#xff0c;专…...

SPIFFS 组件介绍

简介 在嵌入式应用中&#xff0c;将文件&#xff08;如配置文件、网页资源或固件数据&#xff09;存储在 Flash 中是一种非常常见的需求。基于原始 SPIFFS 项目&#xff0c;ESP-IDF 中的 SPIFFS 组件为 SPI NOR Flash 提供了一个轻量级文件系统&#xff1a;它支持磨损均衡、一…...

终极指南:3个核心模块掌握京东抢购助手自动化

终极指南&#xff1a;3个核心模块掌握京东抢购助手自动化 【免费下载链接】jd-assistant 京东抢购助手&#xff1a;包含登录&#xff0c;查询商品库存/价格&#xff0c;添加/清空购物车&#xff0c;抢购商品(下单)&#xff0c;查询订单等功能 项目地址: https://gitcode.com/…...