详细代码实现见同专栏下博文
给网络增加短期记忆能力的方法
具体应用
序列到类别模式
假设样本1∶ = (1 , ⋯ , )为一个长度为 的序列,输出为一个类别 ∈ {1, ⋯ , }。将样本 按不同时刻输入到循环神经网络中,得到不同时刻的隐藏状态 1 , ⋯ , ,并将 看作整个序列的最终表示输入给分类器(⋅)进行分类,即 = ()。也可以对整个序列的所有状态进行平均,并用这个平均状态来作为整个序列的表示,即 = (1/ ∑)
异步的序列到序列模式:编码器-解码器
先编码后解码:输入为长度为 的序列 1∶ = (1 , ⋯ , ), 输出长度为 的序列1∶ = (1 , ⋯ , ),先将样本按不同时刻输入到一个循环神经网络(编码器)中,并得到其编码,再用另一个循环神经网络(解码器)得到输出序列̂。
= 1 (−1, ) ∀ ∈ [1, ]
+ = 2 (+−1, ̂ −1) ∀ ∈ [1, ]
̂ = (+) ∀ ∈ [1, ]
单隐藏层简单循环网络
令向量 ∈ ℝ 表示在时刻 时网络的输入, ∈ ℝ 表示隐藏层状态(即隐藏层神经元活性值),则 不仅和当前时刻的输入 相关,也和上一个时刻的隐藏层状态−1相关。简单循环网络在时刻 的更新公式为 = −1 + + , = ( )。
参数学习(以同步的序列到序列为例)
输入为长度为 的序列 1∶ = (1 , ⋯ , ), 输出长度为 的序列1∶ = (1 , ⋯ , ),定义时刻 的损失函数为 ℒ = ℒ( , ()),整个序列的损失函数为 ℒ = ∑ℒ 。
基于门控的循环神经网络
长程依赖问题:
梯度爆炸问题 :权重衰减或梯度截断
梯度消失问题:更改模型或 = −1 + ( , −1; )(但是存在梯度爆炸和记忆容量问题)
长短期记忆网络和门控循环单元网络
长短期记忆网络LSTM
新的内部状态:LSTM网络引入一个新的内部状态 ∈ ℝ 专门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态 ∈ ℝ。内部状态 通过下面公式计算:
= ⊙ −1 + ⊙ ̃ , = ⊙ tanh( )
其中 ∈ [0, 1]、 ∈ [0, 1] 和 ∈ [0, 1] 为三个门来控制信息传递的路径;⊙为向量元素乘积;−1 为上一时刻的记忆单元;̃ ∈ ℝ 是利用非线性函数得到的候选状态̃ = tanh( + −1 + ) ,在每个时刻 ,LSTM网络的内部状态 记录了到当前时刻为止的历史信息。
门控机制
记忆:循环神经网络中的隐状态 存储了历史信息,可以看作一种记忆。在简单循环网络中,隐状态每个时刻都会被重写,因此可以看作一种短期记忆。在神经网络中,长期记忆可以看作网络参数,隐含了从训练数据中学到的经验,其更新周期要远远慢于短期记忆。而在 LSTM 网络中,记忆单元 可以在某个时刻捕捉到某个关键信息,并有能力将此关键信息保存一定的时间间隔。记忆单元 中保存信息的生命周期要长于短期记忆 ,但又远远短于长期记忆, 长短期记忆是指长的 “短期记忆”。 因此称为长短期记忆。
深层循环网络
扩展到图结构:递归神经网路和图神经网络