Applied Scientist · VO ML Project Deep Dive

Amazon ML:Gradient Clipping 裁什么,什么时候有用?

区分全局范数与逐值裁剪,解释AMP反缩放、梯度累积和分布式全局范数。

题目重点:区分全局范数与逐值裁剪,解释AMP反缩放、梯度累积和分布式全局范数。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 讨论参数梯度拼接向量g的L2全局范数,阈值c>0;裁剪在optimizer读取grad之前。
  • 示例为数值手算,无框架代码;混合精度/DDP具体API与sharding实现需按所用框架核验。

解题路线

  1. 全局norm裁剪g'=g·min(1,c/||g||),g=0保持0;当超阈值统一缩放,保持梯度方向。逐元素clamp(g_i,−c,c)改变方向,两者不混称。
  2. 在梯度爆炸或偶发很大更新时,裁剪可限制传给optimizer的梯度幅度;不解决梯度消失、错误label、NaN源头或永久不稳定学习率。Adam参数更新还受moments/预条件影响,不能声称裁梯度必保证参数更新范数≤ηc。
  3. AMP若梯度乘loss scale,先unscale再按真实单位clip,否则同阈值随着scale变化裁剪强度也变。非有限梯度应报告/跳步或定位,而非把NaN通过clip变成有效梯度。
  4. 梯度累积一般先累积按合同归一化,再裁一次最终梯度;每microbatch各裁后相加不是相加后裁,两者训练目标方向可能不同。
  5. 跨设备若参数分片,global norm需要所有分片平方和归约;若DDP每卡已有相同all-reduced梯度,不再把所有副本平方和累加,否则多乘设备数。明确是副本还是参数分片。
  6. 记录clip触发比例、裁前norm、loss spike和有效更新,阈值基于稳定训练区间/验证消融;若几乎每步强裁,须检查学习率/归一化/异常batch,而不是认为裁得越多越安全。

手动走一遍

g=(3,4),norm5,c2,全局裁剪=(1.2,1.6),方向不变;逐值裁剪=(2,2)方向不同。两个microbatch梯度(100,0)与(−99,1)总和(1,1),先裁各自再求和与总和后裁不会一致。

规模与取舍

P梯度元素的norm与缩放O(P)时间,少量norm状态;分片训练需scalar reduction与同步,具体通信时延不由O(P)单机成本代表。

易错点与追问

容易失分的边界

  • 裁参数而非梯度。
  • AMP缩放梯度直接clip。
  • 每microbatch裁剪等同最终裁。
  • DDP副本重复累计norm。
  • 以clip修复NaN或梯度消失。

继续深挖

  • 不同参数组用各自阈值会怎样改方向?
  • adaptive clipping依据什么量?
  • Adam更新大小怎样直接监控?
  • 分片范数怎样处理混合dtype与非有限值?

技术参考

✓已复制微信号!