神经网络中的激活函数

神经网络中的激活函数

1 为什么要有激活函数?

众所周知,激活函数的作用是为了增加非线性因素,但这句解释其实不是很形象,今天我们用一个简单的例子说明。

假设我们需要用一层神经网络划分出平面上的点,直接使用一层神经网络,即用 $y = kx + b$ 去切分平面。

激活函数的作用

如图 1 所示,当样本点是线性可分的时候,用一条直线就能做到将蓝色的点和绿色的点分开。图 2 中又引入了一个蓝色的点(黄色箭头所示),此时用一条直线无法准确分开。

这时,我们在神经网络后面加入激活函数,比如 sigmoid 函数,原函数就变成了 $y = \frac{1}{1+e^{-(kx + b)}}$,此时原先的直线就变成了曲线,具备划分非线性可分样本的能力!(见图 3)。

真正实际应用时,假设空间往往是高维的,一刀切的情况几乎不存在。所以我们必须增加非线性因素来提高模型的拟合能力,这样才有可能找到一个更好性能的模型。

2 常见的激活函数

激活函数有很多(详情见 WIKI),但我们实际常见用到的并不多,下面四个是在深度学习框架中一定会包含的,我们一起来看看。

2.1 Sigmoid

这应该是大多数人遇到的第一个激活函数,它具有将输入映射到 0 到 1 的特性,可以大致认为是概率,因此是二分类问题的御用激活函数。

原函数

$$
y = \frac{1}{1+e^{-x}}
$$

导函数

$$
\begin{aligned}
y’ &= (\frac{1}{1+e^{-x}})’ \\
&= -1 \cdot \frac{1}{(1+e^{-x})^2} \cdot (1+e^{-x})’ \\
&= -1 \cdot \frac{1}{(1+e^{-x})^2} \cdot e^{-x} \cdot (-x)’ \\
&= \frac{1}{(1+e^{-x})^2} \cdot e^{-x} \\
&= \frac{1+e^{-x}-1}{(1+e^{-x})^2} \\
&= \frac{1}{1+e^{-x}} - \frac{1}{(1+e^{-x})^2}\\
&= \frac{1}{1+e^{-x}} \cdot (1 - \frac{1}{1+e^{-x}}) \\
&= y(1-y)
\end{aligned}
$$

分析

  • 优点:将输出直接归一化成 0 到 1 的概率,函数可微。
  • 缺点:容易梯度消失,指数函数计算慢。

2.2 Tanh

双曲正切函数(tanh)是双曲正弦函数(sinh)与双曲余弦函数(cosh)的比值。

原函数

$$
y = \frac{\sinh(x)}{\cosh(x)}
= \frac{e^x-e^{-x}}{e^x+e^{-x}}
$$

导函数

$$
\begin{aligned}
y’ &= (\frac{e^x-e^{-x}}{e^x+e^{-x}})’ \\
&= \frac{(e^x-e^{-x})’(e^x+e^{-x})-(e^x-e^{-x})(e^x+e^{-x})’}{(e^x+e^{-x})^2} \\
&= \frac{(e^x+e^{-x})(e^x+e^{-x})-(e^x-e^{-x})(e^x-e^{-x})}{(e^x+e^{-x})^2} \\
&= 1 - \frac{(e^x-e^{-x})^2}{(e^x+e^{-x})^2} \\
&= 1 - y^2
\end{aligned}
$$

分析

  • 优点:关于原点对称。
  • 缺点:输入过大过小时,梯度过小。

2.3 Softmax

原函数

$$
y = \frac{e^i}{\sum_j e^j}
$$

导函数

通常和交叉熵损失函数一起使用。(暂略)

分析

  • 优点:Sigmoid 的多分类版本。
  • 缺点:同 Sigmoid。

2.4 ReLU

原函数

$$
y = max(0, x)
$$

导函数

$$
y’ = 0 (x \le 0) \\
y’ = 1 (x > 0)
$$

分析

  • 优点:计算速度快。
  • 缺点:负区间梯度完全消失。

2.5 step

阶跃函数(step)是一种特殊的激活函数,一般不会使用,但是用来举例特别合适。

原函数

$$
y = 0 (x \le 0) \\
y = 1 (x > 0)
$$

导函数

$$
y’ = \infin (x = 0) \\
y’ = 0 (x \ne 0)
$$

分析

评论