UTF8gbsn
梯度
什么是梯度?
-
梯度和导数有关但是梯度却不是导数.
-
直观的解释是把梯度看做是一个向量.这个向量指向函数值增长最快的方向.它的摸长就是增长的比率.
某一个点
x
0
\mathbf{x_0}
x0的梯度的数学定义如下.
∇
f
(
x
0
)
=
(
∂
f
∂
x
1
(
x
0
)
,
∂
f
∂
x
2
(
x
0
)
,
⋯
,
∂
f
∂
x
n
(
x
0
)
)
\nabla f(\mathbf{x_0})=(\frac{\partial f}{\partial x_1}(\mathbf{x_0}), \frac{\partial f}{\partial x_2}(\mathbf{x_0}), \cdots, \frac{\partial f}{\partial x_n}(\mathbf{x_0}))
∇f(x0)=(∂x1∂f(x0),∂x2∂f(x0),⋯,∂xn∂f(x0))
画出梯度的图象
比如我们来画出函数
f
(
x
,
y
)
=
s
i
n
(
x
+
y
2
)
f(x,y)=sin(x+y^2)
f(x,y)=sin(x+y2) 的图象.
\newpage
它的梯度
-
箭头方向就是梯度的方向.
-
箭头的长度就是梯度的增量幅度.
我们画出函数的登高线让大家和梯度比较起来观察更为方便.
梯度下降
对梯度有了直观的认识,那么梯度下降算法就很简单了.线来看看梯度下降算法的描述.
梯度下降算法就是从某个点
x
0
\mathbf{x_0}
x0出发,按照梯度的反方向,去找到函数的一个局部最小值.如果是凸函数,则可以得到全局最优解.我们就讨论一下一般情况局部最有解的情况.
简单的函数
f ( x , y ) = x 2 + y 2 f(x,y)=x^2+y^2 f(x,y)=x2+y2
这个函数的极小值出现在 ( 0 , 0 ) (0,0) (0,0)点.画出图象如下
并且我们画出它的梯度图象为.
假如我们的出发点位于(1,1).
-
求出这个点的梯度 ( 2 x , 2 y ) = ( 2 , 2 ) (2x, 2y)=(2,2) (2x,2y)=(2,2)
-
设置我们的移动步长比如 s = 0.05 s=0.05 s=0.05
-
那么第一次迭代 ( x 1 , y 1 ) = ( x 0 , y 0 ) − s ∇ f ( x 0 , y 0 ) (x_1,y_1)=(x_0,y_0)-s\nabla f(x_0,y_0) (x1,y1)=(x0,y0)−s∇f(x0,y0)
用在例子上就是 ( x 1 , y 1 ) = ( 1 , 1 ) − 0.05 ( 2 , 2 ) = ( 0.9 , 0.9 ) (x_1,y_1)=(1,1)-0.05(2,2)=(0.9, 0.9) (x1,y1)=(1,1)−0.05(2,2)=(0.9,0.9) -
第二次迭代. ( x 2 , y 2 ) = ( x 1 , y 1 ) − s ∇ f ( x 1 , y 1 ) (x_2,y_2)=(x_1,y_1)-s\nabla f(x_1,y_1) (x2,y2)=(x1,y1)−s∇f(x1,y1) 用在列子上是
( x 2 , y 2 ) = ( 0.9 , 0.9 ) − 0.05 ( 1.8 , 1.8 ) = ( 0.81 , 0.81 ) (x_2,y_2)=(0.9,0.9)-0.05(1.8,1.8)=(0.81,0.81) (x2,y2)=(0.9,0.9)−0.05(1.8,1.8)=(0.81,0.81)
如果你反复运行100次.你会得到
(
x
100
,
y
100
)
=
(
2.65614
e
−
05
,
2.65614
e
−
05
)
(x_{100}, y_{100})=(2.65614e-05, 2.65614e-05)
(x100,y100)=(2.65614e−05,2.65614e−05)
这个点已经很接近(0,0)了.可见梯度下降算法的确找到了这个局部最有解.当然我们给出的函数实际上是一个凸函数.所以你可以很容易的得出.这个局部最优解就是全局最优解.当然梯度下降算法的停止条件是两次迭代之间的误差小于某个范围.那么我们来看看迭代的时候点的轨迹运动是怎么回事?
我们再看一个稍微复杂一点的函数.这个函数图象为 f ( x , y ) = C o s ( y ) S i n ( x ) f(x,y)=Cos(y)Sin(x) f(x,y)=Cos(y)Sin(x)
我们出发点为(1.0,0.5)