神经网络调优
OverFitting
- early stop
- 正则化
- Dropout
- 增加数据量
- 减少模型参数
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$也小。
加速训练
- SGD (训练集做手脚)
- momentum(在梯度上做手脚)
SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定,momentum模拟了惯性,充分考虑历史梯度,并用当前地推加以微调,从而保证稳定性.
初始化$v_0$=0当前梯度是前面所有梯度的加权平均,当前时刻计算的梯度的作用仅仅是在前面梯度加权平均上的调整
Adagard (学习率做手脚)
本来应该:Adagard:
Adagard中对每个参数都有不同的学习率,比如一个参数$W_1$的梯度较大,则经过这个计算之后学习率就较小,反之$w_2$的梯度较小,计算之后学习率较大。
RMSProp(3的改进)
初始化$s_0$=0
Adadelta(没有学习率)
其实就是维护了一个$\Delta w$用来代替Adagard中的学习率。
Adam(2和4的结合)
初始化$v_0$=0,$s_0$=0其中3、4两步是参数修正,原因是如果不这样刚开始的时候有可能会使v和g,S和g相差太大.