2020-5-27 吴恩达-改善深层NN-w1 深度学习的实用层面(1.14 关于梯度检验实现的注意事项)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

本节将介绍一些关于如何在NN实施梯度检验的实用技巧和注意事项。

1.不要在训练中使用梯度检验,它只用于调试。

前面已经介绍过,梯度检验是对比 d θ a p p r o x [ i ] d\theta_{approx}[i] dθapprox[i] d θ d\theta dθ
计算所有 i i i值的 d θ a p p r o x [ i ] d\theta_{approx}[i] dθapprox[i] 是一个非常漫长的计算过程。
为了实施梯度下降,你必须使用反向传播backprop来计算 d θ d\theta dθ 和导数。

所以只有调试的时候,你才计算 d θ a p p r o x [ i ] d\theta_{approx}[i] dθapprox[i],来确认数值是否接近 d θ d\theta dθ
完成后,你会关闭梯度检验,梯度检验的每一个迭代过程都不执行它,因为它太慢了。

2.如果算法的梯度检验失败,要检查每一项,并试着找出bug。

如果 d θ a p p r o x [ i ] d\theta_{approx}[i] dθapprox[i] d θ [ i ] d\theta[i] dθ[i] 的值相差很大,我们要做的就是查找不同的 i i i值,看看是哪个导致值相差很大。

例如,某些层或者某一层的对应 θ \theta θ或者说 d θ d\theta dθ d b [ l ] db^{[l]} db[l]的值相差很大,但是 d W [ l ] dW^{[l]} dW[l]的各项非常接近。注意: θ \theta θ的各项与W和b的各项都是一一对应的。这时,你可能会发现,在计算参数b的导数 d b db db的过程中存在bug。

对于 d W dW dW的情况也是一样的。你可能会发现所有这些项目都来自于 d W dW dW或某层的 d W dW dW,这可能帮你定位bug的位置。

虽然有可能未必能够帮你准确定位bug的位置,但它可以帮助你估测需要在哪些地方追踪bug。

3.在实施梯度检验时,如果使用正则化,请注意正则项。

我们已经学习过使用L2正则的代价函数J公式
J ( θ ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) + λ 2 m ∑ i = 1 m ∣ ∣ W [ l ] ∣ ∣ F 2 J(\theta)=\frac 1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})+\frac{\lambda}{2m}\sum_{i=1}^m||W^{[l]}||_F^2 J(θ)=m1i=1mL(y^(i),y(i))+2mλi=1mW[l]F2

d θ d\theta dθ θ \theta θ关于函数J的梯度,包含正则项。一定不要忘记正则项。

4.梯度检验不能与dropout同时使用

dropout是化代价函数的一种方法。

每次迭代过程中,dropout会随机消除隐藏层单元的不同子集,难以计算dropout在梯度下降上的代价函数J。代价函数J被定义为对所有指数极大的节点子集求和,在任何迭代过程中,这些节点都有可能被消除,所以很难计算代价函数J。

使用dropout,你只是对成本函数做抽样,每次随机消除不同的子集,所以很难用梯度检验来双重检验dropout的计算。

建议关闭dropout,用梯度检验进行检查,确保在没有dropout的情况下,你的算法至少是正确的,然后再打开dropout。

5.随机初始化,可能需要反复训练网络,再运行梯度检验

这一点比较微妙,现实中几乎不会出现这种情况。

当随机初始化开始时候,w和b接近0(随机初始化的值要小,原因参见链接),梯度下降的实施是正确的。但是梯度下降运行一段时间后,w和b变得更大。

可能只有在w和b接近0时,反向传播backprop的实施才是正确的。但是当w和b变大时,它会变得越来越不准确。你需要做一件事,我不经常这么做,就是在随机初始化过程中,运行梯度检验,然后再训练网络,w和b会有一段时间远离0,如果随机初始化值比较小,反复训练网络之后,再重新运行梯度检验。

意思就是w和b变大,就检查一下梯度检验,没有问题,再训练。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值