神经网络调优

OverFitting

  1. early stop
  2. 正则化
  3. Dropout
  4. 增加数据量
  5. 减少模型参数

tip:为什么正则化防止过拟合?

可以看出,正则项对b没影响,对w有影响,即:

也即是说w权重衰减了,w更小了,为什么w更小了就能防止过拟合呢?因为过拟合的网络一般参数较大,w更小了网络就更简单了,所谓奥卡姆剃刀,所以过拟合减少了.

数据预处理

中心化\标准化

权重初始化

1.随机初始化为小数据,如均值为0,方差为0.01的高斯分布,初始化小数据目的是使激活函数梯度尽量大,从而加速训练。
2.Xavier initialization
初始化$w$为:

m和n分别为数据的输入维度和输出维度。该方法的原理使使每一层输出的方差应该尽量相等,也就是每一层的输入和输出方差尽量相等。下面进行公式推导(假设线性激活函数(或者说没有激活函数)),假设任意一层输入为$X=(x_1,x_2,x_3…x_n)$,输出$y=(y_1,y_2,y_3…y_m)$
前提:$W$,$X$独立同分布,$E(W)$和$E(X)都为0$。参考

为使$Var(Y)=Var(X)$则
若考虑反向则:
综合两点:

Batch Normalization

参考文章

目的是解决特征分布偏移问题,会造成梯度消失
其实就是对每一层的输入做一个Norm,但是直接Norm就损失了学到的特征,因此使用传导公式如下:

$\epsilon$是个超参数,m是min-batch的大小,$\gamma$和$\beta$是两个需要学习的超参数。可以看出,当$\gamma$=$\sigma^2$,$\epsilon$=0,$\beta$=$\mu$的时候就恢复了原特征.

详细解释:
已知对于任何一个参数$W$,它在神经网络中的梯度为:

如果没有激活函数的话,则原式等于:

如果在初始化的时候$W$非常小,那么各层的$W$连乘后也肯定非常小,那上式得到的梯度也一定非常小.但是如果按照BN的方式操作一下,其实按照上诉公式:

即:

也就是说,梯度不在仅仅和$W$有关,而是和$\frac{W}{\sigma^2}$有关,$W$大的时候一般$\sigma^2$也大,$W$小的时候一般$\sigma^2$也小。

加速训练

  1. SGD (训练集做手脚)
  2. momentum(在梯度上做手脚)

    SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定,momentum模拟了惯性,充分考虑历史梯度,并用当前地推加以微调,从而保证稳定性.

初始化$v_0$=0当前梯度是前面所有梯度的加权平均,当前时刻计算的梯度的作用仅仅是在前面梯度加权平均上的调整

  1. Adagard (学习率做手脚)
    本来应该:

    Adagard:

    Adagard中对每个参数都有不同的学习率,比如一个参数$W_1$的梯度较大,则经过这个计算之后学习率就较小,反之$w_2$的梯度较小,计算之后学习率较大。

  2. RMSProp(3的改进)

    初始化$s_0$=0

  3. Adadelta(没有学习率)

    其实就是维护了一个$\Delta w$用来代替Adagard中的学习率。

  4. Adam(2和4的结合)

初始化$v_0$=0,$s_0$=0其中3、4两步是参数修正,原因是如果不这样刚开始的时候有可能会使v和g,S和g相差太大.