RNN、LSTM、GRU学习补充

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kl1411/article/details/82979995

隐藏层神经元个数的解释
每一个小黄框代表一个前馈网络层,对,就是经典的神经网络的结构,num_units就是这个层的隐藏神经元个数(例如128,256)
https://www.zhihu.com/question/64470274

双向 LSTM
我今天不舒服,我打算__一天。

只根据‘不舒服‘,可能推出我打算‘去医院‘,‘睡觉‘,‘请假‘等等,但如果加上后面的‘一天‘,能选择的范围就变小了,‘去医院‘这种就不能选了,而‘请假‘‘休息‘之类的被选择概率就会更大。

双向循环神经网络的隐藏层要保存两个值, A 参与正向计算, A’参与反向计算。最终的输出值 y 取决于 A 和 A’
https://blog.csdn.net/aliceyangxi1987/article/details/77094970
 

单层lstm,两层lstm,四层lstm
https://www.zhihu.com/question/48044772

将x输入第一层RNN的后得到隐层状态h,这个隐层状态就相当于第二层RNN的输入,第二层RNN的隐层状态又相当于第三层RNN的输入,以此类推。在TensorFlow中,可以使用tf.nn.rnn_cell.MultiRNNCell函数对RNNCell进行堆叠

Char RNN
https://www.leiphone.com/news/201709/QJAIUzp0LAgkF45J.html

RecurrentNNs的拓扑发生了一个很大的改动,即一个MLP会在time_step这个维度上进行延伸,每个时序都会有input。

假设一个RNN的time_step 确定为 l ,则padded sentence length(step5中矩阵列数)固定为 l。
一次RNNs的run只处理一条sentence。每个sentence的每个token(中文分词)的embedding对应了每个时序 t 的输入。
https://www.zhihu.com/question/41949741

相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

相比RNN只有一个传递状态  h^t  ,LSTM有两个传输状态,一个  c^t (cell state),和一个  h^t (hidden state)。(Tips:RNN中的 h^t 对应于LSTM中的 c^t )

首先使用LSTM的当前输入 x^t 和上一个状态传递下来的 h^{t-1} 拼接训练得到四个状态。

LSTM内部主要有三个阶段:
1. 忘记阶段(遗忘门)。通过计算得到的 z^f (f表示forget)来作为忘记门控,来控制上一个状态的 c^{t-1} 哪些需要留哪些需要忘。
2. 选择记忆阶段(输入门)。当前的输入内容由前面计算得到的  z  表示。而选择的门控信号则是由 z^i (i代表information)来进行控制。
将上面两步得到的结果相加,即可得到传输给下一个状态的 c^t 。也就是上图中的第一个公式。
3. 输出阶段(输出门)。主要是通过  z^o 来进行控制的。并且还对上一阶段得到的 c^t 进行了放缩(通过一个tanh激活函数进行变化)。输出 y^t 往往最终也是通过 h^t 变化得到。

因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。因此很多时候我们往往会使用效果和LSTM相当但参数更少的GRU来构建大训练量的模型。
https://zhuanlan.zhihu.com/p/32085405

GRU模型只有两个门了,分别为更新门和重置门
https://blog.csdn.net/wangyangzhizhou/article/details/77332582

https://zhuanlan.zhihu.com/p/32481747

RNN梯度消失和爆炸的原因
https://zhuanlan.zhihu.com/p/28687529

LSTM如何解决梯度消失问题
https://zhuanlan.zhihu.com/p/28749444

猜你喜欢

转载自blog.csdn.net/kl1411/article/details/82979995