梯度检验应用的注意事项

分享一些关于如何在神经网络实施梯度检验的实用技巧和注意事项。

首先,不要在训练中使用梯度检验,它只用于调试。意思是,计算所有\(i\)值的\(d\theta_{\text{approx}}\left[i\right]\)是一个非常漫长的计算过程,为了实施梯度下降,必须使用\(W\)和\(b\) backprop来计算\(d\theta\),并使用backprop来计算导数,只要调试的时候,才会计算它,来确认数值是否接近\(d\theta\)。完成后,会关闭梯度检验,梯度检验的每一个迭代过程都不执行它,因为它太慢了。

第二点,如果算法的梯度检验失败,要检查所有项,检查每一项,并试着找出bug,也就是说,如果\(d\theta_{\text{approx}}\left[i\right]\)与dθ[i]的值相差很大,要做的就是查找不同的i值,看看是哪个导致\(d\theta_{\text{approx}}\left[i\right]\)与\(d\theta\left[i\right]\)的值相差这么多。举个例子,如果发现,相对某些层或某层的\(\theta\)或\(d\theta\)的值相差很大,但是\(\text{dw}^{[l]}\)的各项非常接近,注意\(\theta\)的各项与\(b\)和\(w\)的各项都是一一对应的,这时,可能会发现,在计算参数\(b\)的导数\(db\)的过程中存在bug。反过来也是一样,如果发现它们的值相差很大,\(d\theta_{\text{approx}}\left[i\right]\)的值与\(d\theta\left[i\right]\)的值相差很大,会发现所有这些项目都来自于\(dw\)或某层的\(dw\),可能帮定位bug的位置,虽然未必能够帮准确定位bug的位置,但它可以帮助估测需要在哪些地方追踪bug。

第三点,在实施梯度检验时,如果使用正则化,请注意正则项。如果代价函数\(J(\theta) = \frac{1}{m}\sum_{}^{}{L(\hat y^{(i)},y^{(i)})} + \frac{\lambda}{2m}\sum_{}^{}{||W^{[l]}||}^{2}\),这就是代价函数\(J\)的定义,\(d\theta\)等于与\(\theta\)相关的\(J\)函数的梯度,包括这个正则项,记住一定要包括这个正则项。

第四点,梯度检验不能与dropout同时使用,因为每次迭代过程中,dropout会随机消除隐藏层单元的不同子集,难以计算dropout在梯度下降上的代价函数\(J\)。因此dropout可作为优化代价函数\(J\)的一种方法,但是代价函数J被定义为对所有指数极大的节点子集求和。而在任何迭代过程中,这些节点都有可能被消除,所以很难计算代价函数\(J\)。只是对成本函数做抽样,用dropout,每次随机消除不同的子集,所以很难用梯度检验来双重检验dropout的计算,所以一般不同时使用梯度检验和dropout。如果想这样做,可以把dropout中的keepprob设置为1.0,然后打开dropout,并寄希望于dropout的实施是正确的,还可以做点别的,比如修改节点丢失模式确定梯度检验是正确的。实际上,一般不这么做,建议关闭dropout,用梯度检验进行双重检查,在没有dropout的情况下,算法至少是正确的,然后打开dropout。

最后一点,也是比较微妙的一点,现实中几乎不会出现这种情况。当\(w\)和\(b\)接近0时,梯度下降的实施是正确的,在随机初始化过程中……,但是在运行梯度下降时,\(w\)和\(b\)变得更大。可能只有在\(w\)和\(b\)接近0时,backprop的实施才是正确的。但是当\(W\)和\(b\)变大时,它会变得越来越不准确。需要做一件事,不经常这么做,就是在随机初始化过程中,运行梯度检验,然后再训练网络,\(w\)和\(b\)会有一段时间远离0,如果随机初始化值比较小,反复训练网络之后,再重新运行梯度检验。

