LSTM神经网络介绍

本文介绍了LSTM网络,一种解决传统神经网络处理长程依赖问题的模型。LSTM通过门控机制,如遗忘门、输入门和输出门,有效地控制信息流动。文章详细讲解了这些门的工作原理,并给出了简单的实例来解释LSTM如何处理和传递信息。

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


引言

传统的神经网络在处理与事件发生的时间轴有关系的问题时,如果需要联系并考虑上下文的时候就无能为力了,比如语音识别,机器翻译,时间序列等,因为他们的输出只是由当前的输入决定。所以就提出了RNN,了解RNN基本原理之后,也就为研究LSTM网络(long short-term memory,长短时记忆网络)做了铺垫。

一、介绍

1.1什么是LSTM?

LSTM主要通过引入门控机制来控制信息的累积速度,包括有选择地加入新的信息,并有选择地遗忘之前累积的信息,由此改善循环神经网络(RNN)的长程依赖问题以及缓解长序列训练过程中的梯度消失问题。

1.2基础知识

1.2.1门控机制

在数字电路中,门(gate)为一个二值变量(0,1),0代表关闭状态、不许任何信息通过;1代表开放状态,允许所有信息通过。
gate 在LSTM网络中实际上就是一层全连接层,输入是一个向量,输出是一个 0到1 之间的实数向量。表示以一定的比例允许信息通过。

1.2.2 相关激活函数

sigmoid函数:Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限。
tanh函数:tanh函数的输出映射在(-1,1)之间,在一定范围的内,比Sigmoid函数收敛速度更快。

1.2.3网络参数介绍

二、LSTM网络架构

2.1架构图

前向传播共六个公式如图所示。
LSTM三个门的作用
(1)遗忘门f:决定上一个时刻的记忆单元状态需要遗忘多少信息,保留多少信息到当前记忆单元状态。
(2)输入门i:控制当前时刻输入信息候选状态有多少信息需要保存到当前记忆单元状态。
(3)输出门o:控制当前时刻的记忆单元状态有多少信息需要输出给外部状态。

三、LSTM的门

3.1遗忘门

LSTM第一步是用来决定放弃或者保留什么信息。这个决定由“forget gate”门通过sigmoid进行选择性忘记,越接近0表示越应该忘记,越接近1表示越应该保留。


请注意这里参数应为向量输入来代表具体信息,我就先用1或0表示所有信息方便直观理解。

实例:设这一层所有权重 W f W_f W f =100;偏置 b f b_f b f =1, h t − 1 h_{t-1} h t 1 =0(前一时刻没有任何隐藏信息), C t − 1 C_{t-1} C t 1 =1(前一时刻记忆单元保留的张三信息), x t x_t x t =1(输入李四的信息),则由公式计算得 f t f_t f t ≈1,表示需要保留信息(即当前时刻遗忘门决定保留之前的张三信息),由此我们实现了继续保留历史信息传递给当前记忆单元状态 C t C_t C t 。反之 f t f_t f t ≈0,表示需要忘记之前的信息。

3.2输入门

第二步是产生我们需要更新的新信息。这一步包含两部分,“input gate”通过sigmoid来决定哪些值用来更新,tanh用来生成新的候选值。然后将sigmoid的输出值乘以tanh输出的候选信息,也即sigmoid的输出值决定tanh输出值中的内容哪些是重要的需要留下来的信息。
在这里插入图片描述

实例:设这一层权重 W i W_i W i =100; W c W_c W c =100偏置 b i b_i b i =1, b c b_c b c =1, h t − 1 h_{t-1} h t 1 =0(前一时刻没有任何隐藏信息), x t x_t x t =1(输入李四信息,同上所述),则由公式计算得 i t i_t i t ≈1(决定需要添加新信息), C t ~ \tilde{C_t} C t ~ ≈1(新的候选信息,李四的信息),即 i t i_t i t * C t ~ \tilde{C_t} C t ~ =1表示需要给当前记忆单元状态更新的信息。

将第一步和第二步得到的结果相加起来就是丢掉不需要的信息,添加新信息的过程,即可得到传输给下一个状态的信息。比如在前面的例子中我们保存的是张三的信息,现在有了新的李四信息,我们需要把张三的信息仍保留,然后把李四的信息也保存下来。

实例:设 C t − 1 C_{t-1} C t 1 =1(张三的信息)由前两步得 f t f_t f t ≈1(需要保留张三的信息), i t i_t i t * C t ~ \tilde{C_t} C t ~ =1(需要添加李四的信息)则由公式计算得当前记忆单元状态 C t C_t C t =2(既保留有张三信息,也添加了李四信息)。

3.3输出门

