动量随机梯度下降 (SGD) 中梯度项的系数

问题描述 投票:0回答:1

我正在充满动力地研究 SGD,并且遇到了两个版本的更新公式。

第一个来自维基:

dw = a * w - lr * dL/dw # w: weights; lr: learning rate; dL/dw: drivatives of loss function over w
w := w + dw

第二个版本更常见:

dw = a * w - (1 - a) * dL/dw
w := w + dw

我的问题是:为什么

dL/dw
项的系数必须是
(1-a)
?在我看来,即使
lr != (1 - a)
,这仍然有意义。
选择这个系数有什么具体原因吗?

我问chatgpt,它告诉我第一个版本不正确,但没有提供原因。

python machine-learning math deep-learning gradient-descent
1个回答
0
投票

你应该将梯度

dL/dw
视为一个数字序列,那么动量的想法就是跟踪序列
dL/dw
的移动平均值,并朝着该平均值的方向前进,而不是沿着实际梯度,可能会有噪音,因为它是从单个示例/小批量计算得出的。

公式

dw = a * dw - (1 - a) * dL/dw
代表了一种轻松计算每一步指数移动平均线 (EMA) 的方法。回答你的问题:如果第二项的系数不是
(1-a)
,那么结果就不能被合理地描述为平均值

  • 一个简单的演示是检查如果
    dL/dw
    是一个常数序列会发生什么,
    • (1-a)
      意味着
      dw
      将是常数并且等于
      dL/dw
    • 其他任何东西和
      dw
      要么收敛到零,要么发散

如果你想改变学习率,你应该使用:

dw = a * dw - (1 - a) * dL/dw
w := w + lr * dw
© www.soinside.com 2019 - 2024. All rights reserved.