神经网络优化篇:梯度检验应用的注意事项(Gradient Checking Implementation Notes)的更多相关文章

  1. 【零基础】神经网络优化之dropout和梯度校验

    一.序言 dropout和L1.L2一样是一种解决过拟合的方法,梯度检验则是一种检验“反向传播”计算是否准确的方法,这里合并简单讲述,并在文末提供完整示例代码,代码中还包含了之前L2的示例,全都是在“ ...

  2. 神经网络优化算法:梯度下降法、Momentum、RMSprop和Adam

    最近回顾神经网络的知识,简单做一些整理,归档一下神经网络优化算法的知识.关于神经网络的优化,吴恩达的深度学习课程讲解得非常通俗易懂,有需要的可以去学习一下,本人只是对课程知识点做一个总结.吴恩达的深度 ...

  3. Tensorflow学习:(三)神经网络优化

    一.完善常用概念和细节 1.神经元模型: 之前的神经元结构都采用线上的权重w直接乘以输入数据x,用数学表达式即,但这样的结构不够完善. 完善的结构需要加上偏置,并加上激励函数.用数学公式表示为:.其中 ...

  4. 【零基础】神经网络优化之Adam

    一.序言 Adam是神经网络优化的另一种方法,有点类似上一篇中的“动量梯度下降”,实际上是先提出了RMSprop(类似动量梯度下降的优化算法),而后结合RMSprop和动量梯度下降整出了Adam,所以 ...

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

    梯度检验是一种对求导结果进行数值检验的方法,该方法可以验证求导代码是否正确. 1. 数学原理   考虑我们想要最小化以 θ 为自变量的目标函数 J(θ)(θ 可以为标量和可以为矢量,在 Numpy 的 ...

  6. ML(5)——神经网络3(随机初始化与梯度检验)

    随机初始化 在线性回归和逻辑回归中,使用梯度下降法之前,将θ设置为0向量,有时会习惯性的将神经网络中的权重全部初始化为0,然而这在神经网络中并不适用. 以简单的三层神经网络为例,将全部权重都设置为0, ...

  7. zz图像、神经网络优化利器:了解Halide

    动图示例实在太好 图像.神经网络优化利器:了解Halide  Oldpan  2019年4月17日  0条评论  1,327次阅读  3人点赞 前言 Halide是用C++作为宿主语言的一个图像处理相 ...

  8. ubuntu之路——day7.4 梯度爆炸和梯度消失、初始化权重、梯度的数值逼近和梯度检验

    梯度爆炸和梯度消失: W[i] > 1:梯度爆炸(呈指数级增长) W[i] < 1:梯度消失(呈指数级衰减) *.注意此时的1指单位矩阵,W也是系数矩阵 初始化权重: np.random. ...

  9. Halide视觉神经网络优化

    Halide视觉神经网络优化 概述 Halide是用C++作为宿主语言的一个图像处理相关的DSL(Domain Specified Language)语言,全称领域专用语言.主要的作用为在软硬层面上( ...

  10. 几种梯度下降方法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)

    https://blog.csdn.net/u012328159/article/details/80252012 我们在训练神经网络模型时,最常用的就是梯度下降,这篇博客主要介绍下几种梯度下降的变种 ...

随机推荐

  1. 最快速搭建个人服务器图床siuuuuu

    @ 目录 1.服务器准备 2.docker 安装 (1)通过命令行的方式 (2)宝塔面板上安装 3.开启端口访问 什么是docker 4.docker安装minio 什么是minio 5.配置mini ...

  2. Mysql数据库、表设计规范指南

    结合网上资料与项目实际情况,总结下列MYSQL数据库设计规范. 一.MYSQL数据库设计规范1.数据库命名规范采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,禁止使 ...

  3. 双数组字典树 (Double-array Trie) -- 代码 + 图文,看不懂你来打我

    目录 Trie 字典树 双数组Trie树 构建 字符编码 计算规则 构建 Base Array.Check Array 处理字典首字 处理字典二层字 处理字典三层字 处理字典四层字 叶子节点处理 核心 ...

  4. java值传递机制

    目录 1. 基本数据类型 2. 引用数据类型 3. 总结 1. 基本数据类型 public class ValueTransferTest { public static void main(Stri ...

  5. Radius+OpenLdap+USG防火墙认证

    1.1.安装OpenLdap # 在数据目录创建ldap文件存放ldap的配置文件 mkdir -p /data/ldap/{data,conf} docker run -p 389:389 -p 6 ...

  6. acl与nat

    ACL 需要工具实现流量过滤 访问控制列表 ACL 应用 ACL两种应用: 应用在接口的ACL-----过滤数据包(原目ip地址,原目 mac, 协议与端口,五元组) 应用在路由协议-------匹配 ...

  7. trafilatura 网页解析原理分析

    trafilatura 介绍 Trafilatura是一个Python包和命令行工具,用于收集网络上的文本.其主要应用场景包括网络爬虫下载和网页解析等. 今天我们不讨论爬虫和抓取,主要看他的数据解析是 ...

  8. 如何使用Python将PDF转为Excel

    PDF文件是一种静态文档格式,通常难以编辑,而Excel则是一个灵活的表格工具.如果你需要处理PDF表格中的数据,那么将其导出为Excel文件可以大大节省工作时间和精力.Excel提供的强大数据编辑和 ...

  9. 彻底掌握Python中 * 号

    Python中的 *号是一个特殊的符号,在其他编程语言中,它最广为人知的用途就是作为乘法运算的符号.而在Python中,它的用途远不止如此. 本文总结了Python中*号的所有用途,以供参考. 1. ...

  10. nmap命令说明

    目录 主机发现 扫描技术 端口规格和扫描顺序 服务/版本检测 脚本扫描 操作系统检测 时间和性能: 防火墙/IDS的逃避和欺骗 输出 杂项 平时看到别人的nmap命令都是一大串,根本看不懂为什么,自己 ...