Token Lab搜索

← 全部研究实验
PHD / RESEARCH ENGINEERING

梯度与训练故障诊断

数值验证梯度,注入归约错误,区分训练不稳定和导数实现错误。

本地计算与合成示例,不调用付费 API,不代表真实大模型基准。
学习指南与本课目录LEARNING CONTRACT

理解 → 实现 → 研究

目标:解释本课机制、复现一个例子、测试一个失败案例。读完不自动代表掌握。

01 · 理解与推导

前置知识 · 链式法则、均方误差、向量范数。

有限差分用于验证实现的导数是否对应声明的目标函数。应先检查原始梯度,再进行裁剪;裁剪会有意改变更新方向的长度。此处批次为 32,误用总和梯度会放大 32 倍。

Text / 原始公式
L = Σ(wxᵢ+b−yᵢ)²/(2n)
∂L/∂w = mean[(wxᵢ+b−yᵢ)xᵢ]
g_FD = [L(θ+ε)−L(θ−ε)]/(2ε)
relative error = ||g−g_FD|| / max(10⁻¹², ||g||+||g_FD||)
逐步推导与研究解释
  1. 从残差 开始。rᵢ²/2 求导得到 rᵢ,再乘 ∂rᵢ/∂,最后按批次取平均。分别计算偏置与权重梯度。
  2. 对于二次目标,每个正曲率方向上,0<η<2/λ 时全批梯度下降稳定。用 Hessian 最大特征值判断步长上限;数据尺度会改变特征值。
  3. 有限差分需要平衡截断误差和浮点相消。检查多个参数点与 ε,不能把单点通过当作证明。比较时使用裁剪前梯度。

常见误区:损失下降可能与归约错误同时出现。数值稳定不等于实现正确。

02 · 检查知识掌握

、、,2]、,4],采用二分之一均方误差时,∂L/∂w 是多少?

查看推导

mean[(-2)×1,(-4)×2] = -5

03 · 运行对照实验

实验任务

先运行基线,再启用归约错误;之后关闭错误并把输入尺度设为 20。寻找恢复稳定训练的学习率,每次只改变一个变量并对比导出记录。

可执行的对照实验流程
  1. 基线:学习率 0.1、尺度 1、关闭错误、100 步、种子 42。导出损失与梯度相对误差。
  2. 仅切换总和梯度错误:相对误差预期约为 31/33。恢复后仅把尺度改为 20,检查不稳定性。
  3. 尺度 20 下将学习率降为 0.001 再运行,之后单独测试裁剪。提交三组控制变量对照,解释裁剪为何不能修复错误导数。

交付物:输入配置、结果导出、控制变量说明、观察结果、替代解释及下一步验证。

查看提示

w 方向的曲率随 mean(x²) 增长。尺度为 1 时稳定的学习率,在尺度为 20 时可能过大。裁剪可能使更新稳定,但不能修复错误导数。

04 · 检查证据

运行实验后查看证据。

仅比较控制变量后的运行结果,导出包含输入与方法。

05 · 解释研究判断

自评要点:解释机制、识别假设、提出可区分不同解释的实验。不使用 LLM 自动评分。

1. 为什么要在裁剪前检查梯度?

查看参考答案与评分要点

数值导数对应损失本身;裁剪后的更新不再等于原始导数。

2. 梯度检查失败但 loss 下降,是否说明实现正确?

查看参考答案与评分要点

不能。常数倍梯度可能仅表现为不同的学习率,应检查目标归约、参数路径和数值精度。

3. 如何设计最小训练故障排查?

查看参考答案与评分要点

先过拟合小批次、核对标签、做有限差分、观察梯度范数,再分别改变输入尺度和步长。

假设与限制

这是合成数据线性回归,不是深度网络性能分析器。损失超过 10¹² 即停止。有限差分只是局部检查,不能证明所有位置的梯度都正确。

参考资料

arXiv:1412.6980 · 2014

Adam: A Method for Stochastic Optimization

Kingma & Ba · 年份为首次 arXiv 投稿年份

建议阅读:Algorithm 1;一阶/二阶矩估计及偏差校正。

读后自测:解释为什么零初始化的矩估计需要校正。当前梯度实验使用 SGD,不是 Adam。

BibTeX
@misc{arxiv14126980,
  title = {Adam: A Method for Stochastic Optimization},
  year = {2014},
  eprint = {1412.6980},
  archivePrefix = {arXiv},
  url = {https://arxiv.org/abs/1412.6980}
}

arXiv:1711.05101 · 2017

Decoupled Weight Decay Regularization

Loshchilov & Hutter · 年份为首次 arXiv 投稿年份

建议阅读:自适应更新下 L2 正则化与解耦权重衰减的比较。

读后自测:并列写出两种更新,标出预条件缩放作用的位置。这是阅读扩展,不是已实现的 AdamW 基准。

BibTeX
@misc{arxiv171105101,
  title = {Decoupled Weight Decay Regularization},
  year = {2017},
  eprint = {1711.05101},
  archivePrefix = {arXiv},
  url = {https://arxiv.org/abs/1711.05101}
}
MATHEMATICAL REVIEW · 2026-10-26

假设、参考实现与验收

这是合成数据线性回归,不是深度网络性能分析器。损失超过 10¹² 即停止。有限差分只是局部检查,不能证明所有位置的梯度都正确。

已复核目标、导数、算例及实现。通过有限差分或清单检查不代表完成论文复现。

固定种子线性回归样例 → 半 MSE → 解析梯度 → 裁剪前计算中心差分 → 比较相对误差 → 更新
机制图:从上到下跟踪每次变换。

运行前:预测一个边界情况

先运行基线,再启用归约错误;之后关闭错误并把输入尺度设为 20。寻找恢复稳定训练的学习率,每次只改变一个变量并对比导出记录。

提示:隔离假设

固定基线输入,只改变一个参数或边界;同时比较数值与声明单位。单例通过仅验证该样例。

最小可运行算例

将算例及所链接模块保存在同一目录。使用 Node.js 22 或更高版本,然后运行 node gradient-debugger.mjs. 无需第三方运行依赖。

import {runPhd} from './phd-core.mjs';
const params={
  "rate": 0.1,
  "scale": 1,
  "clip": 0,
  "bug": 0,
  "epochs": 100,
  "seed": 42
};
console.log(runPhd('gradient-debugger',params));

测试与迁移

先运行基线,再启用归约错误;之后关闭错误并把输入尺度设为 20。寻找恢复稳定训练的学习率,每次只改变一个变量并对比导出记录。

在下方笔记记录输入、代码版本、期望值和实测值;再构造违反上述假设的反例,解释原结论为何不再成立。

下载完整代码包(.tar.gz) · 完整参考代码与回归检查

预测、检验与证据记录

展开答案前先预测一个结果;练习后记录差异和迁移测试。记录仅存本地,在不同语言版本间共用。

打开记录/导出/清除 →

数学复核范围逐篇记录,不代表完成论文实证复现;可在笔记中记录疑似错误。 复核范围