梯度校验(Gradient Descent)
通常,直接使用BP算法可能会出现许多 bug,因此,需要使用称为**梯度校验(Gradient Checking)**的手段。我们知道, J(Θ) 在 Θ 处的倒数 dΘdJ(Θ) 为该点的斜率,如下图蓝色线段所示:

我们可以在点 Θ 附近的小区间 [Θ−ϵ,Θ+ϵ](ϵ足够小),构造下图所示的红色直角三角形:

则斜边的斜率可以近似等于蓝色线段的斜率,亦即,可以通过求取红色斜边的斜率来近似 dΘdJ(Θ) :
dΘdJ(Θ)≈2ϵJ(Θ+ϵ)−J(Θ−ϵ)
通常, ϵ 取较小值,如 0.01 。
包含有梯度校验的 BP 算法如下:
-
首先由反向传播算法获得展开的 DVec :
DVec=[D(1),D(2),D(3),...D(n)]
-
计算梯度近似 grad Approx , θj 是 Θj 的展开:
∂θj∂J(θ)≈2ϵJ(θ1,…,θj+ϵ,…,θn)−J(θ1,…,θj−ϵ,…,θn),for j=1 to n gradApprox=[∂θ1∂J(θ),∂θ2∂J(θ),...,∂θn∂J(θ)]
-
比较 gradApprox 与 DVec 的相似程度(比如可以用欧氏距离):
gradApprox≈DVec
如果上式成立,则证明网络中BP算法有效,此时关闭梯度校验算法(因为梯度的近似计算效率很慢),继续网络的训练过程。