当我们实现神经网络时,反向传播的过程中更容易出错。因此,如果我们能够实现一些使我们能够轻松调试神经网络的工具,那将是多么酷。在这里,我们将看到“梯度检查”的方法。简而言之,该方法使用数值方法近似梯度。如果实际的梯度接近计算得出的梯度,则可以正确实施反向传播。还有很多其他方法,让我们一起看看。有时,可以看到网络在几个epoch内陷入僵局,然后继续快速收敛。我们还将看到如何解决这个问题。让我们开始吧!
梯度的数值近似法
为了使我们能够构建“梯度检查”函数,我们首先需要了解如何在数值上近似梯度。我发现用一个例子很容易解释此方法,所以让我们采用一个函数f(θ)=θ³。让我们看一下这个函数的图像。
您可能已经猜到了。让我们像往常一样从θ的某个值开始,现在我们说θ=1。我们要做的是不仅将θ推到右边以获得(θ+ ϵ),还将θ推到左边而得到(θ-ϵ)。出于示例的目的,我们仅表示ϵ = 0.01。现在我们将其可视化。忽略该图中的比例。
现在我们说(θ-ϵ)的点称为B,而(θ+ ϵ)的点称为C。在此图中,我们之前使用的是三角形DEF,并计算出其梯度。在这种情况下是EF / DE。事实证明,如果您使用(θ+ ϵ)和(θ-ϵ)中的一个较大的三角形,则可以得到更好的梯度估计,我的意思是用下图中的红色表示此处的三角形。
有一些论文介绍了为什么使用这个更大的三角形可以使我们更好地近似θ处的梯度,但是在本文中我将不做详细介绍。简单说明一下,您现在有两个较小的三角形,在这里您可以通过使用更大的三角形来加以考虑。
我们刚刚看到了为什么您应该改用较大的三角形,完成后让我们开始研究该三角形的数学方法。我们可以简单地表示。
H = f(θ-ϵ) and,
F = f(θ+ϵ)
根据这两个结果,您可以说较大三角形的高度(h)为
h = f(θ+ϵ)-f(θ-ϵ)
使用类似的方法,您还可以轻松地计算出此三角形的宽度(w)为
w = 2 ⋅ ϵ