训练网络模型所需要做的功课有:
- 训练过程能够正常启动前置条件:设定激活函数、数据预处理、权重系数初始化、网络正则化策略、梯度校验等。
- 训练过程动态监测:学习曲线监测、参数更新、超参数的优化选择。
- 模型评估与改进:模型集成。
本节与下一节将描述如上内容。
一. 激活函数
1. sigmoid
表达式为 σ ( x ) = 1 / ( 1 + e − x ) \sigma(x) = 1/(1+e^{-x}) σ(x)=1/(1+e−x),图像如下:
- 在正负饱和区域,其函数导数趋于0。导致在这些区域,利用梯度下降法不能有效更新参数。( ∂ L / ∂ W \partial L/\partial W ∂L/∂W的表达中,有一项系数是激活函数的导数。)
sigmoid
的输出都是正数,不是0-中心的。 ∂ L / ∂ W \partial L/\partial W ∂L/∂W表达为一个列向量乘上行向量。其中列向量为前一层传递下来的误差项,行向量为本层激活函数的输出值。若激活函数输出一直为正,则 W W W的更新方向只能是全方向的某一部分。一个参数空间为2维的示例如下:
2. tanh
函数
超正切函数,表达式为 ( 1 − e − x ) / ( 1 + e − x ) (1-e^{-x})/(1+e^{-x}) (1−e−x)/(1+e−x),图像如下:
缺点:在正负饱和区域,出现梯度消失现象。
3. ReLU
函数
Rectified Linear Unit
,表达为
max
(
0
,
x
)
\max(0, x)
max(0,x),图像如下:
缺点:
- 非0-中心的。
- 在负值区域,
ReLU
会死掉。
4. LReLU
函数和PReLU
Leaky ReLU
,表达为
max
(
0.01
x
,
x
)
\max(0.01x, x)
max(0.01x,x);Parametric ReLU
,表达为
max
(
α
x
,
x
)
\max(\alpha x, x)
max(αx,x),其中
α
\alpha
α是进行学习的。图像如下:
5. ELU
函数
Exponential Linear Unit
,表达式为:
f
(
x
)
=
{
x
i
f
x
>
0
α
(
e
x
−
1
)
i
f
x
≤
0
f(x) = \left\{ \begin{array}{ll} x & if \quad x > 0 \\ \alpha(e^x-1) & if \quad x \le 0 \end{array} \right.
f(x)={xα(ex−1)ifx>0ifx≤0
图像为:
6. Maxout
函数
表达式为 max ( W 1 T x 1 + b 1 ,   W 2 T x 2 + b 2 ) \max(W_1^Tx_1+b_1,\, W_2^Tx_2+b_2) max(W1Tx1+b1,W2Tx2+b2),缺点就是使得参数数量翻倍。
激活函数选择策略
- 推荐使用
ReLU
。 - 若死掉的
ReLU
太多,可以尝试LReLU
、Maxout
、ELU
等。 - 可以尝试
tanh
,但应该没太大用处。 - 不要使用
sigmoid
。
二. 数据预处理
对一般应用场景而言,一般做的预处理包含:
- 0均值,方差归一化。
PCA
降维。- 白化,使得各个维度的特征能起到相同的作用。
对于图像而言,一般只做0均值化。因为图像数据不同通道之间不会相差太大。
下图说明了0均值化的必要性。在未做0均值化时,分界线稍微摆动一下,就有可能出现错误分类。而0均值化后,所能容忍的正确分类的参数范围会变大。
另外,如果某层输入值的均值不为0,那么该层的系数矩阵稍微改变一下,就有可能导致输出值的巨大变动,给学习带来困难。
三. 参数初始化
1. 不恰当初始化的后果
- 若所有权值初始化为0,那么所有的神经元输出相同。考虑 ∂ L / ∂ W \partial L/\partial W ∂L/∂W的表达,可知所有的参数(除了第一层)都将以同样的方式进行更新。
- 若权值初始化为小的随机数,使用
tanh
做激活函数:对于深层网络是有问题的。由于一层一层 W W W的作用,会导致线性加权后的结果集中分布在0值附近,从而导致梯度消失现象。
- 若权值初始化较大:激活函数会处于饱和状态,同样会导致梯度消失。
2. 正确的初始化姿势
Xavier Initialization
:基本思想是要求输出的方差等于输入的方差。但有个前提:需要处于激活函数的线性区间。- 对于
ReLU
,上述前提不成立,何恺明于2015年提出了针对这一问题的初始化方法:引入一个参数调整因子2。
四. 批量归一化
- 通常添加在全连接层/卷积层和非线性激活层之间,作用就是强制使得输出的数据具有0均值1方差的分布。
- 可以理解为一种正则化手段。对于训练数据,每个样本
x
的归一化参数依赖于其所在的批次,即批量归一化对训练数据而言是加入了一种随机化的扰动。对于测试数据,其归一化参数是在训练过程中累积平均得到,因此,把这种随机性给去除了。这符合正则化的思想。 - 好处:可以使用更大的学习速率;去除了训练效果对参数初始化的强依赖性。
五. 确定网络是否能够正常运行
- 检查损失函数的取值是否在合理范围内。
- 在小数据集上,关闭正则化,确保网络能够完美拟合数据。
- 选择合适的学习速率。
六. 超参数选取
- 使用交叉验证策略。
- 最好在对数空间上进行查找。
- 搜索时注意参数范围的粗细粒度。
- 对于多个超参数,除了均匀分布的网格搜索策略,可以尝试随机化搜索策略,这样可以获取单个超参数在更为详细的数据点上的效果。
- 进行搜索优化的超参数不要超过4个,否则搜索空间会过大。