首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

为什么反向传播会向后传播

摘要

The usual explanation of backpropagation (Rumelhart et al., 1986) , the algorithm used to train neural networks, is that it is propagating errors for each node backwards. But when I first learned abou...

the partial and node that backprop neural theta_1 algorithm compute
2026-09-21 1 阅读 约9分钟阅读 andsoitis
分享:
字号:
反向传播(Rumelhart et al., 1986)(用于训练神经网络的算法)的通常解释是,它向后传播每个节点的误差。但当我第一次了解这个算法时,我有一个无法直接回答的问题:为什么它必须倒退?神经网络只是一个复合函数,我们知道如何使用链式法则计算复合函数的导数。为什么我们不直接计算前向传播中的梯度呢?我发现回答这个问题增强了我对反向传播的理解。我假设读者广泛了解神经网络和梯度下降,甚至对反向传播有一定的了解。我将首先使用一些有用的概念和符号设置反向传播,然后解释为什么前向传播算法不是最优的。设置回想一下,反向传播的目标是针对神经网络 f f f 中的每个权重 θ i \theta_i θ i 有效计算 ∂ f / ∂ θ i \partial f / \partial \theta_i ∂ f / ∂ θ i ​。为了解决这个问题,我们来推理任意权重 θ 1 \theta_1 θ 1 ​和 f f f 中某处的节点 v v v :需要明确的是,节点 v v v 指的是该节点通过激活函数 σ \sigma σ 传递其输入的加权和后的输出值,即: u = θ 1 t 1 + θ 2 t 2 + ⋯ + θ n t n v = σ ( u ) \begin{对齐} u &= \theta_1 t_1 + \theta_2 t_2 + \dots + \theta_n t_n \\ v &= \sigma(u) \end{对齐} u v ​ = θ 1 ​ t 1 ​ + θ 2 ​ t 2 ​ + ⋯ + θ n ​ t n ​ = σ ( u )​ 请注意,在典型的图中, u u u 、 σ \sigma σ 和 v v v 都将是单个节点,用虚线表示。在我看来,理解反向传播所需的最重要的观察是:由于链式法则,大部分计算 ∂ f / ∂ θ 1 \partial f / \partial \theta_1 ∂ f / ∂ θ 1 ​ 可以在每个节点本地完成: ∂ f ∂ θ 1 = ∂ f ∂ v ∂ v ∂ u ∂ u ∂ θ 1 \frac{\partial f}{\partial \theta_1} = \frac{\partial f}{\partial v} \frac{\partial v}{\partial u} \frac{\partial u}{\partial \theta_1} ∂ θ 1 ​ ∂ f ​ = ∂ v ∂ f ​ ∂ u ∂ v ∂ θ 1 ​ ∂ u ​ 我们可以解析计算 ∂ v / ∂ u \partial v / \partial u ∂ v / ∂ u;它仅取决于 σ \sigma σ 的定义。我们知道 ∂ u / ∂ θ 1 = t 1 \partial u / \partial \theta_1 = t_1 ∂ u / ∂ θ 1 ​ = t 1 ​ 。因此,在每个节点 v v v 处,如果我们知道 ∂ f / ∂ v \partial f / \partial v ∂ f / ∂ v ,我们就可以计算 ∂ f / ∂ θ 1 \partial f / \partial \theta_1 ∂ f / ∂ θ 1 ​ 。计算 ∂ f / ∂ v \partial f / \partial v ∂ f / ∂ v 的挑战在于下游节点取决于 v v v 的值。值得庆幸的是,多变量链式法则有答案。给定一个多变量函数 g ( w 1 , w 2 , … , w m ) g(w_1, w_2, \dots, w_m) g ( w 1 ​ , w 2 ​ , … , w m ​ ) ,其中每个 w i w_i w i ​ 是单变量函数 w i ( v ) w_i(v) w i ​ ( v ) ,多变量链式法则表示: ∂ g ∂ v = ∂ ∂ v g ( w 1 ( v ) , w 2 ( v ) , … , w m ( v ) ) = Σ j ∂ g ∂ w j ∂ w j ∂ v \frac{\partial g}{\partial v} = \frac{\partial}{\partial v} g(w_1(v), w_2(v), \dots, w_m(v)) = \sum_{j} \frac{\partial g}{\partial w_j} \frac{\partial w_j}{\partial v} ∂ v ∂ g ​ = ∂ v ∂ ​ g ( w 1 ​ ( v ) , w 2 ​ ( v ) , … , w m ​ ( v ) ) = j Σ ​ ∂ w j ​ ∂ g ​ ∂ v ∂ w j ​ ​ 因此,我们可以计算 ∂ f / ∂ θ i \partial f / \partial \theta_i ∂ f / ∂ θ i ​ 对于任何权重 θ i \theta_i θ i ​ ,这意味着我们拥有必要的机制来尝试在前向而不是后向传递中实现反向传播。让我们看看会发生什么。重复项我们需要一个前向传播算法,可以计算任意权重 θ i \theta_i θ i 的偏导数 ∂ f / ∂ θ i \partial f / \partial \theta_i ∂ f / ∂ θ i ​ 。我们在上面证明了在节点 v v v 处,这相当于: ∂ f ∂ θ i = ∂ f ∂ v ∂ v ∂ θ i \frac{\partial f}{\partial \theta_i} = \frac{\partial f}{\partial v} \frac{\partial v}{\partial \theta_i} ∂ θ i ​ ∂ f ​ = ∂ v ∂ f ​ ∂ θ i ​ ∂ v ​ 请注意,为了便于表示,我删除了中间变量 u u u。为了设计我们的前向传播算法,让我们形式化一个重要的事实:在节点 b b b 依赖于节点 a a a 的有向计算图中,不可能在节点 b b b 之前的任何点计算 ∂ b / ∂ a \partial b / \partial a ∂ b / ∂ a :这个说法应该是显而易见的。如果我们的计算图表示函数 f ( a ) = b f(a) = b f ( a ) = b ,则无法在不访问 f f f 和 b b b 的情况下计算 f ′ ( a ) f^{\prime}(a) f ′ ( a ) 。在我们的设置中,对于依赖于节点 v v v 的每个下游节点 w j w_j w j ​,不可能在节点 v v v 处计算 ∂ w j / ∂ v \partial w_j / \partial v ∂ w j ​ / ∂ v 。因此,为了计算 ∂ f / ∂ v \partial f / \partial v ∂ f / ∂ v ,我们必须使用多变量链式法则分解该项,并将计算 ∂ f / ∂ θ i \partial f / \partial \theta_i ∂ f / ∂ θ i ​ 转发到取决于每个节点 w j w_j w j ​v v v : ∂ f ∂ θ i = ( Σ j ∂ f ∂ w j ∂ w j
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