赞
踩
RNN能够处理一定的短期依赖,但无法处理长期依赖问题。因为当序列较长时,序列后部的梯度很难反向传播到前面的序列,这就产生了梯度消失问题。当然,RNN也存在梯度爆炸问题,但这个问题一般可以通过梯度裁剪(gradient clipping)来解决。
RNN网络结构如下:
h
t
h_t
ht为timestep t的隐藏层状态值,
x
t
x_t
xt为输入,
h
t
h_t
ht实际上还要经过softmax或者别的函数处理得到输出
y
^
t
\widehat{y}_t
y
t。
上图中RNN单元的计算公式为:
h
t
=
t
a
n
h
(
W
h
.
[
h
t
−
1
,
x
t
]
+
b
h
)
h_t=tanh(W_h.[h_{t-1},x_t]+b_h)
ht=tanh(Wh.[ht−1,xt]+bh)由公式我们可以看到,RNN本时刻的隐藏层信息只来源于当前输入和上一时刻的隐藏层信息,没有记忆功能。
LSTM的网络结构相比于RNN复杂了很多。从微观上看,LSTM引入了细胞状态,并使用输入门、遗忘门、输出门三种门来保持和控制信息。
具体的,LSTM某个timstep t的计算公式如下所示:
f
t
=
σ
(
W
f
.
[
h
t
−
1
,
x
t
]
+
b
f
)
f_t=\sigma(W_f.[h_{t-1}, x_t]+b_f)
ft=σ(Wf.[ht−1,xt]+bf)
i
t
=
σ
(
W
i
.
[
h
t
−
1
,
x
t
]
+
b
i
)
i_t=\sigma(W_i.[h_{t-1}, x_t]+b_i)
it=σ(Wi.[ht−1,xt]+bi)
c
~
t
=
t
a
n
h
(
W
c
.
[
h
t
−
1
,
x
t
]
+
b
c
)
\widetilde{c}_t=tanh(W_c.[h_{t-1}, x_t]+b_c)
c
t=tanh(Wc.[ht−1,xt]+bc)
c
t
=
f
t
×
c
t
−
1
+
i
t
×
c
~
t
c_t=f_t \times c_{t-1}+i_t\times\widetilde{c}_t
ct=ft×ct−1+it×c
t
o
t
=
σ
(
W
o
.
[
h
t
−
1
,
x
t
]
+
b
o
)
o_t=\sigma(W_o.[h_{t-1}, x_t]+b_o)
ot=σ(Wo.[ht−1,xt]+bo)
h
t
=
o
t
×
t
a
n
h
(
c
t
)
h_t=o_t\times tanh(c_t)
ht=ot×tanh(ct)
上述公式中,
f
t
f_t
ft为遗忘门、
i
t
i_t
it 为输入门、
o
t
o_t
ot为输出门、
c
t
c_t
ct为细胞状态、
c
~
t
\widetilde{c}_t
c
t为细胞状态候选值、
h
t
h_t
ht为隐藏层状态值、
W
W
W和
b
b
b为权重和偏置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。