本文重点:
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。如何判断神经网络的反向传播或者梯度下降算法运行正确,我们可以使用梯度检验算法,这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们所要求的。
单变量的代价函数
对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点,然后计算两个点的平均值用以估计梯度。我们计算出在 θ-ε 处和 θ+ ε的代价值J(θ)(ε是一个非常小的值,通常选取 0.001),然后求两个代价的平均,用以估计在θ处的代价值的导数。
此时的神经网络的代价函数如上所示,θ0处的导数,也就是上图中的蓝色直线的斜率,我们可以看到蓝色直线和红色直线的斜率很相似。所以我们可以认为J(θ)在θ处的导数几乎可以使用红色直线的斜率表示,红色直线的斜率为:
用这种方式估计出来导数之后,然后将起和反向传播算法求出的导数比较,如果基本相等,就表示反向传播算法运行正常。
多变量的代价函数
前面我们考虑了θ是一个实数的情况θ∈R,更普通的情况是θ是一个向量参数θ∈Rn