简单循环神经网络的局限性
循环神经网络横向结构也是借助激活函数进行传递的:
上图是循环神经网络按时间步展开,而如果一次处理的时间步过长,即从左到右的层数很深,那么同样也会面临普通神经网络所遇到的梯度消失和梯度爆炸的问题。
此外,还可能出现处理时序数据时特有的问题:无法长期记住当前的状态,例如词汇的单复数。
在句子”The person,who is reading this paper,__ a smart guy."中前面有the person,说明主语是单个人,那么后面自然是is,但是循环神经网络由于两个单词距离较远,无法进行单复数的判别。
为此,人们提出了GRU以及LSTM,虽然在深度学习历史上是先有LSTM,再有GRU,但GRU结构相对简单,而LSTM可以看作是GRU的推广。
GRU(门控循环单元)
循环神经网络按时间步展开时,从左到右传递的是
,而为了和LSTM联系起来,在表述GRU(门控循环单元)时用
代替
。
在循环神经网络中最主要的问题是没办法长期记住当前的状态,于是我们希望这个
为此,将其表示为两者简单的线性加权组合形式:
其中,激活函数sigmoid曲线如下:
输出值在0-1之间,因此
也是一个在0-1之间的数,往往取到接近于0或接近于1。
- 当其接近于1时,
是当前模型构建出来的值,进行更新
- 当其接近于0时,
是上一时刻的值
当训练参数得到的模型
使得
一直接近于0时,
值保持不变,也就起到了长期记忆的作用。
这是简化的的GRU模型,相应的还有完整的GRU模型:
添加了一个新的门,用以表述
的相关性,相比简化版的GRU,具有很强的健壮性和实用性。而从结构上来思考,就是特征之间有些是相互关联的(
取1),有些则不关联(
取0):
LSTM(长短期记忆神经网络)
LSTM(长短期记忆神经网络),可以看作是GRU(门控循环单元)的推广,首先我们写出完全版GRU的模型如下:
其中最后一步更新时,采取的是
简单的线性加权组合形式,其加权系数和为1,如果我们做一下改进,取两个不相关的加权系数
。
同时将
提出来放到输出中 ,那些门函数中的原
也应当用
替换,这就是大名鼎鼎的LSTM:
其中
,update,用于表示模型构建的参数所占权重,
,forget,用于表示上一时刻的值所占权重,
,output,用于表示
的相关性。
用于短期记忆,
用于长期记忆,LSTM由此得名。
可以看到LSTM和GRU的对比如下:
可以看到,LSTM比起GRU结构复杂,所需的计算资源大,但是效果往往比GRU好。