【神经网络】梯度检测

在神经网络中,使用前向或者反向传播计算后,再使用梯度下降去寻找代价函数最小时 θ \theta θ的取值是一个可行的方法,但是它很容易出错:因为在这个算法中含有海量的细节,容易产生微小而又难以察觉的bug。即便是存在bug,梯度下降计算出来的 J ( θ ) J(\theta) J(θ)还是会照常迭代下降,但是得出来的结果的误差将会比正确的情况高出一个量级。因此我们需要使用梯度检验的方法赖解决这种问题,只要需要使用类似梯度下降或者反向传播的算法都可以使用这种方法,这种方法能够确保你的前向\反向传播完全正确。

首先我们以下图为例子,其中有一个点 θ \theta θ,而 ϵ \epsilon ϵ是一个很小的数,类似于微积分中的微小增量,一般可以将 ϵ \epsilon ϵ取作 1 0 − 4 10^{-4} 104
在这里插入图片描述
而另外两个点分别为 ( θ − ϵ , J ( θ − ϵ ) ) (\theta-\epsilon , J(\theta-\epsilon )) (θϵ,J(θϵ)) ( θ + ϵ , J ( θ + ϵ ) ) (\theta+\epsilon , J(\theta+\epsilon )) (θ+ϵ,J(θ+ϵ)),这和导数十分像不是吗?那当然我们可以得出如下的式子 δ δ θ J ( θ ) ≈ g r a d A p p r o x = J ( θ + ϵ ) − J ( θ − ϵ ) 2 ϵ \frac{\delta }{\delta \theta } J(\theta )\approx gradApprox= \frac{J(\theta+\epsilon )-J(\theta-\epsilon )}{2\epsilon } δθδJ(θ)gradApprox=2ϵJ(θ+ϵ)J(θϵ)

接下来我们呢考虑更加广泛的情况比如假设 θ \theta θ是一个n维向量,也就是 θ ∈ R n , θ = [ θ 1 , θ 2 , θ 3 , . . . , θ n ] \theta \in R^n,\theta=[\theta_1,\theta_2,\theta_3,...,\theta_n] θRnθ=[θ1,θ2,θ3,...,θn],那么我们可以使用相同的办法得出对应偏导数的大约值
在这里插入图片描述
接下来我们需要使用到反向传播所计算出来的导数向量 D   V e c = [ D ( 1 ) , D ( 2 ) , D ( 3 ) . . . D ( n ) ] D\:Vec=[D^{(1)},D^{(2)},D^{(3)}...D^{(n)}] DVec=[D(1),D(2),D(3)...D(n)],检查 g r a d A p p r o x ≈ D   V e c gradApprox\approx D\:Vec gradApproxDVec,如果成立的话,则可以认为反向传播是正确的,把DVex用于梯度下降则可以得出较好的结果

主要的步骤如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值