激活函数
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:输出的维度
