概述
实现神经网络的反向传播算法含有许多细节,在编程实现中很容易出现一些微妙的bug,但往往这些bug并不会影响你的程序运行,而且你的损失函数看样子也在不断变小。但最终,你的程序得出的结果误差将会比那些无bug的程序高出一个数量级
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误(比如难以发现的bug),虽然在训练过程中,代价函数在变小,但最终的结果可能并不是最优解。
所以我们采用一种叫梯度检测的思想,它可以通过估计梯度(或导数)的近似值来估算我们的梯度下降算法算出的梯度(或导数)是否为正确的。
梯度检测的原理
梯度检测会估计梯度(或导数)值,然后和你程序计算出来的梯度(导数)的值
进行对比,以判断程序算出的梯度(导数)值是否正确
上图中,我们关注θ0点的函数的导数,即θ0点切线(图中蓝线)的斜率,现在我们在θ0−ε和θ0+ε两点连一条线(图中红线),我们发现红线的斜率和蓝线斜率很相似。
红线的斜率可以用以下式子表示: