cnn调参技巧记录,好的参数不光可以加速模型收敛,而且可以有效的避免很多错误。当然在很多简单任务中可能完全随机的模型初始参数,简单的一些建议学习率以及动量都可以得到一个比较满意的结果,比如单一,简单的降质模型下的图像生成,类别简单少量的一些分类任务等,不好的初始化参数是可以应对简单任务的。但是对于复杂任务就很难了,因为初始化参数选择的不好,导致结果十分不可控。因为不好的初始化参数导致结果很不可靠,不管是loss还是估计值都不是预期的结果,所以很麻烦。比如差得模型参数,使得估计结果跟label差的很远,那么导致你不好去控制动量以及学习率等参数,这些参数不可控之后,中间训练结果就完全不好分析,比如loss的震荡,精度的长时间不提升。
所以,首先药确定比较靠谱的模型初始化参数,改模型参数需要得到的结果尽量跟label分布接近或者说靠近。
当有了好的模型初始化参数之后,那么就需要根据loss的反馈来确认好的学习率和动量一些单参数,因为这些参数不好同样会导致结果很不可控,好的学习率和动量必须要将模型在训练过程中的结果控制在label的分布下,或者跟label的分布类似。而且还要有鲁棒性,使得模型参数不能因为少量异常或者极端数据干扰模型参数,也就是说在异常数据下,学习率和动量不能使得模型参数变化过大,这样同样会导致估计结果震荡,或者长时间精度不提升甚至下降。
当然有了好的参数,那么loss也需要考虑,因为loss不能变化太震荡,导致训练结果震荡,迟迟找不到正确的下降梯度方向,最合理的就是根据总体反馈将loss进行归一化,当然这个跟样本分布有关系。
训练过程有了那就是优化方法的选择问题,有很多文献说的是推荐sgd,目前个人经验也是sgd相对更好调参,结果更可控,所以能很好的选择参数。adam这样的结果不太好理解,因为对adam不熟悉,以后希望对各种优化方法做一个系统的学习在分享!