我正在上快手,SGD的课程,我听不懂.....
这将系数减去(学习率*梯度)...
但是为什么要减去?
代码如下:
def update():
y_hat = x@a
loss = mse(y_hat, y)
if t % 10 == 0: print (loss)
loss.backward()
with torch.no_grad():
a.sub_(lr * a.grad)
答案 0 :(得分:2)
查看图像。它显示了损耗函数J
与参数W
的关系。这里是一个简化的表示,W
是唯一的参数。因此,对于凸损失函数,曲线如下图所示。
请注意,学习率是正的。在左侧,梯度(在该点与曲线相切的线的斜率)为负,因此学习率和梯度的乘积为负。因此,从W
中减去乘积实际上会增加W
(因为2个负数为正数)。在这种情况下,这会很好,因为损耗会减少。
另一方面(在右侧),梯度为正,因此学习率和梯度的乘积为正,因此学习率和梯度的乘积为正。因此,从W
中减去乘积会减少W
。在这种情况下,这也是很好的,因为损耗减少了。
我们可以将同一事物扩展为更多数量的参数(所显示的图形将具有更高的维数,并且不容易直观显示,这就是为什么我们最初采用单个参数W
的原因)以及其他原因损失函数(甚至是非凸函数),尽管它并不总是收敛于全局最小值,但肯定会收敛到最近的局部最小值。
注意:可以在Andrew Ng的deeplearning.ai课程中找到此说明,但是我找不到直接链接,所以我写了这个答案。
答案 1 :(得分:1)
我假设a
代表基于y_hat = x @ a
的模型参数。这是必需的,因为随机梯度下降算法旨在找到损失函数的最小值。因此,您需要使用w.r.t.您的模型参数,并在渐变方向上对其进行一些更新。
想想从山上滑下来的类比:如果景观代表您的损失,则梯度是最陡下降的方向。要到达最低点(即,将损失降到最低),您需要朝站立位置最陡的下降方向迈出几步。