跳至主要內容

反向传播

blacklad大约 2 分钟AIAI

反向传播

反向传播是自动微分算法中的一种,在前向传播的基础上计算参数的导数值,比直接对每个参数求导效率更高。

1 导数计算

由于神经网络的复杂度,很难直接写出偏导的表达式。通过微分的思想,用 ΔyΔx\frac{\Delta y}{\Delta x} 的方式,当 Δx\Delta x 比较小时,可以近似的看作斜率。

2 前向传播

前向传播的过程是对于输入数据,经过神经网络的每一层传递计算,最终通过输出层生成预测结果。

在训练阶段,通过生成的预测结果与真实标签一块得到代价函数

3 计算图

神经网络中使用计算图来计算梯度,在前向传播过程中,计算每个节点的输出,并保存中间结果。

image-20241205221024690
image-20241205221024690

在反向传播过程中,从输出层开始,逐层计算每个节点的梯度,并使用链式法则将梯度传播到前面的节点,求 Jw 的偏导数,可以通过中间节点的梯度得到。

Jw=cwacdaJd \frac{\partial J}{\partial w}=\frac{\partial c}{\partial w}\frac{\partial a}{\partial c}\frac{\partial d}{\partial a}\frac{\partial J}{\partial d}

这样反向传播一次,即可得到所有的参数的梯度值,如果计算图总共有 N 个节点、P 个输入参数,对每个参数求偏导数,大约 N × P 步,而使用反向传播,只需大约 N + P 步,效率较高。

4 神经网络中的反向传播

先“前向传播”计算神经网络中所有神经元的取值,然后一次反向传播遍历走完所有节点,即可计算出神经网络的代价函数对每个神经元的每个参数的偏导。

上次编辑于:
贡献者: blacklad