赞
踩
请你说说CNN,RNN,LSTM,Transformer之间的优缺点
CNN:
优点:并行化处理数据,捕捉局部信息能力强
缺点:1)不能表达时序信息。2)网络层数过深时,接近输入层的参数会更新变慢
RNN:
优点:可以表达时序信息。
缺点:1)不能并行处理数据。2)随着网络层数的增加,rnn在处理长序数据时容易出现梯度爆炸和梯度消失现象。
LSTM:
优点: lstm一定程度上解决了rnn中的梯度消失问题。
Transformer:
优点:1)相对于rnn,可以并行化处理数据。2)解决了长程依赖问题。3)计算两个token之间相似度的操作不会随着距离增加而变复杂。
为什么会出现梯度消失,梯度爆炸
梯度消失产生的原因:
梯度消失通常来源于激活函数的过饱和现象,由于在反向传播的过程中,为了求得参数的梯度,需要对激活函数多次链式求导,sigmoid在饱和区导数非常小,连乘操作会导致最终的梯度过小,产生梯度消失的现象,最后导致浅层的神经元更新速度非常慢,无法进行有效的学习,这种现象在深层网络更为突出。
后果:
梯度消失会导致前面网络层的参数更新幅度很小;梯度爆炸会导致学习过程很不稳定,最坏的结果导致权重更新导数为NaN,无法更新参数。
梯度爆炸产生的原因:
由于再反向传播的过程中,为了求得参数的梯度,需要进行多次链式求导,当每一层的神经元对上一层的输出再乘权重大于1时,连乘操作会使得最终的梯度越来越大,产生梯度爆炸现象。
梯度下降原理:
w
i
+
1
=
w
i
+
α
∂
l
o
s
s
∂
w
i
w_{i+1}=w_i+\alpha\frac{\partial loss}{\partial{w_i}}
wi+1=wi+α∂wi∂loss
推导:
假设激活函数是f,在每一层经激活函数激活后的输出值为
f
i
f_i
fi,
f
4
f_4
f4是最后一层网络的输出值,现在我们要更新
w
2
w_2
w2这个参数:
∂
l
o
s
s
∂
w
2
=
∂
l
o
s
s
∂
f
4
∂
f
4
∂
f
3
∂
f
3
∂
f
2
∂
f
2
∂
w
2
\frac{\partial loss}{\partial w_2}=\frac{\partial loss}{\partial f_4}\frac{\partial f_4}{\partial f_3}\frac{\partial f_3}{\partial f_2}\frac{\partial f_2}{\partial w_2}
∂w2∂loss=∂f4∂loss∂f3∂f4∂f2∂f3∂w2∂f2
随着层数的增加,最终的值和
∂
f
i
+
1
∂
f
i
\frac{\partial f_{i+1}}{\partial f_i}
∂fi∂fi+1连乘有很大的关系,
f
i
f_i
fi是前一层输出然后经激活函数f得到
f
i
+
1
f_{i+1}
fi+1,即
f
i
+
1
=
s
i
g
m
o
i
d
(
f
i
w
i
+
1
)
f_{i+1}=sigmoid(f_iw_{i+1})
fi+1=sigmoid(fiwi+1)
∂
f
i
+
1
∂
f
i
=
s
i
g
m
o
i
d
(
1
−
s
i
g
m
o
i
d
)
⋅
w
i
+
1
\frac{\partial f_{i+1}}{\partial f_i}=sigmoid(1-sigmoid)\cdot w_{i+1}
∂fi∂fi+1=sigmoid(1−sigmoid)⋅wi+1
∂
f
2
∂
w
2
=
s
i
g
m
o
i
d
(
1
−
s
i
g
m
o
i
d
)
⋅
x
\frac{\partial f_2}{\partial w_2}=sigmoid(1-sigmoid)\cdot x
∂w2∂f2=sigmoid(1−sigmoid)⋅x
所以当
∂
f
i
+
1
∂
f
i
\frac{\partial f_{i+1}}{\partial f_i}
∂fi∂fi+1>1时,连乘操作会使梯度变得越来越大,导致梯度爆炸;反之,梯度会变得很小,导致梯度消失。
解决:
梯度消失:ReLU代替sigmoid,LSTM,BatchNormlization
梯度爆炸:梯度裁剪
各种激活函数比较:
为什么sigmoid,tanh容易出现梯度消失的现象
s
i
g
m
o
i
d
=
1
1
+
e
−
x
sigmoid=\frac{1}{1+e^{-x}}
sigmoid=1+e−x1 求导:
s
i
g
m
o
i
d
(
1
−
s
i
g
m
o
i
d
)
sigmoid(1-sigmoid)
sigmoid(1−sigmoid)
sigmoid激活函数在输入值很大或很小时的导数为0,而且导数最大为0.25,所以sigmoid导数连乘很容易为0,从而出现梯度消失现象,tanh激活函数同理
ReLU有什么优点,局限性
优点:
将小于0的神经元输出为0,从而将这些神经元灭活,可以达到稀疏网络来拟合函数的效果。
relu的线性特点可以保证经多层网络传递后保持原来的梯度,避免了梯度消失现象。
relu计算简单,不涉及指数运算。
局限性:
由于单侧抑制,训练过程中会导致神经元死亡的问题(当relu的输出为0时,其导数也为0,进而导致该权重永久不会更新)
改进:Leaky ReLU
RNN梯度消失和MLP梯度消失的区别
MLP网络中各个层之间的参数是独立的,不同层之间的梯度也是独立的。
RNN中每个时间步都共享相同的权重参数,最终的梯度等于各个时间步梯度之和,随着梯度的传导,最终的梯度被近距离的梯度主导,近距离的梯度不会消失,远距离的梯度越传越小,导致模型学习不到远距离的依赖关系。
RNN梯度消失,梯度爆炸的原因
损失函数的导数小于1,当隐状态矩阵很小时,随着梯度的传递,远距离的梯度越传越小,最终梯度被近距离的梯度主导,模型学习不到远距离的依赖关系;当隐状态矩阵很大时,梯度会越传越大。
rnn前向传播:
S
1
=
x
1
W
x
+
S
0
W
s
,
S_1=x_1W_x+S_0W_s,
S1=x1Wx+S0Ws,
O
1
=
S
1
W
o
O_1=S_1W_o
O1=S1Wo
S
2
=
x
2
W
x
+
S
1
W
s
,
S_2=x_2W_x+S_1W_s,
S2=x2Wx+S1Ws,
O
2
=
S
2
W
o
O_2=S_2W_o
O2=S2Wo
S
3
=
x
3
W
x
+
S
2
W
s
,
S_3=x_3W_x+S_2W_s,
S3=x3Wx+S2Ws,
O
3
=
S
3
W
o
O_3=S_3W_o
O3=S3Wo
O
3
→
l
o
s
s
O_3→loss
O3→loss
∂ l o s s ∂ W o = ∂ l o s s ∂ O 3 ∂ O 3 ∂ W o \frac{\partial loss}{\partial W_o}=\frac{\partial loss}{\partial O_3}\frac{\partial O_3}{\partial W_o} ∂Wo∂loss=∂O3∂loss∂Wo∂O3
∂ l o s s ∂ W x = ∂ l o s s ∂ O 3 ∂ O 3 ∂ S 3 ∂ S 3 ∂ W x + ∂ l o s s ∂ O 3 ∂ O 3 ∂ S 3 ∂ S 3 ∂ S 2 ∂ S 2 ∂ W x + ∂ l o s s ∂ O 3 ∂ O 3 ∂ S 3 ∂ S 3 ∂ S 2 ∂ S 2 ∂ S 1 ∂ S 1 ∂ W x \frac{\partial loss}{\partial W_x}= \frac{\partial loss}{\partial O_3}\frac{\partial O_3}{\partial S_3}\frac{\partial S_3}{\partial W_x}+ \frac{\partial loss}{\partial O_3}\frac{\partial O_3}{\partial S_3}\frac{\partial S_3}{\partial S_2}\frac{\partial S_2}{\partial W_x}+ \frac{\partial loss}{\partial O_3}\frac{\partial O_3}{\partial S_3}\frac{\partial S_3}{\partial S_2}\frac{\partial S_2}{\partial S_1}\frac{\partial S_1}{\partial W_x} ∂Wx∂loss=∂O3∂loss∂S3∂O3∂Wx∂S3+∂O3∂loss∂S3∂O3∂S2∂S3∂Wx∂S2+∂O3∂loss∂S3∂O3∂S2∂S3∂S1∂S2∂Wx∂S1
∂ l o s s ∂ W s = ∂ l o s s ∂ O 3 ∂ O 3 ∂ S 3 ∂ S 3 ∂ W s + ∂ l o s s ∂ O 3 ∂ O 3 ∂ S 3 ∂ S 3 ∂ S 2 ∂ S 2 ∂ W s + ∂ l o s s ∂ O 3 ∂ O 3 ∂ S 3 ∂ S 3 ∂ S 2 ∂ S 2 ∂ S 1 ∂ S 1 ∂ W s \frac{\partial loss}{\partial W_s}= \frac{\partial loss}{\partial O_3}\frac{\partial O_3}{\partial S_3}\frac{\partial S_3}{\partial W_s}+ \frac{\partial loss}{\partial O_3}\frac{\partial O_3}{\partial S_3}\frac{\partial S_3}{\partial S_2}\frac{\partial S_2}{\partial W_s}+ \frac{\partial loss}{\partial O_3}\frac{\partial O_3}{\partial S_3}\frac{\partial S_3}{\partial S_2}\frac{\partial S_2}{\partial S_1}\frac{\partial S_1}{\partial W_s} ∂Ws∂loss=∂O3∂loss∂S3∂O3∂Ws∂S3+∂O3∂loss∂S3∂O3∂S2∂S3∂Ws∂S2+∂O3∂loss∂S3∂O3∂S2∂S3∂S1∂S2∂Ws∂S1
由此可见:随着rnn序列长度的增加,权重更新的幅度和 ∂ S t ∂ S t − 1 \frac{\partial S_t}{\partial S_{t-1}} ∂St−1∂St的连乘有关, S t = t a n h ( S t − 1 W s ) S_t = tanh(S_{t-1}W_s) St=tanh(St−1Ws), ∂ S t ∂ S t − 1 = Δ t a n h W s \frac{\partial S_t}{\partial S_{t-1}}=\Delta tanhW_s ∂St−1∂St=ΔtanhWs,当tanh的导数和 W s W_s Ws相乘小于1时,连乘使结果趋向于0,导致梯度消失。
LSTM模型结构,和RNN的区别
遗忘门:决定上一时刻的细胞状态
c
t
−
1
c_{t-1}
ct−1有多少传递到当前时刻细胞状态
c
t
c_t
ct
f
t
=
δ
(
W
f
[
h
t
−
1
,
x
t
]
)
f_t=\delta(W_f[h_{t-1},x_t])
ft=δ(Wf[ht−1,xt])
输入门:决定当前时刻的输入(候选细胞状态)有多少传递到当前细胞状态
c
t
c_t
ct
i
t
=
δ
(
W
i
[
h
t
−
1
,
x
t
]
)
i_t=\delta(W_i[h_{t-1},x_t])
it=δ(Wi[ht−1,xt])
输出门:决定当前细胞状态
c
t
c_t
ct有多少传递到当前隐状态
h
t
h_t
ht
o
t
=
δ
(
W
o
[
h
t
−
1
,
x
t
]
)
o_t=\delta(W_o[h_{t-1},x_t])
ot=δ(Wo[ht−1,xt])
当前候选细胞状态:
c
⃗
=
δ
(
W
c
[
h
t
−
1
,
x
t
]
)
\vec c=\delta(W_c[h_{t-1},x_t])
c
=δ(Wc[ht−1,xt])
当前细胞状态:
c
t
=
f
t
c
t
−
1
+
i
t
c
⃗
c_t=f_tc_{t-1}+i_t\vec c
ct=ftct−1+itc
当前隐状态:
h
t
=
o
t
c
t
h_t=o_tc_t
ht=otct
LSTM是怎么缓解梯度消失问题的
原始的lstm没有遗忘门,这样
c
t
c_t
ct对
c
t
−
1
c_{t-1}
ct−1的偏导为1,梯度可以无损的在每个时间步传递,远距离的梯度不会消失,可以学习到远距离的依赖关系。
增加遗忘门后,输出的值区间在[0,1]之间,当前一时刻的信息对当前时刻没有帮助时,遗忘门可以值为零,那么梯度也是0。
梯度爆炸可以用梯度裁剪来缓解:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。