LSTM长短期记忆(Long Short-Term Memory)
LSTM的表现通常比时间递归神经网络及隐马尔科夫模型(HMM)更好, 之所以出现LSTM, 是为了解决,当 要训练的时间序列过长时, RNN会丧失学习很远信息的能力, 由于反馈神经网络的链式求导计算, 会引起梯度爆炸, 或梯度消失, 这时训练的模型效果很差
LSTM的细胞(cell)
Cell 的状态就像是传送带,它的状态会沿着整条链条传送,而只有少数地方有一些线性交互。信息如果以这样的方式传递,实际上会保持不变,类似游戏中主线剧情.
LSTM 通过门(gate)的结构控制 cell 的状态,并向其中删减或增加信息。可以把门理解为一种控制信息通过的方式。门由一个 sigmoid 网络层与一个按位乘操作构成。类似是否考虑支线剧情. Sigmoid 层的输出值在 0 到 1 间,表示每个部分所通过的信息。0 表示对所有信息关上大门;1 表示信息都通过。
一个 LSTM 有三个这样的门,控制 cell 的状态。
一.忘记门
首先,LSTM 的第一步需要决定我们需要从 cell 中抛弃哪些信息。这个决定是从 sigmoid 中的「遗忘层」来实现的。它的输入是 ht-1 和 xt,把上 次的状态ht-1和这 次的输 xt相比较,输出为一个 0 到 1 之间的数。Ct−1 就是每个在 cell 中所有在 0 和 1 之间的数值,就像我们刚刚所说的,0 代表全抛弃,1 代表全保留。
二.记忆门
下一步,我们需要决定什么样的信息应该被存储起来。这个过程主要分两步。
第一步,首先是 sigmoid 层(输入门)决定我们需要更新哪些值(忘记旧的);
第二步,随后,tanh 层生成了一个新的候选向量 C`,它能够加入状态中(更新后的cell state)。
最后,我们将这两个值结合起来,并更新 cell 的状态。例如t+1的信息和St的信息一样,可以考虑遗忘t+1的信息.
三.更新门
把老cell state更新为新cell state
XOR和AND这样的 来 新我们的cell state:
四.输出门
最后,我们需要确定输出的内容。这个输出内容取决于我们的 cell 状态,
首先,我们会运行一个 sigmoid 层决定 cell 状态输出哪一部分。
随后,我们把 cell 状态通过 tanh 函数,将输出值保持在-1 到 1 间。
之后,我们再乘以 sigmoid 门的输出值,就可以得到结果了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:循环神经网络LSTM - Python技术站