最后一步是决定模型的输出,这个阶段将确定下一个隐藏状态(包含了先前的输入信息)。首先是通过sigmoid层来得到输出,然后使用tanh对上一阶段得到的新的记忆单元状态进行放缩,再与sigmoid得到的输出逐对相乘,以确定隐藏状态应该携带的信息,再将新的作为当前的输出,即把新的信息传递到下一个时间步长。

实例:设这一层所有权重 W o W_o W o =100;偏置 b o b_o b o =1, h t − 1 h_{t-1} h t 1 =0, x t x_t x t =1,则由公式计算得 o t o_t o t ≈1(决定需要输出当前的记忆单元信息), h t h_t h t ≈1表示需要输出当前状态信息(既保留张三信息,也添加李四信息),留给下一个单元选择输入以此来考虑到历史信息,由于 h t h_t h t 每个时刻都会被重写,可以看作短时记忆。反之,若 o t o_t o t ≈0,则 h t h_t h t =0( h t h_t h t 什么信息都没有输出,但是 C t C_t C t 仍可以保持历史信息, C t C_t C t 可看作长的短时记忆)。

这显然可以理解,tanh函数是对先前学到信息的压缩处理,起到稳定数值的作用,以及sigmoid函数的输出,两者的结合学习就是递归神经网络的学习思想。至于模型是如何学习的,那就是后向传播误差学习权重的一个过程了。

四、LSTM的简单实例

这是在看了台大李宏毅教授的深度学习视频之后的一点总结。下图是李宏毅教授LSTM这一章节PPT里的内容,在这里只简要介绍一下,详细的大家可以去视频观看,希望能帮助大家更好的理解LSTM模型。

可以看到在具体实例中,我们分别对三个门(input gate,forget gate,output
gate)以及输入神经网络中分别赋予了权重值w以及偏差值b为1,先把 x 1 x_1 x 1 =3, x 2 x_2 x 2 =1, x 3 x_3 x 3 =0分别代入得,当前时刻信息输入为3;输入门的值为90经过sigmoid函数可以把值视为为1,表示允许信息通过;遗忘门值为110经过处理后视为1表示保留之前细胞状态信息 C t − 1 C_{t-1} C t 1 =0即为0;由此得当前时刻细胞状态 C t C_t C t 为3+0=3;输出门值 o t o_t o t 为-10处理后视为0,即不允许输出当前状态。故第一个输出为y= h t h_t h t =0。
可得当前时刻网络的各参数为 x t x_t x t =(3,1,0); h t − 1 h_{t-1} h t 1 =0; C t ~ \tilde{C_t} C t ~ =3; f t f_t f t =1; i t i_t i t =1; o t o_t o t =0; C t − 1 C_{t-1} C t 1 =0; C t C_t C t =3;y= h t h_t h t =0
同理,把 x 1 x_1 x 1 =4, x 2 x_2 x 2 =1, x 3 x_3 x 3 =0, x t x_t x t =(4,1,0); h t − 1 h_{t-1} h t 1 =0; C t ~ \tilde{C_t} C t ~ =4; f t f_t f t =1; i t i_t i t =1; o t o_t o t =0; C t − 1 C_{t-1} C t 1 =3; C t C_t C t =7;y= h t h_t h t =0
x 1 x_1 x 1 =2, x 2 x_2 x 2 =0, x 3 x_3 x 3 =0, x t x_t x t =(2,0,0); h t − 1 h_{t-1} h t 1 =0; C t ~ \tilde{C_t} C t ~ =2; f t f_t f t =1; i t i_t i t =0; o t o_t o t =0; C t − 1 C_{t-1} C t 1 =7; C t C_t C t =7;y= h t h_t h t =0
x 1 x_1 x 1 =1, x 2 x_2 x 2 =0, x 3 x_3 x 3 =1, x t x_t x t =(1,0,1); h t − 1 h_{t-1} h t 1 =0; C t ~ \tilde{C_t} C t ~ =1; f t f_t f t =1; i t i_t i t =0; o t o_t o t =1; C t − 1 C_{t-1} C t 1 =7; C t C_t C t =7;y= h t h_t h t =7
x 1 x_1 x 1 =3, x 2 x_2 x 2 =-1, x 3 x_3 x 3 =0, x t x_t x t =(3,-1,0); h t − 1 h_{t-1} h t 1 =7; C t ~ \tilde{C_t} C t ~ =3; f t f_t f t =0; i t i_t i t =0; o t o_t o t =0; C t − 1 C_{t-1} C t 1 =7; C t C_t C t =0;y= h t h_t h t =0
故最后可得输出为0;0;0;7;0


参考

LSTM介绍及反向传播算法推导(非常详细)
LSTM神经网络详解