Recipe of Deep Learning
Overfitting
overfitting的判断是要训练误差与测试误差做比较。这个56-layer的网络在训练集上都没有训练好,说白了就是有点欠拟合。所以仅仅依靠测试集上的结果来判断56-layer比20-layer overfitting是不合理的。
更多理解见
Overfitting and Underfitting With Machine Learning Algorithms
各种改进技巧
New activation function
RELU
针对负向,提出了Leaky ReLU, Parametric ReLU
ReLU,P-ReLU, Leaky-ReLU
ReLU 简单而粗暴,大于0的留下,否则一律为0。
因为神经网络的数学基础是处处可微的,所以选取的激活函数要能保证数据输入与输出也是可微的。
Rectified linear unit(ReLU) 函数的激活函数可以表示为f(x)=max(0,x),它更加符合神经元的激活原理。它的一个平滑解析函数为f(x)=ln(1+exp(x)),被称为softplus function。softplus 的微分就是logistic函数f(x)=1/(1+exp(−x))。
可以看到,当x<0时,ReLU硬饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。
然而,随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。与sigmoid类似,ReLU的输出均值也大于0,偏移现象和 神经元死亡会共同影响网络的收敛性。
针对在x<0的硬饱和问题,我们对ReLU做出相应的改进,使得
sigmoid 和 tanh作为激活函数的话,一定要注意一定要对 input 进行归一话,否则激活后的值都会进入平坦区,使隐层的输出全部趋同,但是 ReLU 并不需要输入归一化来防止它们达到饱和。
用ReLU代替了传统的Tanh或者Logistic。好处有:
- ReLU本质上是分段线性模型,前向计算非常简单,无需指数之类操作;
- ReLU的偏导也很简单,反向传播梯度,无需指数或者除法之类操作;
- ReLU不容易发生梯度发散问题,Tanh和Logistic激活函数在两端的时候导数容易趋近于零,多级连乘后梯度更加约等于0;
- ReLU关闭了右边,从而会使得很多的隐层输出为0,即网络变得稀疏,起到了类似L1的正则化作用,可以在一定程度上缓解过拟合。
当然,ReLU也是有缺点的,比如左边全部关了很容易导致某些隐藏节点永无翻身之日,所以后来又出现pReLU、random ReLU等改进,而且ReLU会很容易改变数据的分布,因此ReLU后加Batch Normalization也是常用的改进的方法。
使用了 ReLu 的 CNN 在 CIFAR-10数据集 batchsize 为100的训练中,epoch 5(2500次迭代)就把验证集错误率降到了25%,而 Tanh 则要花上35个epoch,速度提升了六倍。
卷积神经网络推荐选择的是 relu
循环神经网络推荐选择的是 relu 或tanh
Leaky-ReLU
当unit没有被激活时,允许小的非零的梯度。f(x)=x,x>0,f(x)=0.01x,x<=0。
Maxout
Learnable activation function [Ian J. Goodfellow, ICML’s 13]
Adaptive Learning Rate
RMSProp
Momentum
惯性的计算可以发现惯性与之前所有的梯度是有关的。通俗的理解为对梯度的平均,使得纵向的摆动变小了,横向的运动更快了。可加快梯度下降。
Adam
RMSProp + Momentum
Early Stopping
Early Stopping 是用来确定Epochs,合理的是用validation set 和training set 的误差曲线来确定。
Early Stopping
减少参数的更新次数,最终目的也是为了不要让参数离零太远。
降低神经网络中的方差。
优点:只运行一次梯度下降,可以找出W的较小值,中间值和较大值。而L2正则化需要超级参数lamb
缺点:提前停止了优化代价函数J,可能代价函数值不够小。
Regularization
加正则项的目的是为了让目标函数更平滑。而bias与函数的平滑没有关系,所有加正则项时不用考虑bias项,只需考虑权重项。
权重参数初始化时,尽可能的靠近零。在做参数更新的时候,是为了离零越来越远。做正则化的时候,是为了不要让权重参数离零太远。
L2 正则化
被称为权重衰减,这是因为权重乘以了一个小于的数。
权重衰减项来源L2,这是因为权重乘以了一个小于1的参数。
L2 Regularization
w并不会变成零,最终会达到平衡,而且保证w的平滑性。
L1 Regularization
L1, L2 都是为了使得权重参数不要太大。 L1是减去一个固定的值,L2是乘以一个小于1的值。这样L1很少会出现很小的值,但是有可能得到比较大的值,也就是说L1得到的值是稀疏的。L2可以保留得到很多很小的值。
Regularization 与Early Early Stopping功能类似。如果使用了Early Early Stopping后,有时候可能没必要使用Regularization
Early Stopping
减少参数的更新次数,最终目的也是为了不要让参数离零太远。
降低神经网络中的方差。
优点:只运行一次梯度下降,可以找出W的较小值,中间值和较大值。而L2正则化需要超级参数lamb
缺点:提前停止了优化代价函数J,可能代价函数值不够小。
Dropout
Training 使用Dropout,比如p%,而Testing不用Dropout. 但是Testing时权值需要乘以(1-p%)
Dropout直观理解,训练的时候需要加重,测试的时候需要去重。
Dropout的直观理解。但是partner可能会摆烂,所以训练要好好的做。但是测试阶段是没有人摆烂。
Dropout的直观理解。训练的时候有Dropout,测试的时候也需要相应缩减。
虽然有Dropout,在训练阶段,有minbatchsize,每个神经元点的权值训练相当于多个网络dropout的网络依次训练。说白了就是第一个minbatch,训练确定的某个神经元的权值,会在第二个minbatch的时候继续训练(前提是该神经元没有被dropout), 这类似于多个网络依次训练确定神经元的权值。
重点阅读。
深度学习(Deep Learning)读书思考三:正则化
机器学习中防止过拟合的处理方法
参考文献
http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html
机器学习中防止过拟合的处理方法