神经网络中的激活函数

神经网络中的激活函数

为什么要有激活函数?

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

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

激活函数的作用

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

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

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

常见的激活函数

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

Sigmoid

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

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

Tanh

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

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

Softmax

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

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

ReLU

$$
y = max(0, x) \\
y’ = 0 (x < 0) \\
y’ = 1 (x \geq 0)
$$

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

参考

评论