梯度检验 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迭代几轮至比较小的数值

猜你喜欢

转载自www.cnblogs.com/ylxn/p/12005047.html
今日推荐