声明:本文主要参考于《TensorFlow2深度学习》一书
目录
基础的RNN网络结构如下图所示,上一个时间戳的状态向量 与当前时间戳的输入
经过线性变换,在通过激活函数tanh后得到当前时间戳的状态变量
,用来进行输出
相对于基础的RNN网络结构中只有一个状态向量 ,LSTM新增了一个可以作为内部memory的状态变量
,同时引入门控机制来控制内部信息的流动,如下图
LSTM有三个门控:输入门、遗忘门和输出门。门控机制是利用门控值向量g表示,如下图,通过 激活函数将门控制压缩到区间[0,1]中,当
=0时,门控关闭,输出 o=0;当
=1时,门控打开,输出 o=x。即通过门控机制可以较好地控制数据的流量程度
下面详细介绍三个门控的原理及其作用
一、遗忘门
遗忘门作用于LSTM 状态向量 𝒄,用于控制上一个时间戳的记忆 对当前时间戳的影响。遗忘门的控制变量
由
产生,如下图所示,其中
和
为遗忘门的参数张量,可由反向传播算法自动优化,𝜎为激活函数,一般使用Sigmoid 函数。当门控
= 1时,遗忘门全部打开,LSTM 接受上一个状态
的所有信息;当门控
= 0时,遗忘门关闭,LSTM 直接忽略
,输出为0的向量。
经过遗忘门后,LSTM 的状态向量变为 *
二、输入门
输入门用于控制LSTM对输入的接受程度。首先通过对当前时间戳的输入 和上一个时间戳的输出
做非线性变换,在经过激活函数tanh得到新的输入变量
:
其中 和
为输入门的参数,需要通过反向传播算法自动优化,tanh 为激活函数,用于将输入标准化到区间[−1,1]中。
并不会全部刷新进入LSTM 的Memory,而是通过输入门控制接受输入的量。输入门的控制变量同样来自于输入
和输出
:
其中 和
为输入门的参数,需要通过反向传播算法自动优化,𝜎为激活函数,一般使用Sigmoid 函数。输入门控制变量
决定了LSTM 对当前时间戳的新输入
的接受程度:当
= 0时,LSTM 不接受任何的新输入
;当
= 1时,LSTM 全部接受新输入
,如下图。
经过输入门后,待写入Memory 的向量为 *
在遗忘门和输入门的控制下,LSTM 有选择地读取了上一个时间戳的记忆 和当前时间戳的新输入
,状态向量
的刷新方式为:
得到的新状态向量 即为当前时间戳的状态向量,如上图所示。
三、输出门
LSTM 的内部状态向量 并不会直接用于输出,这一点和基础的RNN 不一样。基础的RNN 网络的状态向量既用于记忆,又用于输出,所以基础的RNN 可以理解为状态向量 𝒄 和输出向量 h 是同一个对象。在LSTM 内部,状态向量并不会全部输出,而是在输出门的作用下有选择地输出。输出门的门控变量
为:
其中 和
为输出门的参数,同样需要通过反向传播算法自动优化,𝜎为激活函数,一般使用Sigmoid 函数。当输出门
= 0时,输出关闭,LSTM 的内部记忆完全被隔断,无法用作输出,此时输出为0 的向量;当输出门
= 1时,输出完全打开,LSTM 的状态向量
全部用于输出。LSTM 的输出由:
产生,即内存向量 经过激活函数tanh后与输入门作用,得到LSTM 的输出。由于
∈ [0,1],
∈ [−1,1],因此LSTM 的输出
∈ [−1,1]。
四、小结
LSTM 虽然状态向量和门控数量较多,计算流程相对复杂。但是由于每个门控功能清晰明确,每个状态的作用也比较好理解。这里将典型的门控行为列举出来,并解释其代码的LSTM 行为,如表所示。
输入门控 | 遗忘门控 | LSTM行为 |
---|---|---|
0 | 1 | 只使用记忆 |
1 | 1 | 综合输入和记忆 |
0 | 0 | 清零记忆 |
1 | 0 | 输入覆盖记忆 |