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

一、Gradient check

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

1、参数拼接

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

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

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

 

J($\theta$)= J($\theta$1, $\theta$2, $\theta$3, $\theta$4, ...)

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

for each i:

  $$d \theta_{approx}^{i} = \frac{J(\theta1, \theta2, ..., \theta[i]+\varepsilon,... ) - J(\theta1, \theta2, ... \theta[i]-\varepsilon) }{2\varepsilon} \\ \approx d\theta[i]=\frac{\partial J}{\partial \theta}$$

 

检验$$\frac{\left \| d\theta_{approx} -d\theta\right \|_{2}}{\left \| d\theta_{approx} \right \|_{2} + \left\|d\theta \right \|_{2}}$$

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

 

3、检查的点

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

 

二、Momentum

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

  • $Vd\omega =\beta Vd\omega+(1-\beta )d\omega$
  • $Vdb =\beta Vdb+(1-\beta )db$
  • $\omega =\omega - \alpha Vd\omega$
  • $b = b - \alpha Vdb$

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

 

三、Exponentially Weighted Averages

$$ V_{t}=\beta V_{t-1} + (1-\beta )\theta_{t} $$

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

 

四、bias correction

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

令$V_{t}=\frac{V_{t}}{1-\beta^{t}}$

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

posted @ 2019-12-08 12:21  ylxn  阅读(628)  评论(0编辑  收藏  举报