pytorch-RNN存在的问题

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会讲。

相关推荐

  1. pytorch RNN

    2024-07-12 06:08:02       38 阅读
  2. 基于pytorch RNN实现文本分类

    2024-07-12 06:08:02       56 阅读
  3. Pytorch框架下CNN和RNN

    2024-07-12 06:08:02       33 阅读
  4. RNN(循环神经网络)存在什么问题,如何改进?

    2024-07-12 06:08:02       42 阅读
  5. 基于pytorch RNN实现字符级姓氏文本分类

    2024-07-12 06:08:02       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 06:08:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 06:08:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 06:08:02       58 阅读
  4. Python语言-面向对象

    2024-07-12 06:08:02       69 阅读

热门阅读

  1. Elasticsearch基础教程

    2024-07-12 06:08:02       23 阅读
  2. 分享WPF的UI开源库

    2024-07-12 06:08:02       29 阅读
  3. C# —— 数组的告诫查询方法

    2024-07-12 06:08:02       26 阅读
  4. 内网、外网通信的底层实现

    2024-07-12 06:08:02       23 阅读
  5. 什么是XSS跨站脚本攻击

    2024-07-12 06:08:02       25 阅读
  6. 托管你的程序——命令行后台运行记录

    2024-07-12 06:08:02       27 阅读
  7. JDBC 实例分享——简易图书管理系统

    2024-07-12 06:08:02       25 阅读
  8. 工作理念分享

    2024-07-12 06:08:02       26 阅读
  9. 如何安装和管理RabbitMQ

    2024-07-12 06:08:02       29 阅读
  10. 微信小程序连接阿里云IOT物联网平台

    2024-07-12 06:08:02       28 阅读
  11. [Linux][Shell][Shell函数]详细讲解

    2024-07-12 06:08:02       26 阅读
  12. vivado EQUIVALENT_DRIVER_OPT、EXCLUDE_PLACEMENT

    2024-07-12 06:08:02       25 阅读
  13. 四大内网穿透利器对比

    2024-07-12 06:08:02       27 阅读
  14. ORM Bee,如何使用Oracle的TO_DATE函数?

    2024-07-12 06:08:02       29 阅读
  15. HTTP1.0和HTTP1.1的区别

    2024-07-12 06:08:02       28 阅读
  16. 5 Better ways to code in Rust

    2024-07-12 06:08:02       23 阅读