激活函数是为了给神经元引入非线性因素,使得神经网络可以逼近任意非线性函数,这样神经网络就可以应用于众多的非线性模型中。常见的几个激活函数有sigmod,Tanh,ReLU,softmax
1、sigmod函数(logistic 函数)
下图为对应的公式和曲线以及对应的求导曲线图:
取值范围(0,1),可以用来做二分类。不过这个函数现在已经很少用了 ,主要原因是其在反向传播(BP)算法使用时,会进行梯度衰减,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。
2 、Tanh函数
和sigmod相比,优点是output是0均值的。
3 、ReLU(Rectified Linear Unit) 即修正线性单元
优点:实验表明,它的使用,相对于sigmoid和tanh,可以非常大程度地提升随机梯度下降的收敛速度。
缺点:例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
4、 Softmax
用于多分类神经网络输出,输出的各个分类的概率,计算公式如下:
最后总结一下,从数学角度来讲,激活函数的作用就是将输入数据映射到0到1上(tanh是映射-1到+1上)。至于映射的原因,除了对数据进行正则化外,大概是控制数据,使其只在一定的范围内。当然也有另外细节作用,例如Sigmoid(tanh)中,能在激活的时候,更关注数据在零(或中心点)前后的细小变化,而忽略数据在极端时的变化,例如ReLU还有避免梯度消失的作用。通常,Sigmoid(tanh)多用于全连接层,而ReLU多用于卷积层。
参考博客: