畅游人工智能之海--Keras教程之循环神经网络(二)
畅游人工智能之海--Keras教程之循环神经网络(二) | GRU和LSTM
开篇
图示对比
RNN

LSTM

GRU

优化的点
在RNN中,随着时间线的延长,距离目前时间比较远的数据所包含的信息会被衰减殆尽,举个例子
“I grew up in France… I speak fluent ?.” 我们现在想判断出 ?处应该是什么,我们直观地判断结果应该是Franch,判断的依据是前面有个France,可以认为France是\(x_4\)的数据,我们要推断的是\(x_t(t \geq 8)\)的数据。对RNN而言,这两个单词离得太远了,因此解决不了。
LSTM
本质上增加了存储的信息量,可以认为\(C_t\)中保留了从开始到现在所有需要的信息。这是长期知识,然后通过与RNN中已经提供的短期知识结合,共同判断结果。细致的讲解可以参看下面的博客。
https://www.jianshu.com/p/95d5c461924c
GRU
效果跟LSTM差不多,但是节省了更多的计算资源,因为没有细胞状态了。细致原理参看下面的文章。
https://zhuanlan.zhihu.com/p/32481747
keras实现
LSTM
1 | keras.layers.LSTM(units, activation='tanh', recurrent_activation='sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=2, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False) |
具体参数的含义在中基本ref都已经介绍过了,这里新增的两个activation通过默认值可以直接与lstm的结构对应上。
GRU
1 | keras.layers.GRU(units, activation='tanh', recurrent_activation='sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=2, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False, reset_after=False) |
参考
https://baijiahao.baidu.com/s?id=1639105801622260740&wfr=spider&for=pc
图片摘自https://www.jianshu.com/p/95d5c461924c