一、必要性
激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。
二、种类
sigmoid函数
特别注意sigmoid函数的导数求法:
σ′(x)=σ(x)∗(1−σ(x))
缺点:
(1)梯度消失。观察函数图像,当 x>10 或者 x<10 ,激活函数的导数接近0,在利用梯度反向传播法更新权值的时候,会发生梯度值接近0现象。
(2)输出函数值不是零对称的。就是说Sigmoid函数的输出值恒大于0,这会导致模型训练的收敛速度变慢。举例来讲对 σ(∑wixi+b) ,如果所有的 xi 均为正数或负数,那么对它对 wi 的导数总是正数或者负数,这会导致如下图红色箭头所示的阶梯式更新,这显然并非一个好的优化路径。深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。
(3)指数运算耗费时间。tanh 函数,也叫双曲正切函数
tanh(x)=ex−e−xex+e−x
优点:解决了zero-centered的输出问题。
缺点:梯度消失的问题和幂运算的问题仍然存在。
三、参考文献
1,斯坦福大学 CS231n
2, http://www.cnblogs.com/willnote/p/6912798.html