前言
激活函数的作用
-
增加网络的非线性。
数据分布大部分是非线性的,而神经网络的计算是线性的,因此需要引入激活函数,增加网络的非线性,以强化网络的学习能力。 -
可以做概率值的处理,例如Sigmoid和tanh,它们的特点是将输出限制在(0,1)和(-1,1)之间;
-
Relu适合用于深层网络的训练,而Sigmoid和tanh会出现梯度消失。
人工神经网络中为什么ReLu要好过于tanh和sigmoid function?
-
节省计算量:sigmoid等函数在反向传播求误差梯度时,求导涉及除法和指数运算,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
-
对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,模型权重难以更新),这种现象称为饱和,从而无法完成深层网络的训练。而ReLU就不会有饱和倾向,不会有特别小的梯度出现。
-
Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
1. sigmoid (0,1)
-
公式:
σ(z)=11+e−z\sigma(z)=\frac{1}{1+e^{-z}}σ(z)=1+e−z1 -
导数:
σ′(z)=0−1∗(−e−z)(1+e−z)2=e−z(1+e−z)2=e−z(1+e−z)∗1(1+e−z)=1+e−z−1(1+e−z)∗σ(z)=(1−σ(z))∗σ(z)\begin{aligned} \sigma'(z)&=\frac{0-1*(-e^{-z})}{(1+e^{-z})^2} \\ &=\frac{e^{-z}}{(1+e^{-z})^2} \\ &=\frac{e^{-z}}{(1+e^{-z})}*\frac{1}{(1+e^{-z})} \\ &=\frac{1+e^{-z}-1}{(1+e^{-z})}*\sigma(z)\\ &=(1-\sigma(z))*\sigma(z) \end{aligned}σ′(z)=(1+e−z)20−1∗(−e−z)=(1+e−z)2e−z=(1+e−z)e−z∗(1+e−z)1=(1+e−z)1+e−z−1∗σ(z)=(1−σ(z))∗σ(z) -
优点:
- 平滑、易于求导。
-
缺点:
- 激活函数计算量大(在正向传播和反向传播中都包含幂运算和除法);
- 反向传播求误差梯度时,求导涉及除法;
- Sigmoid导数取值范围是[0, 0.25],由于神经网络反向传播时的“链式反应”,很容易就会出现梯度消失的情况。例如对于一个10层的网络, 根据0.25100.25^{10}0.2510近似9.5∗10−79.5*10^{-7}9.5∗10−7,第10层的误差相对第一层卷积的参数W1W_1W1的梯度将是一个非常小的值,这就是所谓的“梯度消失”。
- Sigmoid的输出不是0均值(即zero-centered);这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会改变数据的原始分布。
2. softmax
用于处理分类问题,总概率和相加为1。
pi=eai∑k=1Neakp_i=\frac{e^{a_i}}{\sum_{k=1}^N e^{ak}}pi=∑k=1Neakeai
αpiαaj={pi(1−pj)if(i=j)−pjpiif(i≠j)
\frac{\alpha p_i}{\alpha a_j}=
\begin{cases}
p_i(1-p_j)&if(i=j)\\
-p_jp_i &if(i\not=j)\\
\end{cases}
αajαpi={pi(1−pj)−pjpiif(i=j)if(i=j)
求导分为i=j和i≠j:
softmax与sigmoid的区别
- 最后一层连接的神经元,sigmoid为1,softmax为2.
- sigmoid只有目标/非目标的区分,即独立事件,可以用1−P(目标)1-P(目标)1−P(目标) 得出 P(非目标)P(非目标)P(非目标).
- softmax可以有多类.
- sigmoid为两点分布,即P与1-P;softmax为离散概率分布,所有维度概率之和=1,当二分类时为二项分布.
- 若有二维[-0.9419 1.944]经过sigmoid和softmax
- softmax得出[0.2805 0.8748],会发现两者之和!=1,因为两者属于独立事件.
- sigmoid得出[0.0529 0.9471],两者之和=1.
3. tanh (-1,1)
tanh为双曲正切函数,输出范围(-1,1),可以把 tanh 函数看做是 sigmoid 向下平移和拉伸后的结果。
-
公式:
tanh(x)=ex−e−xex+e−x−1=21+e−2x−1\begin{aligned} tanh(x)&=\frac{e^x-e^{-x}}{e^x+e^{-x}}-1 \\ &=\frac{2}{1+e^{-2x}}-1 \end{aligned}tanh(x)=ex+e−xex−e−x−1=1+e−2x2−1 -
tanh的输出范围时(-1, 1),解决了Sigmoid函数的不是zero-centered输出问题;
-
幂运算的问题仍然存在;
-
tanh导数范围在(0, 1)之间,相比sigmoid的(0, 0.25),梯度消失问题会得到缓解,但仍然还会存在。
4. relu (0,x)
-
公式:
relu(x)=max(0,x)relu(x)=max(0, x)relu(x)=max(0,x) -
不会出现梯度消失。
-
可能出现梯度爆炸,因为导数为1,链式法则是累乘的过程。
-
注意学习率不能设置太高,特别是当值小于0的时候,也就是relu在筛选噪声数据稀疏矩阵的时候,如果设置太高,大部分神经元处于‘dead’状态,导致模型无法学习到有效特征。
-
运算速度快。
5. Leaky ReLU PReLU RReLU
为了防止模型的‘Dead’情况,后人将x<0部分并没有直接置为0,而是给了一个很小的负数梯度值α\alphaα,即x>=0x>=0x>=0时y=xy=xy=x;x<0x<0x<0时,y=αxy=\alpha xy=αx。
- Leaky ReLU中的α\alphaα为常数,一般设置 0.01。这个函数通常比 Relu 激活函数效果要好,但是效果不是很稳定,所以在实际中 Leaky ReLu 使用的并不多。
- PRelu(Parametric Relu 参数化修正线性单元) 中的α\alphaα作为一个可学习的参数,会在训练的过程中进行更新。
- RReLU(Random ReLU随机纠正线性单元)。在RReLU中,α\alphaα在训练中是随机的,在之后的测试中就变成了固定的了。RReLU的亮点在于,在训练环节中,αji\alpha_{ji}αji是从一个均匀的分布U(I,u)U(I,u)U(I,u)中随机抽取的数值。
ReLU及其变体图像:
Reference
https://zhuanlan.zhihu.com/p/73214810