激活函数是为了给神经元引入非线性因素,使得神经网络可以逼近任意非线性函数,这样神经网络就可以应用于众多的非线性模型中。常见的几个激活函数有sigmod,Tanh,ReLU,softmax

1、sigmod函数(logistic 函数)

下图为对应的公式和曲线以及对应的求导曲线图:

深度学习笔记(九)--激活函数_d3

深度学习笔记(九)--激活函数_激活函数_02

取值范围(0,1),可以用来做二分类。不过这个函数现在已经很少用了 ,主要原因是其在反向传播(BP)算法使用时,会进行梯度衰减,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。

2 、Tanh函数

和sigmod相比,优点是output是0均值的。

 

深度学习笔记(九)--激活函数_CNN_03

深度学习笔记(九)--激活函数_数据_04

深度学习笔记(九)--激活函数_CNN_05

3 、ReLU(Rectified Linear Unit) 即修正线性单元

深度学习笔记(九)--激活函数_神经网络_06

深度学习笔记(九)--激活函数_激活函数_07

 

优点:实验表明,它的使用,相对于sigmoid和tanh,可以非常大程度地提升随机梯度下降的收敛速度。
缺点:例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。

4、 Softmax

用于多分类神经网络输出,输出的各个分类的概率,计算公式如下:

 

深度学习笔记(九)--激活函数_CNN_08

 最后总结一下,从数学角度来讲,激活函数的作用就是将输入数据映射到0到1上(tanh是映射-1到+1上)。至于映射的原因,除了对数据进行正则化外,大概是控制数据,使其只在一定的范围内。当然也有另外细节作用,例如Sigmoid(tanh)中,能在激活的时候,更关注数据在零(或中心点)前后的细小变化,而忽略数据在极端时的变化,例如ReLU还有避免梯度消失的作用。通常,Sigmoid(tanh)多用于全连接层,而ReLU多用于卷积层。