在实施backprop的时候,有一个测试叫做梯度检验,它的作用是确保backprop正确实施。因为有时候,虽然写下了这些方程式,却不能100%确定,执行backprop的所有细节都是正确的。为了逐渐实现梯度检验,我们首先说说如何对计算梯度做数值逼近。
我们首先画出函数f,标记为
f
(
θ
)
f(\theta)
f(θ),
f
(
θ
)
=
θ
3
f(\theta)=\theta^3
f(θ)=θ3,假设
θ
=
1
\theta=1
θ=1。不增大
θ
\theta
θ的值,而是在
θ
\theta
θ右侧设置一个
θ
+
ε
\theta+\varepsilon
θ+ε,在
θ
\theta
θ左侧设置一个
θ
−
ε
\theta - \varepsilon
θ−ε,因此
θ
=
1
\theta=1
θ=1,
θ
+
ε
=
1.01
\theta+\varepsilon=1.01
θ+ε=1.01,
θ
−
ε
=
0.99
\theta - \varepsilon=0.99
θ−ε=0.99。
在函数图中画一个三角形,计算高和宽的比值,就是更准确的坡度预估。
选择f函数在
θ
−
ε
\theta-\varepsilon
θ−ε上的这个点,用大三角形的高比上宽,较大三角形的高宽比值更接近于
θ
\theta
θ的导数,把右上角的小三角形下移,好像有了两个三角形,右上角一个,左下角一个。我们通过这个绿色大三角形同时考虑了这两个小三角形,所以我们得到的不是一个单边公差而是一个双边公差。
写一下计算公式, θ + ε \theta+\varepsilon θ+ε这个点对应的函数值为 f ( θ + ε ) f(\theta+\varepsilon) f(θ+ε), θ − ε \theta-\varepsilon θ−ε这个点对应的函数值为 f ( θ − ε ) f(\theta-\varepsilon) f(θ−ε),这个三角形的高度是 f ( θ + ε ) − f ( θ − ε ) f(\theta+\varepsilon)-f(\theta-\varepsilon) f(θ+ε)−f(θ−ε),三角形的宽度为 2 ε 2\varepsilon 2ε,高宽比值为 f ( θ + ε ) − f ( θ − ε ) 2 ε \frac{f(\theta+\varepsilon)-f(\theta-\varepsilon)}{2\varepsilon} 2εf(θ+ε)−f(θ−ε)它的期望值接近 g ( θ ) g(\theta) g(θ)。
传入参数值 f ( θ ) = θ 3 f(\theta)=\theta^3 f(θ)=θ3, θ + ε = 1.01 \theta+\varepsilon=1.01 θ+ε=1.01, 1.0 1 3 − 0.9 9 3 2 ∗ 0.01 = 3.0001 \frac{1.01^3-0.99^3}{2*0.01}=3.0001 2∗0.011.013−0.993=3.0001,而 g ( θ ) = 3 θ 2 = 3 g(\theta)=3\theta^2=3 g(θ)=3θ2=3,所以这两个 g ( θ ) g(\theta) g(θ)值非常接近,逼近误差为0.0001.
只考虑单边公差,即从 θ \theta θ到 θ + ε \theta+\varepsilon θ+ε之间的误差, g ( θ ) g(\theta) g(θ)的值为3.0301,逼近误差是0.03而不是0.0001,所以使用双边误差的方法更逼近导数,其结果接近3。在梯度检验和反向传播中使用该方法时,最终它与运行两次单边公差的速度一样。
导数的官方定义是针对值很小的 ε \varepsilon ε: f ′ ( θ ) = lim ε → 0 f ( θ + ε ) − f ( θ − ε ) 2 ε f'(\theta)=\lim_{\varepsilon \rightarrow 0}\frac{f(\theta+\varepsilon)-f(\theta-\varepsilon)}{2\varepsilon} f′(θ)=ε→0lim2εf(θ+ε)−f(θ−ε)对于一个非零的 ε \varepsilon ε,它的逼近误差可以写成 O ( ε 2 ) O(\varepsilon^2) O(ε2), ε \varepsilon ε的值非常小。如果 ε = 0.01 \varepsilon=0.01 ε=0.01, ε 2 = 0.0001 \varepsilon^2=0.0001 ε2=0.0001,大写符号O的含义是指逼近误差其实是一些常量乘于 ε 2 \varepsilon^2 ε2,但它的确是很准确的逼近误差,所以大写O的常量有时是1,。
然而如果我们用另外一个公式 f ( θ + ε ) − f ( θ ) ε \frac{f(\theta+\varepsilon)-f(\theta)}{\varepsilon} εf(θ+ε)−f(θ)逼近误差就是 ε \varepsilon ε,当 ε \varepsilon ε小于1时,实际上 ε \varepsilon ε比 ε 2 \varepsilon^2 ε2大很多,所以这个公式的近似值没有上面公式准确。所以在执行梯度检验时,我们使用双边误差,即 f ( θ + ε ) − f ( θ − ε ) 2 ε \frac{f(\theta+\varepsilon)-f(\theta-\varepsilon)}{2\varepsilon} 2εf(θ+ε)−f(θ−ε)而不使用单边公差,因为它不够准确。