LSTM算法详细解析(含案例)

LSTM单元结构图。
LSTM算法详细解析(含案例)_第1张图片
前向传播:

在Understanding LSTM Networks博客中已经详细得不能再详细的介绍了LSTM网络的前向传播过程。如果英文能力不是很好,也可以参考如何从RNN起步,一步一步通俗理解LSTM_结构之法 算法之道-CSDN博客翻译过来的版本。也可以参考本文的简略解析。

LSTM 的核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径,让信息能在序列连中传递下去。你可以将其看作网络的“记忆”,记忆门一个控制信号控制门是否应该保留该信息,在实现上通常是乘1或乘0来选择保留或忘记。理论上讲,细胞状态能够将序列处理过程中的相关信息一直传递下去。因此,即使是较早时间步长的信息也能携带到较后时间步长的细胞中来,这克服了短时记忆的影响。信息的添加和移除我们通过“门”结构来实现,“门”结构在训练过程中会去学习该保存或遗忘哪些信息。

激活函数:sigmod
门结构中包含着 sigmoid 激活函数。Sigmoid 激活函数与 tanh 函数类似,不同之处在于 sigmoid 是把值压缩到 0~1 之间而不是 -1~1 之间。这样的设置有助于更新或忘记信息,因为任何数乘以 0 都得 0,这部分信息就会剔除掉。同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来。这样网络就能了解哪些数据是需要遗忘,哪些数据是需要保存。

LSTM算法详细解析(含案例)_第2张图片
遗忘门:Forget Gate
遗忘门的功能是决定应丢弃或保留哪些信息。来自前一个隐藏状态的信息和当前输入的信息同时传递到 sigmoid 函数中去,输出值介于 0 和 1 之间,越接近 0 意味着越应该丢弃,越接近 1 意味着越应该保留。
LSTM算法详细解析(含案例)_第3张图片遗忘门的计算公式
LSTM算法详细解析(含案例)_第4张图片输入门:Input Gate

输入门用于更新细胞状态。首先将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去。将值调整到 0~1 之间来决定要更新哪些信息。0 表示不重要,1 表示重要。其次还要将前一层隐藏状态的信息和当前输入的信息传递到 tanh 函数中去,创造一个新的侯选值向量。最后将 sigmoid 的输出值与 tanh 的输出值相乘,sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来的
LSTM算法详细解析(含案例)_第5张图片
输入门的计算公式

LSTM算法详细解析(含案例)_第6张图片
Cell State
首先前一层的细胞状态与遗忘向量逐点相乘。如果它乘以接近 0 的值,意味着在新的细胞状态中,这些信息是需要丢弃掉的。然后再将该值与输入门的输出值逐点相加,将神经网络发现的新信息更新到细胞状态中去。至此,就得到了更新后的细胞状态。
LSTM算法详细解析(含案例)_第7张图片
Cell State的计算公式
LSTM算法详细解析(含案例)_第8张图片
输出门:Output Gate
输出门用来确定下一个隐藏状态的值,隐藏状态包含了先前输入的信息。首先,我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数。最后将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。
LSTM算法详细解析(含案例)_第9张图片
输出门的计算公式
LSTM算法详细解析(含案例)_第10张图片
二、反向传播过程
本文接下来主要讲解反向传播过程,主要以以下结构单元图来推到及计算相关参数。
LSTM算法详细解析(含案例)_第11张图片
对于上述讲到的前向传播过程以上面的LSTM单元结构为例得出以下相关公式
LSTM算法详细解析(含案例)_第12张图片
LSTM算法详细解析(含案例)_第13张图片
△t定义为当前层的Loss值,△out定义为当前层t的下一时刻t+1的反向误差。所以经过推到,可得出计算反向训练的误差变量。相关公式的推导可以参考刘老师的博客LSTM模型与前向反向传播算法 - 刘建平Pinard - 博客园。

LSTM算法详细解析(含案例)_第14张图片
LSTM案例:
我们预先定义两层LSTM单元的相关参数。
LSTM算法详细解析(含案例)_第15张图片定义两个数据
LSTM算法详细解析(含案例)_第16张图片
前向传播:t=0单元
LSTM算法详细解析(含案例)_第17张图片通过计算得出以下参数
LSTM算法详细解析(含案例)_第18张图片前向传播:t=1单元
LSTM算法详细解析(含案例)_第19张图片通过计算得出以下参数

LSTM算法详细解析(含案例)_第20张图片
反向传播:
在语义预测中LSTM网络会使用Softmax交叉熵作为损失函数。为了简单说明在这里定义损失函数为:

在这里插入图片描述
对E求偏导得:
在这里插入图片描述

反向传播:t=1单元

所以带入输入值x与预测值x^得出误差为:
在这里插入图片描述
因为这里只定义了两层网络,所以t+1层的误差为
在这里插入图片描述
所以计算得到这层(t=1)相关参数为:
LSTM算法详细解析(含案例)_第21张图片
反向传播:t=0单元

同理,对于t=0层网络
LSTM算法详细解析(含案例)_第22张图片
LSTM算法详细解析(含案例)_第23张图片
这里以学习率为λ=0.1为计算参数误差:
LSTM算法详细解析(含案例)_第24张图片
最后,根据权重更新策略,跟新权重为:
LSTM算法详细解析(含案例)_第25张图片
如果你看懂了,请给个喜欢或收藏表示对我的支持。

如果需要详细的实现matlab代码和"用LSTM实现两个数的相加预测结果"的案例matlab代码。可以关注公众号“科研小贩”或搜索小程序"创客粮食"免费获取。
LSTM算法详细解析(含案例)_第26张图片
LSTM算法详细解析(含案例)_第27张图片

你可能感兴趣的:(lstm,算法,神经网络)