She*_*don 5 pytorch kaggle fast-ai cnn
我正在阅读Kaggle 上发布的这个Heroes Recognition ResNet34 notebook。
作者使用fastai的learn.lr_find()方法求最优学习率。
根据学习率绘制损失函数会产生下图:
似乎损失达到了 1e-1 的最小值,但在下一步中,作者将 1e-2 作为 max_lr 传入fit_one_cycle以训练他的模型:
learn.fit_one_cycle(6,1e-2)
为什么在这个例子中使用 1e-2 而不是 1e-1?这不会只会使训练变慢吗?
Ale*_*x I 11
在 lr_find 中完成的学习率范围测试的想法来自 Leslie Smith 的这篇论文:https ://arxiv.org/abs/1803.09820 其中 有很多其他有用的调整技巧;值得仔细研究。
在 lr_find 中,学习率缓慢上升(以对数线性方式)。您不想选择损失最低的点;您想选择每一步下降最快的点(=net 正在尽可能快地学习)。这确实发生在下坡或 1e-2 的中间附近,所以写笔记本的人说得差不多。0.5e-2 和 3e-2 之间的任何东西都有大致相同的斜率,是一个合理的选择;较小的值将对应于较慢的学习(=需要更多的时期,也较少的正则化)但过早达到平台的风险较小。
我将尝试添加一些关于在此测试中损失最低时发生的情况的直觉,例如学习率 = 1e-1。此时,梯度下降算法在梯度方向上采取了很大的步长,但损失并没有减少。这怎么会发生?好吧,如果步长始终太大,就会发生这种情况。想想在损失景观中尝试进入井(或峡谷)。如果您的步长大于井的大小,则您每次都可以始终如一地跨过它并最终走到另一边。
Jeremy Jordan 的一篇不错的博客文章中的这张图片直观地展示了它:

在图片中,它显示了梯度下降通过过大的步长从井中爬出(在您的测试中可能是 lr=1+0)。我认为这种情况很少发生,除非 lr 真的过分了;更有可能的是,井在相对平坦的景观中,梯度下降可以跨过它,首先无法进入井中。高维损失景观很难可视化,并且可能非常不规则,但从某种意义上说,lr_find 测试正在寻找景观中典型特征的规模,然后选择一个学习率,该学习率为您提供类似大小的步长但有点小。
| 归档时间: |
|
| 查看次数: |
3209 次 |
| 最近记录: |