文档章节

机器学习算法的调试---梯度检验(Gradient Checking)

o
 osc_fmg49rzg
发布于 2019/03/20 14:43
字数 389
阅读 29
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

  梯度检验是一种对求导结果进行数值检验的方法,该方法可以验证求导代码是否正确。

1. 数学原理

   考虑我们想要最小化以 θ 为自变量的目标函数 J(θ)(θ 可以为标量和可以为矢量,在 Numpy 的编程环境下,处理是一样的),迭代梯度更新公式为:

可以以sigmoid函数为例,

其导数形式为

 

我们可以实现梯度下降算法,那我们怎么知道g(z)梯度的准确性呢?

 

回忆导数的数学定义:

由此我们可得梯度校验的数值校验公式: 

这便是梯度检验的原理。在实际应用中,我们常将ϵ设置为一个很小的常数,比如10-4数量级,不会将它设的太小,比如10-20,因为那将导致数值舍入误差。事实上,上式两端值的接近程度取决于 J 的具体形式,但在假定 ϵ=10−4 的情况 下,通常会发现左右两端至少有四位有效数字是一致的(或者说精度至少在0.0001一级)。

 

2. 编程实现

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)

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Swing界面分析和调试工具--Swing Inspector

Swing Inspector是一个Java Swing/AWT用户界面分析和调试工具,功能与firebug类似,具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从java swing初级到高级的所有开发人员,能够快速...

匿名
2013/03/06
3.4K
0
Base 参数解析库--bash argsparse

bash argsparse 是一个 Bash 的高级参数解析库。 Its purpose is to replace the option parsing and usage describing functions commonly rewritten in all scripts. Its features includ......

匿名
2013/03/27
377
0
Termdebug

Termdebug是一组实用程序来记录和回放的输入和输出一个终端程序。它的主要目标是帮助开发和调试终端程序。其他项目如termrec / termplay,nethack-recorder /播放器和脚本/ scriptreplay只记录...

匿名
2012/11/04
647
0
CentOS 7 YUM 搭建Kubernetes 1.0

Kubernetes 日前终于发布了稳定版 1.0, 本文将要出一个系列的文章来讲述如何搭建环境,部署服务,网络分析,升级服务,备份数据,最后到达如何对Kubernetes进行二次发。 1. CentOS7 YUM 搭建...

xue777hua
2015/09/06
7.8K
14
在mac上用AndroidStudio1.5 创建NDK开发环境(Ubuntu 16.4LTS亲测可用)

本文参考了youtube上的一个视频,想直接看视频的可以访问 https://www.youtube.com/watch?v=RmPuwdxR1qs (要翻墙) 废话少说打开androidStudio,新建一个工程 NDKTest 新建完毕 依次打开 File...

franos
2016/03/27
1.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

matplotlib基础绘图命令之imshow

欢迎关注”生信修炼手册”! 在matplotlib中,imshow方法用于绘制热图,基本用法如下 import matplotlib.pyplot as plt import numpy as np np.random.seed(123456789) data = np.random...

庐州月光
昨天
0
0
[Bazel]自定义工具链

1 前言 2 Non-Platform 方式 3 Platform 方式 3.1 平台 3.2 工具链 3.3 Platform + Toolchain 实现平台方式构建 4 小结 1 前言 本文会讲述 Bazel 自定义工具链的两种方式,Platform 和 Non-...

别打名名
前天
0
0
浏览器在输入URL后,到底发生了什么?

这是一道面试会经常问的问题,平时虽然很常见的操作,但是探究其底层原理,可能并不是一件简单的事情,于是我从各处搜罗整理下全过程,在这里做分享。 第一步:浏览器输入域名 例如输入:www...

lintao111
前天
0
0
通过注解的方式整合 MyBatis + Spring Boot

目录 目录 1. 前言 2. 整合过程 2.1 新建 Spring Boot 项目 2.2 添加 pom 依赖 2.3 准备数据库 2.4 pojo 层 2.5 dao 层 2.7 controller 层 2.8 入口程序配置 2.9 网页测试 1. 前言 本篇博客主...

村雨遥
前天
0
0
字节跳动AI Lab 秋季正式批招聘

0 1 公司简介 字节跳动AI Lab,成立于2016年,致力于开发为字节跳动内容平台服务的创新技术,不仅仅是进行理论研究,我们的想法还可以通过实验证明和快速跟踪用于产品部署。 人工智能涉及的研...

我爱计算机视觉
前天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部