首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >a.sub_(lr*a.grad)实际上是做什么的?

a.sub_(lr*a.grad)实际上是做什么的?
EN

Stack Overflow用户
提问于 2019-10-07 16:03:47
回答 2查看 119关注 0票数 3

我正在上fast-ai,SGD的课程,我不能理解.

这会将系数减去(学习率*梯度)...

但是为什么需要减法呢?

代码如下:

代码语言:javascript
复制
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) 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-07 17:07:20

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

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

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2019-10-07 16:13:12

我假设基于y_hat = x @ aa代表你的模型参数。这是必要的,因为随机梯度下降算法旨在找到损失函数的最小值。因此,采用梯度w.r.t。您的模型参数,并在渐变的方向上稍微更新它们。

想一想从山上滑下来的类比:如果地形代表你的损失,那么坡度就是最陡峭的下降方向。为了到达底部(即最小化损失),你需要在从你所站的地方向最陡峭的下降方向迈出很小的一步。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58265580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档