理解神经网络中的激活函数:https://zhuanlan.zhihu.com/p/32868602
浅层神经网络:https://blog.csdn.net/TeFuirnever/article/details/101163492
- Sigmoid
- tanh
- ReLU
- LeakyReLU, PReLU(Parametric Relu), RReLU
1、神经网络为什么需要激活函数:首先数据的分布绝大多数是非线性,而一般神经网络的计算是线性,引入激活函数,是在神经网络中引入非线性,强化网络的学习能力。所有激活函数的最大特点是非线性的。
2、不同的激活函数,根据其特点,应用也不同。Sigmoid和tanh的特点是将输出限制在(0,1)和(-1,1)之间,说明Sigmoid和tanh适合做概率值的处理,例如LATM中的各种门;而ReLU就不行,因为ReLU无最大值限制,可能会出现很大的值。同样,根据ReLUctant的特征,ReLU适合用于深层网络的训练,而Sigmoid和tanh则不行,因为他们会出现梯度消失。
3. 在使用ReLU的网络中,是否还存在梯度消失的问题?梯度衰减银子包括激活函数倒数,此外,还有多个权重连乘也会影响。梯度消失只是表面说法,按照这样理解,底层使用非常大的学习率,或者人工添加梯度噪音,原则上也能回避。
1、Sigmoid函数
σ
(
x
)
=
l
o
g
1
1
+
e
−
x
\sigma(x) = log\frac{1}{1+e^{-x}}
σ(x)=log1+e−x1
推导:
P ( y ; ϕ ) = ϕ y ( 1 − ϕ ) 1 − y P(y;\phi) = \phi^{y}(1-\phi)^{1-y} P(y;ϕ)=ϕy(1−ϕ)1−y
=
e
x
p
(
l
n
(
ϕ
y
(
1
−
ϕ
)
1
−
y
)
)
=exp(ln(\phi^{y}(1-\phi)^{1-y}))
=exp(ln(ϕy(1−ϕ)1−y))
=
e
x
p
(
y
l
n
(
ϕ
)
+
(
1
−
y
)
l
n
(
1
−
ϕ
)
)
=exp(yln(\phi)+(1-y)ln(1-\phi))
=exp(yln(ϕ)+(1−y)ln(1−ϕ))
=
e
x
p
(
y
l
n
ϕ
1
−
ϕ
+
l
n
(
1
−
ϕ
)
)
=exp(yln\frac{\phi}{1-\phi}+ln(1-\phi))
=exp(yln1−ϕϕ+ln(1−ϕ))
对数指数分布族有:
b
(
y
)
=
1
b(y) = 1
b(y)=1,
η
=
y
l
n
ϕ
1
−
ϕ
\eta=yln\frac{\phi}{1-\phi}
η=yln1−ϕϕ,
T
(
y
)
=
y
T(y)=y
T(y)=y,
α
(
η
)
=
−
l
n
(
1
−
ϕ
)
\alpha(\eta)=-ln(1-\phi)
α(η)=−ln(1−ϕ)
ϕ = 1 1 + e − η \phi = \frac{1}{1+e^{-\eta}} ϕ=1+e−η1
Sigmoid函数的优缺点:
优点:平滑,易于求导
缺点:1激活函数计算量大,反向传播求误差梯度时,求导设计出发
2.Sigmoid导数取值范围在[0,0.25]时,由于神经网络的反向传播时的“链式反应”,很容易就会出现梯度消失的情况。例如对于一个10层的网络,根据
0.2
5
10
=
0.000000954
0.25^{10} = 0.000000954
0.2510=0.000000954,第十层的误差相对第一层卷积的参数
W
1
W_{1}
W1的梯度将是一个非常小的值,这就是所谓的"梯度消失"。
3、Sigmoid的输出不是0均值(即Zero-centered),这回导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会改变数据的原始分布。
2、tanh函数
tanh为双曲正切函数,其英文读作Hyperbolic Tangent,tanh 和sigmoid相似,都属于饱和激活函数,区别在于输出值范围有(0,1)变为(-1,1),可以吧tanh函数看作是sigmoid向下平移和拉伸后的结果。
t
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
tanh(x) = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
tanh(x)=ex+e−xex−e−x
即:
t
a
n
h
(
x
)
=
2
1
+
e
−
2
x
−
1
tanh(x) = \frac{2}{1+e^{-2x}} -1
tanh(x)=1+e−2x2−1
tanh 作为激活函数的优缺点:
1、tanh的输出范围是(-1,1),解决了Sigmoid函数的不是zero-centered输出问题
2、幂运算的问题仍然存在
3、tanh倒数范围在(0,1)之间,相比sigmoid的(0,0.25),梯度消失问题会得到缓和,但仍然还会存在。
3、ReLU函数
ReLU(Rectified Linear Unit)–整流线性单元函数
r
e
l
u
=
m
a
x
(
0
,
x
)
relu=max(0,x)
relu=max(0,x)
ReLU的有效倒数是常数1,解决了深层网络中出现的梯度消失问题,也就使得深层网络可训练。同时ReLU又是非线性函数,所谓非线性,就是一阶导数不为常数;对ReLU求导,在输入值分别为正和为负的情况下,导数是不同的,即ReLU的导数不是常数,所以ReLU是非线性的(不光滑)
ReLU在
x
>
0
x>0
x>0下,导数为常数1的特点:
导数为常数1的好处就是在“链式反应”中不会出现梯度消失,但梯度下降的强度就完全取决于权值的乘积,这样就可能会出现梯度爆炸问题,解决这类问题:一、控制权值,让他们在(0,1)范围内;二、梯度裁剪,控制梯度下降强度,如
R
e
L
U
(
x
)
=
m
i
n
(
6
,
m
a
x
(
0
,
x
)
)
ReLU(x)=min(6,max(0,x))
ReLU(x)=min(6,max(0,x))
ReLU在
x
<
0
x<0
x<0下,输出置为0的特点:
深度学习是根据大批量样本数据,从错综复杂的数据关系中,找到关键信息(关键特征)。换句话说,就是把密集矩阵转化为稀疏矩阵,保留数据的关键信息,去除噪音,这样的模型就有了鲁棒性。ReLU在
x
<
0
x<0
x<0输出置为0,就是一个去燥音、稀疏矩阵的过程。而且在训练过程中,这种稀疏性是动态调节的,网络为自动调整稀疏比例,保证矩阵有最优的有效特征。但是ReLU 强制将x<0部分的输出置为0(置为0就是屏蔽该特征),可能会导致模型无法学习到有效特征,所以如果学习率设置的太大,就可能会导致网络的大部分神经元处于‘dead’状态,所以使用ReLU的网络,学习率不能设置太大。
ReLU作为激活函数的特点:
- 相比Sigmoid和tanh,ReLU摒弃了复杂计算,提高了运算速度。
- 解决了梯度消失问题,收敛速度快于Sigmoid和tanh函数,但要防止ReLU的梯度爆炸
- 容易得到更好的模型,但要防止训练中出现模型“Dead”情况
4、Leaky ReLu,PReLU(parametric Relu),RReLU(Random ReLU)
为了防止模型“Dead”情况,后入将
x
<
0
x<0
x<0部分并没有直接置为0,而是给了一个很小的负数梯度值
α
\alpha
α
Leaky ReLU 中的
α
\alpha
α为常数,一般设置为0.01,这个函数通常比ReLU激活函数效果要好’,但是效果不是很稳定,所以在实际中Leaky ReLU使用的并不多。
PReLU(参数化整流性单元)中
α
\alpha
α作为一个学习参数,常在训练过程中进行更新。
RReLU(随机整流线性单元)也是Leaky ReLU的一个辩题。在RReLU中,负值的斜率在训练中是随机的,在之后的测试中就变成了固定的了。RReLU的亮点在于,在训练环节中,
α
\alpha
α是一个均匀的分布在
U
(
I
,
u
)
U(I,u)
U(I,u)中随机抽取的数值