Day 6
梯度方法
梯度方法的定义:求取实值函数在Rn上的极小点的方法,在搜索过程中用到了函数的梯度,故称为梯度方法。
*函数水平集概念复习:参照Day3博文[最优化导论(Machine Learning)集合约束和无约束优化问题的基础数学原理及公式]中函数f: Rn -> R的水平集合指的是能够满足f(x) = c的所有x组成的集合,c为常数,因此,对于点x0 ∈ R,若f(x0)=c 则可称该点是水平为c的水平集合中的元素
*若函数f在x0处的梯度为▽f(x0)=Df(x)T {此处函数的一阶导数Df为:Df=[∂f/∂x1, ∂f/∂x2, ......, ∂f/∂xn]}不为零向量,那么它与水平集f(x)=c中任意一条经过x0处的光滑曲线的切向量正交(垂直)
因此,一个实值可微函数在某点处函数值增加最快的方向正交于经过该点的函数水平集(即,在梯度方向上,自变量的细微变动,所导致的目标函数值的增加幅度最大,超过其他的任意方向)
*函数f在点x处,在其可行方向d上的增长率标记为:<▽f(x), d>, ||d||=1
因为||d||=1,由柯西-施瓦茨不等式{柯西施瓦茨不等式:||<=||x||*||y||}
==><▽f(x), d> = ||▽f(x)|| ||1|| = ||▽f(x)||
若令d=▽f(x)/||▽f(x)||
则有:[=xTy]
<▽f(x), ▽f(x)/||▽f(x)||> = ||▽f(x)||
因此,梯度方向▽f(x)就是函数f在x处增加最快的方向
反之,梯度负方向-▽f(x)就是函数f在x处见效最快的方向
故梯度负方向搜索可以得出函数的极小点
*令x(0)作为初始搜索点,并沿着负梯度方向构造一个新点x(0)-å▽f(x(0))可由泰勒定理得出:
f(x(0) - å▽f(x(0))) = f(x(0)) - å||▽f(x(0))||^2+O(å)
所以,如果▽f(x(0)) != 0,那么当å > 0足够小时,有
f(x(0) - å▽f(x(0))) < f(x(0))
成立 即,从搜索目标函数极小点的角度来看,x(0) - å▽f(x(0))相对于x(0)有所下降的改善和趋势
最速下降法(最快下降法) *根据上述理念,设定一个搜索点x (k) ,由此点出发,根据向量-å k ▽f(x (k) )指定的方向和幅度移动,构造一个新的点x (k+1), 其中åk为一个正实数,称之为步长,由此得到其迭代公式: x (k+1) = x (k) -å k ▽f(x (k) ) 这称之为梯度下降法的迭代公式,在搜索过程中,梯度不断变化,当接近极小点时,梯度趋近为0 {▽f(x) = 0 相当于一阶导数斜率为0} 最速下降法是梯度下降法的具现,在每次迭代中选择合适的步长åk,使得目标函数值能够得到最大程度地减小 åk实际上为函数 ø k (å) = f(x (k) - å▽f(x (k) ))的极小点 即,å k = arg min (å>=0) f(x (k) - å▽f(x (k) )) *最速下降法按照如下方法运行,在每步迭代中,从迭代点x (k) 出发,沿着负梯度方向 -▽f(x (k) )开展一维搜索,直到找到步长的最优值,确定新的迭代点x (k+1) ,最速下降法的相邻搜索方向是正交的[此处为最快下降法迭代点序列特征,各迭代下降方向均正交]
[个人对最快下降法的理解]:类似于跟我们下山一样,在我们下山时,往往不会直接选择下山时坡最陡的地方直接下山(容易滑倒出现危险) 但是此处为下山时速度下降最快的方向,我们选择一个坡度最大,下山方向最快(垂直于某等高线曲线的切线方向)的坡来快速下降
以下系列图表示最速下降法的演示
Designed By JINZEWEI(MacBook Grapher)
*截止到此处,各位应该存在疑惑,为什么每一次等高线的下降(或者反向来看为上升)两次相邻的搜索均为正交(垂直)的呢?
此处给出
[命题]:利用最速下降法搜索函数f: R2 -> R的极小点,迭代过程产生的序列为{x(k)}k=0~∞那么x(k+1)-x(k)与x(k+2)-x(k+1)正交垂直于所有的k>=0 均成立
[证明]:由迭代公式可知 ====>
åkåk+1<▽f(x(k)), ▽f(x(k+1))>
所以只需要证明<▽f(x(k)), ▽f(x(k+1))> = 0即可
因为åk为一个非负实数,是函数øk(å)=f(x(k)-å▽f(x(k)))的极小点
因此利用局部极小点的一阶必要条件和链式法则可得
[局部极小点位于约束聚合内的一阶必要条件]:▽f(x*)=0
则有:ø'k(åk)=0 ▽f(x*)=ø'k(å)
==>∂øk/∂å(åk) = ▽f(x(k) - åk▽f(x(k)))T(-▽f(x(k)))
==>-<▽f(x(k+1) ), ▽f(x(k))>
[命题]:利用最速下降法搜索函数f: Rn -> R的极小点,迭代过程产生的序列为{x(k)}k=0~∞,若▽f(x)(k) != 0那么f(x(k+1)) < f(x(k))
[证明]:已知x(k+1)=x(k)-åk▽f(x(k))
其中,åk >= 0是函数 øk(å)=f(x(k)-å▽f(x(k)))的极小点,å>=0,对于所有的å>=0都有øk(åk) <= øk(å)
利用链式法则---->
ø'k(o) = ∂øk/∂å(o) = -(▽f(x(k)-åk▽f(x(k))))T(▽f(x(k))) = -||▽f(x(k))||^2 < 0
因为▽f(x(k))!=0,因此,ø'k(o) < 0,这说明存在一个a>0,对于所有的å属于(0, å]都有øk(o) > øk(å)成立
所以有 f(x(k+1)) = øk(åk) <= øk(a)
*上述命题说明了梯度下降的特性:只要▽f(x(k))!=0,就有f(x(k+1))
但是在实际应用中,数值计算的方法很难恰好得到梯度为0的结果,因此▽f(x(k+1))=0并不适合直接作为停止规则
如下给出可以作为停止规则的几种度量方法
(1)利用梯度范数||▽f(x(k))||小于某个阈值时,度量停止
(2)利用计算相邻两个迭代点之间对应的目标函数值之差的绝对值|f(x(k+1))-f(x(k))|小于某阈值ß时停止|f(x(k+1))-f(x(k))|
(3)利用计算相邻两个迭代点之差的范数小于某阈值ß时停止 ||x(k+1)-x(k)||
(4)利用计算上述停止规则的相对值作为停止规则|f(x(k+1))-f(x(k))|/|f(x(k))|
*将最速下降法应用到二次型函数中,观察其运行情况,目标函数为
f(x) = 1/2xTQx - bTx
其中,Q ∈ Rn*m为对称正定矩阵, b ∈ Rn, x ∈ Rn函数f有唯一极小值,可通过令梯度为0求得,由于D(xTQx)=xT(Q + QT)=2xTQ,D(bTx) = bT故有▽f(x)=Qx-b,Q为对称矩阵是一个不失一般性的假设
后续推论请参考个人笔记:
[二次型的定义,一般来说将二次函数转化为二次型进行矩阵运算即可带入上述迭代公式求取梯度计算]
Final Example 圆,椭圆和课后8.1例题的最速下降法求解函数极小点
1.目标函数为圆的情况 f(x1,x2)=x1^2 + x2^2从任意初始点x(0) ∈ R2出发都可以通过每次迭代求得极小点x*=0 ∈ R2 [梯度最终收敛至=0处即(0,0)点位置]
[此处为便于视觉效果各个水平集梯度有所变更但原理不变]
2.如果目标函数为f(x1,x2)=1/5*x1^2 + x2^2的情况 各水平集均为椭圆的情况最速下降法将原函数转化为二次型后,依次计算梯度。最终最速下降法的迭代路径则不断的在类似视为狭窄山谷谷底方向内来回往复,形成锯齿状迭代状态,迭代效率略低
8.1利用最速下降法求解函数f(x1,x2)=x1+1/2x2 + 1/2x1^2 + x2^2 + 3的极小点,初始点为x(0)=0,开展两次迭代并利用解析方法求出该函数的极小点
[详细解答步骤参考下图手写部分]
写在最后
用一个简单生动的陕西人通俗易懂的例子来深化一下今天的最速下降法概念:
假如我们身处秦岭72峪的任何一个峪口最高处,要去最低的峪口山谷处找陕西人口口相传的神兽"鸹貔"。但是我们被蒙着眼睛看不到整个峪口的全貌并且不知道自己在哪里,不论走到哪都只知道自己当前所处位置的高度。那么该如何用最快速度找到神兽"鸹貔"呢?要找到"鸹貔",我们需要走向最低的位置,看不到全貌的我们如何走到最低位置?最简单的策略就是走一步看一步。走一步要解决两个问题:方向和步长,方向决定向哪走,步长决定走多远。如何决定下一步方向呢?最简单的策略就是在当前所处的位置上去感受哪个方向是“最陡”的,最陡向下的方向就是我们下一步要走的方向。决定了方向后该如何选择“步长”?因为我们不知道峪口的全貌,整个秦岭又有很多山峰和山谷,走的步子太大会很冒险,可能错过最低的低谷;走的步子太小又浪费时间,因此我们要根据经验来选择一个适中的步长走下一步。就这样走一步决定一步,一步一步走到最低的低谷,我们就可以找到神兽"鸹貔",可以简称这个策略就是我们今天介绍的“最速下降法”
参考文献:An Introduction to Optimization (Fourth Edition)end
AI技术交流 + 兴趣讨论: