perfectism's blog

物来顺应,未来不迎,当时不杂,既往不恋

0%

Tricks of Training Deep Neural Works

Tricks of Training Deep Neural Works

Overfitting

训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。最终模型在训练集上效果好;在测试集上效果差。模型泛化能力弱

img

过拟合的表现:

  • train loss不断下降,test loss趋于不变

  • 训练集和测试集准确率相差过大 15%以上

减少模型的复杂程度(容量)

L2正则化

Dropout:提高dropout的rate

减少预训练的锁定层数

更多的数据

让模型感受更多的数据,逼迫模型泛化

数据增强

采集更多的数据

查看数据集的分割是否合适

学习率的调整

trick是 warm up(热身),就是先采用小的学习率(0.01)进行训练,训练了400iterations之后将学习率调整至0.1开始正式训练

在学习遇到瓶颈,即训练和验证损失均趋于不变时,适当调小batch_size,用更细的笔来画画

进行交叉验证

当数据集比较小的时候,交叉验证可以“充分利用”有限的数据找到合适的模型参数,防止过度拟合

做法:就是把样本集S分成k份,分别使用其中的(k-1)份作为训练集,剩下的1份作为交叉验证集,最后取最后的平均误差,来评估这个模型

最后对k个模型的结果取平均

Early Stopping

Owe fitting

若准确率很低,检查数据和标签的对应关系,或者损失函数是否导致无法梯度下降

1、观察数据中是否有异常样本或异常label导致数据读取异常
2、调小初始化权重,以便使softmax输入的feature尽可能变小
3、降低学习率,这样就能减小权重参数的波动范围,从而减小权重变大的可能性。这条也是网上出现较多的方法。

4、调大batch_size
5、如果有BN(batch normalization)层,finetune时最好不要冻结BN的参数,否则数据分布不一致时很容易使输出值变的很大。

6、神经网络不够深。

7、训练的epoch不够。

训练和验证集loss相差不大,验证集准确率为1或者0

检查数据集是否存在inf或者NaN

有时在第一代打乱数据,后续不再打乱,可能会有意想不到的好结果

References