SGD 和反向传播有什么区别?

What is the difference between SGD and back-propagation?

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

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

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

这个常见的误解来自这样一个事实,即为了简单起见,人们有时会说 "trained with backprop",但实际上是什么意思(如果他们没有指定优化器)"trained with SGD using backprop as a gradient computing technique"。此外,在旧教科书中,您可以找到 "delta rule" 和其他有点令人困惑的术语,它们描述的是完全相同的事物(因为神经网络社区长期以来有点独立于一般优化社区)。

因此你有两层抽象:

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

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

在 SGD 中,您在每次迭代中使用 1 个示例 来更新模型的权重,具体取决于此示例导致的错误,而不是使用平均值所有 示例的错误(如 "simple" 梯度下降),在每次迭代中。为此,SGD 需要计算 "gradient of your model".

反向传播 是一种计算 SGD 使用的 "gradient" 的有效技术。

Back-propagation 只是一种计算模型 multi-variable 导数的方法,而 SGD 是定位 loss/cost 函数最小值的方法。

[快速回答]

TL;DR

  • Backpropagation 是为每个参数 W[i]

    求误差导数的技巧
  • 随机梯度下降(SGD)更新W[i]