RNN/LSTM

RNN

在语音识别、自然语言处理、OCR中,输入的单个样本前后是有关联的,比如说,我/想/吃/香蕉,吃后面肯定要有个名词,动词后面不可能动词,所以说前面的词对后面的词的预测很重要,怎样表达出这种前后关联呢?
普通的CNN\DNN本次的样本经过网络后的输出跟上一个样本的输入和输出都没有关系,
但是在RNN中,通过网络结构建立了这种联系;
在这里插入图片描述

在这里插入图片描述

总结来说:
RNN的结构,就是某一隐层的输入,不光来自其上一层的输出,同时还以一定比例加上上一个样本对应隐层的值;
由于W、U、V是固定值,所以RNN信息的传递非常的单一固定,以特定的权重记住上一个隐层的信息和当前输入的信息,参数量小,计算量大,也就是RNN能够表达的前后关联简单单一,无法表达前后复杂的关联;
但是RNN存在一个问题,就是梯度消失。
什么是梯度消失:在多层网络中,影响梯度大小的因素主要有两个:权重和激活函数的偏导。深层的梯度是多个激活函数偏导乘积的形式来计算,如果这些激活函数的偏导比较小(小于1)或者为0,那么梯度随时间很容易vanishing;相反,如果这些激活函数的偏导比较大(大于1),那么梯度很有可能就会exploding。因而,梯度的计算和更新非常困难。
因为反向回传更新梯度用的是链式求导法则,累乘的话,比如说0.1的1000次幂,10的1000的次幂,可以分别导致梯度消失和梯度爆炸;
梯度等于0或者参数值为NaN的话,参数无法继续更新,网络也就停止了学习;
所以梯度消失而言,relu可能好一点,Sigmoid导数取值范围是[0, 0.25],由于神经网络反向传播时的“链式反应”,很容易就会出现梯度消失的情况。
对于RNN而言,由于前后环环相扣,链式求导法则的项数更多,激活函数的梯度值大多小于1,所以更容易引起梯度消失,具体如下图所示:
在这里插入图片描述
其中前向传播过称为:
在这里插入图片描述
在这里插入图片描述
其实一直到这里,虽然后面一项累乘得到值可能很小,但是它只是累加当中的一项,何以导致梯度消失?

LSTM(Long short-term memory)

LSTM就是为了解决RNN梯度消失而诞生的,其结构比RNN要复杂的多,但其实解决梯度消失也可以通过采用更换激活函数来完成,在实际应用中,原始的RNN用的很少,一般说的RNN就是指LSTM.

在这里插入图片描述
由上图可以看出,对下一个样本,前一个样本的输入有c(t-1)和h(t-1)
其中z的所有变体都是h(t-1)和xt的结合,C(t-1)代表上一个样本的隐层输出,h(t-1)是对于C的变换,z有很多种变体,参数量较普通的RNN大大增加。

在这里插入图片描述
这么复杂的弯弯绕结构究竟好在哪里?
有一种笼统的说法,那就是传统的RNN只能按照一个固定的规律将前面的样本信息输入到后面,时间序列相隔越远的,对后面的影响越小,但是在LSTM中,前面的样本对后面是否有影响,有多大的影响,有更多的参数来定义,这些影响是不固定的,是需要学习的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值