这是深度学习笔记第十篇,完整的笔记目录可以点击这里查看。
  
  梯度检验就是将解析法(也就是用导数公式求解梯度)计算的梯度与用数值法(也就是通过导数定义求解梯度)计算的梯度进行对比,以检验解析法公式的正确性。因为数值法是通过导数定义进行求解,当步长h设置的足够小时,就可以求得较为精确的梯度值,准确性较高,但是存在求解速度慢的缺点。相反,解析法直接按照给定的公式计算梯度就可以了,但是当问题比较复杂时,公式往往难以求出,而且容易出错。于是,就有了梯度检验这个过程了。

1. Use the centered formula

  在用数值法计算梯度的时候,使用第二个式子的计算结果会比第一个式子好。

2. Use relative error for the comparison

  在对比两种方法求解的梯度误差时,应计算相对误差。

  在实践中:

  • 相对误差>1e-2 通常意味着年计算的梯度可能是错误的
  • 1e-2>相对误差>1e-4 的结果不是很理想
  • 相对误差<1e-4 在有kinks(第5点会讲到kinks是指什么)时这个结果通常是可以的。但如果没有kinks(例如使用非线性tanh和softmax),则1e-4过高。
  • 1e-7及以下 则表明结果理想

3. Use double precision

  使用双精度可以确保计算结果更准确。

4. Stick around active range of floating point

  在计算或显示结果时,保持数值在浮点数的精度范围内,才能获得正确结果。如果结果非常小(eg. 1e-12),则考虑将其乘以一定的常数(eg. 1e12)。结果在1.0数量级上最佳。更多信息参考链接。

5. Kinks in the objective

  kinks是指目标函数的不可微部分,比如由ReLU(max(0,x))或SVM损失函数、Maxout神经元等函数引入。 在梯度检验过程中要注意的一个不准确的来源就是kinks。解决kinks问题的一个方法是在梯度检验时只使用少量的数据点(Use only few datapoints)进行计算。用很少的数据点进行计算也可以让你的梯度检验更快更有效。

6. Be careful with the step size h

  检验时h不一定是越小越好。因为当h非常小时,就有可能会遇到数值精度的问题。在刚开始进行检验的时候,取h为1e-4到1e-6之间进行测试将更容易得到正确的检验结果。更多信息参考维基百科。

7. Gradcheck during a “characteristic” mode of operation

  梯度检验是在参数空间中的一个特定(通常是随机的)单点执行的。即使梯度检验在那一点上成功,也不能立即确定梯度是否被正确地全局执行。

8. Don’t let the regularization overwhelm the data

  通常情况下,损失函数是数据损失和正则化损失的总和。需要注意的一个危险是正则化损失可能会压盖(overwhelm)数据损失,在这种情况下,梯度将主要来自正则化项(通常具有更简单的梯度表达式)。这可能会掩盖数据损失梯度的错误实现。因此,建议先关闭正则化并单独检查数据损失,然后再独立检查正则化项。执行后者的一种方法是hake代码以消除数据损失的贡献。另一种方法是增加正则化的强度,以确保其效果在梯度检查中不可忽略,这样就能检测到不正确的实现。

9. Remember to turn off dropout/augmentations

  在执行梯度检验时,请记住关闭网络中的任何不确定性影响,如丢失(dropout)、随机数据增强(random data augmentations)等。否则,在估计数值梯度时,这些明显会引入巨大的错误。关闭这些部分的缺点是不会对它们进行梯度检查(例如,可能是dropout没有正确地反向传播)。因此,更好的解决方案可能是在计算f(x+h)和f(x−h)之前,以及在计算解析梯度时,强制特定的随机种子(force a particular random seed)。

10. Check only few dimensions

  实践中,梯度的大小可以达到百万个参数。在这些情况下,只检验梯度的部分维度并假设其他尺寸是正确的才是可行的。要注意的一个问题是确保为每个单独的参数检查几个维度。在一些应用中,为了方便起见,人们把参数组合成一个大的参数向量。例如,在这些情况下,偏差(bias)只能从整个向量中占用少量参数,因此重要的是不要随机采样,而是要考虑到这一点,并检查所有参数是否获得正确的梯度。



*本博客翻译总结自CS231n课程作业网站,该网站需要翻墙才能访问。

