梯度、反向传播与参数初始化详解
立即解锁
发布时间: 2025-08-31 00:05:11 阅读量: 5 订阅数: 14 AIGC 

### 梯度、反向传播与参数初始化详解
在神经网络的训练过程中,梯度计算和参数初始化是至关重要的环节。本文将详细介绍反向传播算法的原理、实现步骤,以及参数初始化的重要性和方法。
#### 1. 反向传播算法基础
在神经网络中,当我们从后往前遍历网络计算导数时,很多所需的项在之前的步骤中已经计算过,无需重新计算。这种从后往前计算导数的过程被称为反向传播(backward pass)。
反向传播的思想相对容易理解,但由于偏置和权重项分别是向量和矩阵,推导过程需要用到矩阵微积分。为了更好地理解其底层机制,我们先从一个简单的标量参数玩具模型入手,然后将相同的方法应用到深度神经网络中。
#### 2. 玩具模型示例
考虑一个具有八个标量参数 $\phi = \{\beta_0, \omega_0, \beta_1, \omega_1, \beta_2, \omega_2, \beta_3, \omega_3\}$ 的模型 $f[x, \phi]$,它由 $\sin[\cdot]$、$\exp[\cdot]$ 和 $\cos[\cdot]$ 函数组合而成:
\[f[x, \phi] = \beta_3 + \omega_3 \cdot \cos \left[ \beta_2 + \omega_2 \cdot \exp \left( \beta_1 + \omega_1 \cdot \sin[\beta_0 + \omega_0 \cdot x] \right) \right]\]
同时,定义最小二乘损失函数 $L[\phi] = \sum_i \ell_i$,其中单个项为:
\[\ell_i = (f[x_i, \phi] - y_i)^2\]
这里,$x_i$ 是第 $i$ 个训练输入,$y_i$ 是第 $i$ 个训练输出。我们的目标是计算以下导数:
\[\frac{\partial \ell_i}{\partial \beta_0}, \frac{\partial \ell_i}{\partial \omega_0}, \frac{\partial \ell_i}{\partial \beta_1}, \frac{\partial \ell_i}{\partial \omega_1}, \frac{\partial \ell_i}{\partial \beta_2}, \frac{\partial \ell_i}{\partial \omega_2}, \frac{\partial \ell_i}{\partial \beta_3}, \frac{\partial \ell_i}{\partial \omega_3}\]
虽然我们可以手动推导这些导数的表达式并直接计算,但有些表达式非常复杂。例如:
\[\frac{\partial \ell_i}{\partial \omega_0} = -2 \left( \beta_3 + \omega_3 \cdot \cos \left[ \beta_2 + \omega_2 \cdot \exp \left( \beta_1 + \omega_1 \cdot \sin[\beta_0 + \omega_0 \cdot x_i] \right) \right] - y_i \right) \cdot \omega_1 \omega_2 \omega_3 \cdot x_i \cdot \cos[\beta_0 + \omega_0 \cdot x_i] \cdot \exp \left[ \beta_1 + \omega_1 \cdot \sin[\beta_0 + \omega_0 \cdot x_i] \right] \cdot \sin \left[ \beta_2 + \omega_2 \cdot \exp \left( \beta_1 + \omega_1 \cdot \sin[\beta_0 + \omega_0 \cdot x_i] \right) \right]\]
这样的表达式推导和编码容易出错,且没有利用其中的内在冗余。而反向传播算法是一种高效的方法,可以一次性计算所有这些导数。
反向传播算法包括以下两个步骤:
- **前向传播(Forward pass)**:将损失的计算视为一系列计算过程,依次计算并存储中间变量和网络输出。具体计算过程如下:
- \(f_0 = \beta_0 + \omega_0 \cdot x_i\)
- \(h_1 = \sin[f_0]\)
- \(f_1 = \beta_1 + \omega_1 \cdot h_1\)
- \(h_2 = \exp[f_1]\)
- \(f_2 = \beta_2 + \omega_2 \cdot h_2\)
- \(h_3 = \cos[f_2]\)
- \(f_3 = \beta_3 + \omega_3 \cdot h_3\)
- \(\ell_i = (f_3 - y_i)^2\)
我们计算并存储中间变量 $f_k$ 和 $h_k$ 的值。
- **反向传播第一步(Backward pass #1)**:计算损失 $\ell_i$ 关于这些中间变量的导数,但顺序是从后往前。具体计算过程如下:
- \(\frac{\partial \ell_i}{\partial f_3} = 2(f_3 - y_i)\)
- \(\frac{\partial \ell_i}{\partial h_3} = \frac{\partial f_3}{\partial h_3} \frac{\partial \ell_i}{\partial f_3}\)
- \(\frac{\partial \ell_i}{\partial f_2} = \frac{\partial h_3}{\partial f_2} \left( \frac{\partial f_3}{\partial h_3} \frac{\partial \ell_i}{\partial f_3} \right)\)
- \(\frac{\partial \ell_i}{\partial h_2} = \frac{\partial f_2}{\partial h_2} \left( \frac{\partial h_3}{\partial f_2} \frac{\partial f_3}{\partial h_3} \frac{\partial \ell_i}{\partial f_3} \right)\)
- \(\frac{\partial \ell_i}{\partial f_1} = \frac{\partial h_2}{\partial f_1} \left( \frac{\partial f_2}{\partial h_2} \frac{\partial h_3}{\partial f_2} \frac{\partial f_3}{\partial h_3} \frac{\partial \ell_i}{\partial f_3} \right)\)
- \(\frac{\partial \ell_i}{\partial h_1} = \frac{\partial f_1}{\partial h_1} \left( \frac{\partial h_2}{\partial f_1} \frac{\partial f_2}{\partial h_2} \frac{\partial h_3}{\partial f_2} \frac{\partial f_3}{\partial h_3} \frac{\partial \ell_i}{\partial f_3} \right)\)
- \(\frac{\partial \ell_i}{\partial f_0} = \frac{\partial h_1}{\partial f_0} \left( \frac{\partial f_1}{\partial h_1} \frac{\partial h_2}{\partial f_1} \frac{\partial f_2}{\partial h_2} \frac{\partial h_3}{\partial f_2} \frac{\partial f_3}{\partial h_3} \frac{\partial \ell_i}{\partial f_3} \right)\)
每个导数都是通过乘以 $\frac{\partial f_k}{\partial h_k}$ 或 $\frac{\partial h_k}{\partial f_{k - 1}}$ 形式的项从前一个导数计算得到的。
- **反向传播第二步(Backward pass #2)**:考虑损失 $\ell_i$ 随参数 $\{\beta_k\}$ 和 $\{\omega_k\}$ 的变化情况。再次应用链式法则:
- \(\frac{\partial \ell_i}{\partial \beta_k} = \frac{\partial f_k}{\partial \beta_k} \frac{\partial \ell_i}{\partial f_k}\)
- \(\frac{\partial \ell_i}{\partial \omega_k} = \frac{\partial f_k}{\partial \omega_k} \frac{\partial \ell_i}{\partial f_k}\)
当 $k > 0$ 时,$f_k = \beta_k + \omega_k \cdot h_k$,所以
0
0
复制全文
相关推荐









