前言
很多人说深度学习是玄学,有很多说不清道不明的东西在里面,实际上,还是有一些规律可言的,虽然不是什么放之四海而皆准的真理,但也是长期总结的一些经验教训,可以试一试,看是不是有用。
首先,为什么要调试模型?
卷积神经网络(CNN)等深度学习模型具有大量的参数,我们把这些叫做超参数,因为它们并没有在模型中进行优化。你可以为这些超参数搜索最优值,但是你需要大量的硬件和时间。那么,一个真正的数据科学家会满足于瞎猜这些基本参数吗?
改进模型的最佳方法之一是基于在那些对你的领域进行了深入研究的专家做的设计和结构的基础上构建你的模型。 这些专家通常能调用非常多的硬件资源。含蓄一点说,他们经常对生成的建模体系结构和基本原理进行开源。
深度学习技巧
这里有一些方法,可以使用预训练模型来减少你的拟合时间和提高你的准确性:
- 1.研究理想的预训练结构:了解迁移学习的好处,或浏览一些强大的CNN架构。考虑那些看起来不太合适,但是共享特征的领域。
-
2.使用较小的学习率:因为预训练的权重通常比随机初始化的权重要好!你在这里的选择取决于学习环境和预训练的进展情况,在不同的epochs上检测误差,了解你离收敛有多近。
- 3.使用dropout:与Ridge和LASSO正则化回归模型一样,没有一个最优的α适合所有的模型,它是一个超级参数,取决于你的具体问题,必须进行测试。从更大的变化开始,就和上面的学习率一样。
- 4.限制权值大小:我们可以限制某些层的权值的最大范数(绝对值),以泛化我们的模型。
- 5.不要动第一层:神经网络的第一个隐藏层倾向于捕捉通用的和可解释的特征,如形状、曲线或交互,这些特征通常与领域相关。我们通常最好是别动这些,重点优化其他的层。这可能意味着添加隐藏层,所以先着急。
- 6.修改输出层:用一个新的激活函数和适合你的领域的输出大小替换模型默认值。然而,不要把自己局限于最明显的解决方案上。虽然MNIST可能看起来想要10个输出类,但是一些数字有共同的变化,12-16个类可能会更好地解决这