Curves

激活函数介绍

首先,激活函数(Activation Function)的引入主要是为了 引入非线性变换,缺少了激活函数的深度神经网络输出只是输入的线性组合而已。

一个良好的激活函数应该满足以下条件:

  • 必要
    • 非线性:这是基本要求。
    • 几乎处处可微:一个处处可微的导数才能保证梯度下降法的正常运行,之所以说「几乎」是因为如果有极少数的点不可微,模型几乎不可能收敛到这里,那么它对优化的结果影响不大。
    • 单调递增/递减:保证梯度方向不会一直改变,保证优化过程收敛。
  • 非必要
    • 计算简单:例如 ReLU 的计算就比 Sigmoid的计算简单很多,也快很多。
    • 非饱和饱和 指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题,例如 Sigmoid 在接近正负无穷时梯度饱和,梯度消失。

常见激活函数

Sigmoid

$$ \begin{equation} \begin{aligned} f(x) &= \frac{1}{1 + e^{-x}} \\ f(x)' &= \frac{e^{-x}}{(1 + e^{-x})^2} \\ &= f(x) (1 - f(x)) \\ \end{aligned} \end{equation} $$

  • (+) 函数平滑,任意阶可导。
  • (-) 值域不是 0 对齐的。
  • (-) 梯度最大值为 0.25,并且随着训练的进行,梯度越来越小,逐渐饱和,容易梯度消失。
  • (-) 代价相对较高的指数操作(与 ReLU 等相比)。

Tanh

$$ \begin{equation} \begin{aligned} f(x) &= \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} \\ &= 2 \operatorname{Sigmoid}(2 x) - 1 \\ f(x)' &= \frac{(e^{x} + e^{-x})^2 - (e^{x} - e^{-x})^2}{(e^{x} + e^{-x})^2} \\ &= 1 - f(x)^2 \\ \end{aligned} \end{equation} $$

(+) 值域在 0 处对齐。 (-) 与 Sigmoid 类似的缺点。

ReLU, LReLU, PReLU

$$ \begin{equation} \begin{aligned} f(x) &= \begin{cases} \alpha x &\text{for} &x < 0 \\ x &\text{for} &x \ge 0 \\ \end{cases} \\ f(x)' &= \begin{cases} \alpha &\text{for} &x < 0 \\ 1 &\text{for} &x \ge 0 \\ \end{cases} \\ \end{aligned} \end{equation} $$

ELU, SELU

$$ f(x) = \lambda \begin{cases} \alpha (e^x - 1) &\text{for} &x < 0 \\ x &\text{for} &x \ge 0 \\ \end{cases} \\ $$

Swish

$$ f(x) = x \cdot \operatorname{Sigmoid}(x) $$

Mish

$$ f(x) = x \cdot \operatorname{Tanh}(\log(1 + e^x)) $$

参考