Deep learning a.sub_uu(lr*a.grad)实际上做什么?

Deep learning a.sub_uu(lr*a.grad)实际上做什么?,deep-learning,pytorch,gradient,gradient-descent,fast-ai,Deep Learning,Pytorch,Gradient,Gradient Descent,Fast Ai,我正在学习快速人工智能,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) 我假设a表示模型参数,基于y\u hat=x@a。这是必要的,因为随机梯度下降

我正在学习快速人工智能,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) 

我假设
a
表示模型参数,基于
y\u hat=x@a
。这是必要的,因为随机梯度下降算法旨在找到损失函数的极小值。因此,将渐变w.r.t.作为模型参数,并沿渐变方向稍微更新它们

想象一下从山上滑下来的比喻:如果地形代表你的损失,那么坡度就是最陡的下降方向。为了到达谷底(即最大限度地减少损失),你需要朝着你所站位置的最陡下降方向迈出一小步。

看这张图片。它将损失函数
J
显示为参数
W
的函数。在这里,它是一个简化的表示法,
W
是唯一的参数。因此,对于凸损失函数,曲线如图所示

请注意,学习率为正。在左侧,梯度(在该点与曲线相切的直线的斜率)为负,因此学习率和梯度的乘积为负。因此,从
W
中减去乘积实际上会增加
W
(因为两个负数等于一个正数)。在这种情况下,这是好的,因为损失减少了

另一方面(在右边),梯度是正的,所以学习率和梯度的乘积是正的。因此,从
W
中减去乘积将减少
W
。在这种情况下,这也是好的,因为损失减少了

我们可以将同样的东西扩展到更多的参数(显示的图形将是高维的,不容易可视化,这就是为什么我们最初使用单个参数
W
)和其他损失函数(即使是非凸的,虽然它不会总是收敛到全局极小值,但肯定会收敛到最近的局部极小值)


注:这一解释可以在Andrew Ng的《deeplearning.ai课程》中找到,但我找不到直接链接,所以我写了这个答案。

非常感谢你的回答,是的,我说的“a”是指参数。我理解希尔的类比。我理解,要想找到底部(减少损失),你需要迈出一小步(不要太小)即使如此,我也不明白为什么我们要在梯度的方向上进行“更新”,从.a-(lr*梯度)中减去。谢谢:)梯度指向最大增加的方向,相反的方向(负梯度)指向最大减少的方向。这是一个数学性质,不是编程的东西。