1. LSTM如何解决普通神经网络具有的长期依赖问题?
对于一般的循环神经网络,某一时刻的输出仅与当前时刻以及前几个时刻的输入和状态具有强相关性,随着时间序列长度的增加,序列中间隔很远的具有相关性的词汇无法通过网络学习到。即长期依赖问题。
LSTM(Long Short Time Memory)在原有网络的基础上加入了一个新的cell state。使得不同时刻具有了可变的连接权重。缓解了普通神经网络的梯度消失和梯度爆炸的问题。LSTM在每一时刻具有两个状态:hidden state(短期状态单元)和cell state(长期状态单元)。两种状态相互配合形成长短期记忆机制。
LSTM的核心思想是利用门控单元控制信号的传递。主要又输入门
i
t
i_t
it, 遗忘门
f
t
f_t
ft, 输出门
o
t
o_t
ot。可以将之看做为三个向量,向量中的每个值都处于0~1之间。三个门控单元都由输入
x
t
x_t
xt和上一时刻状态
h
t
−
1
h_{t-1}
ht−1以及参数矩阵计算得到。
得到三个门之后通过下面三个公式更新hidden state和cell state:
c
~
t
=
Tanh
(
W
c
x
t
+
U
c
h
t
−
1
+
b
c
)
(1)
\tilde{c}_t = \textbf{Tanh}(W_cx_t+U_ch_{t-1}+b_c) \tag1
c~t=Tanh(Wcxt+Ucht−1+bc)(1)
c
t
=
f
t
⊙
c
t
−
1
+
i
t
⊙
c
~
t
(2)
c_t=f_t \odot c_{t-1}+i_t \odot \tilde{c}_t \tag2
ct=ft⊙ct−1+it⊙c~t(2)
h
t
=
o
t
⊙
Tanh
(
c
t
)
(3)
h_t=o_t \odot \textbf{Tanh}(c_t) \tag3
ht=ot⊙Tanh(ct)(3)
总之LSTM改变了循环神经网络中信息和梯度的传播方式。解决了长期依赖问题。
2. GRU如何用两个门控单元来控制时间序列的记忆及遗忘行为?
GRU(Gated Recurrent Unit)是2014年提出的,相比一般的LSTM、GRU具有更少参数和计算量。
不同于LSTM,GRU只有一个隐藏状态单元
h
t
h_t
ht,并且只有两个门控单元:重置门
r
t
r_t
rt和更新门
z
t
z_t
zt每个门控单元的输入包括当前时刻的序列信息以及上一时刻的状态信息。
r
t
=
σ
(
W
r
x
t
+
U
r
h
t
−
1
)
(4)
r_t=\sigma(W_rx_t+U_rh_{t-1}) \tag4
rt=σ(Wrxt+Urht−1)(4)
z
t
=
σ
(
W
z
x
t
+
U
z
h
t
−
1
)
(5)
z_t=\sigma(W_zx_t+U_zh_{t-1}) \tag5
zt=σ(Wzxt+Uzht−1)(5)
其中重置门决定了计算新的隐藏状态时是否忽略上一时刻的隐藏状态单元。更新门则是控制当前隐藏状态单元被新的隐藏状态更新的程度。
h
~
t
=
Tanh
(
W
h
x
t
+
U
h
(
r
t
⊙
h
t
−
1
)
)
(6)
\tilde {h}_t=\textbf{Tanh}(W_hx_t+U_h(r_t\odot h_{t-1})) \tag6
h~t=Tanh(Whxt+Uh(rt⊙ht−1))(6)
h
t
=
(
1
−
z
t
)
h
t
−
1
+
z
t
h
~
t
(7)
h_t=(1-z_t)h_{t-1}+z_t \tilde{h}_t \tag 7
ht=(1−zt)ht−1+zth~t(7)
GRU相对于LSTM具有更好的性能以及更快的收敛速度。