返回 深度学习 思维导图
中文·English
🧠 深度学习ID: gradient-check

梯度检查

Gradient Checking
🎯核心定义
用数值方法近似导数并与解析梯度比对: 中心差分 f(x)f(x+ϵ)f(xϵ)2ϵf'(x) \approx \frac{f(x+\epsilon) - f(x-\epsilon)}{2\epsilon}, 误差 O(ϵ2)O(\epsilon^2) (单侧差分只有 O(ϵ)O(\epsilon)), ϵ\epsilon 常取 10410^{-4}~10510^{-5} (再小会被浮点精度支配)。用相对误差 gnumganamax(gnum,gana)\frac{|g_{num} - g_{ana}|}{\max(|g_{num}|, |g_{ana}|)} 衡量: 浅网络 (3 层以内) 用 10710^{-7} 量级阈值, 深网络/大网络用 10310^{-3} 量级 (深层累积极小的数值误差)。
💡使用场景
手写反向传播、实现自定义 autograd Function、复现论文新层/新损失时验证 backward 正确性; 面试问数值梯度公式、误差阶数与阈值选择。
解决的核心痛点
反向传播实现错误极其隐蔽 — 模型仍能“学会”东西 (误差被后续层吸收), 肉眼几乎无法发现; 梯度检查把实现正确性变成可自动验证的数值测试。注意: 检查时需关闭 dropout/BN 随机性、只用少量样本、逐参数单独检查 (每个参数两次前向), 因此只在实现新算子时做, 训练中不频繁执行。
🎯5 个高频面试考点 (Exam Points)
1
写出中心差分数值梯度公式, 为什么误差是 O(ϵ2)O(\epsilon^2)?
2
相对误差如何计算? 浅网络与深网络的阈值为何不同?
3
梯度检查时为什么要关闭 dropout/BN 随机性并只用小样本?
4
梯度检查的最佳时机? 为什么不能高频执行?
5
ϵ\epsilon 过大或过小分别会有什么问题?
📖 关联深度指南:📄 debugging-and-dl-comp
更新于 2026-08-12
🎯
检验攻克程度:针对「梯度检查」专属刷题排雷
做单选排雷题、推导选项机制,答错自动收录进专属错题本。
🚀 开始本考点专项刷题
上一个知识点Autograd 动态图下一个知识点数据增强

🔗 更多 深度学习 知识点卡片

激活函数演进Adam/AdamWBatchNorm 批归一化经典 CNN 演进