循环神经网络RNN与LSTM

文章介绍了循环神经网络(RNN)和长短期记忆(LSTM)的基本概念,强调了RNN的记忆能力在处理顺序相关数据中的优势,并详细解释了LSTM的遗忘门、输入门和输出门机制,以解决梯度问题。文中还提到了RNN与LSTM在参数共享上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

循环神经网络(Recurrent Neural Network,RNN)与卷积神经网络一样,都是深度学习中的重要部分。
循环神经网络可以看作一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接收其他神经元的信息,也可以接收自身的信息,形成具有环路的网络结构,正因为能够接收自身神经元信息的特点,让循环神经网络具有更强的记忆能力。
卷积神经网络和全连接网络的数据表示能力已经非常强了,为什么还需要RNN呢?这是因为现实世界中面临的问题更加复杂,而且很多数据的输入顺序对结果有重要影响。如文本数据,其是字母和文字的组合,先后顺序具有非常重要的意义。语音数据、视频数据,这些数据如果打乱了原始的时间顺序,就会无法正确表示原始的信息。针对这种情况,与其他神经网络相比,循环神经网络因其具有记忆能力,所以更加有效。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成、文本情感分类等任务上。
针对有序数据,如文本、语音等,使用循环神经网络进行分析相关问题的核心思想是,网络中不同时间的输入之间会存在顺序关系,每个输入和它之前或者之后的输入存在关联,希望通过循环神经网络在时序上找到样本之间的序列相关性。
最常见、最基本的循环神经网络有RNN、LSTM(长短期记忆)和GRU等,其中GRU可看作LSTM的简化版本,在PyTorch中提供了这三种循环神经网络结构,可直接调用其函数类。

一、RNN

在这里插入图片描述
这里,X是输入值,S是隐藏层的值,O是输出层的值,U,V,W是参数,U是输入层到隐藏层的参数,V是隐藏层到输出层之间的参数,W是前一个时间点隐藏层的值作为当前时间点隐藏层的输入的权重。

下面是此图的具体实现形式:
在这里插入图片描述

按照时间线展开的话:(注意:只是按照时间线展开成链状,原结构是左半图的循环结构)
在这里插入图片描述
可以看到,当前时间点隐藏层的值 S t S_{t} St不仅取决于 X t X_{t} Xt,还取决于上一个时间点隐藏层的值 S t − 1 S_{t-1} St1,再最后输出 O t O_{t} Ot,即:
O t = g ( V S t ) S t = f ( U X t + W S t − 1 ) O_{t}=g(VS_{t}) \\[3mm] S_{t}=f(UX_{t}+WS_{t-1}) Ot=g(VSt)St=f(UXt+WSt1)

1式是输出层的计算公式,其中g是激活函数,输出层是一个全连接层,每个节点都和隐藏层的每个节点相连,2式中,f是激活函数,W是前一个时间点隐藏层的值作为当前时间点隐藏层的输入的权重,循环层和全连接层的区别就是循环层多了一个权重矩阵 W。
2式代入1式可得:
在这里插入图片描述
可知t时刻关联前面所有状态
注意:在计算时,每一步使用的参数U、W、V都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点!

例子:输入( X 1 X_{1} X1, X 2 X_{2} X2, X 3 X_{3} X3, X 4 X_{4} X4)

