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

深度学习入门笔记(八)可以不断思考的模型:RNN与LSTM

8.1 循环神经网络RNN

之前学到的 CNN 和全连接,模型的输入数据之间是没有关联的,比如图像分类,每次输入的图片与图片之间就没有任何关系,上一张图片的内容不会影响到下一张图片的结果。但在自然语言处理领域,这就成了一个短板。

RNN因此出现,它是一类用于处理序列数据的神经网络。其基本单元结构如下
在这里插入图片描述
自底向上的三个蓝色的节点分别是输入层、隐藏层和输出层。U 和 V 分别是连接两个层的权重矩阵。如果不考虑右边的棕色环路的话,就是一个典型的全连接的网络。

将上面的环路展开,如下
在这里插入图片描述
含义为:在 t 时刻,网络接受输入 Xt 和来自 t-1 时刻的隐藏层状态 St-1,并产生一个 t 时刻的隐藏层状态 St,以及 t 时刻的输出 Ot。其公式化的表示为:
在这里插入图片描述
其中 g 和 f 是各自节点的激活函数。这里面需要注意的一点是,对于每一个时间 t,U、V、W 都是同一个,这非常类似上一章讲到的权值共享。

RNN 的权值共享主要出于两方面的考虑:

  • 减少参数量,也减少计算量
  • RNN 接受的输入是可变长的,如果不进行权值共享,那每个 W 都不同,我们无法提前预知需要多少个 W,实现上的计算就会非常困难。

以上是典型的RNN结构。

8.1.1 变体:双向RNN(BiRNN)

在这里插入图片描述

相比于 RNN,BiRNN 维持了两个方向的状态。正向计算和反向计算不共享权重,也就是说 U、V、W 分别有两个,以对应不同的方向。其公式化的表示就变成了如下的形式:
在这里插入图片描述

8.1.2 变体:深度RNN

前面介绍的结构中,隐藏层只有一层,但在实际的使用中,也经常会增加隐藏层的数量,即为深度RNN,能够捕获和关联更多的前后信息以提升效果。

8.2 RNN 的梯度消失与爆炸

我们尝试求 RNN 的梯度,首先明确函数关系,如下所示:
在这里插入图片描述
求梯度实际上是求 W、V、U 的偏导数。我们以 L 对 W 在 t 时刻求偏导数为例,推导过程如下:
在这里插入图片描述
可以发现,L 关于 W 的偏导数会随着序列的长度而产生长期依赖。

也就是指当前系统的状态,可能受很长时间之前系统状态的影响,这是RNN中无法解决的一个问题。

而且RNN 一般会使用 tanh 函数作为它的激活函数,而 tanh 的导数在 0-1 之间。如此一来,如果 W 也是在 0-1之间,随着 t 的增大,梯度计算中连续相乘就会变得很长,很多个在 0~1 之间的数相乘会逐渐接近 0。梯度接近 0 则意味着梯度消失了;反之如果 W 很大,则梯度也会变得非常大,进而产生梯度爆炸,这是一个很严重的问题。

这就是接下来要介绍的长短期记忆网络要解决的问题。

8.3 长短期记忆网络LSTM

针对RNN的问题,如果我们能让 RNN 在接受上一时刻的状态和当前时刻的输入时,有选择地记忆和删除一部分内容(或者说信息),问题就可以解决了,比如有一句话提及刚才吃了苹果,那么在此之前说的吃香蕉的内容就没那么重要,删除就好了。

LSTM结构如下
在这里插入图片描述
Ct-1表示上一时刻的细胞状态(cell state),ht-1则表示上一时刻的隐藏状态(hidden state)。

LSTM 独特的地方在于它内部使用了 3 个逻辑门来控制细胞的状态,分别是遗忘门、输入门和输出门,并对应了忘记、选择、更新、输出这 4 个不同的阶段,从而有选择性地保留或删除信息。

忘记阶段

