博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
吴恩达机器学习神经网络篇——梯度检测
阅读量:3959 次
发布时间:2019-05-24

本文共 831 字,大约阅读时间需要 2 分钟。

梯度检测

目的

验证BP的正确性(代码能够正确计算出代价函数J的导数)。因为BP容易出现bug,此时神经网络的误差会比无bug高出一个量级,且此时无法知道是由bug引起的。

代码

% Numerical estimation of gradientsfor i = 1:n,	thetaPlus = theta;	thetaPlus(i) = thetaPlus(i) + EPSILON;	thetaMinus = theta;	thetaMinus(i) = thetaMinus(i) - EPSILON;	gradApprox = (J(thetaPlus) - J(thetaMinus))/(2*EPSILON);end;

步骤

  1. 通过BP计算 DVec
  2. 实现数值上的梯度检验,计算出gradApprox
  3. 验证 D V e c ≈ g r a d A p p r o x DVec \approx gradApprox DVecgradApprox,即 ∣ D V e c − g r a d A p p r o x ∣ < t o l |DVec-gradApprox|<tol DVecgradApprox<tol
  4. Turn off gradient checking. using backprop code for learning. 即一旦验证反向传播的实现是正确的,应在训练前关闭梯度检验/禁用梯度检验代码
    reason: 梯度检验的代码是一个计算量非常大非常慢的计算导数的程序,比BP慢得多。如果在每次梯度下降或者在每次代价函数的内循环里都运行一次梯度检测,程序会变得非常慢。

Note

实现反向传播或类似的梯度下降算法来计算复杂模型时,可以使用梯度检测来确保代码的正确性。


  1. D ( 1 ) , D ( 2 ) , D ( 3 ) D^{(1)},D^{(2)},D^{(3)} D(1),D(2),D(3) 的展开形式,详情见

转载地址:http://bumzi.baihongyu.com/

你可能感兴趣的文章
AJAX 基础
查看>>
JSON 基础
查看>>
J2EE监听器Listener接口大全[转]
查看>>
cookie、session、sessionid 与jsessionid[转]
查看>>
常见Oracle HINT的用法
查看>>
JAVA中各类CACHE机制实现的比较 [转]
查看>>
PL/SQL Developer技巧
查看>>
3-python之PyCharm如何新建项目
查看>>
15-python之while循环嵌套应用场景
查看>>
17-python之for循环
查看>>
18-python之while循环,for循环与else的配合
查看>>
19-python之字符串简单介绍
查看>>
20-python之切片详细介绍
查看>>
P24-c++类继承-01详细的例子演示继承的好处
查看>>
P8-c++对象和类-01默认构造函数详解
查看>>
P1-c++函数详解-01函数的默认参数
查看>>
P3-c++函数详解-03函数模板详细介绍
查看>>
P4-c++函数详解-04函数重载,函数模板和函数模板重载,编译器选择使用哪个函数版本?
查看>>
P5-c++内存模型和名称空间-01头文件相关
查看>>
P6-c++内存模型和名称空间-02存储连续性、作用域和链接性
查看>>