Gradient Clipping

分类: 深度学习基础

Gradient Clipping

定义

梯度裁剪是一种防止梯度爆炸的训练技巧,在参数更新前对梯度的范数或值进行截断。最常用的方式是全局范数裁剪(global norm clipping):当所有参数梯度的总范数超过阈值 τ\tau 时,按比例缩放所有梯度使其总范数恰好等于 τ\tau

数学形式

全局范数裁剪(clip-by-norm)

g^={gif gττggif g>τ\hat{g} = \begin{cases} g & \text{if } \|g\| \le \tau \\ \frac{\tau}{\|g\|} \cdot g & \text{if } \|g\| > \tau \end{cases}

逐值裁剪(clip-by-value)

g^i=clip(gi,τ,τ)\hat{g}_i = \text{clip}(g_i, -\tau, \tau)

gg: 原始梯度向量

τ\tau: 裁剪阈值(超参数,常见值 1.0 或 5.0)

核心要点

防止梯度爆炸:RNN/LSTM 等循环网络中梯度可能随时间步指数增长,裁剪是标准解决方案;Transformer 训练中也普遍使用(如 GPT 系列默认 max_norm=1.0

范数裁剪优于逐值裁剪:范数裁剪保持梯度方向不变只缩放大小,逐值裁剪会改变梯度方向,实践中范数裁剪更稳定

不能解决梯度消失:裁剪只处理过大的梯度,对过小的梯度无能为力,梯度消失需要靠残差连接、LayerNorm 等结构化方法解决

阈值选择:太小会限制学习速度,太大等于没裁剪。通常通过监控训练中的梯度范数分布来确定合理的阈值

与优化器的交互:Adam 等自适应优化器本身有一定的梯度归一化效果,但大规模训练中仍需搭配梯度裁剪使用

代表工作

Pascanu et al. (2013): On the Difficulty of Training Recurrent Neural Networks(分析梯度爆炸/消失,提出裁剪方案)

Merity et al. (2018): Regularizing and Optimizing LSTM Language Models(ASGD + 裁剪)

相关概念

Vanishing Gradient

Computation Graph

Jacobian

SOAP