刚才说过,对于上一时刻的状态我们如果能够选择性地记忆就好了。LSTM 中就使用了 Zf这个逻辑门来实现相应的功能,这个逻辑门实际上是一个 Sigmoid 单元,我们称为遗忘门。Sigmoid 可以将输入映射在 0~1 之间,得到的值再与 Ct-1相乘,这样就实现了对上一时刻状态 Ct-1的控制,即哪些信息保留或者删除多少。遗忘门的公式化表示为:
在这里插入图片描述

选择阶段

忘记阶段用来选择性保留或者删除上一时刻的内容,选择阶段决定给当前时刻的细胞状态添加哪些新的信息。

这个阶段包括 2 个环节:首先是利用 ht-1和 xt通过 1 个 Sigmoid 单元决定更新哪些信息,然后利用 ht-1和 xt通过 1 个 tanh 层得到新的候选细胞信息,这些信息会根据计算的结果更新到细胞中。这个过程就是输入门,公式化表示为:

在这里插入图片描述

更新阶段

接下来就要对细胞状态 C 进行更新了。这个环节实际上就是把前 2 个环节得到的结果与对应的信息相乘后再加起来,其公式化表示如下:
在这里插入图片描述
zf 和 zi 分别控制了上个阶段和当前阶段要保留多少内容,ct-1 和 zi 则是上个阶段和当前阶段的内容本身。

输出阶段

更新完细胞的状态,就到了最终的输出环节。ht-1 和 xt 这 2 个信息经过一个叫输出门的 Sigmoid 逻辑单元后,与经过 tanh 后被缩放到-1~1 之间的细胞状态 Ct 信息相乘,就得到了当前时刻的隐藏状态 ht。得到 ht 之后,就能得到当前时刻的输出 y 了。ht 的计算过程如下:

在这里插入图片描述
LSTM依然有明显缺点:

  • 并行化困难:LSTM 的本质是一个递归的训练过程,随着实际问题的愈发复杂,这个缺点就会越来越致命。
  • 梯度消失。LSTM 虽然在一定程度上缓解了 RNN 的问题,但是对于长序列的情况,仍有可能会出现梯度消失。
  • LSTM 在计算的时候需要的资源较多。

所以在NLP领域,LSTM逐渐被现在大热的Transformer取代。后面我们也会对Transformer展开介绍。


http://www.kler.cn/a/232628.html

相关文章:

  • 前端面试笔试(二)
  • Java算法OJ(7)随机快速排序
  • 亲测有效:Maven3.8.1使用Tomcat8插件启动项目
  • ARM架构中断与异常向量表机制解析
  • SQL 中 BETWEEN AND 用于字符串的理解
  • 学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
  • CTFSHOW命令执行web入门29-54
  • Redis核心技术与实战【学习笔记】 - 31.番外篇:Redis客户端如何与服务器端交换命令和数据
  • C# 面向对象(OOP)编程关键知识点
  • 服务器内存使用率多少会影响正常访问?
  • Linux命令-badblocks命令(查找磁盘中损坏的区块)
  • ubuntu22.04 安装部署05:禁用默认显卡驱动
  • LeetCode 207:课程表(图论,利用拓扑排序判断是否有环)
  • 数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208)
  • 详述FlinkSql Join操作
  • C/C++ - 异常处理
  • 麒麟信安战略投资湖南超能机器人技术有限公司,加速布局无人智能系统、自主可控机器人操作系统赛道
  • HarmonyOS远程真机调试方法
  • 侵入式智能指针和非侵入式智能指针
  • tsgctf-2021-lkgit-无锁竞争-userfaultfd
  • 【JavaWeb】头条新闻项目实现 基本增删改查 分页查询 登录注册校验 业务功能实现 第二期
  • python调用golang中函数方法
  • 面试高频知识点:2线程 2.1.6线程之间如何通信
  • 06 MP之自动填充+SQL执行的语句和速度分析
  • FreeRTOS中的任务上下文切换时间
  • 【OrangePi Zero2的系统移植】OrangePi Zero2 SDK说明