梯度下降与反向传播是深度学习的核心支柱:反向传播负责高效计算梯度,梯度下降负责利用梯度更新参数。下面从这两个核心出发,逐步展开相关的关键理论。
一、梯度下降:如何沿着梯度找到最优解
目标是找到一组参数 $\theta$,使损失函数 $J(\theta)$ 最小。参数始终沿着负梯度方向更新:
$$
\theta \leftarrow \theta - \eta \nabla_\theta J(\theta)
$$
其中 $\eta$ 是学习率,控制每一步的步长。
1. 三种基本变体
- 批量梯度下降(BGD):用全部样本计算梯度,方向最准,但计算代价大。
- 随机梯度下降(SGD):每次只用一个样本,更新快、有噪声,能跳出局部极小值,但收敛波动大。
- 小批量梯度下降(Mini-batch SGD):每次用一个小批量样本,兼顾稳定与效率,是实际训练的标准做法。
2. 两大核心挑战
- 学习率选择困难:太小收敛慢,太大容易震荡甚至发散。
- 复杂损失曲面:存在局部极小值、鞍点(梯度接近零但不是极值点),普通 SGD 容易陷住。
3. 改进型优化器(梯度下降的高级形态)
这些改进都基于梯度,属于梯度下降族,是反向传播的直接下游。
-
动量法(Momentum)
积累历史梯度,像球滚下坡一样,加速收敛并抑制震荡:
$$v \leftarrow \beta v + \eta \nabla J(\theta),\quad \theta \leftarrow \theta - v$$ -
NAG(Nesterov 加速梯度)
先在动量方向上走一步,再在那里算梯度,具有“前瞻”效果。 -
AdaGrad
对每个参数自适应调整学习率:经常更新的参数学习率衰减更快。但后期可能过早停止学习。 -
RMSProp
改用梯度平方的指数移动平均,避免了 AdaGrad 学习率单调衰减的问题,适合非平稳目标。 -
Adam(目前最流行)
结合动量与 RMSProp,自带偏差校正,收敛快且相对稳定,是很多任务的默认选择。
二、反向传播:如何高效计算梯度
对于包含数百万参数的深度网络,手动求导不可能。反向传播本质是利用链式法则高效计算所有参数的损失梯度。
1. 前向传播:计算输出与存储中间值
输入 $x$ 经过层层变换:
$$z^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]},\quad a^{[l]} = \sigma(z^{[l]})$$
同时缓存每一层的 $z^{[l]}, a^{[l]}$,供反向传播使用。
2. 反向传播:从输出层向输入层逐层传递梯度
定义误差项 $\delta^{[l]} = \frac{\partial J}{\partial z^{[l]}}$。对输出层 $L$:
$$\delta^{[L]} = \frac{\partial J}{\partial a^{[L]}} \odot \sigma’(z^{[L]})$$
反向递推(链式法则的核心):
$$\delta^{[l]} = \left( (W^{[l+1]})^T \delta^{[l+1]} \right) \odot \sigma’(z^{[l]})$$
然后直接得到参数梯度:
$$\frac{\partial J}{\partial W^{[l]}} = \delta^{[l]} (a^{[l-1]})^T,\quad \frac{\partial J}{\partial b^{[l]}} = \delta^{[l]}$$
整个过程像把误差信号从输出层一层层“反向传播”回去,因此得名。
3. 与自动微分的联系
现代框架(PyTorch/TensorFlow)通过构建计算图实现自动微分,反向传播只是自动微分在反向模式下的特例。我们只需定义前向计算,框架就能自动计算出所有参数的梯度。
三、与之紧密相关的其他重要理论
1. 激活函数(决定“非线性”与梯度流动)
- Sigmoid / Tanh:容易饱和,梯度趋于零,导致深层网络梯度消失,反向传播信号衰减严重。
- ReLU $a = \max(0, z)$:非饱和、计算简单,大幅缓解梯度消失,但存在神经元永久“死亡”问题。
- Leaky ReLU / ELU:改进版,给负半轴一个微小斜率,保持梯度流动。
- 输出层特殊搭配:二分类用 Sigmoid + 二元交叉熵,多分类用 Softmax + 交叉熵。这种组合使反向传播起始的 $\delta^{[L]}$ 形式非常简洁(如 Softmax + 交叉熵下输出层误差直接是 $\hat{y} - y$)。
2. 损失函数(反向传播的起点)
- 均方误差(MSE):常用于回归,搭配线性输出。
- 交叉熵损失:常用于分类,对数似然形式,与 Softmax/Sigmoid 搭配时梯度形式优美,收敛更快。
- 损失函数的选择直接影响 $\delta^{[L]}$ 的表达式,进而影响整个反向传播的起始误差信号。
3. 正则化(对抗过拟合,间接影响梯度)
- L2 正则化(权重衰减):损失增加 $\frac{\lambda}{2}|W|^2$,等价于在梯度下降更新时额外减去 $\eta \lambda W$,强制权重变小。
- L1 正则化:产生稀疏权重,梯度更新中加入符号项,导向很多参数为零。
- Dropout:训练时随机丢弃神经元,可以看作隐式地训练大量子网络并集成,改变每次前向和反向的有效网络结构。
- 早停(Early Stopping):监控验证集损失,在性能不再提升时停止,限制优化进程。
4. 权重初始化(反向传播的起点稳定器)
不合适的初始化会导致梯度爆炸或消失。常用策略:
- Xavier 初始化:适用于 Sigmoid/Tanh,保持各层输入输出方差一致。
- He 初始化:专为 ReLU 设计,方差放大 2 倍,防止深层梯度消失。
合理的初始化使反向传播时梯度在层间保持合理尺度。
5. 批归一化(Batch Normalization)
在网络中间对每一小批量的激活值做标准化,使其均值为 0、方差为 1,再通过可学习参数缩放和平移。效果:
- 大幅加速收敛,允许更大学习率。
- 缓解梯度消失/爆炸,减弱对初始化的依赖。
- 带有轻微正则化效果(因小批量统计噪声)。
在反向传播时,BN 层的梯度也需要通过变换公式正确传播。
6. 学习率调度
在梯度下降框架下动态调整学习率,常见策略:
- 阶梯衰减:每隔若干 epoch 降低学习率。
- 指数/余弦退火:平滑衰减,帮助梯度下降在后期精细寻优。
- 预热(Warmup):训练初期从小学习率线性增长,防止模型不稳定。
这些调度直接作用于梯度下降的步长,与优化器和反向传播协同工作。
总结
- 梯度下降:优化范式,决定参数如何更新。
- 反向传播:计算梯度的高效算法,是梯度下降的“上游供应”。
- 相关理论:激活函数、损失函数、正则化、初始化、批归一化、学习率调度等,都是为了让反向传播得到的梯度更稳定、更有效,让梯度下降收敛得更快更好。
这三者构成深度神经网络训练的基础知识体系,理解它们的相互作用,就能清晰地分析训练中出现的各类问题(如梯度消失、不收敛、过拟合等)。
评论
请登录后发表评论
暂无评论,快来发表第一条评论吧!