Adam 优化器

   日期:2024-12-26    作者:dtcsmg 移动:http://3jjewl.riyuangf.com/mobile/quote/51384.html

Adam 是深度学习中常用的优化器,我在使用时遇到了一点问题,弄清楚后记录下来。

Adam

Adam(Adaptive Moment Estimation)优化器是一种广泛使用的优化算法,在深度学习训练中特别流行。它结合了两种不同的优化算法的优点:Momentum 和 RMSprop。下面是 Adam 优化器的工作原理的简要概述:

Adam 优化器的关键优势在于其自适应学习率的特性,这使得它在处理不同参数的更新时更为灵活,尤其是在处理稀疏梯度或不同量级的梯度时。Adam 通常需要更少的手动超参数调整,尤其是学习率。

Adam 优化器的核心公式如下:

其中, heta 是需要优化的参数,g_t 是在时间步t 的梯度,m_tv_t 分别是一阶矩和二阶矩的估计,beta_1beta_2 是衰减率 (通常设为接近1的值),eta 是学习率,而epsilon 是为了数值稳定性而添加的一个小常数。

理解

问题记录

我在使用 Adam 优化器优化参数时遇到了稍微复杂的情况:

我的优化器 A 同时管理参数 B, C,但是在某一阶段的网络训练中,我确定 C 不会参与梯度回传,需要 A 优化 B

中的参数即可。这是我的需求,目的是更新 B 不更新 C 。

我知道 Adam 有动量的概念,那么直接将 C 的 grad 置零是没用的,因为残留的动量会使得参数更新时重新变化出梯度 grad 来,那么我在开始训练 B 之前将 A 中所有的一二阶矩全部置零,同时将所有梯度 grad 全部置零:

但是在训练 B 的过程中, C 的参数还是会被更新,当时我没有想通问题出在哪。

问题原因

经过翻查源码,发现 Adam 中集成了正则化 L2 Loss —— ,该参数将当前需要更新的数据的值直接乘起来加到梯度上,本意是减小参数绝对值,令其更加鲁棒,但是对我的需求便是灭顶之灾,经过多轮训练后所有没有梯度回传的参数都会减小到接近 0.

问题解决

找到原因就好办了,源码中会对优化器管理的参数做一个筛选,如果当前参数没有 grad 信息,那么优化器会将其跳过,所以训练前把所有优化器中参数的 grad 设置为 None(不是置零)即可。

原始论文

参考资料


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号