LSTM:长短期记忆网络
长短期记忆网络 LSTM
长短期记忆网络(Long Short-Term Memory
,简称LSTM
)是一种特殊的递归神经网络(RNN
),它被设计用来解决传统RNN在处理长序列数据时遇到的梯度消失或梯度爆炸问题。LSTM通过引入三个门控机制来控制信息的流动,从而能够学习到长期依赖关系。
LSTM的关键组成部分包括:
遗忘门(Forget Gate):决定从上一个状态中丢弃哪些信息。遗忘门通过sigmoid函数输出0到1之间的值,表示保留信息的程度。
输入门:由两个部分组成,一个是更新门(Update Gate),它决定哪些新信息将被存储在单元状态中;另一个是候选状态(Candidate State),它通过tanh函数生成新的候选值,这些值将被加入到当前单元状态中。
输出门(Output Gate):决定下一个隐藏状态的值,这通常用于预测下一个时间步的输出。
LSTM
单元的工作原理可以概括为以下几个步骤:
- 遗忘门决定从细胞状态中丢弃哪些信息。
- 输入门的更新门决定哪些新信息将被加入到细胞状态中,而候选状态生成这些新信息。
- 更新后的细胞状态通过细胞状态向量和隐藏状态向量更新。
- 输出门决定隐藏状态的输出,这通常用于下一个时间步的预测。
LSTM
因其能够处理长序列数据而广泛应用于自然语言处理、语音识别、时间序列预测等领域。
传统的循环神经网络(RNN
)虽然建立了不同时刻隐藏层之间的关系,实现了记忆的效果,但只是基于前一时刻,是一种short
memory
。为了实现长期记忆,RNN开始引入一种门电路结构来“记笔记”,从而实现长期记忆。
- 我们先看RNN的平面结构,如下图所示:
- 和RNN相比,
LSTM
增加了一条新的时间链,记录长期记忆(Long Term Memory
),我们这里用C
表示,同时它增加了两条链之间的关系,见下图所示
- 新增加的链条
C
就是相当于记事本。以t
时刻为例,和RNN
相比,t
时刻的隐层输入除了来自输入\(x_t\)和\(s_{t-1}\),还包含记事\(c_t\)的信息,如下图所示:
- 让我们把\(S_t\)和\(c_t\)之间的关联放大看清楚:一条线拆成三条线:
将删除和增加操作结合起来得到输出:
\[ c_t = f_1 * c_{t-1} + f2 \]
而\(c_t\)除了会被向下传递,还会用来更新当前短期记忆\(s_t\),最后可以计算输出得到\(y_t\),同时保持短期记忆链\(s\)和长期记忆链\(c\)并相互更新.
聊聊LSTM的梯度消失与梯度爆炸 LSTM的梯度消失 首先明确,真正意义上来说,LSTM是不会梯度消失的(解决了RNN的问题,所以为啥呢?)。
LSTM的梯度消失与MLP 或者CNN中梯度消失不一样。MLP/CNN中不同层有不同的参数,梯度各算各的;RNN中同样的权重在各时间步共享参数,最终的梯度是各时间步梯度之和。即使梯度越传越弱,远距离的梯度接近消失,近距离的梯度还在,所以总的梯度之和不会消失。进一步说,LSTM的梯度由RNN结构的梯度和线性变换函数的梯度组成。即使RNN的梯度接近0,线性变换函数的梯度就是其斜率,是一个常数,LSTM的梯度趋向于一个常数,这就解决了梯度消失的问题。 LSTM所谓的梯度消失:梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。
一个简单且熟悉的例子:使用LSTM预测大气臭氧浓度
- 数据预处理
1 |
|
- 构造数据loader
1 |
|
- LSTM模型构建
1 |
|
- 训练模型以及可视化训练效果
1 |
|