RNN和LSTM

本文介绍了循环神经网络(RNN)的基本原理及其局限,特别是梯度消失问题。针对这些问题,文章详细阐述了长短时记忆网络(LSTM)的结构,包括输入门、遗忘门和输出门的工作机制,展示了LSTM如何有效地学习和处理长期依赖信息。

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

一,考虑问题:

 

当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列

当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列

类似上面任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。这时,就需要用到深度学习领域中一类非常重要神经网络:循环神经网络(Recurrent Neural Network)

 

二,认识循环神经网络

 

下图是一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:

 

 

右边是左边的展开图。

这个网络在t时刻接收到输入Xt之后,隐藏层的值是St,输出值是Ot。关键一点是,St的值不仅仅取决于Xt,还取决于St-1。我们可以用下面的公式来表示循环神经网络的计算方法:

         

 

1是输出层的计算公式,输出层是一个全连接层,也就是它的每个节点都和隐藏层的每个节点相连。V是输出层的权重矩阵,g是激活函数。式2是隐藏层的计算公式,它是循环层。U是输入x的权重矩阵,W是上一次的值St-1作为这一次的输入的权重矩阵,f是激活函数。

从上面的公式我们可以看出,循环层和全连接层的区别就是循环层多了一个权重矩阵 W。

 

从上面可以看出,循环神经网络的输出值Ot,是受前面历次输入值影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。

 

循环神经网络的训练BPTT

 

上述RNN的局限:

l RNN的梯度爆炸和消失问题

不能很好的处理较长的序列

RNN在训练中很容易发生梯度爆炸和梯度消失,这导致训练时梯度不能在较长序列中一直传递下去,从而使RNN无法捕捉到长距离的影响。

处理解决:

通常来说,梯度爆炸更容易处理一些。因为梯度爆炸的时候,我们的程序会收到NaN错误。我们也可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。

梯度消失更难检测,而且也更难处理一些。总的来说,我们有三种方法应对梯度消失问题:

1. 合理的初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。

2. 使用relu代替sigmoid和tanh作为激活函数。

3. 使用其他结构的RNNs,比如长短时记忆网络(LTSM)和Gated Recurrent Unit(GRU),这是最流行的做法。

三,LSTM

LSTM是一种 RNN 特殊的类型,可以学习长期依赖信息。

 

可以看到中间的 cell 里面有四个黄色小框,理解了那个代表的含义一切就明白了,每一个小黄框代表一个前馈网络层,就是经典的神经网络的结构,num_units就是这个层的隐藏神经元个数。其中1、2、4的激活函数是 sigmoid,第三个的激活函数是 tanh。

 

LSTM和传统循环神经网络最大的不同就是它使用了输入门、遗忘门和输出门来控制网络实现长时记忆的功能。

 

具体看一下三个门:

1,输入门、遗忘门和输出门

输入门控制着网络的输入 ,输出门控制着网络的输出。

2、遗忘门——记忆衰减系数

遗忘门的作用就是决定以前的哪些记忆将被保留,哪些记忆将被遗忘,正是由于遗忘门的作用,LSTM有了长期记忆的功能。对于给定的功能,遗忘门能够自己学习保留多少以前的记忆。

C_{t-1}作为上一步t-1时刻网络中的记忆单元,传入t时刻的网络之后,第一步就是决定他的遗忘程度,将t时刻前面的记忆状态乘上一个0~1的系数进行衰减,接着加上t时刻学到的记忆作为更新之后的记忆传出网络。

记忆衰减系数f_{t}计算过程如下:


首先将t-1时刻的网络输出h_{t-1}和这一步的网络输入x_{t}结合起来,然后作用线性变换,最后再经过sigmoid激活函数,将结果映射到0~1作为记忆衰减系数。

**f_{t}为遗忘门

3、t时刻学到记忆的计算过程

当前时刻学到的记忆C~_[t}是通过当前输入和上一时刻输出的线性变换和tanh激活函数得到的。过程如下:


其中,对于该时刻学到的记忆也有一个衰减系数i_{t},这个系数跟上面方式相同,使用线性变换再使用sigmoid激活函数,将结果映射到0~1之间。

**i_{t}为输入门

4、当前时刻的记忆状态C_{t}的计算过程

最后将t-1时刻的衰减系数乘t-1时刻的记忆,加上该时刻t学到的记忆乘以它对应的衰减系数,便得到了当前t时刻的记忆状态。计算过程如下:

 

5、计算当前时刻的输出h_{t}

当前时刻t的网络输出h_{t}取决于当前时刻t的记忆状态和t时刻的输入、t-1时刻的输出,具体计算过程如下:

 

采用类似于计算记忆衰减系数的方法计算得到输出门的系数o_{t},这个系数决定了输出的多少。

**o_{t}为输出门

cell 最上面的一条线的状态即 C(t) 代表了长时记忆,而下面的 h(t)则代表了工作记忆或短时记忆。

 

几点需要注意:

 

1)cell 的权重是共享的,这是什么意思呢?这是指这张图片上有三个绿色的大框,代表三个 cell ,但是实际上,它只是代表了一个 cell 在不同时序时候的状态,所有的数据只会通过一个 cell,然后不断更新它的权重。

 

具体如下:

 

 

 

2)为什么LSTM模型中既存在sigmoid又存在tanh两种激活函数?即为什么用两种函数,即门(输入门,输出门,遗忘门)所使用的激活函数,与求值的激活函数不一样。

 

解答是,门是控制开闭的,全开时值为0,全闭值为0。有开有闭时,值在0到1之间。如果选择的激活函数得到的值不在0,1之间时,通常来说是没有意义的。对于求值时的激活函数,选取时与深层网络中激活函数选取是一样的,没有行与不行,只有好与不好。所以,总结来说,门的激活函数只能是值域为0到1的,对于求值的激活函数无特殊要求。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值