我们可以对上文感知机中的函数
做如下调整。将每次计算结果定义为a
然后定义函数
将定义为更加通用的形式
那么即为感知机的激活函数。
激活函数的作用
激活函数的作用是将感知机的输出值转换为更加有用的形式。在感知机中,激活函数的作用是将感知机的输出值转换为0或1。在神经网络中,激活函数的作用是将神经网络的输出值转换为更加有用的形式。
常用的激活函数
阶跃函数
上面讲到的激活函数以阈值为界,一旦输入超过阈值,就切换输出。 这样的函数称为“阶跃函数”。因此,可以说感知机中使用了阶跃函数作为 激活函数。也就是说,在激活函数的众多候选函数中,感知机使用了阶跃函数。
阶跃函数的实现和图示
|
sigmoid函数
sigmoid函数是神经网络中最常用的激活函数之一。sigmoid函数的定义如下:
sigmoid函数的实现和图示
|
阶跃函数和sigmoid函数的比较
阶跃函数和sigmoid函数都是非线性函数。但是,阶跃函数是一个“阶跃函数”,输出值只能是0或1。而sigmoid函数的输出值是连续的,可以取任意值。这是因为sigmoid函数的导数是一个连续函数,因此可以用梯度法来学习神经网络的权重参数。而阶跃函数的导数是一个不连续的函数,因此不能用梯度法来学习神经网络的权重参数。但是,两个函数的趋势是相似的,都是输入信号比较小时,输出值接近0,输入信号比较大时,输出值接近1。因此,sigmoid函数也可以用来代替阶跃函数。
我们将两个函数的输出值绘制在同一张图中,可以看到两个函数的趋势是相似的。
|
ReLU函数
ReLU函数是神经网络中最常用的激活函数之一。ReLU函数的定义如下:
相较于sigmoid函数,ReLU函数的计算速度更快。因为ReLU函数只需要判断输入是否大于0即可,而sigmoid函数需要进行指数运算。因此,ReLU函数在神经网络中被广泛使用。
ReLU函数的实现和图示
|
在神经网络中,激活函数都是非线性的。这是因为,如果激活函数是线性的,那么神经网络就是多层的线性函数,无论神经网络有多少层,输出都是输入的线性组合。因此,激活函数必须是非线性的函数。比如,激活函数为,那么传递到第3层时的激活函数是,无论神经网络有多少层,输出都是输入的线性组合。这样,神经网络的层级就没有意义了。因此,激活函数必须是非线性的函数。
激活函数的选择
激活函数的选择是神经网络的重要的设计问题。在神经网络中,激活函数一般使用ReLU函数。但是,如果输出层是二元分类问题,那么输出层的激活函数一般使用sigmoid函数。如果输出层是多元分类问题,那么输出层的激活函数一般使用softmax函数。