赞
踩
h
t
=
t
a
n
h
[
W
h
x
X
t
+
W
h
h
h
t
−
1
+
b
h
]
h_t = tanh[W_{hx}X_t + W_{hh}h_{t-1}+b_h]
ht=tanh[WhxXt+Whhht−1+bh]
z
t
=
f
(
W
h
y
h
t
+
b
z
)
z_t=f(W_{hy}h_t+b_z)
zt=f(Whyht+bz)
L
τ
(
θ
)
=
∑
t
∈
τ
L
(
y
t
,
z
t
)
L_\tau(\theta) = \sum_{t\in\tau}L(y_t,z_t)
Lτ(θ)=t∈τ∑L(yt,zt)
这里的
τ
\tau
τ是输出序列。
应用场景:
回想一下单层RNN:
h
t
=
t
a
n
h
[
W
h
x
X
t
+
W
h
h
h
t
−
1
+
b
h
]
=
t
a
n
h
[
W
(
X
t
h
t
−
1
1
)
]
h_t = tanh[W_{hx}X_t + W_{hh}h_{t-1}+b_h]=tanh
多层RNN是单层RNN堆叠而来的:
h
t
l
=
t
a
n
h
[
W
(
h
t
l
−
1
h
t
−
1
1
)
]
h_t^l =tanh
高层的隐含状态 h t l h_t^l htl由老的状态 h t − 1 l h_{t-1}^l ht−1l和低层的隐含状态 h t ( l − 1 ) h_t^(l-1) ht(l−1)决定。
普通RNN的一个显著缺点是,当序列长度很大时,RNN难以捕获序列数据中的长依赖项。这有时是梯度消失/爆炸造成的。
在下面的例子中,计算
∂
L
τ
∂
h
1
\frac{\partial L_\tau}{\partial h_1}
∂h1∂Lτ时,根据链式求导法则,我们需要计算
∏
t
=
1
3
(
∂
h
t
+
1
∂
h
t
)
\prod_{t=1}^3(\frac{\partial h_{t+1}}{\partial h_t})
∏t=13(∂ht∂ht+1)。
如果序列很长,这个乘积将是许多雅可比矩阵的乘积,这通常会得到指数大或指数小的奇异值。
先回顾一下单层RNN:
h
t
=
t
a
n
h
[
W
h
x
X
t
+
W
h
h
h
t
−
1
+
b
h
]
=
t
a
n
h
[
W
(
X
t
h
t
−
1
1
)
]
h_t = tanh[W_{hx}X_t + W_{hh}h_{t-1}+b_h]=tanh
对比LSTM:
(
i
t
f
t
o
t
c
t
)
=
(
σ
σ
σ
t
a
n
h
)
W
(
h
t
−
1
x
t
1
)
其中, σ \sigma σ是sigmoid函数。
LSTM可以删除或者添加信息到状态,并被叫“门”的结构(包括遗忘门、输入门、输出门)所限制。
功能:保存旧的信息
f
t
=
σ
[
W
f
(
X
t
h
t
−
1
1
)
]
f_t =\sigma
理想情况下,遗忘门的输出具有接近二进制的值,例如,当 f t f_t ft的输出接近1时可能表明输入序列中存在某个特征。
功能:更新记忆
i
t
=
σ
[
W
i
(
X
t
h
t
−
1
1
)
]
i_t =\sigma
c
ˉ
t
=
t
a
n
h
[
W
c
(
X
t
h
t
−
1
1
)
]
\bar c_t=tanh
c
t
=
f
t
⊙
c
t
−
1
+
i
t
⊙
c
ˉ
t
c_t=f_t\odot c_{t-1}+i_t \odot \bar c_t
ct=ft⊙ct−1+it⊙cˉt
⊙ \odot ⊙表示两个矩阵对应位置元素进行乘积
功能:决定有多少记忆
c
t
c_t
ct影响输出
h
t
h_t
ht
o
t
=
σ
[
W
o
(
X
t
h
t
−
1
1
)
]
o_t =\sigma
h t = o t ⊙ t a n h ( c t ) h_t=o_t \odot tanh(c_t) ht=ot⊙tanh(ct)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。