1 梯度方向对应函数增长最快方向
二维梯度定义
grad
f
(
x
0
,
y
0
)
=
∇
f
(
x
0
,
y
0
)
=
f
x
(
x
0
,
y
0
)
i
+
f
y
(
x
0
,
y
0
)
j
\operatorname{grad} f\left(x_{0}, y_{0}\right)=\nabla f\left(x_{0}, y_{0}\right)=f_{x}\left(x_{0}, y_{0}\right) \boldsymbol{i}+f_{y}\left(x_{0}, y_{0}\right) \boldsymbol{j}
gradf(x0,y0)=∇f(x0,y0)=fx(x0,y0)i+fy(x0,y0)j 是一个向量。
其方向如下图所示:其方向与势场(图中闭合曲线为等势线,也是曲面在平面上的投影)的法向量相同。
其中
∇
=
∂
∂
x
i
+
∂
∂
y
j
\nabla=\frac{\partial}{\partial x} \boldsymbol{i}+\frac{\partial}{\partial y} \boldsymbol{j}
∇=∂x∂i+∂y∂j 是向量微分算子或 Nobla 算子。
举一个特例 来验证一下:
f
(
x
,
y
)
=
z
=
x
2
+
y
2
f(x, y)=z=\sqrt{x^{2}+y^{2}}
f(x,y)=z=x2+y2
画出旋转锥面 3d 图(z>=0,故实际图是 xOy 平面上半部分)
画出 f(x,y)=1 和 f(x,y)=4 在 xOy 平面上的投影是两个同心圆
求出梯度
∇
f
(
x
,
y
)
=
x
x
2
+
y
2
i
+
y
x
2
+
y
2
j
\nabla f(x, y)=\frac{x}{\sqrt{x^{2}+y^{2}}} \boldsymbol{i}+\frac{y}{\sqrt{x^{2}+y^{2}}} \boldsymbol{j}
∇f(x,y)=x2+y2xi+x2+y2yj
∇
f
(
2
2
,
2
2
)
=
2
2
i
+
2
2
j
\nabla f\left(\frac{\sqrt{2}}{2}, \frac{\sqrt{2}}{2}\right)=\frac{\sqrt{2}}{2} \boldsymbol{i}+\frac{\sqrt{2}}{2} \boldsymbol{j}
∇f(22,22)=22i+22j
∇
f
(
−
2
2
,
2
2
)
=
−
2
2
i
+
2
2
j
\nabla f\left(-\frac{\sqrt{2}}{2}, \frac{\sqrt{2}}{2}\right)=-\frac{\sqrt{2}}{2} \boldsymbol{i}+\frac{\sqrt{2}}{2} \boldsymbol{j}
∇f(−22,22)=−22i+22j
从投影图上可以看出梯度方向(红色箭头所示)是函数在该点增长最快方向。
同理
f
(
x
,
y
)
=
z
=
−
x
2
+
y
2
f(x, y)=z=-\sqrt{x^{2}+y^{2}}
f(x,y)=z=−x2+y2 投影与上一致,但是梯度方向相反。
2 梯度计算算法
由 1 可知梯度方向是函数投影的方向
定义如下图函数
f
(
x
)
=
x
2
f(x)=x^{2}
f(x)=x2 求出 f(1)处下降梯度
x
1
=
x
0
−
α
∇
f
(
x
0
)
x_{1}=x_{0}-\alpha \nabla f\left(x_{0}\right)
x1=x0−α∇f(x0)
f
(
x
1
)
=
f
(
x
0
−
α
∇
f
(
x
0
)
)
f\left(x_{1}\right)=f\left(x_{0}-\alpha \nabla f\left(x_{0}\right)\right)
f(x1)=f(x0−α∇f(x0))
ε
=
f
(
x
1
)
−
f
(
x
0
)
=
f
(
x
0
−
α
∇
f
(
x
0
)
)
−
f
(
x
0
)
\varepsilon=f\left(x_{1}\right)-f\left(x_{0}\right)=f\left(x_{0}-\alpha \nabla f\left(x_{0}\right)\right)-f\left(x_{0}\right)
ε=f(x1)−f(x0)=f(x0−α∇f(x0))−f(x0)
−
∇
f
(
x
)
=
−
∇
x
2
=
−
2
x
-\nabla f(x)=-\nabla x^{2}=-2 x
−∇f(x)=−∇x2=−2x
−
∇
f
(
1
)
=
−
2
-\nabla f(1)=-2
−∇f(1)=−2
其大小方向如上图所示
从图中可看出梯度下降法只有方向和模长变化趋势是可靠的,其模长大小(步长)并不可靠(跳过了最低点)这也是梯度下降法要加入学习速率的原因。
同理,二元函数的计算
x
1
=
x
0
−
α
∇
f
(
x
0
,
0
)
,
y
1
=
y
0
−
α
∇
f
(
0
,
y
0
)
x_{1}=x_{0}-\alpha \nabla f\left(x_{0}, 0\right), y_{1}=y_{0}-\alpha \nabla f\left(0, y_{0}\right)
x1=x0−α∇f(x0,0),y1=y0−α∇f(0,y0)
f
(
x
1
,
y
1
)
=
f
(
x
0
−
α
∇
f
(
x
0
,
0
)
,
y
0
−
α
∇
f
(
0
,
y
0
)
)
f\left(x_{1}, y_{1}\right)=f\left(x_{0}-\alpha \nabla f\left(x_{0}, 0\right), y_{0}-\alpha \nabla f\left(0, y_{0}\right)\right)
f(x1,y1)=f(x0−α∇f(x0,0),y0−α∇f(0,y0))
ε
=
f
(
x
1
,
y
1
)
−
f
(
x
0
,
y
0
)
=
f
(
x
0
−
α
∇
f
(
x
0
,
0
)
,
y
0
−
α
∇
f
(
0
,
y
0
)
)
−
f
(
x
0
,
y
0
)
\varepsilon=f\left(x_{1}, y_{1}\right)-f\left(x_{0}, y_{0}\right)=f\left(x_{0}-\alpha \nabla f\left(x_{0}, 0\right), y_{0}-\alpha \nabla f\left(0, y_{0}\right)\right)-f\left(x_{0}, y_{0}\right)
ε=f(x1,y1)−f(x0,y0)=f(x0−α∇f(x0,0),y0−α∇f(0,y0))−f(x0,y0)
总结:
梯度下降法与二分法处理方式类似,梯度下降法有如下优势:
1.一开始就知道下降方向,更适合作递归分解。
2.下降步长会越来越小(与二分法一样)。