1. 为什么要在裁剪前检查梯度?
查看参考答案与评分要点
数值导数对应损失本身;裁剪后的更新不再等于原始导数。
数值验证梯度,注入归约错误,区分训练不稳定和导数实现错误。
本地计算与合成示例,不调用付费 API,不代表真实大模型基准。目标:解释本课机制、复现一个例子、测试一个失败案例。读完不自动代表掌握。
前置知识 · 链式法则、均方误差、向量范数。
有限差分用于验证实现的导数是否对应声明的目标函数。应先检查原始梯度,再进行裁剪;裁剪会有意改变更新方向的长度。此处批次为 32,误用总和梯度会放大 32 倍。
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||)
常见误区:损失下降可能与归约错误同时出现。数值稳定不等于实现正确。
mean[(-2)×1,(-4)×2] = -5
先运行基线,再启用归约错误;之后关闭错误并把输入尺度设为 20。寻找恢复稳定训练的学习率,每次只改变一个变量并对比导出记录。
交付物:输入配置、结果导出、控制变量说明、观察结果、替代解释及下一步验证。
w 方向的曲率随 mean(x²) 增长。尺度为 1 时稳定的学习率,在尺度为 20 时可能过大。裁剪可能使更新稳定,但不能修复错误导数。
运行实验后查看证据。
仅比较控制变量后的运行结果,导出包含输入与方法。
自评要点:解释机制、识别假设、提出可区分不同解释的实验。不使用 LLM 自动评分。
数值导数对应损失本身;裁剪后的更新不再等于原始导数。
不能。常数倍梯度可能仅表现为不同的学习率,应检查目标归约、参数路径和数值精度。
先过拟合小批次、核对标签、做有限差分、观察梯度范数,再分别改变输入尺度和步长。
这是合成数据线性回归,不是深度网络性能分析器。损失超过 10¹² 即停止。有限差分只是局部检查,不能证明所有位置的梯度都正确。
arXiv:1412.6980 · 2014
Kingma & Ba · 年份为首次 arXiv 投稿年份
建议阅读:Algorithm 1;一阶/二阶矩估计及偏差校正。
读后自测:解释为什么零初始化的矩估计需要校正。当前梯度实验使用 SGD,不是 Adam。
@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
Loshchilov & Hutter · 年份为首次 arXiv 投稿年份
建议阅读:自适应更新下 L2 正则化与解耦权重衰减的比较。
读后自测:并列写出两种更新,标出预条件缩放作用的位置。这是阅读扩展,不是已实现的 AdamW 基准。
@misc{arxiv171105101,
title = {Decoupled Weight Decay Regularization},
year = {2017},
eprint = {1711.05101},
archivePrefix = {arXiv},
url = {https://arxiv.org/abs/1711.05101}
}这是合成数据线性回归,不是深度网络性能分析器。损失超过 10¹² 即停止。有限差分只是局部检查,不能证明所有位置的梯度都正确。
已复核目标、导数、算例及实现。通过有限差分或清单检查不代表完成论文复现。
先运行基线,再启用归约错误;之后关闭错误并把输入尺度设为 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) · 完整参考代码与回归检查展开答案前先预测一个结果;练习后记录差异和迁移测试。记录仅存本地,在不同语言版本间共用。
打开记录/导出/清除 →数学复核范围逐篇记录,不代表完成论文实证复现;可在笔记中记录疑似错误。 复核范围