每天机器学习,轻松人工智能!
---作者
前面谈到过,有时候需要一个阈值来决定神经元的输出,比如给汽、水、冰分类,水温超过100就是汽,0-100之间是水,小于0是冰,0和100都是阈值,这个阈值称为激活函数。这个阈值的引入把线性的函数变成了非线性的了。什么是非线性?看下面的图形,肯定左边的是线性的,右边是非线性的。
线性可分与不可分
再深入一点说,我们用阈值是因为线性模型的表达能力不够。某些数据是线性可分的,意思是,可以用一条直线将数据分开。比如下面的图中,同种颜色为同类数据,只要找到一条合适的线性方程,一条直线就分开了数据。
但是有些数据不是线性可分的。比如如下数据:
这四个数据就没有办法画出一条直线来将他们分开。所以,神经元中引入非线性函数是必要的,阈值函数是最简单的激活函数。
示例:单相思的分类
再举一个爱情情感的例子:
一对男女,如果男方单方面喜欢女方,或者女方单方面喜欢男方,就属于单相思,如果互相一见钟情或者都没有感觉,就不是单相思。这是一个典型的异或问题(XOR)。可以做成一个表:
喜欢对方用1表示,不喜欢用0表示。分类中1表示单相思,0表示其它。这个真值表不是线性可分的,不能使用一个直线分开红色和蓝色圆圈。如图所示:
我们可以设计一种神经网络,通过激活函数来使得这组数据线性可分。激活函数还是选择阀值函数,神经网络示意图如下:
这次我们用了两个神经元,分为输入、中间、输出三层,其中直线上的数字为权重w。圆圈中的数字为阀值。中间层中如果输入大于1.5则输出1,否则0;输出层中如果输入大于0.5,则输出1,否则0。
我们来一步一步地算,其中带有↗是表示激活的。
可以看到灰色背景的两行就是单相思类别的输出。
常用的激活函数
总而言之,激活函数可以引入非线性因素,解决线性模型所不能解决的问题。激活函数不是只有阈值函数,还有很多可用的函数。下面介绍几个常用的。
阈值函数
这就是一直举例的最简单形式的阈值函数。当达到阈值的时候神经元被激活。
Sigmoid函数
Sigmoid函数的特点是会把输出限定在0~1之间,如果是非常大的负数,输出就是0,如果是非常大的正数,输出就是1。
tanh函数
tanh是Sigmoid函数的变形,tanh的均值是0,在实际应用中有比Sigmoid更好的效果。
ReLU
ReLU(热撸函数)是近来比较流行的激活函数,当输入信号小于0时,输出为0;当输入信号大于0时,输出等于输入。
其它更多的激活函数不再介绍,可以参考下面的表。
领取专属 10元无门槛券
私享最新 技术干货