通俗理解循环神经网络(RNN)和LSTM(李宏毅视频课笔记整理)


0 前言

RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络,它能挖掘数据中的时序信息以及语义信息。本文以李宏毅老师上课内容为基础,介绍RNN和LSTM的模型框架。

1 RNN

1.1 RNN的基本框架

假设在一个自动售票机上需要自动获知输入的命令中的关键词汇的词义:
在这里插入图片描述
在使用神经网络之前要先考虑将词汇表示为一个向量,比如使用独热编码:
在这里插入图片描述
也可以用词汇的字母来表示,如果词汇中存在某个字母,则将对应字母位置置为1:
在这里插入图片描述
将词汇向量输入到网络中,由输出判断其词义:
在这里插入图片描述
但是当输入为一句话时,由于每次只能输入一个词,所以除了destination和time词义的词汇能够判断,其他词汇都会被认为是other。这就会出现一个问题:如果不关心词汇之间的上下文,可能目标词汇的词义就会完全相反:
在这里插入图片描述
所以希望网络是有记忆的,可以根据上下文来判别词义。如图,上一次隐藏层的结果会被存到memory里,下一次的输出会受memory影响:
在这里插入图片描述
第一次输入为: [ 1 1 ] [ 1 1 ] [ 2 2 ] \left[\begin{array}{l} 1 \\ 1 \end{array}\right]\left[\begin{array}{l} 1 \\ 1 \end{array}\right]\left[\begin{array}{l} 2 \\ 2 \end{array}\right] [11][11][22],给定memory的初始值为:[0 ,0],权重都为1,不设置bias,激励函数为线性,可以得到输出为[4, 4]:
在这里插入图片描述
第二次输入相同的 [ 1 1 ] [ 1 1 ] [ 2 2 ] \left[\begin{array}{l} 1 \\ 1 \end{array}\right]\left[\begin{array}{l} 1 \\ 1 \end{array}\right]\left[\begin{array}{l} 2 \\ 2 \end{array}\right] [11][11][22],但是此时memory里已经存了上一次隐藏层的结果,那么最后的输出就变为[12, 12]了:
在这里插入图片描述
识别句子的时候,只需要将一个个词汇按序丢入网络即可:
在这里插入图片描述

1.2 其他类型的RNN模型

1.2.1 Jordan Network

刚刚介绍的在memory存放隐藏层的值的网络结构被称为 Elman network,还有一种结构是Jordan Network,区别是这种网络的memory里存放的是上一次的输出:
在这里插入图片描述

1.2.2 Bidirectional RNN

Bidirectional RNN 网络的读取可以正向和反向同时进行,把双方的隐藏层联合起来用来产生输出。好处是范围比较广,前后的信息都可以参考:
在这里插入图片描述

2 LSTM

2.1 简介

长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。相比普通的RNN,LSTM能够在更长的序列中有更好的表现,一般的编程算法中使用RNN时默认是使用LSTM。

2.2 LSTM的基本框架

这是一个复杂的系统,比普通RNN增加了控制信号的输入,每次都有四个输入,其中只有一个是样本,其他三个都是控制信号。如下图所示,有三个控制门,Input Gate控制输入,Forget Gate控制memory单元,Output Gate控制输出:
在这里插入图片描述
如下图,当输入信号z输入时首先经过转换函数 g ( ) g() g(),再与输入控制信号相乘得到 g ( z ) f ( z i ) g(z)f(z_i) g(z)f(zi),再读取memory中的 c c c,这个 c c c也会受控制,隐藏层的输出为 c ′ = g ( z ) f ( z i ) + c f ( z f ) c^{\prime}=g(z) f\left(z_{i}\right)+c f\left(z_{f}\right) c=g(z)f(zi)+cf(zf),再由控制信号 z o z_o zo决定是否输出,即最后输出为 a = h ( c ′ ) f ( z o ) a=h\left(c^{\prime}\right) f\left(z_{o}\right) a=h(c)f(zo)
在这里插入图片描述
举一个实际数据的例子。这里的输入是一个三维的向量,注意 x 1 x_1 x1是输入, x 2 x_2 x2的两种状态为 ± 1 ±1 ±1,代表input gate和forget gate 的信号控制, x 3 x_3 x3控制output gate的状态。可以根据从左往右的顺序推断最后的输出 y y y的情况:
在这里插入图片描述
通常各个门的输入前会预置bias,平常没有输入的时候有一定的默认值,表示是关闭还是开启的,一般在input gate和output gate都默认关闭,而forget gate默认开启。

2.3 LSTM的一些讨论

2.3.1 LSTM和其他模型的关系

你觉得这个模型有些复杂,那跟全连接神经网络有什么关系呢?
在这里插入图片描述
只需要把结点换成一个基本框,直观看就是增加了权值,比全连接多了4倍的参数:
在这里插入图片描述
那么和RNN的关系是什么呢?
在这里插入图片描述
即输入x会拆开变成四种的数据,都会用到memory单元。

2.3.2 LSTM解决梯度消失

普通的RNN会出现梯度消失问题(gradient vanishing problem)和梯度爆炸问题(gradient exploding problem)的问题。当输入发生轻微变化时,输出改变剧烈,而且很快收敛:
在这里插入图片描述
为什么会出现这种问题呢?这并非是激励函数导致的,而是因为训练RNN时会把memory往后传递,这样每一次w在不同时间点会反复被使用。

而LSTM可以解决梯度消失的问题,是因为处理memory的方法是不一样的。RNN随时都会用到memory,而LSTM是可以控制的其使用的,因为永远都会有forget gate存在,如果不需要的时候可以一直关闭:
在这里插入图片描述
GRU是LSTM的简化版本,比起LSTM少了一个门。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值