LSTM
长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。
长短时记忆网络的思路:

按照上面时间维度展开:

在 t 时刻,LSTM 的输入有三个:当前时刻网络的输入值 X_t、上一时刻 LSTM 的输出值 h_t-1、以及上一时刻的单元状态 C_t-1;
LSTM 的输出有两个:当前时刻 LSTM 输出值 h_t、和当前时刻的单元状态 C_t.
关键问题是:怎样控制长期状态 c ?
如何在算法中实现这三个开关?
方法:用 门(gate)
方法:用门的输出向量按元素乘以我们需要控制的那个向量
原理:门的输出是 0到1 之间的实数向量,当门输出为 0 时,任何向量与之相乘都会得到 0 向量,这就相当于什么都不能通过;
输出为 1 时,任何向量与之相乘都不会有任何改变,这就相当于什么都可以通过。
LSTM 的前向计算
一共有 6 个公式
遗忘门(forget gate)
它决定了上一时刻的单元状态 c_t-1 有多少保留到当前时刻 c_t
输入门(input gate)
它决定了当前时刻网络的输入 x_t 有多少保存到单元状态 c_t
输出门(output gate)
控制单元状态 c_t 有多少输出到 LSTM 的当前输出值 h_t
LSTM 的反向传播训练算法
主要有三步:
1. 前向计算每个神经元的输出值,一共有 5 个变量,计算方法就是前一部分:

2. 反向计算每个神经元的误差项值。与 RNN 一样,LSTM 误差项的反向传播也是包括两个方向:
一个是沿时间的反向传播,即从当前 t 时刻开始,计算每个时刻的误差项;
一个是将误差项向上一层传播。
3. 根据相应的误差项,计算每个权重的梯度。
接着就来求两个方向的误差,和一个梯度计算。
1.误差项沿时间的反向传递:
定义 t 时刻的误差项:

目的是要计算出 t-1 时刻的误差项:

利用 h_t c_t 的定义,和全导数公式,可以得到 将误差项向前传递到任意k时刻的公式:

2. 将误差项传递到上一层的公式:

3. 权重梯度的计算:

以上就是 LSTM 的训练算法的全部公式。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208594.html原文链接:https://javaforall.net
