梯度检查将确保我们的反向传播工作的预期。我们可以把我们的成本函数的导数近似为:

多θ的矩阵,我们可以近似导数ΘJ如下:

对于ϵ小值(ε)如ϵ= 10−4,保证了正确的数学。如果ϵ的值足够小,我们可以最终数值问题。

 

因此,我们只添加或减去ε的ΘJ矩阵。在matlab我们可以如下做:

 

epsilon = 1e-4;
for i = 1:n,
thetaPlus = theta;
thetaPlus(i) += epsilon;
thetaMinus = theta;
thetaMinus(i) -= epsilon;
gradApprox(i) = (J(thetaPlus) - J(thetaMinus))/(2*epsilon)
end;

 

我们以前看到如何计算deltavector。所以一旦我们计算我们的gradapprox向量,我们可以检查gradapprox≈deltavector。

 

一旦你有了一次你的反向传播算法是正确的,你不需要计算gradapprox再次。代码计算gradapprox会很慢。

 

posted on 2017-08-09 16:51  郑哲  阅读(490)  评论(0编辑  收藏  举报