0%

机器学习日记(7) 激活函数的进一步理解

回顾

  之前我们学习了在神经网络中使用 sigmoid 激活函数,其数学公式如下:

$$
\sigma(z) = \frac{1}{1 + e^{-z}}
$$

  它常常被用于将一个实数集上的值转换成 0 - 1 的概率值。

其他常用激活函数

  在实际情况中,g(z) 的结果往往不是一个非 0 即 1 的值,而是一个程度值,可以从 0 到正无穷大,数值越大表示的程度越强。因此我们引入了另一个激活函数 ReLU (修正线性单元)

$$
g(z) = \max(0,z)
$$

  还有一个与其相关的激活函数是 线性激活函数,即

$$
g(z) = z
$$

  一般情况下,使用此函数可以认为没有使用任何激活函数。有了这些激活函数,就可以构建出更加强大的神经网络。

如何选择激活函数

  根据目标标签或真实标签 Y 的不同,输出层的激活函数也会有不同的选择。

  首先,我们可以为神经网络中的不同神经元选择不同的激活函数,在考虑输出层的激活函数,通常会根据目标或真实标签 Y 选择激活函数。比如当在处理二分类问题时,输出层就会选择 sigmoid 激活函数,以输出一个概率。在线性回归中,如果输出有正有负,就可以选择使用线性激活函数,如果 Y 只能取正值,可以使用 ReLU 激活函数。

  在很多情况下,隐藏层中我们使用 ReLU 激活函数而不是 sigmoid 激活函数。第一, ReLU 激活函数的运行速度更快;第二,ReLU 的平坦区域比 Sigmoid 函数更少,在梯度下降的过程中可以加快速度。

  

图 1 当激活函数平坦时
  

为什么需要激活函数

  如果我们对神经网络中每一个神经元都使用线性激活函数,它们就无法正常工作。如果每个神经元都用线性激活函数,那么他也只能做最简单的线性回归,无法得到比线性回归模型更复杂的结果。因为多次线性变换的结果都可以通过一次线性变换得到。

  所以在一般情况下,我们通常使用 ReLU 作为隐藏层的激活函数。