1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai
1.12 梯度的数值逼近 Numerical approximation of gradients
在实施反向传播backprop时,有一个测试叫做梯度检验,它的作用是确保backprop正确实施。因为有时候你虽然写下了反向传播方程式,却不能100%确定执行backprop的所有细节都是正确的。
梯度检验就是为了验证我们的梯度下降算法是否正确,当验证正确后,进行训练时
记得关闭它!
为了逐渐实现梯度检验,本节课我们首先说说如何计算梯度的数值逼近。下节课,我们将讨论如何在backprop中执行梯度检验,以确保backprop正确实施。
观察上图。
这是
f
(
θ
)
=
θ
3
f(\theta)=\theta^3
f(θ)=θ3函数。横轴上有3个坐标,
θ
−
ϵ
=
0.99
\theta-\epsilon=0.99
θ−ϵ=0.99,
θ
=
1
\theta=1
θ=1和
θ
+
ϵ
=
1.01
\theta+\epsilon=1.01
θ+ϵ=1.01,
ϵ
=
0.01
\epsilon=0.01
ϵ=0.01。
1\ 双边误差
按照上图,更准确的梯度预估,我们会利用图中大三角形的高和宽(蓝色线)的比值,这样更接近于的 θ \theta θ导数。(逼近误差小)
这个大三角形同时考虑(包含)了两个绿色小三角形。所以我们得到的不是一个单边公差(one sided difference,即
θ
\theta
θ 到
θ
+
ϵ
\theta+\epsilon
θ+ϵ 之间误差)而是一个双边公差(即
θ
−
ϵ
\theta - \epsilon
θ−ϵ 到
θ
+
ϵ
\theta+\epsilon
θ+ϵ 之间误差)。
观察上图中绿色三角形
- 高, f ( θ + ϵ ) − f ( θ − ϵ ) f(\theta+\epsilon) - f(\theta-\epsilon) f(θ+ϵ)−f(θ−ϵ)
- 宽, 2 ϵ 2\epsilon 2ϵ
因为 f ( θ ) = θ 3 f(\theta)=\theta^3 f(θ)=θ3,所以高宽比值 f ( θ + ϵ ) − f ( θ − ϵ ) 2 ϵ = ( 1.01 ) 3 − ( 0.99 ) 3 2 ∗ 0.01 = 3.0001 \frac {f(\theta+\epsilon) - f(\theta-\epsilon)}{2\epsilon}=\frac{(1.01)^3-(0.99)^3}{2*0.01}=3.0001 2ϵf(θ+ϵ)−f(θ−ϵ)=2∗0.01(1.01)3−(0.99)3=3.0001
而 f ( θ ) f(\theta) f(θ)导数 g ( θ ) = 3 θ 2 g(\theta)=3\theta^2 g(θ)=3θ2,当 θ = 1 \theta=1 θ=1时候, g ( θ ) = 3 g(\theta)=3 g(θ)=3。
可以发现高宽比值 f ( θ + ϵ ) − f ( θ − ϵ ) 2 ϵ \frac {f(\theta+\epsilon) - f(\theta-\epsilon)}{2\epsilon} 2ϵf(θ+ϵ)−f(θ−ϵ)非常接近导数 g ( θ ) g(\theta) g(θ),逼近误差approximation error为0.0001。
2\ 单边误差
我们可以看一下,如果只用 f ( θ + ϵ ) f(\theta+\epsilon) f(θ+ϵ)和 f ( θ ) f(\theta) f(θ)之间的小三角形的高宽比来预估 θ \theta θ导数, f ( θ + ϵ ) − f ( θ ) ϵ = ( 1.01 ) 3 − ( 1 ) 3 0.01 = 3.0301 \frac {f(\theta+\epsilon) - f(\theta)}{\epsilon}=\frac{(1.01)^3-(1)^3}{0.01}=3.0301 ϵf(θ+ϵ)−f(θ)=0.01(1.01)3−(1)3=3.0301。
此时逼近误差为0.0301,比双边误差要大,证明使用双边误差的方法更逼近导数。
在微积分中,
f
(
θ
)
=
θ
3
f(\theta)=\theta^3
f(θ)=θ3导数的正式定义是
f
′
(
θ
)
=
lim
ϵ
→
0
f
(
θ
+
ϵ
)
−
f
(
θ
−
ϵ
)
2
ϵ
f'(\theta)=\lim_{\epsilon \to 0} \frac {f(\theta+\epsilon) - f(\theta-\epsilon)}{2\epsilon}
f′(θ)=ϵ→0lim2ϵf(θ+ϵ)−f(θ−ϵ)
对于一个非零的 ϵ \epsilon ϵ,它的逼近误差可以写成 O ( ϵ 2 ) O(\epsilon^2) O(ϵ2),其实是一些常量乘以 ϵ 2 \epsilon^2 ϵ2,常量有时是1。
如果使用逼近误差 O ( ϵ ) O(\epsilon) O(ϵ),当 ϵ < 1 \epsilon<1 ϵ<1时候 , ϵ \epsilon ϵ比 ϵ 2 \epsilon^2 ϵ2大很多。
在执行梯度检验时,我们使用双边误差,即 f ( θ + ϵ ) − f ( θ − ϵ ) 2 ϵ \frac {f(\theta+\epsilon) - f(\theta-\epsilon)}{2\epsilon} 2ϵf(θ+ϵ)−f(θ−ϵ),而不使用单边误差,因为它不够准确。
本节讲了如何使用双边误差来判断函数 g ( θ ) g(\theta) g(θ)是否正确实现了函数f的偏导,下节我们可以使用这个方法来检验反向传播是否得以正确实施。