Deep Leaning 学习笔记之改善神经网络的超参数(1.3)——梯度检验

1 梯度检验

1.1 介绍

梯度检验是用来检查反向传播中,梯度下降的方向是否正确,可以帮助你找出反向传播代码中的错误

1.2 方法

采用双侧梯度检验
例如 g ( θ ) = f ( θ ) = θ 3 g(θ) = f(θ)=θ^3 g(θ)=f(θ)=θ3
检验: f ( θ + E ) − f ( θ − E ) 2 E ≈ g ( θ ) \frac{f(θ+E)-f(θ-E)}{2E} ≈ g(θ) 2Ef(θ+E)f(θE)g(θ)

1.3 使用方法

将 各 种 参 数 : W 1 , b 1 , W 2 , b 2 , W 3 , b 3 . . . . . . W L , b L 转 换 为 向 量 θ , 首 尾 相 接 将各种参数:W^1,b^1,W^2,b^2,W^3,b^3......WL,bL转换为向量θ,首尾相接 W1,b1,W2,b2,W3,b3......WL,bLθ
将 各 种 参 数 : d W 1 , d b 1 , d W 2 , d b 2 , d W 3 , d b 3 . . . . . . d W L , d b L 转 换 为 向 量 θ , 首 尾 相 接 将各种参数:dW^1,db^1,dW^2,db^2,dW^3,db^3......dW^L,db^L转换为向量θ,首尾相接 dW1,db1,dW2,db2,dW3,db3......dWL,dbLθ
则J(θ)= J(θ1,θ2,θ3…)
Deep Leaning 学习笔记之改善神经网络的超参数(1.3)——梯度检验_第1张图片

1.4 使用建议

Deep Leaning 学习笔记之改善神经网络的超参数(1.3)——梯度检验_第2张图片

  • 不要在训练的时候用,只在调试的时候用
  • 如果检查出来,dθ approx 和 dθ的值不同,具体区分一下看是在 i的值取值多少的时候导致,从而检查
  • 记住要正则化
  • 不要和随机失活一起用。你可以把keep-prob和dropout设为1.0 然后打开dropout 希望我对于dropout的使用是正确的
  • 还有一些别的事情可以做 比如修正那些舍弃节点的模式 并且使用梯度检验来检查它们的模式是否正确 但实际上我通常不这样做 所以我的建议是 关掉随机失活(dropout) 使用梯度检验来检查你的算法 在没有dropout的情况下至少是正确的 然后再打开dropout 最后的这个内容有些微妙 虽然很少发生 但并不是没有可能 你对于梯度下降的使用是正确的 同时w和b在随机初始化的时候 是很接近0的数 但随着梯度下降的进行 w和b有所增大 也许你的反向传播算法 在w和b接近0的时候是正确的 但是当w和b变大的时候 算法精确度有所下降 所以虽然我不经常使用它 但是你可以尝试的一个方法是 在随机初始化的时候 运行梯度检验 然后训练网络一段时间 那么w和b 将会在0附近摇摆一段时间 即很小的随机初始值 在进行几次训练的迭代后 再运行梯度检验

你可能感兴趣的:(DeepLearning)