UTF8gbsn
梯度
什么是梯度?
某一个点x0的梯度的数学定义如下.
∇f(x0)=(∂x1∂f(x0),∂x2∂f(x0),⋯,∂xn∂f(x0))
画出梯度的图象
比如我们来画出函数 f(x,y)=sin(x+y2) 的图象.

\newpage
它的梯度

-
箭头方向就是梯度的方向.
-
箭头的长度就是梯度的增量幅度.
我们画出函数的登高线让大家和梯度比较起来观察更为方便.

梯度下降
对梯度有了直观的认识,那么梯度下降算法就很简单了.线来看看梯度下降算法的描述.
梯度下降算法就是从某个点x0出发,按照梯度的反方向,去找到函数的一个局部最小值.如果是凸函数,则可以得到全局最优解.我们就讨论一下一般情况局部最有解的情况.
简单的函数
f(x,y)=x2+y2
这个函数的极小值出现在(0,0)点.画出图象如下

并且我们画出它的梯度图象为.

假如我们的出发点位于(1,1).
-
求出这个点的梯度 (2x,2y)=(2,2)
-
设置我们的移动步长比如s=0.05
-
那么第一次迭代 (x1,y1)=(x0,y0)−s∇f(x0,y0)
用在例子上就是 (x1,y1)=(1,1)−0.05(2,2)=(0.9,0.9)
-
第二次迭代. (x2,y2)=(x1,y1)−s∇f(x1,y1) 用在列子上是
(x2,y2)=(0.9,0.9)−0.05(1.8,1.8)=(0.81,0.81)
如果你反复运行100次.你会得到
(x100,y100)=(2.65614e−05,2.65614e−05)
这个点已经很接近(0,0)了.可见梯度下降算法的确找到了这个局部最有解.当然我们给出的函数实际上是一个凸函数.所以你可以很容易的得出.这个局部最优解就是全局最优解.当然梯度下降算法的停止条件是两次迭代之间的误差小于某个范围.那么我们来看看迭代的时候点的轨迹运动是怎么回事?

我们再看一个稍微复杂一点的函数.这个函数图象为 f(x,y)=Cos(y)Sin(x)
我们出发点为(1.0,0.5)

