一天一个机器学习概念(三)——激活函数
在神经网络里,我们经常听到激活函数这个词。正如上一讲中提及的那样,Perceptron只能拟合线性的函数,而DNN中的神经元,即perceptron需要一种拟合非线性函数的能力,而这种能力的关键就在于激活函数。

一般来说,激活函数有两个作用:1. 将输出约束在一定范围内,即normalization。2. 让神经网络具备拟合复杂函数的能力。
一个好的激活函数应该具有哪些标准呢:
- 非线性
- 几乎处处可微
- 计算简单
- 非饱和性(梯度消失)
- 单调性
- 输出范围有限
- 接近恒等变换
- 参数少
- 归一化
常用的激活函数有哪些呢?最常用的激活函数应该是sigmoid了,也就是s曲线:
Sigmoid函数
解析式:


sigmoid的值域是[0,1],这个范围和概率的范围[0,1]相同,因此sigmoid是一个很自然的选择
那么sigmoid函数有什么缺陷呢?我们可以看到,在s曲线的两端,斜率的绝对值非常小,因此当函数优化到两端或者初始值就落在两端时,将难以继续优化。另一方面,sigmoid函数在层数很深的情况下容易陷入梯度消失的问题。
tanh函数
解析式:


跟sigmoid差不多,就是值域扩大了一倍,
ReLU函数
面对sigmoid梯度消失的问题,ReLU是一个不错的解决方案
解析式:Relu=max(0,x)

ReLU的优点有:
- 解决了梯度消失的问题
- 计算速度非常快
- 收敛速度远快于sigmoid和tanh
ReLU有哪些问题呢:0处不可微(影响不大);没有负数;函数不是以0为中心的
关于ReLU的变形和Maxout,请看我的另一篇blog:https://www.xinyujiang.cn/?p=183
说完了上面这些激活函数,我想再说一下softmax。在神经网络的输出层,在分类问题中,往往使用softmax作为激励函数。
softmax:

我们为什么要使用softmax,是因为需要将最后的输出概率化。那么我们为什么要让最后的输出概率化?因为我们需要使用交叉熵损失函数。


发表评论