什么~为什么~哪些(RSST)
一、什么是激活函数
如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function:
二、为什么要用激活函数
如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中
三、常用的有哪些激活函数
1)Sigmoid函数:
公式:
曲线:
导数:
sigmoid函数取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类
缺点:
1)容易出现梯度消失(gradient vanishing)的现象:当激活函数接近饱和区时,导数接近0,后向传递的数学依据是微积分求导的链式法则,当前导数需要之前各层导数的乘积,几个比较小的数相乘,导数结果很接近0,从而无法完成深层网络的训练
2)幂运算相对耗时
为何会出现梯度消失:
反向传播算法中,要对激活函数求导,sigmoid 原函数及导数图形如下:
由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度消失”现象
Sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个f‘(x) 因子(sigmoid关于输入的导数)
因此一旦输入落入饱和区,f‘(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失
一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象[Understanding the difficulty of training deep feedforward neural networks]
梯度消失问题至今仍然存在,但被新的优化方法有效缓解了
Sigmoid 的饱和性虽然会导致梯度消失,但也有其有利的一面。例如它在物理意义上最为接近生物神经元。(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数
2)Tanh函数
公式:
曲线:
也称为双切正切函数,取值范围为[-1,1]。tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果
与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好
3)ReLU
Rectified Linear Unit(ReLU) - 用于隐层神经元输出
公式:
曲线:
RELU特点:输入信号 0 的情况下,输出等于输入
ReLU 的优点:
Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多
ReLU 的缺点:
训练的时候很”脆弱”,很容易就”die”了
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了
4) softmax函数
Softmax - 用于多分类神经网络输出
公式:
举个例子来看公式的意思:
为什么要取指数,第一个原因是要模拟max 的行为,所以要让大的更大,第二个原因是需要一个可导的函数
四、致谢
本文参考:https://baijiahao.baidu.com/s?id=1609895552884544265
非常感谢!