专栏首页讲编程的高老师梯度检验在神经网络中的作用是什么?-ML Note 55

梯度检验在神经网络中的作用是什么?-ML Note 55

本文是吴恩达《机器学习》视频笔记第55篇,对应第5周第5个视频。

“Implementation note:——Gradient checking”

01

笔记

前面的小节中提过在前向网络、后向网络中计算导数的算法,但是反向传播算法因为实现起来比较复杂,所以会出现一些意想不到的bugs。

具体表现是,我们的代码看上去运行的很正常,而且代价函数也在不断的减小,但是因为不知道的bug的存在,使得我们得到的神经网络并不是最优解。

那有什么办法帮我们把这些不易觉察的bug给揪出来呢?一种思想就是本小节要讲的梯度检验。

基本思想

说来也简单,就是我们使用一种和反向网络不同的方法来计算(估算)梯度,然后通过这个梯度值用来验证我们神经网络计算值的代码是否正确。具体怎么做呢?

计算梯度的代码实现

先看一维的情况:这样的一个函数,我们怎么计算\theta点上的导数呢?

我们知道,这个点上的导数就是J(\Theta)曲线在这个点上的切线的斜率,如下图蓝色线。而我们可以用一个较小的值\epsilon在\theta点处的曲线点连接线的斜率值,用这个值来近似计算这个点的导数,如下图所示,下图下半部分的右边蓝色的被画了叉叉的公式是单侧差分,而我们用来近似导数的是双侧差分。

我们在Octave中用代码实现这个事的时候呢,就可以定义一个EPSILON的常量(比较小的),然后用下面这样一行代码:

就可以算出这一点的导数。

如果不是一维实数,而是一个向量用来计算偏导数呢?

其实在每一个分量上把其它量看出常数项就可以计算这个分量上的偏导数了,而且这样的计算和单一维度的实数的导数计算是类似的。如下图:

实现的代码看上去也不复杂,如下:

上图中是一个for循环,循环的次数n就是\theta向量的维度,循环体中就是实现了\theta向量中\theta_i分量的偏导数计算。即:

最后计算的结果放到gradApprox数组中。

接下来呢?

接下来我们要做的事情是什么呢?我们就用上面的方法计算出来的梯度gradApprox和我们从反向传播中计算出来的梯度DVec进行比较,看它们是不是很接近。

把DVec计算、gradApprox计算、DVec和gradApprox这三件事串起来,具体的实现方法就是:

  • 实现后向传播中DVec的计算,前面的小节中讲过。神经网络的反向传播算法—ML Note 52
  • 按照本小节上半部分讲的计算梯度的方法计算检验梯度gradApprox;
  • 比较gradApprox和DVec,通过调整DVec的计算方法保证DVec和gradApprox比较接近;
  • 屏蔽梯度检验的代码,用满足了刚刚梯度检验的后向传播代码进行神经网络的学习。

注意:在正式训练你的神经网络分类器的时候一定一定要关闭你的梯度检验函数,否则的话你的训练会非常非常的

因为梯度检验仅仅是用来检验我们反向传播代码是不是正确,一旦确定了方向传播代码的正确性,梯度检验在神经网络训练中出来消耗更多的计算资源就毫无用处了。就像一座大桥我们在验收的时候会检测它的安全性,但不会每次有汽车经过之前都检测它的安全性。

02

视频


关注公众号:

加作者好友,进入学习群:

本文分享自微信公众号 - 讲编程的高老师(codegao),作者:石头

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 吴恩达机器学习笔记22-多元梯度下降之学习率的选择

    “Linear Regression with multiple variables——Gradient descent in practice II: Lea...

    讲编程的高老师
  • 吴恩达机器学习笔记11-深入浅出梯度下降法

    “Linear regression with one variable——Gradient descent intiuition”

    讲编程的高老师
  • 吴恩达机器学习笔记20-多元梯度下降

    “Linear Algebra review(optional)——Gradient descent for multiple variables”

    讲编程的高老师
  • 每个人都应该知道的云计算网络安全

    许多企业主和管理人员都在怀疑所采用的云计算是否安全,能否免受网络攻击。就像其他任何类型的技术一样,云计算技术也是脆弱的。但是,其安全漏洞的风险很小。为了理解云计...

    静一
  • 谈谈Tomcat占用cpu高的问题

    测试环境tomcat进程占用CPU一直持续99%,但是通过jstack查看log,也没有任何线程死锁的情况。 此时通过$catalina_home/bin/s...

    2Simple
  • Android 代码设置开机自启动App的方法

    此处注册了此广播。用来监听。。2个 category 分别是 home 和 launcher 2个都可以。。2选1即可

    砸漏
  • 画廊视图Gallery

    幻灯片图片浏览器 1.布局 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res...

    欢醉
  • Android的App启动时白屏的问题解决办法

    以上就是对Android App启动白屏解决办法的实例详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    砸漏
  • Android开机启动

    要开机启动,首先肯定是想到广播,广播接收器接收到开机发出的广播,就执行onReceive(),在onReceive()可以写一些我们需要做的操作

    夜雨飘零
  • 教育系统APP(三)

    检验登录和注册模块。 请修改MainActivity和LoginActivity,欢迎界面调转入主界面后,自动跳转入登录界面,登录成功后,返回主界面,在主界面...

    达达前端

扫码关注云+社区

领取腾讯云代金券