【深度学习】深度学习模型训练的tricks总结( 三 )


换句话说,Adam和SGD是的特殊情况 。
代价函数角度
提高几乎所有机器学习算法性能的一种非常简单的方法是在相同的数据上训练许多不同的模型,然后对它们的预测进行平均 。但是使用所有的模型集成进行预测是比较麻烦的,并且可能计算量太大而无法部署到大量用户 。(知识蒸馏)方法就是应对这种问题的有效方法之一 。
在知识蒸馏方法中,我们使用一个教师模型来帮助当前的模型(学生模型)训练 。教师模型是一个较高准确率的预训练模型,因此学生模型可以在保持模型复杂度不变的情况下提升准确率 。比如,可以使用-152作为教师模型来帮助学生模型-50训练 。在训练过程中,我们会加一个蒸馏损失来惩罚学生模型和教师模型的输出之间的差异 。
这个技术出自之手,通过效果更好的网络来指导轻量级网络训练,最终取得更好的训练效果 。这里我目前研究的也不是很细,“老师也可能讲错,只依赖课本和同时依赖老师与课本哪个学习效果会更好呢?”,有待研究 。
其他
除了上面很多很高级的,为了提升性能还有很多比较小的trick,有些是特别常用的特别普遍的,这里还是总结一下:
总结
深度学习的训练技巧有很多,但一般来说是在数据增强、学习率控制、优化方法与代价函数的设置这几个角度 。数据增强除了传统的一元增强方法又有很多多元方法,各种数据组合,甚至可以自主搜索学习方法;学习率控制从训练初期到后期又有不同的技巧;优化方法和代价函数随着学术界的发展也有了很多更高级的方式,能够更快地训练出效果较好的模型 。
当然,trick也并非越多越好,不合适的trick会适得其反 。在具体问题具体分析基础上最终选择适合的trick才能改善学习效果 。
参考资料
原文:
[1] Deepfor Image ()
[2]
[3] , LargeSGD:in 1 Hour()
[4]thefor()
[4]Bag offor Imagewith()
[5]withBound ofRate()
[6]()
[7] RICAP()
[8]thein a()
[9]ofwith ()
[10] Mixup:RISK ()
[11] :from Data()
[12]theofdeep()