模型不work怎么办?
机器学习 深度学习
最后更新 2020-05-19 17:38 阅读 4122
最后更新 2020-05-19 17:38
阅读 4122
机器学习 深度学习
为什么说深度学习的解决如此困难?
原因在于无法复现出现的结果,很多时候我们看到一篇Paper中的结果很完美,但是我们自己却很难复现出一样的结果。同样的,当模型出现问题的时候,我们也很难去复现出现问题的那个场景。
为什么模型的性能很糟糕?
1. 模型的实现上存在Bug,并且有时候这些bug很难察觉
2. 超参数的选择
3. 模式和数据是否匹配
4. 数据集的构建
如何应对深度学习模型的调优?
(1)从简单的开始
1.选择简单的架构
一开始的时候选择一个简单的架构,对于图像比如说选择LeNet类似的价格,对于序列选择LSTM,其他的选择全连接神经网络,根据问题的不同进行调整。
2.选择合理的默认设置
比如优化器,选择Adam,学习率为3e-4;激活函数在FC和Conv模型中选择ReLU,LSTM的话,选择tanh。初始化选择He Normal或者Glorot Normal。刚开始的时候可以不进行正则化。
3. 标准化输入
减去数据的均值,然后除以标准差
4. 简化问题
先使用比较小的数据,固定的图片大小,类别等
(2)实现和调试
1. 让模型能够运行
通常可能遇到的问题,shape mismatch, casting issue, OOM等
调试模型在pytorch中可以使用ipdb,在tensorflow中可以使用trickier
2. 在数据中过拟合
可能遇到的问题:错误率上升,爆发,阻碍,或者是处于平原中,不再变化
3. 和已知的结果进行比较
可以对比的已有结果来源:官方的模型实现并且在类似的数据集上的评估结果;官方的实现在Benchmark上的结果;非官方的模型实现;相关论文中的结果;自己实现的模型在Benchmark数据集上的结果;自己实现的模型在类似数据集上的结果
(3)评估模型
考量的参考公式:
Test error = irreducible error + bias + variance
+ distribution shift + val overfitting
(4)改进模型、数据
1. 欠拟合
调试顺序:使用更大的模型;减少正则化;错误分析;使用不同的模型架构;调整超参数;增加特征
2. 过拟合
调试顺序:可以的话获取更多的数据;增加normalization(batch, layer noramlization);使用数据增强;增加正则化;错误分析;使用不同的模型架构;调整超参数;Early dropping;去除一些特征;减小模型的大小。后面三个策略不是特别推荐
3. 解决distribution shift
分析测试集和验证集的错误,获取更多的训练数据作为补充。或者加入domain adaptation techniques
4. 平衡数据集
如果验证集比测试集好得多,那么你在验证集上过拟合了。
(5)调整参数
1. 手动调整超参数
2. grid search
3. random search
4. coarse-to-fine
5. 贝叶斯参数选择