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

pytorch-RNN存在的问题

这里写目录标题

  • 1. RNN存在哪些问题呢?
    • 1.1 梯度弥散和梯度爆炸
    • 1.2 RNN为什么会出现梯度弥散和梯度爆炸呢?
  • 2. 解决梯度爆炸方法
  • 3. Gradient Clipping的实现
  • 4. 解决梯度弥散的方法

1. RNN存在哪些问题呢?

1.1 梯度弥散和梯度爆炸

梯度弥散是梯度趋近于0
梯度爆炸是梯度趋近无穷大

1.2 RNN为什么会出现梯度弥散和梯度爆炸呢?

先看RNN的梯度推导公式,如下图:
在这里插入图片描述
在这里插入图片描述

从hk的梯度求导公式和hk的计算过程可以看出,hk的计算和Whh相关,也就是梯度也与Whh有关,因此从h1 时刻到hk时刻,Whh被乘了k-1次,即Whhk-1,那么当W>1时,就使得Wrk随着k(句子长度)的增大,梯度趋近无穷大,会出现梯度爆炸,而W<1时,Wrk随着k(句子长度)的增大,梯度会趋近于0,会出现梯度弥散。
综上:RNN并不是可以处理无限长的句子,其随着句子的增长可能出现梯度弥散和梯度爆炸的问题

2. 解决梯度爆炸方法

在这里插入图片描述

上图为一篇解决梯度爆炸的paper,其中左边的图描述的是梯度爆炸产生的原因,当W出现巨变的时候会导致loss的方向发生变化,从而偏移原来正确的方向,出现梯度爆炸。
解决梯度爆炸的方法是给w.grad设置一个阈值,比如是15,当大于阈值时,将w.grad=w.grad/||w.grad||15=115=15,从而保证了loss的方向不变,loss虽然可能有一些跳变,比如:从0.23~0.32,,但慢慢的还会下降。
这种方法叫gradient clipping

3. Gradient Clipping的实现

只需获取到模型参数后调用torch.nn.utils.clip_grad_norm_(p,10)即可,10为阈值。
见下图,注意torch.nn.utils.clip_grad_norm_(p,10)和print是平齐的。
在这里插入图片描述

4. 解决梯度弥散的方法

下文LSTM会讲。

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

相关文章:

  • Leetcode 17:电话号码的字母组合
  • jmeter-beanshell学习4-beanshell截取字符串
  • QScrollArea 设置最大的高度值
  • CentOS6禁止锁屏
  • MapReduce底层原理详解:大案例解析(第32天)
  • 【JVM基础篇】Java垃圾回收器介绍
  • java通过poi-tl导出word实战详细步骤
  • 将自签证书添加到Java的可信任证书列表中
  • 一文清晰了解CSS——简单实例
  • 工程师 - 什么是XML文件
  • [AI 大模型] 阿里巴巴 通义千问
  • 关于无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上 解决方法
  • 轻松创建对象——简单工厂模式(Java实现)
  • Docker Dockerfile:构建与优化
  • 开源项目有哪些机遇与挑战?
  • 利用【Python】【线性规划】优化工厂生产:实现智能资源配置与利润最大化的现代解决方案
  • 【spark】Exception in thread “main“ ExitCodeException exitCode=-1073741701
  • 数学建模美赛经验小结
  • 206. 反转链表 (Swift 版本)
  • 海狐外卖O2O商城系统:技术架构与运营模式的深度解析
  • 14-31 剑和诗人5 - 使用 AirLLM 和分层推理在单个 4GB GPU 上运行 LLama 3 70B
  • 风景园林工程设计乙级资质业绩要求案例分析
  • 无人机之飞行规划与管理篇
  • realsense D435l+mid360标定
  • 深度学习中的正则化技术 - 数据集增强篇
  • 【Docker系列】Docker 镜像源:优化你的容器化开发流程
  • 【Linux】Windows环境下配置虚拟机静态IP
  • 完美解决AttributeError: ‘list‘ object has no attribute ‘shape‘的正确解决方法,亲测有效!!!
  • 链接服务器“XX”的OLEDB访问接口“MSOLEDBSQL”返回了消息“登录超时已过期” 解决方法
  • 【AI伦理与社会责任】讨论人工智能在隐私保护、偏见消除、自动化对就业的影响等伦理和社会问题。