机器学习算法的调试---梯度检验(Gradient Checking)
undefined
梯度检验是一种对求导结果进行数值检验的方法,该方法可以验证求导代码是否正确。
1. 数学原理
考虑我们想要最小化以 θ 为自变量的目标函数 J(θ)(θ 可以为标量和可以为矢量,在 Numpy 的编程环境下,处理是一样的),迭代梯度更新公式为:

可以以sigmoid函数为例,
其导数形式为
我们可以实现梯度下降算法,那我们怎么知道g(z)梯度的准确性呢?
回忆导数的数学定义:
由此我们可得梯度校验的数值校验公式:
这便是梯度检验的原理。在实际应用中,我们常将ϵ设置为一个很小的常数,比如10-4数量级,不会将它设的太小,比如10-20,因为那将导致数值舍入误差。事实上,上式两端值的接近程度取决于 J 的具体形式,但在假定 ϵ=10−4 的情况 下,通常会发现左右两端至少有四位有效数字是一致的(或者说精度至少在0.0001一级)。
2. 编程实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import numpy as np def sigmoid(z): return 1. / ( 1 + np.exp( - z)) def sigmoid_prime(z): return sigmoid(z) * ( 1 - sigmoid(z)) def check_gradient(f, x0, epsilon): return (f(x0 + epsilon) - f(x0 - epsilon)) / 2 / epsilon if __name__ = = '__main__' : x0 = np.array([ 1 , 2 , 3 ]) epsilon = 1e - 4 print (sigmoid_prime(x0)) # [ 0.19661193 0.10499359 0.04517666] print (check_gradient(sigmoid, x0, epsilon)) # [ 0.19661193 0.10499359 0.04517666] |
参考文献:
【1】机器学习算法的调试 —— 梯度检验(Gradient Checking)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现