超参数优化以及实践方法论(待续)
主要参考:
- 《Deep Learning》
- 《neural network and deep learning》(ng)
- 《neural networks and deep learning》(by Michael Nielsen)
- 《Neural Networks Tricks of the Trade》
根据不同的参考文献给出不同的调优思路和有关技巧。
目录
- 实践方法论
- 超参数优化思路
实践方法论
-
动量和学习率衰减的SGD是很好的算法,但比较难调;Adam比较方便实用,但可能不能收敛到最优解;
-
批标准化(BN)对卷积网络比较有用;
-
在一开始就应该采用比较温和的正则化以及提前终止;
-
Dropout比较容易实现,但在全连接层之后使用效果相对明显,对卷积层有明显效果的正则化为DropBlock;
-
全连接层神经元大于256一般就要Dropout,比率一般在0.2-0.5之间,很多论文不用的原因除了有BN外可能还有相当大的数据集;
-
shuffle是必要的;
-
数据增强很有用,不论是语音数据还是图像数据;
-
如果不知道网络会不会收敛,先让网络在很小的数据集子集上过拟合,如果过拟合,则说明可以收敛;
-
用PReLU代替ReLU;
-
好的初始化权重方法很重要;
-
应用中多考虑Ensemble方法,尽管学术界不应该使用;
-
学习曲线很重要,手工调参的依据基本就靠它;
-
使用大约128(0.005)到256(0.01)的 mini-batch大小;
-
对很复杂的模型(如GoogLeNet)的修改要慎重;
超参数优化思路
neural networks and deep learning (by Michael Nielsen)
Michael在这里的思路为:固定一个合适容量的模型,然后对学习率 η \eta η,mini-batch size和正则化参数 λ \lambda λ进行优化,给出比较明确的下述步骤:
-
快速实现一个可行的模型结构,确定好隐层数目以及隐层单元数;
-
按经验给定其他超参数(除学习率,mini-batch大小和正则化以外的超参数);
-
在不考虑正则化的情况下对学习率 η \eta η进行优化,会得到一个合适的初始值;
-
通过实验确定mini-batch的大小;
-
精确的调整学习率 η \eta η;
-
进行正则化,调整超参数 λ \lambda λ;
-
重新优化学习率 η \eta η;
-
早停(early stopping)则在实验中观察确定,10(20)个epoch中验证损失没有增加就终止。
Deep Learning
-
学习率 η \eta η可能是最重要的超参数,如果只有时间调一个超参数,就调学习率 η \eta η;
-
如果训练误差大于目标误差,则考虑增大模型容量,主要通过增加隐层单元或层数以及减少正则化实现;
-
如果测试误差大于目标误差,且训练误差较小时,考虑减小模型容量,主要通过增加正则化实现;
-
增加模型容量的方法:增加隐层单元数,最优的学习率,降低权重衰减,降低Dropout比率;
-
通常最佳模型为正则化的很好的大规模模型。
没有给出明确的调参步骤,但对每个参数的影响进行说明,手工调参的时候记住要用综合考虑测试误差和训练误差。