You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

梯度下降算法未达最小值的表现及局部最小至全局最小的演进方式

嘿,刚接触机器学习完全不用不好意思,咱们一步步来拆解你的两个问题~

问题1:当梯度下降算法未能到达最小值时,其表现是怎样的?

这种情况通常会有几种典型表现:

  • 震荡停滞:如果学习率设置得太大,算法就像在谷底附近“蹦来蹦去”,损失值会在一个区间内上下波动,始终稳定不下来,没法收敛到真正的最小值。
  • 缓慢趋近但止步不前:要是学习率太小,每一步参数更新的幅度都特别小,损失值下降得极慢,哪怕训练了很多轮,离真正的最小值还有一段距离,看起来就像卡在了半路上。
  • 陷入局部最小值/鞍点:就像你图里展示的那样,算法走到了一个局部的最低点(或者鞍点——某个方向高、某个方向低的平缓点),此时损失值不再下降,看起来像是“收敛”了,但这并不是全局的最小值。
问题2:到达局部最小值后,如何继续迭代抵达全局最小值?

先放一下你提到的损失函数示意图:
梯度下降损失函数示意图

针对这种情况,有不少实用的方法可以帮算法跳出局部最小值:

  • 用动态学习率策略:别用固定的学习率,比如一开始用较大的学习率帮算法“冲”出局部坑,后期慢慢减小学习率来精准收敛。像学习率衰减或者Adam这类自适应优化器,会自动根据训练情况调整每一步的学习率,比固定学习率更容易找到全局最优。
  • 给算法加“动量”:比如用SGD+Momentum优化器,动量就像给梯度下降加了惯性,当算法走到局部最小值时,之前积累的动量可能会推着它继续往前,跳出这个局部的小谷底。
  • 多试几个初始起点:多跑几次梯度下降,每次用不同的初始参数值,总有一次能落到全局最小值的附近,最后选择损失值最小的那个结果就好。
  • 用更智能的优化器:比如RMSpropAdam这类优化器,相比普通的SGD,它们对梯度的处理更灵活,能更好地避开局部最小值,找到全局最优解。
  • 给参数加一点小噪声:训练时给参数或者梯度加一点点随机噪声,相当于“晃一晃”算法,有时候就能把它从局部最小值里晃出来,继续朝着全局最小值前进。

内容的提问来源于stack exchange,提问作者Whoami

火山引擎 最新活动