动手学深度学习11.10. Adam算法-笔记练习(PyTorch)
以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。
本节课程地址:72 优化算法【动手学深度学习v2】_哔哩哔哩_bilibili
本节教材地址:11.10. Adam算法 — 动手学深度学习 2.0.0 documentation
本节开源代码:...>d2l-zh>pytorch>chapter_optimization>adam.ipynb
Adam算法
本章我们已经学习了许多有效优化的技术。 在本节讨论之前,我们先详细回顾一下这些技术:
- 在 11.4节 中,我们学习了:随机梯度下降在解决优化问题时比梯度下降更有效。
- 在 11.5节 中,我们学习了:在一个小批量中使用更大的观测值集,可以通过向量化提供额外效率。这是高效的多机、多GPU和整体并行处理的关键。
- 在 11.6节 中我们添加了一种机制,用于汇总过去梯度的历史以加速收敛。
- 在 11.7节 中,我们通过对每个坐标缩放来实现高效计算的预处理器。
- 在 11.8节 中,我们通过学习率的调整来分离每个坐标的缩放。
Adam算法 (Kingma and Ba, 2014) 将所有这些技术汇总到一个高效的学习算法中。 不出预料,作为深度学习中使用的更强大和有效的优化算法之一,它非常受欢迎。 但是它并非没有问题,尤其是 (ef="https://zh-v2.d2l.ai/chapter_references/zreferences.html#id134">Reddiet al., 2019) 表明,有时Adam算法可能由于方差控制不良而发散。 在完善工作中, (f="https://zh-v2.d2l.ai/chapter_references/zreferences.html#id193">Zaheeret al., 2018) 给Adam算法提供了一个称为Yogi的热补丁来解决这些问题。 下面我们了解一下Adam算法。
算法
Adam算法的关键组成部分之一是:它使用指数加权移动平均值来估算梯度的动量和二次矩,即它使用状态变量
这里 和
是非负加权参数。 常将它们设置为
和
。 也就是说,方差估计的移动远远慢于动量估计的移动。 注意,如果我们初始化
,就会获得一个相当大的初始偏差。 我们可以通过使用
来解决这个问题。 相应地&#