今天看Andrew Ng的视频,讲到了用梯度检测来验证反向传播算法的正确性,并参考了一些大牛的博客(nxf_rabbit75),加深了 对梯度检测的理解,然后趁热打铁,总结一下
一、梯度检测概述
实现神经网络的反向传播算法含有许多细节,在编程实现过程中很容易出现一些微妙的bug,但往往这些bug并不会影响程序的运行,而且你的损失函数看起来也在不断的变小。但最终你的程序得出的结果误差将会比那些无bug的程序高出一个数量级。
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降法时可能会存在一些不易察觉的错误(比如难以发现的bug),虽然在训练过程中代价函数在变小,但最终的结果可能并不是最优解。所以我们采用了一种叫梯度检测的思想,他可以通过估计梯度(或导数)的近似值来估算我们的梯度下降法算出的梯度(或导数)是否是正确的。
二、梯度检测原理
梯度检测会估计梯度(或导数)值,然后和程序计算出的梯度(或导数)值进行比较,以判断程序计算出的梯度(或导数)值是否正确。
考虑我们想要最小化以 θ 为自变量的目标函数 J(θ)(θ 可以为标量和可以为矢量,在 Numpy 的编程环境下,处理是一样的),迭