反向传播算法的混乱

数据挖掘 反向传播
2021-09-18 13:32:12

我一直在尝试理解反向传播一段时间。我遇到了它的两种变体。

  1. 在 Andrew Ng 类中,隐藏层权重的导数是使用分布回隐藏节点的误差信号来计算的。
  2. 在 Geoffrey Hinton 类中,隐藏层权重的导数是使用已经计算的下一层的导数计算的,并且根据我的微积分知识,这更有意义。

有人可以解释第一个变体是如何工作的吗?

1个回答

第一个变体第二个变体,或者更准确地说,只有一种类型的反向传播,它与损失函数相对于网络参数的梯度一起工作。

不过,这并不是一个不常见的问题,我认为引起混淆的主要问题是,当损失函数被巧妙地构造以便它与输出层激活函数一起工作时,导数项是数值y^y,这看起来与直接取线性误差相同。研究实现这样一个网络的代码的人很容易得出这样的结论,即初始梯度实际上是一个初始误差(虽然这些在数值上相等,但它们是不同的概念,在通用神经网络中它们不必等于)

这种情况适用于以下网络架构:

  • 均方误差12Ni=1N(y^iyi)2和线性输出层 - 注意乘数12有没有故意简化导数。

  • 二元交叉熵1Ni=1Nyilog(y^i)+(1yi)log(1y^i)和 sigmoid 输出层。损失的导数巧妙地抵消了 sigmoid 的导数,在预变换阶段留下梯度y^y.

  • 多类 logloss,对真实类进行 one-hot 编码1Ni=1Nyilog(y^i)和softmax输出层。损失的导数再次巧妙地抵消了,在预变换阶段留下梯度y^y为真正的班级。

因此,当您被告知反向传播通过网络反向处理“错误信号”或“错误”时,只需将“梯度”添加到短语的开头即可。有些人会故意说它是速记,其他人可能会诚实地混淆。

这同样适用于更深的层,尽管除了“这是正在分布的[梯度]错误”的简写之外,没有其他来源会混淆“这是正在分布的错误”。