畅游人工智能之海--Keras教程之循环神经网络(二)

畅游人工智能之海--Keras教程之循环神经网络(二) | GRU和LSTM

开篇

图示对比

RNN

rnn

LSTM

lstm

GRU

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
2
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
2
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