赞
踩
结构图:
公式:
S
i
=
f
(
U
X
i
+
W
S
i
−
1
)
S_i=f(UX_i+WS_{i-1})
Si=f(UXi+WSi−1) ==> 使用tanh激活函数
O
i
=
g
(
V
S
i
)
O_i=g(VS_i)
Oi=g(VSi)
反向传播:
梯度消失:RNN梯度消失是因为激活函数tanh函数的倒数在0到1之间,反向传播时更新前面时刻的参数时,当参数W初始化为小于1的数,则多个(tanh函数’ * W)相乘,将导致求得的偏导极小(小于1的数连乘),从而导致梯度消失。
梯度爆炸:当参数初始化为足够大,使得tanh函数的倒数乘以W大于1,则将导致偏导极大(大于1的数连乘),从而导致梯度爆炸。
参数计算:
设输入为m,隐层为h,输出为n
即count = hm + hh + h*n
遗忘门:
f
t
=
σ
(
W
f
⋅
[
h
t
−
1
,
x
t
]
+
b
f
)
f_t = \sigma( W_f \cdot [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 \cdot [h_{t-1}, x_t] + b_i)
it=σ(Wi⋅[ht−1,xt]+bi)
输出门:
o
t
=
σ
(
W
o
⋅
[
h
t
−
1
,
x
t
]
+
b
0
)
o_t = \sigma(W_o \cdot [h_{t-1}, x_t ] + b_0 )
ot=σ(Wo⋅[ht−1,xt]+b0)
当前单元状态 c_t :
c
t
=
f
t
∘
c
t
−
1
+
i
t
∘
t
a
n
h
(
W
c
⋅
[
h
t
−
1
,
x
t
]
+
b
c
)
c_t = f_t \circ c_{t-1} + i_t \circ tanh(W_c \cdot [h_{t-1}, x_t] + b_c )
ct=ft∘ct−1+it∘tanh(Wc⋅[ht−1,xt]+bc)
当前时刻的隐层输出:
h
t
=
o
t
∘
t
a
n
h
(
c
t
)
h_t = o_t \circ tanh(c_t)
ht=ot∘tanh(ct)
我们注意到, 首先三个门的激活函数是sigmoid, 这也就意味着这三个门的输出要么接近于0 , 要么接近于1。这就使得
δ
c
t
δ
c
t
−
1
=
f
t
\frac{\delta c_t}{\delta c_{t-1}} = f_t
δct−1δct=ft,
δ
h
t
δ
h
t
−
1
=
o
t
\frac{\delta h_t}{\delta h_{t-1}} = o_t
δht−1δht=ot 是非0即1的,当门为1时, 梯度能够很好的在LSTM中传递,很大程度上减轻了梯度消失发生的概率, 当门为0时,说明上一时刻的信息对当前时刻没有影响, 我们也就没有必要传递梯度回去来更新参数了。所以, 这就是为什么通过门机制就能够解决梯度的原因: 使得单元间的传递
δ
S
j
δ
S
j
−
1
\frac{\delta S_j}{\delta S_{j-1}}
δSj−1δSj为0 或 1。
参数:3个门加一个细胞更新
count = 4 * (mh+hh+h) 最后一个h是偏置
LSTM如何避免梯度消失或是爆炸?
https://www.zhihu.com/question/34878706
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。