作用
- (1)让多层感知机成为真正的多层,否则等价于一层
- (2)引入非线性,使网络可以逼近任意非线性函数(万能逼近定理,universal approximator)
- 神经网络因为在万能逼近定理当中,证明了只需要一层的多层感知机,加上激活函数,就可以逼近任意的非线性函数。
激活函数需要具备以下几点性质:
- 1.连续并可导(允许少数点上不可导),便于利用数值优化的方法来学习网络参数
- 2.激活函数及其导函数要尽可能的简单,有利于提高网络计算效率
- 3.激活函数的导函数的值域要在合适区间内,不能太大也不能太小,否则会影响训练的效率和稳定性
- 在网络更新过程当中,我们会使用到反向传播算法。在反向传播算法当中,会使用到激活函数的导函数,如果这一个函数值域非常大或者非常小。这会直接影响到权重的更新
常见激活函数:
- Sigmoid(S型)
-
- sigmoid函数也经常用来做二分类的输出的激活函数。把我们实数域上的值变换到零到一区间,符合概率分布的形式
- sigmoid函数的一个弊端也就是如果我们的神经元大量的落入到饱和区的时候。它的梯度几乎是零梯度是零,我们就没有办法再往前去传播我们的梯度,去更新我们的权重了
-
- Tanh(双曲正切)
-
- 值阈在-1到1区间,这一个特性呢,就非常符合一个对称在神经网络训练过程当中非常需要我们数值的一个对称性,也就是零均值
- 左边和右边都有一个饱和区。这个饱和区也是它的一个缺点,因为在这一个饱和区,它的梯度几乎是零,也就不利于我们神经网络权重的更新,不利于我们梯度向前传播
-
- ReLU(修正线性单元)
-
- 不存在饱和区
- x=0上不可导,z=0的时候,我们可以把它的梯度设置为一,或者是设置为零
-
- 总结,有大类的激活函数,一大类是s型激活函数和双曲正切激活函数为代表的饱和激活函数。另外一大类是re lu为代表的非饱和激活函数。