调参的苦与泪,还有那些「玄学的做法」。

 

每个机器学习领域的研究者都会面临调参过程的考验,当往往说来容易做来难。调参的背后往往是通宵达旦的论文研究与 GitHub 查阅,并需要做大量的实验,不仅耗时也耗费大量算力,更深深地伤害了广大工程师的头发。
有人不禁要问:调参是门玄学吗?为什么模型明明调教得很好了,可是效果离我的想象总有些偏差。
近日,reddit 上一则帖子引发了网友热议,「机器学习调参领域有哪些迷信的看法或做法呢?
原贴地址:
https://www.reddit.com/r/MachineLearning/comments/rkewa3/d_what_are_your_machine_learning_superstitions/?sort=confidence
在机器学习中,超参数调整是一项必备技能,通过观察在训练过程中的监测指标如损失 loss 和准确率来判断当前模型处于什么样的训练状态,及时调整超参数以更科学地训练模型能够提高资源利用率。
每个人都会根据自己的实际经验进行模型调参,最终,绝大多数研究者可能得出的经验就是:
  • Random seed = 0 得到坏的结果

  • Random seed = 42 得到好的结果

  • Even-valued k in k-Means = insightful segmentation

有人将这一经验总结奉为所谓的 ML「玄学做法」,但其实不然,几乎所有学者都这样做。

不过也不用怕,深度学习调参总还是有技巧可循的,大致可以总结如下。这些算不得迷信做法,仅供参考。

  • 寻找合适的学习率。作为一个非常重要的参数,学习率面对不同规模、不同 batch-size、不同优化方式和不同数据集,它的最合适值都是不确定的。我们唯一可以做的,就是在训练中不断寻找最合适当前状态的学习率;
  • 权重初始化。相比于其他的 trick 来说使用并不是很频繁。只有那些没有预训练模型的领域会自己初始化权重,或者在模型中去初始化神经网络最后那几个全连接层的权重。常用权重初始化算法是「kaiming_normal」或「xavier_normal」;
  • 余弦退火和热重启的随机梯度下降。余弦退火就是学习率类似余弦函数慢慢下降,热重启就是在学习的过程中,学习率慢慢下降然后突然再回弹 (重启) 然后继续慢慢下降;
  • 尝试过拟合一个小数据集。关闭正则化 / 随机失活 / 数据扩充,使用训练集的一小部分,让神经网络训练几个周期。确保可以实现零损失,如果没有,那么很可能什么地方出错了。
  • 数据集处理,主要有数据筛选和数据增强;
  • 多模型融合,这是论文刷结果的终极武器,深度学习中一般有几种方式,比如同样的参数,不同的初始化方式;不同的参数,通过交叉验证选取最好的几组;不同的模型,进行线性融合,例如 RNN 和传统模型;

调参路上各有各的「路数」,适合自己就好。

最后问一句,炼丹的你有哪些独门秘笈呢?请在下面的评论区留言,我们将从中挑选优质评论参加智源社区的“每周热评有礼”活动

内容中包含的图片若涉及版权问题,请及时与我们联系删除