为什么Backprop必须反向传播?
Why back propagation goes backward

通常的解释是Backprop在反向传播误差,但我曾困惑:既然神经网络只是复合函数,用链式法则前向计算梯度不行吗?深入分析后发现,若强行前向计算,同一消息会被重复传递多次,导致计算量呈二次方增长。而反向传播利用链式法则,让每个节点只需向后传递一次局部信息,即可高效完成梯度计算。这种设计本质上解决了信用分配问题,让算法在节点数量线性时间内完成。
如果已经能获取下游项,我们就可以将这些项反向传递给节点,从而计算出所需的导数。
- akssri
这里的直觉解释尚可——但数学推导有些含糊其辞,使用了像“blow-up”这样不精确的术语。
不过,如果将这些陈述理解为关于“最优性”的说法,那它们也是错误的。反向模式自动微分(即反向传播)在处理标量输出时(更一般地说,当输入数量远大于输出数量时)通常效率很高,但即使在特定的标量输出情况下,它也并非严格最优。
例如,考虑一个具有 4 层的 MLP,维度为 (1, N, 1, N, 1)——在此情况下,反向模式大约需要 3N 次乘法,而最优解仅需约 2N 次。实际上,在通用有向无环图(DAG)上寻找梯度累积的最优顺序是一个 NP-hard 问题,但这种“混合模式”自动微分显然很难实现,鉴于其带来的边际收益,在实际中很少见到。
Griewank 和 Walther 的著作是这方面的优秀参考,涵盖了更多内容:
https://epubs.siam.org/doi/book/10.1137/1.9780898717761
他们还有一个名为 ADOL-C 的库,支持混合模式。
- omnicognate
我不熟悉神经网络中反向传播的细节,但据我所知(AIUI),它是自动微分/算法微分的一种应用,后者分为两种模式:前向和反向。
反向模式更难实现,因为你需要在计算过程中保留状态,但它的扩展性不同。前向模式的复杂度是 O(输入数量),而反向模式是 O(输出数量)。对于训练神经网络来说,反向模式显然是你想要的选择,因为此时你有海量的输入,但通常只有一个输出,即你正在优化的损失函数。
(而且确实,文章似乎就是在用不同的语言表达这一点。)
- dkrylov
真正的原因是,反向传播本质上就是矩阵乘法,而从左到右相乘比从右到左相乘要便宜得多。因为在左侧你会得到一个标量损失项,这样你在网络中传递时保持的是向量-矩阵乘法,而不是从右侧进行矩阵-矩阵乘法。