让 AI 裁一次全局梯度:两组各自合格,合起来仍可能超限
“把梯度限制到5”至少可能指单个数值、每组参数的长度,或全部梯度合在一起的长度。让AI解释裁剪前,先要求它把这三种对象分开。本例只研究全局L2范数,让裁剪后的总长度成为可以复算的验收项。
AI模型生成的概念插图:向量沿原方向缩短到边界,圆形只是长度约束的示意;不代表软件截图、真实实验或精确数据图。
先把两组梯度看成一根长向量
设参数组甲的梯度为[3,4],组乙为[0,12]。组甲L2范数是5,组乙是12;全局范数应是√(3²+4²+0²+12²)=13,而不是把5和12直接相加得到17。PyTorch的clip_grad_norm_文档也按合并后的全局梯度范数描述操作。
设最大范数为5。采用本练习的理想实数定义:未超限时不动;超限时所有分量同乘5/13。结果分别是[15/13,20/13]与[0,60/13],约[1.153846154,1.538461538]和[0,4.615384615]。
平方后求和得到25,开根号正好是5。所有非零分量的缩放比例相同,方向因此保留;原来最大的12仍然是最大的分量,它没有被单独压到5后就算结束。
每组都不超过五,为什么还不够
若分别裁剪每组,甲本来范数为5便不变,乙缩成[0,5]。两组各自确实都不超过5,但合起来是[3,4,0,5],总范数为√50,约7.071067812,超过原先规定的全局上限。
逐元素截到[-5,5]在这组输入上也得到[3,4,0,5],同样不能保证全局范数不超过5。三种方法有各自含义,关键是不能在报告中先承诺全局阈值,实际却执行了逐组或逐元素裁剪。
把缩放系数和返回值分别检查
可用提示词:“给梯度组[3,4]、[0,12],最大全局L2范数5。按理想实数公式计算原范数、共同缩放系数、输出与输出范数;另算每组分别裁剪、逐元素截断。比较方向和全局阈值。对全零梯度写出处理分支,不能直接求5/0。”
全零输入应保持全零;总范数已经小于5的输入也应保留原值,而不是放大到5。若拿真实框架核对,要使用容差:实现可能在缩放分母中加入稳定小量,浮点输出未必与上述有理数逐位相同。本文的精确分数是算法练习,不冒充框架实测。
实际接入时要记录裁剪前范数与裁剪后范数,避免把函数返回的原总范数当作最终梯度长度。裁剪也不会修复NaN、无穷值或错误损失公式;发现这些情况应先定位数值来源,不能认为“限制到5”就已恢复正常训练。
资料核对日期:2026年10月2日。数值为原创教学设定,已用独立Python计算复核,不代表真实模型性能测试。


