激活函数

Sigmoid

公式:$f(x) = \frac{1}{1 + e^{-x}}$

导数:$f’(x) = f(x) * (1 - f(x))$

特点:函数输出在(0,1)之间,导数输出在(0,0.25)之间。[-6, 6]之间比较敏感,[-3, 3]之内效果较好。一般5层之内就会出现梯度消失现象,一般只用于二分类的输出层。

Tanh

公式:$f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$

导数:$f’(x) = 1 - f(x)^2$

特点:函数输出范围在(-1, 1)之间,导数输出在(0,1)之间。收敛速度更快,一般用于隐藏层。

ReLU(Rectified Linear Unit)

公式:$f(x) = max(0, x)$

导数:$f’(x) = 1$ if $x > 0$; $f’(x) = 0$ if $x < 0$

特点:忽略负信号,更简单,效率更高。会使一部分神经元输出为0,减少参数之间的依存关系,缓解过拟合。一般隐藏层首选。

为了考虑负样本所以有了 PReLU(Parametric ReLU):

公式:$f(x) = max(0, x) + \alpha * min(0, x)$

导数:$f’(x) = 1$ if $x > 0$; $f’(x) = \alpha$ if $x < 0$

当 $\alpha$ 取 0.01 时,也叫 Leaky ReLU。

Sofmax

公式:$f(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}}$

导数:$f’(x_i) = f(x_i) * (1 - f(x_i))$

特点:将多分类结果按照概率输出,适用于多分类的输出层。

Identity

公式:$f(x) = x$

导数:$f’(x) = 1$

特点:无激活函数,直接输出,适用于回归任务。

激活函数的选取规则:

  • 隐藏层:ReLU -> Leaky ReLU / PReLU -> Tanh -> Sigmoid

  • 输出层:二分类 -> Sigmoid;多分类 -> Softmax;回归 -> Identity

参数初始化

  • 均匀分布:从区间均匀随机取值,默认区间 (0, 1),可以设置为 $(-\frac{1}{\sqrt{n}}, \frac{1}{\sqrt{n}})$,其中 n 是输入的维度。可以打破对称性,防止神经元输出相同。但是随机范围不当可能会导致梯度问题。适用于浅层网络或者低复杂度模型。
  • 正态分布:随机从均值为0,标准差为1的高斯分布中取样,使用很小的值进行初始化。
  • 全 0/1:全设置为 0/1。实现简单,但是不能打破对称性。全 1 会导致激活值指数增长,梯度爆炸。
  • 固定值:权重参数初始化为固定值。实现简单,但是不能打破对称性。
  • kaiming 初始化:也叫 HE 初始化,适用于 ReLU 激活函数。
    • 正态分布:从 [0, std] 中取样,其中 $std = \sqrt{\frac{2}{fan_in}}$
    • 均匀分布:从 [-limit, limit] 中取样,其中 $limit = \sqrt{\frac{6}{fan_in}}$
    • fan_in:输入的维度
  • Xavier 初始化:也叫 Glorot 初始化,使用于Sigmoid 和 Tanh 激活函数。
    • 正态分布:从 [0, std] 中取样,其中 $std = \sqrt{\frac{2}{fan_in + fan_out}}$
    • 均匀分布:从 [-limit, limit] 中取样,其中 $limit = \sqrt{\frac{6}{fan_in + fan_out}}$
    • fan_in:输入的维度
    • fan_out:输出的维度