![在这里插入图片描述](https://img-blog.csdnimg.cn/894ae5da3d694fb880a9ea519fbc430c.png#pic_center =%80x)
在这里插入图片描述
依次计算:
在这里插入图片描述
计算输出y
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/62920b6b007541daba4a347998811b8c.png#pic_center =%90x)
注意:参数共享,所以每一步的参数都是一样的。计算 h 1 h_{1} h1时, h 0 h_{0} h0一般会使用全0进行初始化。

通过反向传播算法更新参数U,V,W来训练模型。

二、LSTM

LSTM(Long Short-Term Memory)网络又叫作长短期记忆网络,是一种特殊的RNN,主要用于解决长序列训练过程中的梯度消失和梯度爆炸问题,相比普通的RNN网络,LSTM能够在更长的序列中获得更好的分析效果。
直观感受RNN与LSTM区别:
在这里插入图片描述
在这里插入图片描述
其实就是多了一些门来更新细胞状态。
LSTM的关键就是细胞状态,水平线在图上方贯穿运行。
LSTM有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法,包含一个Sigmoid神经网络层和一个Pointwise乘法的非线性操作。如此,0代表“不许任何量通过”,1就指“允许任意量通过”!从而使得网络就能了解哪些数据是需要遗忘,哪些数据是需要保存。
在这里插入图片描述
LSTM拥有三种类型的门结构:遗忘门/忘记门、输入门和输出门,来保护和控制细胞状态。

2.1 遗忘门

表示上个时间点的状态应该遗忘多少,对于 C t − 1 C_{t-1} Ct1来说,会首先看上一个阶段的输出 h t − 1 h_{t-1} ht1和这个阶段的输入 X t X_{t} Xt,并通过Sigmoid来作用,输出一个向量 f t f_{t} ft(该向量每一个维度的值都在0到1之间,1表示完全保留,0表示完全舍弃,相当于记住了重要的,忘记了无关紧要的),最后与细胞状态 C t − 1 C_{t-1} Ct1相乘。
在这里插入图片描述
在这里插入图片描述

2.2 输入门

在这里插入图片描述

输入门是确定什么样的新信息被加入到细胞状态中,首先会用上一阶段的输出 h t − 1 h_{t-1} ht1和这个阶段的输入 X t X_{t} Xt,通过Sigmoid来控制要加多少进入 C t C_{t} Ct,即第一个公式的含义;然后又会创建一个备选的 C t ~ \tilde{C_{t}} Ct~,用tanh去控制,即第二个公式,最后二者相乘即为要加入 C t C_{t} Ct的部分。
在这里插入图片描述

更新细胞状态: C t − 1 C_{t-1} Ct1更新为 C t C_{t} Ct。经过遗忘门,把旧状态与 f t f_{t} ft相乘,丢弃掉确定要丢弃的信息,接着经过输入门加上 i t ∗ C ~ t i_{t} * \tilde{C}_{t} itC~t
在这里插入图片描述

2.3 输出门

在这里插入图片描述

首先,运行一个Sigmoid层来确定细胞状态的哪个部分将输出出去。
接着,把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和Sigmoid门的输出相乘,最终会输出确定要输出的部分。
在这里插入图片描述
LSTM的特点就是,通过遗忘门,输入门,输出门对于状态C的影响,最终决定每一个时间点,要忘记多少,记住多少,输出多少,最后把这个状态一直传递下去,从而达到可以控制其不会忘记遥远的重要信息,也不会把附近的不重要的信息看的太重的作用。

注意:与RNN还有一点不同的是参数不共享,因为它是在两个不同的向量中。RNN的权值是在同一个向量中,只是时间点不同。
例如:
f t = σ ( W f [ h t − 1 , x t ] + b f ) 写开其实是 : f t = σ ( W f h h t − 1 + W f x x t + b f ) f_{t}=σ(W_{f}[h_{t-1},x_{t}]+b_{f}) \\[5mm]写开其实是:f_{t}=σ(W_{f_{h}}h_{t-1}+W_{f_{x}}x_{t}+b_{f}) ft=σ(Wf[ht1,xt]+bf)写开其实是:ft=σ(Wfhht1+Wfxxt+bf)

参考:
1. 一文搞懂RNN(循环神经网络)基础篇
2. RNN循环神经网络(recurrent neural network)
3. RNN详解(Recurrent Neural Network)
4. LSTM原理及实践(一):理论
5. 如何从RNN起步,一步一步通俗理解LSTM

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值