赞
踩
基础的RNN网络结构如下图所示,上一个时间戳的状态向量
h
t
−
1
\boldsymbol h_{t-1}
ht−1与当前时间戳的输入
x
t
\boldsymbol x_t
xt经过线性变换后,通过激活函数
tanh
\text{tanh}
tanh后得到新的状态向量
h
t
\boldsymbol h_t
ht。
相对于基础的RNN网络只有一个状态向量
h
t
\boldsymbol h_t
ht,LSTM新增了一个状态向量
c
t
\boldsymbol c_t
ct,同时引入了门控(Gate)机制,通过门控单元来控制信息的遗忘和刷新,如下图所示:
在LSTM中,有两个状态向量
c
\boldsymbol c
c和
h
\boldsymbol h
h,其中
c
\boldsymbol c
c作为LSTM的内部状态向量,可以理解为LSTM的内部状态向量Memory,而
h
\boldsymbol h
h表示LSTM的输出向量。相对于基础的RNN来说,LSTM把内部Memory和输出分开为两个变量,同时利用三个门控:输入门(Input Gate)、遗忘门(Forget Gate)和输出门(Output Gate)来控制内部信息的流动。
门控机制可以理解为控制数据流通量的一种手段,类比于水阀门:当水阀门全部打开时,水流畅通无阻地通过;当水阀门全部关闭时,水流完全被隔断。在LSTM中,阀门开合程度利用门控值向量
g
\boldsymbol g
g表示,如下图所示,通过
σ
(
g
)
σ(\boldsymbol g)
σ(g)激活函数将门控制压缩到
[
0
,
1
]
[0,1]
[0,1]之间的区间,当
σ
(
g
)
=
0
σ(\boldsymbol g)=0
σ(g)=0时,门控全部关闭,输出
o
=
0
\boldsymbol o=0
o=0;当
σ
(
g
)
=
1
σ(\boldsymbol g)=1
σ(g)=1时,门控全部打开,输出
o
=
x
\boldsymbol o=\boldsymbol x
o=x。通过门控机制可以较好地控制数据的流量程度。
下面我们分别来介绍三个门控的原理及其作用。
遗忘门作用于LSTM状态向量
c
\boldsymbol c
c上面,用于控制上一个时间戳的记忆
c
t
−
1
\boldsymbol c_{t-1}
ct−1对当前时间戳的影响。遗忘门的控制变量
g
f
\boldsymbol g_f
gf由
g
f
=
σ
(
W
f
[
h
t
−
1
,
x
t
]
+
b
f
)
\boldsymbol g_f=σ(\boldsymbol W_f [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_f)
gf=σ(Wf[ht−1,xt]+bf)
产生,如下图所示:
其中
W
f
\boldsymbol W_f
Wf和
b
f
\boldsymbol b_f
bf为遗忘门的参数张量,可由反向传播算法自动优化,
σ
σ
σ激活函数,一般使用Sigmoid函数。当门控
g
f
=
1
\boldsymbol g_f=1
gf=1时,遗忘门全部打开,LSTM接受上一个状态
c
t
−
1
\boldsymbol c_{t-1}
ct−1,输出为0的向量。这也是遗忘门的名字由来。
经过遗忘门后,LSTM的状态向量变为
g
f
c
t
−
1
\boldsymbol g_f \boldsymbol c_{t-1}
gfct−1。
输入门用于控制LSTM对输入的接收程度。首先通过对当前时间戳的输入
x
t
\boldsymbol x_t
xt和上一个时间戳的输出
h
t
−
1
\boldsymbol h_{t-1}
ht−1做非线性变换得到新的输入向量
c
~
t
\tilde{\boldsymbol c}_t
c~t:
c
~
t
=
tanh
(
W
c
[
h
t
−
1
,
x
t
]
+
b
c
)
\tilde{\boldsymbol c}_t=\text{tanh}(\boldsymbol W_c [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_c)
c~t=tanh(Wc[ht−1,xt]+bc)
其中
W
c
\boldsymbol W_c
Wc和
b
c
\boldsymbol b_c
bc为输入门的参数,需要通过反向传播算法自动优化,
tanh
\text{tanh}
tanh为激活函数,用于将输入标准化到
[
−
1
,
1
]
[-1,1]
[−1,1]区间。
c
~
t
\tilde{\boldsymbol c}_t
c~t并不会全部刷新进入LSTM的Memory,而是通过输入门控制接受输入的量。输入门的控制变量同样来自于输入
x
t
\boldsymbol x_t
xt和输出
h
t
−
1
\boldsymbol h_{t-1}
ht−1:
g
i
=
σ
(
W
i
[
h
t
−
1
,
x
t
]
+
b
i
)
\boldsymbol g_i=σ(\boldsymbol W_i [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_i)
gi=σ(Wi[ht−1,xt]+bi)
其中
W
i
\boldsymbol W_i
Wi和
b
i
\boldsymbol b_i
bi为输入门的参数,需要通过反向传播算法自动优化,
σ
σ
σ为激活函数,一般使用Sigmoid函数。输入门控制变量
g
i
\boldsymbol g_i
gi决定了LSTM对当前时间戳的新输入
c
~
t
\tilde{\boldsymbol c}_t
c~t的接受程度:当
g
i
\boldsymbol g_i
gi=0时,LSTM不接受任何新的输入
c
~
t
\tilde{\boldsymbol c}_t
c~t;当
g
i
=
1
\boldsymbol g_i=1
gi=1时,LSTM全部接受新输入
c
~
t
\tilde{\boldsymbol c}_t
c~t,如下图所示:
经过输入门后,待写入Memory的向量为
g
i
c
~
t
\boldsymbol g_i \tilde{\boldsymbol c}_t
gic~t。
在遗忘门和输入门的控制下,LSTM有选择地读取了上一个时间戳的记忆
c
t
−
1
\boldsymbol c_{t-1}
ct−1和当前时间戳的新输入
c
~
t
\tilde{\boldsymbol c}_t
c~t,状态向量
c
t
\boldsymbol c_t
ct的刷新方式为:
c
t
=
g
i
c
~
t
+
g
f
c
t
−
1
\boldsymbol c_t=\boldsymbol g_i \tilde{\boldsymbol c}_t+\boldsymbol g_f \boldsymbol c_{t-1}
ct=gic~t+gfct−1
得到的新状态向量
c
t
\boldsymbol c_t
ct即为当前时间戳的状态向量。如下图所示:
LSTM的内部状态向量
c
t
\boldsymbol c_t
ct并不会直接用于输出,这一点和基础的RNN不一样。基础的RNN网络的状态向量
h
\boldsymbol h
h既用于记忆,又用于输出,所以基础的RNN可以理解为状态向量
c
\boldsymbol c
c和输出向量
h
\boldsymbol h
h是同一个对象。在LSTM内部,状态向量并不会全部输出,而是在输出门的作用下有选择地输出。输出门的门控变量
g
o
\boldsymbol g_o
go为:
g
o
=
σ
(
W
o
[
h
t
−
1
,
x
t
]
+
b
o
)
\boldsymbol g_o=σ(\boldsymbol W_o [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_o)
go=σ(Wo[ht−1,xt]+bo)
其中
W
o
\boldsymbol W_o
Wo和
b
o
\boldsymbol b_o
bo为输出门的参数,同样需要通过反向传播算法自动优化,
σ
σ
σ为激活函数,一般使用Sigmoid函数。当输出门
g
o
=
0
\boldsymbol g_o=0
go=0时,输出关闭,LSTM的内部记忆完全被隔断,无法用作输出,此时输出为0的向量;当输出门
g
o
=
1
\boldsymbol g_o=1
go=1时,输出完全打开,LSTM的状态向量
c
t
\boldsymbol c_t
ct全部用于输出。LSTM的输出由:
h
t
=
g
o
⋅
tanh
(
c
t
)
\boldsymbol h_t=\boldsymbol g_o\cdot \text{tanh}(\boldsymbol c_t)
ht=go⋅tanh(ct)
产生,即内存向量
c
t
\boldsymbol c_t
ct经过
tanh
\text{tanh}
tanh激活函数后与输入门作用,得到LSTM的输出。由于
g
o
∈
[
0
,
1
]
\boldsymbol g_o\in[0,1]
go∈[0,1],
tanh
(
c
t
)
∈
[
−
1
,
1
]
\text{tanh}(\boldsymbol c_t )\in[-1,1]
tanh(ct)∈[−1,1],因此LSTM的输出
h
t
∈
[
−
1
,
1
]
\boldsymbol h_t\in[-1,1]
ht∈[−1,1]。
LSTM虽然状态向量和门控数量较多,计算流程相对复杂。但是由于每个门控功能清晰明确,每个状态的作用也比较好理解。这里将典型的门控行为列举出来,并解释其代码的LSTM行为,如下表所示:
输入门控 | 遗忘门控 | LSTM行为 |
---|---|---|
0 | 1 | 只使用记忆 |
1 | 1 | 综合输入和记忆 |
0 | 0 | 清零记忆 |
1 | 0 | 输入覆盖记忆 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。