Backpropagation Details

反向传播(Backpropagation)

反向传播是一种用于训练人工神经网络的算法,特别是在深度学习中很常用。它通过计算神经网络的预测结果与实际结果之间的误差,进而调整网络中的权重和偏置,以最小化预测误差。

工作原理:

  1. 前向传播:将输入数据传递到网络的每一层,经过一系列的线性变换和非线性激活函数,最终输出预测结果。

  2. 计算误差:将预测结果与实际结果进行比较,计算损失函数(如均方误差或交叉熵)的值,即误差。

  3. 反向传播误差:通过链式法则(链式求导),将误差从输出层逐层向回传播,计算每个神经元对最终误差的贡献(即偏导数)。

  4. 更新权重:根据计算出的偏导数,使用梯度下降算法或其他优化方法调整网络的权重和偏置,以减少误差。

例子:

假设我们有一个简单的三层神经网络用于分类任务:

  • 输入层:有两个节点,表示两个输入特征。

  • 隐藏层:有两个节点。

  • 输出层:有一个节点,表示二分类问题的预测结果。

步骤:

  1. 前向传播

    • 输入两个特征 (x1,x2x_1, x_2)。

    • 权重 w1,w2w_1, w_2 和偏置 (b) 将输入线性组合后传递给隐藏层节点,并应用激活函数(如 ReLU 或 Sigmoid)。

    • 隐藏层输出传递给输出层,再次经过线性组合和激活函数后,输出预测值 y^\hat{y}

  2. 计算误差

    • 使用损失函数计算实际值 yy 和预测值 y^\hat{y} 之间的误差。例如,如果损失函数是均方误差(MSE),则误差为: Loss=12(y^y)2\text{Loss} = \frac{1}{2}(\hat{y} - y)^2

  3. 反向传播误差

    • 通过链式求导,计算输出层到隐藏层、再到输入层的各个权重的偏导数。这些偏导数表示每个权重对最终误差的贡献。

  4. 更新权重

    • 使用梯度下降法调整权重: wnew=woldηLossww_{\text{new}} = w_{\text{old}} - \eta \frac{\partial \text{Loss}}{\partial w} 其中,η\eta 是学习率。

通过不断进行多次前向传播和反向传播,神经网络会逐步学会减少误差,从而提高预测的准确性。

这个过程可以扩展到更深的神经网络和更多的复杂问题。

如何计算 Lossw\frac{\partial \text{Loss}}{\partial w}

在反向传播中,Lossw\frac{\partial \text{Loss}}{\partial w}(即损失函数对权重 ww 的偏导数)是通过链式法则计算得出的。这个偏导数告诉我们权重的变化会对损失函数产生多大的影响,从而帮助我们更新权重,减小误差。

1. 损失函数对输出的导数

假设我们使用均方误差(MSE)作为损失函数,定义为:

Loss=12(y^y)2\text{Loss} = \frac{1}{2}(\hat{y} - y)^2

其中,y^\hat{y} 是神经网络的预测值,yy 是真实值。

y^\hat{y} 求导数,得到:

Lossy^=y^y\frac{\partial \text{Loss}}{\partial \hat{y}} = \hat{y} - y

2. 输出对权重的导数

假设神经网络输出 y^\hat{y} 是通过线性组合输入和权重得到的,即:

y^=wx+b\hat{y} = w \cdot x + b

其中,ww 是权重,xx 是输入,bb 是偏置。

现在,我们对 ww 求导数:

y^w=x\frac{\partial \hat{y}}{\partial w} = x

这意味着输出 y^\hat{y} 对权重的导数等于输入 xx

3. 链式法则

现在,我们可以通过链式法则,将损失函数对权重的偏导数计算出来:

Lossw=Lossy^y^w\frac{\partial \text{Loss}}{\partial w} = \frac{\partial \text{Loss}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial w}

代入之前的公式,得到:

Lossw=(y^y)x\frac{\partial \text{Loss}}{\partial w} = (\hat{y} - y) \cdot x

这表示,权重的更新是基于预测误差 (y^y)(\hat{y} - y) 和输入 xx 之间的乘积。

4. 权重更新

最后,使用梯度下降法更新权重:

wnew=woldηLossww_{\text{new}} = w_{\text{old}} - \eta \cdot \frac{\partial \text{Loss}}{\partial w}

其中,η\eta 是学习率,决定了权重更新的步长。

总结

Lossw\frac{\partial \text{Loss}}{\partial w} 可以通过以下步骤得出:

  1. 先计算损失函数对输出的导数 Lossy^\frac{\partial \text{Loss}}{\partial \hat{y}}

  2. 再计算输出对权重的导数 y^w\frac{\partial \hat{y}}{\partial w}

  3. 最后通过链式法则将这两个导数相乘,得到损失函数对权重的偏导数。

这个过程可以扩展到更加复杂的神经网络,每一层的权重都可以通过类似的方式进行更新。

Last updated