SGD 和反向传播有啥区别?

Posted

技术标签:

【中文标题】SGD 和反向传播有啥区别?【英文标题】:What is the difference between SGD and back-propagation?SGD 和反向传播有什么区别? 【发布时间】:2016-10-23 13:01:31 【问题描述】:

您能告诉我随机梯度下降 (SGD) 和反向传播之间的区别吗?

【问题讨论】:

见ai.stackexchange.com/q/8962/2444。 【参考方案1】:

反向传播是一种在有向计算图中(例如神经网络)计算梯度的有效方法。这不是一种学习方法,而是一种很好的计算技巧,经常用于学习方法。这实际上是导数的链式法则的简单实现,它使您能够在线性时间内根据图形大小计算所有所需的偏导数(而简单的梯度计算将随深度呈指数增长) )。

SGD是众多优化方法中的一种,即一阶优化器,意思是它基于对目标梯度的分析。因此,就神经网络而言,它通常与反向传播一起应用以进行有效更新。您还可以将 SGD 应用于以不同方式(从采样、数值逼近器等)获得的梯度。对称地,您也可以将其他优化技术与反向传播一起使用,所有可以使用梯度/雅可比的东西。

这种常见的误解来自这样一个事实,即为了简单起见,人们有时会说“使用反向传播训练”,实际上是指(如果他们没有指定优化器)“使用反向传播作为梯度计算技术使用 SGD 进行训练”。此外,在旧教科书中,您可以找到诸如“delta 规则”之类的内容和其他一些令人困惑的术语,它们描述的内容完全相同(因为神经网络社区在很长一段时间内有点独立于一般优化社区)。

因此你有两层抽象:

梯度计算 - 反向传播发挥作用 优化级别 - SGD、Adam、Rprop、BFGS 等技术在其中发挥作用,这些技术(如果它们是一阶或更高阶)使用上面计算的梯度

【讨论】:

【参考方案2】:

随机梯度下降 (SGD) 是一种优化方法,例如最小化损失函数。

在 SGD 中,您在每次迭代时使用 1 个示例 来更新模型的权重,具体取决于此示例导致的误差,而不是使用 的误差平均值em>所有个例子(如“简单”梯度下降),在每次迭代。为此,SGD 需要计算“模型的梯度”。

反向传播是一种计算 SGD 使用的“梯度”的有效技术。

【讨论】:

【参考方案3】:

反向传播只是一种计算模型多变量导数的方法,而 SGD 是定位损失/成本函数最小值的方法。

【讨论】:

【参考方案4】:

[快速解答]

TL;DR

反向传播是为每个参数找到误差导数的技巧W[i]

随机梯度下降 (SGD) 更新 W[i]

【讨论】:

以上是关于SGD 和反向传播有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

八度反向传播实现问题

反向传播算法和生成对抗网络的区别

反向传播梯度求解推导

Torch反向传播时出错或者梯度为NaN的问题排查

反向传播

前向传播和反向传播