LSTM(long short-Term Memory,长短时记忆模型)
一、LSTM简述
LSTM是基于RNN进行修改,属于RNN的一种变形,为了避免RNN中出现的梯度消失问题。对比RNN,LSTM中多了一条贯穿所有状态的记忆状态,所有的遗忘门、记忆们、输出门也都结合记忆状态进行操作。
二、LSTM的具体结构
其中LSTM内部结构由1个记忆状态(细胞状态)和3个控制门控神经元组成(输入门、输出门、遗忘门)
三、结构模块解析
3.1、遗忘门(forget gate):以一定概率控制遗忘掉多少上一层的记忆状态(隐藏细胞)。具体结构如下图:
其中ht-1表示上一层的隐藏状态,xt表示该层的特征输入,再通过一个激活函数sigmoid,得到遗忘门的输出ft,由于ft的值是在0-1之间,这里就代表了遗忘掉多少上一层的记忆状态。用数学公式表示为:
f(t)=σ(Wf · h(t−1) + Uf · x(t) + bf)
其中Wf, Uf, bf为线性关系的系数和偏差。σ为sigmoid激活函数。
3.2、输入门(input data):负责处理当前位置的输入,决定有多少新的输入信息需要存入到记忆状态。
从图中可以看到输入门由两部分组成,第一部分使用了sigmoid激活函数,输出为i(t),第二部分使用了tanh激活函数,输出为a(t), 两者的结果后面会相乘再去更新细胞状态。用数学表达式即为:
i(t) = σ(Wi · h(t−1) + Ui · x(t) + bi)
a(t) = tanh(Wa · h(t−1) + Ua · x(t) + ba)
其中Wi,Ui,bi,Wa,Ua,ba,为线性关系的系数和偏差。σ为sigmoid激活函数。
3.3、记忆状态的更新:选择性的移除前一时刻的旧信息(记忆状态)并且选择性的添加当前时刻的新信息
细胞状态C(t)由两部分组成,第一部分是C(t−1)和遗忘门输出f(t)的乘积,第二部分是输入门的i(t)和a(t)的乘积,即:
C(t) = C(t−1) ⊙ f(t) + i(t) ⊙ a(t)
其中,⊙为Hadamard积。
3.4、LSTM输出门:决定当前时刻多少记忆状态用于输出。即决定当前状态的输出以及下一状态隐藏状态的输入。
当前状态的输出以及该状态隐藏状态的输出ht:
o(t) = σ(Wo · h(t−1) + Uo · x(t) + bo)
h(t) = o(t) ⊙ tanh(C(t))
四、LSTM的前向传播
LSTM模型有一个隐藏状态h(t),以及记忆状态C(t),模型参数几乎是RNN的4倍,因为现在多了Wf,Uf,bf,Wa,Ua,ba,Wi,Ui,bi,Wo,Uo,bo这些参数。
1)更新遗忘门输出:
f(t) = σ(Wf · h(t−1) + Uf · x(t) + bf)
2)更新输入门两部分输出:
i(t) = σ(Wi · h(t−1) + Ui · x(t) + bi)
a(t) = tanh(Wa · h(t−1) + Ua · x(t) + ba)
3)更新记忆状态:
C(t) = C(t−1) ⊙ f(t) + i(t) ⊙ a(t)
4)更新输出门输出:
o(t) = σ(Wo · h(t−1) + Uo · x(t)+bo)
h(t) = o(t) ⊙ tanh(C(t))
5)更新当前序列索引预测输出:
y^(t)=σ(V · h(t)+c)
五、参考学习链接
,其中反向传播也可以参考该链接。