神经网络优化篇:梯度检验应用的注意事项(Gradient Checking Implementation Notes)
梯度检验应用的注意事项
分享一些关于如何在神经网络实施梯度检验的实用技巧和注意事项。

首先,不要在训练中使用梯度检验,它只用于调试。意思是,计算所有\(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)的更多相关文章
- 【零基础】神经网络优化之dropout和梯度校验
一.序言 dropout和L1.L2一样是一种解决过拟合的方法,梯度检验则是一种检验“反向传播”计算是否准确的方法,这里合并简单讲述,并在文末提供完整示例代码,代码中还包含了之前L2的示例,全都是在“ ...
- 神经网络优化算法:梯度下降法、Momentum、RMSprop和Adam
最近回顾神经网络的知识,简单做一些整理,归档一下神经网络优化算法的知识.关于神经网络的优化,吴恩达的深度学习课程讲解得非常通俗易懂,有需要的可以去学习一下,本人只是对课程知识点做一个总结.吴恩达的深度 ...
- Tensorflow学习:(三)神经网络优化
一.完善常用概念和细节 1.神经元模型: 之前的神经元结构都采用线上的权重w直接乘以输入数据x,用数学表达式即,但这样的结构不够完善. 完善的结构需要加上偏置,并加上激励函数.用数学公式表示为:.其中 ...
- 【零基础】神经网络优化之Adam
一.序言 Adam是神经网络优化的另一种方法,有点类似上一篇中的“动量梯度下降”,实际上是先提出了RMSprop(类似动量梯度下降的优化算法),而后结合RMSprop和动量梯度下降整出了Adam,所以 ...
- 机器学习算法的调试---梯度检验(Gradient Checking)
梯度检验是一种对求导结果进行数值检验的方法,该方法可以验证求导代码是否正确. 1. 数学原理 考虑我们想要最小化以 θ 为自变量的目标函数 J(θ)(θ 可以为标量和可以为矢量,在 Numpy 的 ...
- ML(5)——神经网络3(随机初始化与梯度检验)
随机初始化 在线性回归和逻辑回归中,使用梯度下降法之前,将θ设置为0向量,有时会习惯性的将神经网络中的权重全部初始化为0,然而这在神经网络中并不适用. 以简单的三层神经网络为例,将全部权重都设置为0, ...
- zz图像、神经网络优化利器:了解Halide
动图示例实在太好 图像.神经网络优化利器:了解Halide Oldpan 2019年4月17日 0条评论 1,327次阅读 3人点赞 前言 Halide是用C++作为宿主语言的一个图像处理相 ...
- ubuntu之路——day7.4 梯度爆炸和梯度消失、初始化权重、梯度的数值逼近和梯度检验
梯度爆炸和梯度消失: W[i] > 1:梯度爆炸(呈指数级增长) W[i] < 1:梯度消失(呈指数级衰减) *.注意此时的1指单位矩阵,W也是系数矩阵 初始化权重: np.random. ...
- Halide视觉神经网络优化
Halide视觉神经网络优化 概述 Halide是用C++作为宿主语言的一个图像处理相关的DSL(Domain Specified Language)语言,全称领域专用语言.主要的作用为在软硬层面上( ...
- 几种梯度下降方法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)
https://blog.csdn.net/u012328159/article/details/80252012 我们在训练神经网络模型时,最常用的就是梯度下降,这篇博客主要介绍下几种梯度下降的变种 ...
随机推荐
- Java 多线程线程池的工作流程
1.在创建了线程池后,等待提交过来的任务请求. 2.当调用execute()方法添加一个请求任务时,线程池就会做如下判断: 2.1 如果正在运行的线程数量小于corePoolSize,那么马上创建线程 ...
- 一文教你理解Kafka offset
日常开发中,相信大家都对 Kafka 有所耳闻,Kafka 作为一个分布式的流处理平台,一般用来存储和传输大量的消息数据.在 Kafka 中有三个重要概念,分别是 topic.partition 和 ...
- 卷积导向快速傅里叶变换(FFT/NTT)教程
1 Forewords 卷积,但不止卷积 - FFT 漫谈 先有 FT,再有 DFT,才有 FFT 时频转换是最初的用途 发现单位根优秀性质,James Cooley, John Tukey 发明现代 ...
- 手动实现Transformer
Transformer和BERT可谓是LLM的基础模型,彻底搞懂极其必要.Transformer最初设想是作为文本翻译模型使用的,而BERT模型构建使用了Transformer的部分组件,如果理解 ...
- 文心一言 VS 讯飞星火 VS chatgpt (106)-- 算法导论10.1 4题
四.用go语言,重写 ENQUEUE 和 DEQUEUE 的代码,使之能处理队列的下溢和上溢. 文心一言: 在 Go 语言中,我们可以使用切片来实现队列.下面是如何实现 ENQUEUE 和 DEQUE ...
- 8月Node服务的3场事故
有句话叫每一起严重事故的背后,必然有 29 次轻微事故和 300 起未遂先兆以及 1000 起事故隐患. 而我最近更是碰到了 3 起比较严重的线上事故,都是大意惹的祸. 一.数据库锁死 第一起事故发生 ...
- install_failed_uid_changed no root 没有root手机
主页 问题 Installation error: INSTALL_FAILED_UID_CHANGED no root Installation error: INSTALL_FAILED_UID_ ...
- 手写商用Java虚拟机HotSpot,疯狂磨砺技术中
在当前Java行业激烈竞争的形式下,唯有掌握技术,心中才不能慌.在多年前,我就开始苦练底层技术,但是眼看百遍也不如手过一遍,所以我打算把虚拟机的精华实现部分用手敲出来,这个过程注定不会轻松,但是心态不 ...
- liunx远程管理常用命令笔记
1,关机/重启 shutdown -r now : 立刻重启的命令 2,查看或配置网卡信息 2.1 网卡和 IP 地址 2.2 ifconfig 用了管道和grep 查找到 IP 地址 2.3 p ...
- PZthon
一道新式题目,python.exe的分析 这个时候没有思路不要紧,直接wp 先用特别的软件执行.exe程序,就是对.exe进行反编译 然后在反编译脚本的目录写就有了一个打包文件夹 在里面找到文件的.p ...