【游戏迷】LSTM(长短期记忆网络)原理介绍

LSTM算法(LongShortTermMemory,长短期记忆网络)
1.概念介绍
LSTM算法是一种重要的目前使用最多的时间序列算法 , 是一种特殊的RNN(RecurrentNeuralNetwork , 循环神经网络) , 能够学习长期的依赖关系 。 主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题 。 简单来说 , 就是相比普通的RNN , LSTM能够在更长的序列中有更好的表现 。
2.网络结构
所有RNN都具有神经网络的重复模块链的形式 。 在标准的RNN中 , 该重复模块将具有非常简单的结构 , 例如单个tanh层 。
标准的RNN网络如下图所示
【游戏迷】LSTM(长短期记忆网络)原理介绍
文章图片
LSTM也具有神经网络的重复模块链的形式 。 只是在RNN的基础上 , 每个重复模块增加了三个神经网络层 , 如下图所示:
【游戏迷】LSTM(长短期记忆网络)原理介绍
文章图片
图中的绿色大框代表单元模块;黄色方框代表神经网络层;粉色圆圈代表逐点操作 , 例如矢量加法;箭头表示向量转换 , 从一个节点输出到另一个节点输入;合并的行表示串联 , 而分叉的行表示要复制的内容 , 并且副本将到达不同的位置 。
和RNN不同的是:RNN中,就是个简单的线性求和的过程.而LSTM可以通过“门”结构来去除或者增加“细胞状态”的信息,实现了对重要内容的保留和对不重要内容的去除.通过Sigmoid层输出一个0到1之间的概率值 , 描述每个部分有多少量可以通过 , 0表示“不允许任务变量通过” , 1表示“运行所有变量通过”.
3.LSTM核心思想
【游戏迷】LSTM(长短期记忆网络)原理介绍
文章图片
首先CNN的主线就是这条顶部水平贯穿的线 , 也就是长期记忆C线(细胞状态) , 达到了序列学习的目的 。 而h可以看做是短期记忆 , x代表事件信息,也就是输入 。 LSTM也是以这一条水平贯穿的C线为主线 , 在此基础上添加三个门 , 以保护控制单元状态 。 所以LSTM有删除或向单元状态添加信息的能力 , 都是由这门的结构来调节控制的 。 这个门(gate)是一种选择性的让信息通过的方式 。 它是由Sigmoid神经网络和矩阵逐点乘运算组成 。
LSTM增加的三个神经网络层就代表LSTM的三个门(遗忘门、记忆门、输出门)
1.遗忘门
在我们LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息 。 这个决定通过一个称为忘记门层完成 。 该门会读取ht?1和xt , 输出一个在0到1之间的数值给每个在细胞状态Ct?1中的数字 。 1表示“完全保留” , 0表示“完全舍弃” 。
其中ht?1表示的是上一个cell的输出 , xt表示的是当前细胞的输入 。 σσ表示sigmod函数 。
2.输入门
下一步是决定让多少新的信息加入到cell状态中来 。 实现这个需要包括两个步骤:首先 , 一个叫做“inputgatelayer”的sigmoid层决定哪些信息需要更新;一个tanh层生成一个向量 , 也就是备选的用来更新的内容 , C^t 。 在下一步 , 我们把这两部分联合起来 , 对cell的状态进行一个更新 。
现在是更新旧细胞状态的时间了 , Ct?1更新为Ct 。 前面的步骤已经决定了将会做什么 , 我们现在就是实际去完成 。
我们把旧状态与ft相乘 , 丢弃掉我们确定需要丢弃的信息 。 接着加上it?C~t 。 这就是新的候选值 , 根据我们决定更新每个状态的程度进行变化 。
3.输出门
最终 , 我们需要确定输出什么值 。 这个输出将会基于我们的细胞状态 , 但是也是一个过滤后的版本 。 首先 , 我们运行一个sigmoid层来确定细胞状态的哪个部分将输出出去 。 接着 , 我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘 , 最终我们仅仅会输出我们确定输出的那部分 。
4.LSTM公式详解
遗忘门(forgetgate):它决定了上一时刻的单元状态c_t-1有多少保留到当前时刻c_t
输入门(inputgate):它决定了当前时刻网络的输入x_t有多少保存到单元状态c_t
输出门(outputgate):控制单元状态c_t有多少输出到LSTM的当前输出值h_t
公式:
遗忘门的计算为:
遗忘门的计算公式中:
W_f是遗忘门的权重矩阵 , [h_t-1,x_t]表示把两个向量连接成一个更长的向量 , b_f是遗忘门的偏置项 , σ是sigmoid函数 。
输入门的计算:
根据上一次的输出和本次输入来计算当前输入的单元状态:
【游戏迷】LSTM(长短期记忆网络)原理介绍】当前时刻的单元状态c_t的计算:由上一次的单元状态c_t-1按元素乘以遗忘门f_t , 再用当前输入的单元状态c_t按元素乘以输入门i_t , 再将两个积加和:这样 , 就可以把当前的记忆c_t和长期的记忆c_t-1组合在一起 , 形成了新的单元状态c_t 。 由于遗忘门的控制 , 它可以保存很久很久之前的信息 , 由于输入门的控制 , 它又可以避免当前无关紧要的内容进入记忆 。