为了解决深度神经网络中的梯度消失问题,提出了一种特殊的RNN模型——长短期记忆网络(Long Short-Term Memory networks, LSTM),能够有效的传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略。
长短时记忆网络原理图:参考LSTM Networks
原理图中的图形及其含义:一张图理解LSTM参数 和 timestep、inputsize、batchsize的区别
- 黄色矩形框是神经网络层,常见的激活函数有sigmoid,tanh和线性修正单元relu;
- 粉色圆圈表示对向量进行点向运算,如向量加法、点乘;
- 直线表示每一行都带有一个向量,该向量从一个节点输出到其他节点的输入;
- 线的合并表示连接;
- 线的交叉表示其内容正在复制,副本将转到不同的位置。
长短期记忆网络结构包括:参考LSTM
遗忘门 forget gate:LSTM会先根据新的输入和上一时刻的输出决定遗忘掉之前的哪些记忆——输入和上一步的输出会整合为一个单独的向量,然后通过sigmoid神经层,最后点对点的乘在单元状态上。
如何实现“遗忘”:sigmoid 函数会先将前一个输出 h(t-1) 和当前输入 x(t) 压缩到 (0,1) 的区间上,然后点对点的乘以单元状态。如果整合后的向量在通过sigmoid层后变为0,会“遗忘删除记忆”;通过sigmoid层后为1,单元状态会“保持完整记忆”。代码解析:官网案例理解
遗忘门的计算公式如下,f(t)是 sigmoid 神经层的输出向量:
输入门 input gate:用来控制是否将在 t 时刻(当前时刻)的数据并入单元状态中的控制单位。用 tanh 函数层将当前时刻向量中的有效信息提取出来压缩映射到区间 (-1, 1) 中创造了一个当前单元状态的候选 C'(t),然后使用图中 tanh 函数层左侧的 sigmoid 函数来控制这些记忆要放“多少”进入单元状态(为每个分量做出评级 (0, 1),评级越高的会有越多的记忆进入单元状态)
输入门的计算公式如下:
用单元状态 C(t) 表示神经元在 t 时刻过后的“记忆”,这个向量涵盖了在 t+1 时刻前神经网络对于所有输入信息的“概括总结” (C'(t) 可以理解为短期记忆的加工沉淀,可理解为期望输入)
更新上一个单元状态值 C(t−1):将上一个状态值 C(t-1) 更新为当前状态值 C(t)。将上一个状态值 C(t-1) 乘以 f(t),以此表达期待忘记的部分。之后我们将得到的值加上 i(t) * C'(t),以此得到新的候选值。
更新上一个状态值的计算公式如下:
输出门 output gate:首先,运行一个 sigmoid 层,它决定了我们要输出的细胞状态的哪些部分。然后,将单元格状态 C(t) 通过 tanh 函数(将值规范化到-1和1之间),并将其乘以 sigmoid 门的输出,至此我们输出了我们决定的那些部分。
输出门计算公式如下:
参考长短期记忆网络