深度学习笔记(十)—— 梯度检验[Gradient Checks]相关推荐

  1. 深度学习笔记(一)—— 计算梯度[Compute Gradient]

      这是深度学习笔记第一篇,完整的笔记目录可以点击这里查看.      有两种方法来计算梯度:一种是计算速度慢,近似的,但很简单的方法(数值梯度),另一种是计算速度快,精确的,但更容易出错的方法,需要 ...

  2. 深度学习笔记(十四)—— 超参数优化[Hyperparameter Optimization]

      这是深度学习笔记第十四篇,完整的笔记目录可以点击这里查看.      训练神经网络会涉及到许多超参数设置.神经网络中最常见的超参数包括: the initial learning rate lea ...

  3. 一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)

    <繁凡的深度学习笔记>第 2 章 回归问题与神经元模型(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net/ http ...

  4. 动手深度学习笔记(四十)7.4. 含并行连结的网络(GoogLeNet)

    动手深度学习笔记(四十)7.4. 含并行连结的网络(GoogLeNet) 7.4. 含并行连结的网络(GoogLeNet) 7.4.1. Inception块 7.4.2. GoogLeNet模型 7 ...

  5. 深度学习笔记(十一)—— 完整性检查[Sanity Checks]

      这是深度学习笔记第十一篇,完整的笔记目录可以点击这里查看.      在进行高运算量的网络优化之前,可以先考虑进行以下几个检验: 1. Look for correct loss at chanc ...

  6. 动手深度学习笔记(四十五)8.1. 序列模型

    动手深度学习笔记(四十五)8.1. 序列模型 8.1. 序列模型 8.1.1. 统计工具 8.1.1.1. 自回归模型 8.1.1.2. 马尔可夫模型 8.1.1.3. 因果关系 8.1.2. 训练 ...

  7. 下载量过百万的吴恩达机器学习和深度学习笔记更新了!(附PDF下载)

    今天,我把吴恩达机器学习和深度学习课程笔记都更新了,并提供下载,这两本笔记非常适合机器学习和深度学习入门.(作者:黄海广) 0.导语 我和同学将吴恩达老师机器学习和深度学习课程笔记做成了打印版,放在g ...

  8. 33万字!深度学习笔记在线版发布!

    吴恩达老师的深度学习课程(deeplearning.ai),可以说是深度学习入门的最热门课程,我和志愿者编写了这门课的笔记,并在 github 开源,为满足手机阅读的需要,我将笔记做成了在线版,可以在 ...

  9. 深度学习笔记其三:多层感知机和PYTORCH

    深度学习笔记其三:多层感知机和PYTORCH 1. 多层感知机 1.1 隐藏层 1.1.1 线性模型可能会出错 1.1.2 在网络中加入隐藏层 1.1.3 从线性到非线性 1.1.4 通用近似定理 1 ...

最新文章

  1. 零基础入门学习Python(25)-集合·
  2. 使用机器学习方法预测IBM员工流失数据模型
  3. 虚拟机中安装GHO文件配置说明
  4. MFC Radio Button 使用 分组 RadioButton 用法
  5. eclipse集成python插件
  6. 微信表情暂停使用,漂流瓶功能彻底再见!
  7. 高斯数据库-GaussDB
  8. java day07【Scanner类、Random类、ArrayList 类】
  9. %99的C语言初学者都会犯的错误——奇妙的数组(玄学)
  10. iphone手机投影到电脑屏幕上
  11. 完美运营版悬赏任务积分墙源码
  12. fgetc函数踩过的坑
  13. linux基因组文件,从基因组注释信息GFF文件中提取所有基因位置信息-AWK
  14. tflearn的VocabularyProcessor用法:建立中文词汇表和把文本转为词ID序列
  15. UI设计培训主要学习哪些内容
  16. PMP第13章知识点回顾,练习题
  17. Linux文件及日志内容
  18. [HTTPD] Linux(Apache)Httpd服务器安装,启动及httpd.conf配置详解
  19. 微信开网页mysql_PC浏览器模拟微信打开网页
  20. python爬虫和办公自动化培训班

热门文章

  1. linux中ftp修改绑定目录,Linux下添加FTP账号和服务器、增加密码和用户,更改FTP目录...
  2. New Online judge 1026 排序
  3. CEO、CTO、CFO、COO公司架构
  4. Java数据压缩算法——哈夫曼树
  5. NEC人工智能联合实验室成立
  6. python tensorflow验证码识别_TensorFlow 验证码识别
  7. 《自用》endnote 使用
  8. 达梦数据库,给用户赋予系统权限 Any 时报“授权者没有此授权权限”
  9. oled模块的驱动芯片和pcb图
  10. 《办公技巧》用PhotoShop为GIF图添加文字注释