神经网络需要激活函数的原因:
数据的分布绝大多数的非线性的,而不加激活函数的神经网络的计算是线性的,引入激活函数,是为了在神经网络中加入非线性的因素,增强神经网络的学习能力,所以激活函数的最大特点就是非线性。
为什么不加激活函数的网络的计算是线性的?
单层感知机
在上图中的单层感知机中,y的表达式即为线性的,右图中的直线由 w 1 x 1 + w 2 x 2 + b = 0 w_{1}x_{1}+w_{2}x_{2} + b = 0 w1x1+w2x2+b=0 得到,可以看出单层的感知机只能进行线性的表达,对于非线性来说,单层感知机无法进行表示。
多感知器分类器
在上图中,我们想通过引入多层神经网络来解决非线性的问题,对于图中的出现的等式,我们对其进行变换处理,那么上述的等式等价于下面的等式:
从上图中可以看出,多层感知器的表达式仍然为线性的,仍旧无法表示非线性,可以预见,即使增添再多的隐藏层,也无法进行非线性的表示。
基于上述原因,我们通过引入激活函数来为神经网络增加非线性因素,从而使神经网络能够进行非线性的表示,增强神经网络的表示能力。
饱和激活函数介绍
右饱和: 当 x 趋近于正无穷时,函数的导数趋近于0,此时称为右饱和
左饱和: 当 x 趋近于负无穷时,函数的导数趋近于0,此时称为左饱和
饱和函数和非饱和函数: 当一个函数既满足左饱和、又满足右饱和,则称为饱和函数,否则,称函数为非饱和函数。
常见的饱和激活函数: Sigmoid函数和tanh函数,饱和函数在神经网络中会出现“梯度消失”的现象,导致函数无法收敛。
常见的非饱和函数: ReLU函数,非饱和激活函数会解决“梯度消失”问题,可以加快收敛。
Sigmoid激活函数介绍
Sigmoid激活函数如下图所示,可以看见,Sigmoid激活函数已经引入了非线性
Sigmoid函数的输出结果范围为 (0,1),可以将网络的输入映射到这一范围内
Sigmoid公式以及导数:
Sigmoid曲线及其导数曲线:
Sigmoid激活函数的特点:
优点:平滑、易于求导
缺点:
1. Sigmoid函数中存在 e 的计算(幂运算)和函数除法,会增大激活函数的计算量
2. Sigmoid的导数如上述右图所示,导数的取值范围为[0,0.25],由于神经网络反向传播存在“链式反应”,非常容易出现梯度消失的情况,例如对于一个10层的网络来说,根据 0.2 5 10 ≈ 0.000000954 0.25^{10} \approx 0.000000954 0.2510≈0.000000954,第10层的误差相对第一层卷积的参数 W 1 W_{1} W1 的梯度将是一个非常小的值,这就是所谓的“梯度消失”。另外,Sigmoid函数非常容易进入饱和状态,当神经元的激活在接近0或1时就会饱和,在这些区域中的梯度几乎为0,也会导致梯度消失。
3. Sigmoid的输出不是0均值(即zero-centered),这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会逐渐的改变数据的原始分布。
Tanh激活函数介绍
Tanh激活函数和Sigmoid激活函数都属于饱和激活函数,Tanh激活函数的取值范围变为了(-1,1),也是一种非线性激活函数。
Tanh函数公式以及导数:
t
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
=
1
−
e
−
2
x
1
+
e
−
2
x
=
2
1
+
e
−
2
x
−
1
tanh(x) = \dfrac{e^{x}-e^{-x}}{e^{x}+e^{-x}} = \dfrac{1-e^{-2x}}{1+e^{-2x}} = \dfrac{2}{1+e^{-2x}}-1
tanh(x)=ex+e−xex−e−x=1+e−2x1−e−2x=1+e−2x2−1
t a n h ’ ( x ) = 4 e − 2 x ( 1 + e − 2 x ) 2 tanh^{’}(x) = \dfrac{4e^{-2x}}{(1+e^{-2x})^{2}} tanh’(x)=(1+e−2x)24e−2x
Tanh函数曲线以及导数曲线
Tanh激活函数的特点:
1. Tanh激活函数的输出范围为(-1,1),相比Sigmoid函数而言解决了0均值问题(zero-center)
2. Tanh函数中仍然包含幂运算和除法运算,加大了计算量
3. Tanh函数仍然有饱和现象,仍旧会出现“梯度消失”的问题。
ReLU激活函数介绍
ReLU激活函数为非饱和激活函数,也是一种非线性激活函数
ReLU激活函数公式: max(0,x)
ReLU函数图像以及导数图像:
ReLU激活函数在 x 大于0时,导数数值为1,相比较 Sigmoid 和 Tanh 激活函数而言,解决了深层网络中出现的“梯度消失”问题,使得深层网络可训练。
ReLU激活函数为非线性的原因:非线性即一阶导数不为常数,对ReLU求导,在输入值分别为正和负的情况下,导数是不同的,也就说明ReLU的导数不是常数,所以ReLU是非线性的。
ReLU在 x 大于 0 下,导数为1的特点:
导数为常数1的好处在于,在反向传播的“链式反应”中不会出现“梯度消失”的现象,梯度下降的强度完全取决于权值的乘积,但是在这种情况下可能会出现“梯度爆炸”的现象。解决方法(不太明白):一是控制权值,让它们在(0,1)范围内;二是做梯度裁剪,控制梯度下降强度,如ReLU(x)=min(6, max(0,x))
ReLU在 x 小于 0 下,输出为 0 的特点:
深度学习的目标:深度学习是根据大批量样本数据,从错从复杂的数据关系中,找出关键信息(关键特征)。换句话说,就是把密集矩阵转化为稀疏矩阵,保留数据的关键信息,去除噪音,这样的模型就有了鲁棒性。ReLU将x<0的输出置为0,就是一个去噪音,稀疏矩阵的过程。而且在训练过程中,这种稀疏性是动态调节的,网络会自动调整稀疏比例,保证矩阵有最优的有效特征。
ReLU 强制将x<0部分的输出置为0(置为0就是屏蔽该特征),可能会导致模型无法学习到有效特征,所以如果学习率设置的太大,就可能会导致网络的大部分神经元处于‘dead’状态,所以使用ReLU的网络,学习率不能设置太大.
ReLU激活函数的特点:
1. 相比 Sigmoid 和 Tanh 激活函数而言,不存在幂运算和除法运算,可以简化计算,提高了运算速度。
2. 解决了“梯度消失”问题,收敛速度快于 Sigmoid 和 Tanh 函数,但是可能会出现“梯度爆炸”现象。
. 相比 Sigmoid 和 Tanh 激活函数而言,不存在幂运算和除法运算,可以简化计算,提高了运算速度。
2. 解决了“梯度消失”问题,收敛速度快于 Sigmoid 和 Tanh 函数,但是可能会出现“梯度爆炸”现象。
3. ReLU的输出也不是0均值(即zero-centered),这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会逐渐的改变数据的原始分布。
ELU激活函数
ELU激活函数是一种非饱和的激活函数,也是一种非线性的激活函数,ELU激活函数是对RELU激活函数的dead现象进行了改进,
ELU激活函数公式以及导数:
E
L
U
(
x
)
=
{
x
i
f
x
>
0
α
(
e
x
−
1
)
i
f
x
<
0
ELU(x) = \begin{cases}x\qquad\qquad\quad if\quad x > 0\\ \alpha\left(e^{x}-1\right)\quad if\quad x < 0 \end{cases}
ELU(x)={xifx>0α(ex−1)ifx<0
E L U ′ ( x ) = { 1 i f x > 0 E L U ( x ) + α i f x < 0 ELU'(x) =\begin{cases}1\qquad\qquad\quad\quad if\quad x > 0\\ ELU\left(x\right)+\alpha\quad if\quad x < 0 \end{cases} ELU′(x)={1ifx>0ELU(x)+αifx<0
ELU函数图像以及导数图像:
ELU激活函数的特点
1. 相比于ReLU激活函数,解决了神经元dead问题,并且,ELU激活函数中扔保留着部分的dead神经元,用于深度学习训练时取出噪音,保留关键信息
2. 解决了“梯度消失”问题,但仍然无法避免“梯度爆炸”问题
3. 神经网络学习 α值,只能人为设置
4. ELU中包含指数运算,运算时间较长
Leaky ReLU激活函数
Leaky ReLU激活函数是一种非饱和的激活函数,也是一种非线性的激活函数,Leaky ReLU激活函数中也包含一个 α 值,通常设置在0.1到0.3之间。Leaky ReLU激活函数相比ELU存在一些缺陷,但同时也存在一些优势。
Leaky ReLU激活函数公式以及导数:
L
e
a
k
y
R
e
L
U
(
x
)
=
{
x
i
f
x
>
0
α
x
i
f
x
<
0
Leaky\quad ReLU(x) = \begin{cases}x\qquad\qquad\quad if\quad x > 0\\ \alpha x\quad \qquad\quad if\quad x < 0 \end{cases}
LeakyReLU(x)={xifx>0αxifx<0
L e a k y R e L U ′ ( x ) = { 1 i f x > 0 α i f x < 0 Leaky\quad ReLU'(x) = \begin{cases}1\qquad\qquad\quad if\quad x > 0\\ \alpha \quad \qquad\qquad if\quad x < 0 \end{cases} LeakyReLU′(x)={1ifx>0αifx<0
Leaky ReLU函数图像及导数图像:
Leaky ReLU激活函数的特点:
1. 类似ELU激活函数,Leaky ReLU激活函数也能避免ReLU中的dead问题,不过Leaky ReLU相比于ELU,完全消除了dead神经元。
2. Leaky ReLU不包含指数运算,相比ELU运算时间更短
3. 解决了“梯度消失”问题,但仍然无法避免“梯度爆炸”问题
4. 神经网络学习 α值,只能人为设置