• 梯度检验 Gradient check,bias correction, Exponentially Weighted Averages


    一、Gradient check

    在深度学习里面,我们算完了梯度可以对其进行检验求导是否正确

    1、参数拼接

    在深度网络里面有很多参数,$w^{1}$, $b^{1}$, $w^{2}$, $b^{2}$.... $w^{l}$, $b^{l}$,把他们拼接成一个向量$ heta$。其中l代表第几个隐藏层。

    因此J($w^{1}$, $b^{1}$,..., $w^{l}$, $b^{l}$) = J($ heta$)

    把$dw^{1}$, $db^{1}$, ..., $dw^{l}$,  $db^{l}$ 同样用一个大的向量表示 d$ heta$

    J($ heta$)= J($ heta$1, $ heta$2, $ heta$3, $ heta$4, ...)

    2、那么如何验证 d$ heta$ 是否是 J的梯度呢?

    for each i:

      $$d heta_{approx}^{i} = frac{J( heta1, heta2, ..., heta[i]+varepsilon,... ) - J( heta1, heta2, ... heta[i]-varepsilon) }{2varepsilon} \ approx d heta[i]=frac{partial J}{partial heta}$$

    检验$$frac{left | d heta_{approx} -d heta ight |_{2}}{left | d heta_{approx} ight |_{2} + left|d heta ight |_{2}}$$

    令$varepsilon=10^{-7}$,如果上式约等于$10^{-7}$ 则梯度的误差很小, 如果小于$10^{-5}$次方则可能有问题。

    3、检查的点

    • 如果根据第2个检查到计算的梯度是有问题的,如果db相差比较大,但是$dw$相差不大,则问题很可能出现在db。因此需要检查下db的计算方法。对于$dw$反之亦然
    • 先关闭dropout,再打开dropout
    • 先让w,b迭代几轮至比较小的数值

    二、Momentum

    在t轮迭代中,令$domega$、$db$为mimi batch中的梯度。则

    • $Vdomega =eta Vdomega+(1-eta )domega$
    • $Vdb =eta Vdb+(1-eta )db$
    • $omega =omega - alpha Vdomega$
    • $b = b - alpha Vdb$

     也可以理解为这使当前更新的梯度不要距离历史的梯度太远

    三、Exponentially Weighted Averages

    $$ V_{t}=eta V_{t-1} + (1-eta ) heta_{t} $$

    作用跟Momentum差不多,整体上是使得当前更新的梯度不要距离历史的梯度太远,因此利用更新梯度的时候会比较稳定

    四、bias correction

    在指数平均中,当 $t=0$并且$eta$比较小的时候,$V_{0}$是一个比较小的值,但是我们现在想修正这一情况,即当迭代次数t比较小时,V与本身偏差不太大。

    令$V_{t}=frac{V_{t}}{1-eta^{t}}$

    随着t的增加,分母逐渐变大趋向于1,因此$V_{t}$逐渐趋向于本身

  • 相关阅读:
    Java ,python面向对象的继承及其区别
    谈谈我理解的敏捷开发
    Centos7 升级python3,解决升级后不兼容问题
    Django + Uwsgi + Nginx 的生产环境部署
    理解Python协程:从yield/send到yield from再到async/await
    【转】Python 数据库连接池
    为何GET只发一次TCP连接,POST发两次TCP连接
    Python简单密码加密程序,加盐(salt)md5
    spring学习(三) ———— spring事务操作
    spring学习(二) ———— AOP之AspectJ框架的使用
  • 原文地址:https://www.cnblogs.com/ylxn/p/12005047.html
Copyright © 2020-2023  润新知