微信扫一扫打赏支持

《python深度学习》笔记---6.2-3、循环神经网络-理解LSTM层和GRU层

《python深度学习》笔记---6.2-3、循环神经网络-理解LSTM层和GRU层

一、总结

一句话总结:

SimpleRNN 并不是Keras 中唯一可用的循环层,还有另外两个:LSTM 和 GRU。在实践中 总会用到其中之一,因为 SimpleRNN 通常过于简化,没有实用价值。

 

1、SimpleRNN为什么没有实用价值?

【理论上SimpleRNN应该能够记住许多时间步之前见过的信息】:SimpleRNN 的最大问题是, 在时刻 t,理论上来说,它应该能够记住许多时间步之前见过的信息,但实际上它是不可能学 到这种长期依赖的。
【梯度消失问题】:其原因在于梯度消失问题(vanishing gradient problem),这一效应类似于 在层数较多的非循环网络(即前馈网络)中观察到的效应:随着层数的增加,网络最终变得无 法训练。
【LSTM 层和 GRU 层都是为了解决这个问题而设计的】

 

3、LSTM 层?

【携带信息跨越多个时间步的方法】:LSTM 层是 SimpleRNN 层的一种变体,它增加了一种携带信息跨越多个时间步的方法。
【序列中的信息可以在任意位置跳上传送带, 然后被传送到更晚的时间步,并在需要时原封不动地跳回】:假设有一条传送带,其运行方向平行于你所处理的序列。序列中的信息可以在任意位置跳上传送带, 然后被传送到更晚的时间步,并在需要时原封不动地跳回来。
【它保存信息以便后面使用,从而防止较早期的信号在处理过程中逐渐消失】:这实际上就是LSTM 的原理

 

 

4、LSTM 的原理?

LSTM保存信息以便后面使用,从而防止较早期的信号在处理过程中逐渐消失。

 

 

5、LSTM做IMDB电影评论分类实例 验证精度达到了89%,肯定比 SimpleRNN 网络好多了,为什么?

【LSTM 受梯度消失问题的影响要小得多】
from keras.layers import LSTM

model = Sequential()
model.add(Embedding(max_features, 32))
model.add(LSTM(32))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['acc'])
history = model.fit(input_train, y_train,
                    epochs=10,
                    batch_size=128,
                    validation_split=0.2)

 

 

6、为什么LSTM 不能表现得更好?

【没有调节超参数】:一个原因是你没有花力气来调节超参数,比如嵌入维度或LSTM 输出维度。
【缺少正则化】:另一个原因可能是缺少正则化。
【LSTM擅长评论分析全局的长期性结构】:但说实话,主要原因在于,适用于评论分析全局的长期性结构(这 正是 LSTM 所擅长的),对情感分析问题帮助不大。
【LSTM做问答和机器翻译】:对于这样的基本问题,观察每条评论中出现 了哪些词及其出现频率就可以很好地解决。这也正是第一个全连接方法的做法。但还有更加困 难的自然语言处理问题,特别是问答和机器翻译,这时 LSTM 的优势就明显了。

 

 

 

二、6.2-3、循环神经网络-理解LSTM层和GRU层

转自或参考:

 

 

 
posted @ 2020-10-14 01:39  范仁义  阅读(331)  评论(0编辑  收藏  举报