0.参考了
1.https://zhuanlan.zhihu.com/p/32085405
2.https://zybuluo.com/hanbingtao/note/581764
PS因为这个简书没办法打公式,或者我不会打公式,所以只要截图了,格式上可能会有点乱糟糟。
1.LSTM
1.长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
2.LSTM和普通的RNN有什么差别
从上图看主要的差别在c的部分,c被称为状态单元(cell state)。
2.LSTM内部的结构
首先使用LSTM的当前输入x{t}和上一个状态传递下来的h{t-1}拼接训练得到四个状态。
2.png
其中,zi,zf,zo是由拼接向量乘以权重矩阵之后,再通过一个sigmoid激活函数转换成0到1之间的数值,来作为一种门控状态。而z则是将结果通过一个tanh激活函数将转换成-1到1之间的值(这里使用tanh是因为这里是将其做为输入数据,而不是门控信号)。
3.png
4.png
是Hadamard Product,也就是操作矩阵中对应的元素相乘,因此要求两个相乘矩阵是同型的。
5.png
则代表进行矩阵加法。
LSTM的内部主要又三个阶段:
1、忘记阶段
这个阶段主要是对上一个节点传进来的输入进行选择性忘记,简单来说就是记住重要的,忘记不重要的。
具体来说就是通过计算得到的zf来作为忘记门控的(f表示forget),来控制上一个状态的c{t-1}哪些需要记住哪些需要忘记。
2、选择记忆阶段
这个阶段会将当前阶段的输入有选择性的进行记忆(主要对输入x{t}进行选择性记忆)。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由z表示。而选择的门控信号则是由zi(i代表information)来进行控制。
将上面两个步骤的结果相加,即可得到传给下一个状态的c{t},也就是图3中的右上角的公式
3、输出阶段
这个阶段将决定哪些将会被当成当前状态的输出。主要是通过zo来进行控制的。并且还对上一阶段得到的co 进行了放缩(通过一个tanh激活函数进行变化)。
与普通RNN类似,输出y{t} 往往最终也是通过h{t}变化得到。
-----------------------------------补充说明----------------------------------------
1、门(gate)的概念。
门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。假设W是门的权重向量,b是偏置项,那么门可以表示为:
门的公式
因为门的输出是0到1之间的实数向量,那么,当门输出为0时,任何向量与之相乘都会得到0向量,这就相当于啥都不能通过;输出为1时,任何向量与之相乘都不会有任何改变,这就相当于啥都可以通过。因为sigma(是的横着写的6,那个字母就是念sigma)(也就是sigmoid函数)的值域是(0,1),所以门的状态都是半开半闭的。
百度的希腊字母表
1、LSTM用两个门来控制状态单元c的内容,一个是遗忘门(forget gate)它决定了上一时刻的状态单元c{t-1}有多少保留到当前时刻的c{t}。一个是输入门(input gate)他决定了当前时刻网络的输入x{t}有多少保存到状态单元c{t}
2、LSTM用输出门(output gate)来控制状态单元c{t}有多少输出到当前输出值h{t}
遗忘门
输入门
输出门
单元状态
输出
最终输出
3.LSTM的计算方法和相关公式
LSTM的计算激活函数的导数
image.png
image.png
image.png
网友评论