您的位置:首页 > 其它

参数寻优:梯度下降/牛顿下降法 追根溯源

2015-08-12 23:59 183 查看

参数寻优

参数寻优背景

  参数寻优问题随处可见,举几个例子。

  1. 小明假期结束回校,可以坐火车,可以坐汽车,可以坐飞机,还可以走着,小明从哪条路去学校更好呢?

  2. 简单的数学,一元二次方程求根。

  3. 高深的数学,七桥问题,怎么才能通过所有的桥各自一次走回七点所在的岸边。

  4. 机器学习中,求代价函数在约束条件下的最优解问题。

  其上四个问题,均是参数寻优问题。问题1中,小明可以通过试探法将所有的方式计算一下时间成本,经济成本,舒适程度,来选择一个性价比最合适的返校方式。问题2中,可以通过一元二次方程的求根公式直接求出解来。问题3中,七桥问题则是典型的图论问题,通过抽象为图,推理得出该题无解。问题4中,机器学习则是数值分析中方程的迭代解法

本文目标

  本文主要讲清楚梯度下降法、牛顿下降法是如何想到并引入参数寻优中的,以及他们为什么有效。

参数寻优的迭代法的基本原理

  




  图1 一维的二阶代价函数展示

  



  图2 二维的二阶代价函数展示

  通过代价函数的形状,我们很自然地想到,如果我们从任意一个参数点出发,是否可以找到刚好是让代价下降的方向,沿着这个方向,一定能找到当前的极值点。

  于是,迭代法参数寻优的基本原理有了:沿着(代价)函数下降的方向寻找参数,能够找到极值点。

梯度下降法的引入

  在我们已经学过的数学知识中,导数和方向导数是能找到函数变化方向的。导数表示了曲线的斜率(倾斜度),方向导数表示了曲面沿着任意方向的斜率(倾斜度)。一维时,导数就足够了。但多维时,就需要借助方向导数了,而我们更希望能找到变化率最大的方向因此,多维下借用方向导数变化最大的情况:梯度,梯度的方向是函数某点增长最快的方向,梯度的大小是该点的最大变化率。

  三维下,推导方向导数与梯度的关系

  方向导数

  
∂f∂l=∂f∂x∗cos(α)+∂f∂y∗cos(β)+∂f∂z∗cos(γ)\frac{\partial f }{\partial l} = \frac{\partial f}{\partial x}*cos(\alpha)+\frac{\partial f}{\partial y}*cos(\beta)+\frac{\partial f}{\partial z}*cos(\gamma)

  方向:l=(cos(α),cos(β),cos(γ))l = (cos(\alpha), cos(\beta), cos(\gamma))

  梯度:Grad=(∂f∂x,∂f∂x,∂f∂x)Grad = (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial x}, \frac{\partial f}{\partial x})

  ∂f∂l=Grad∗l\frac{\partial f }{\partial l} =Grad*l

  ∂f∂l=|Grad|∗1∗cos(Grad,l)\frac{\partial f }{\partial l} = |Grad|*1* cos(Grad, l)

  当两者方向相同时,cos(Grad,l)=1,∂f∂lcos(Grad, l)=1,\frac{\partial f }{\partial l} 取得最大值|Grad||Grad|。因此,梯度表示了函数增长最快的方向,和最大的增长率。

牛顿下降法的引入

牛顿法求解f(x)=0

  在讲牛顿下降法之前,先讲一下f(x)=0f(x)=0的求解将f(x)f(x)在x0x_{0}处进行一阶泰勒展开

  




   图 3,牛顿法求解f(x)=0f(x)=0

  f(x)=f(x0)+f′(x0)1!(x−x0)f(x)=f(x_{0})+\frac{f'(x_{0})}{1!}(x-x_{0})

  则得到f(x0)+f′(x0)(x−x0)=0f(x_{0})+f'(x_{0})(x-x_{0}) = 0

  解得x=x0−f(x0)f′(x0)=x1x = x_{0} - \frac{f(x_{0})}{f'(x_{0})} = x_{1}

  从图中可以看出,x1比x0x_{1}比x_{0}更靠近真实解。如果接下来在x1x_{1}处一阶泰勒展开,会得到更靠近真实解的x2x_{2},以此类推:

  xn+1=xn−f(xn)f′(xn)x_{n+1} = x_{n} - \frac{f(x_{n})}{f'(x_{n})}

  牛顿法具有天然的迭代性,可以不断逼近真实解。

牛顿下降法

  那么牛顿下降法是如何引入的呢?求解最优解minx[Cost(x)]\underset{x}{min} [Cost(x)],等价于 找到xx满足f′(x)=0f'(x)=0。对于f′(x)=0f'(x)=0的求解,就可以用上面的牛顿法来不断逼近真实解了。

  对f′(x)f'(x)在x0x_{0}处一阶泰勒展开。

  f′(x)=f′(x0)+(x−x0)∗f′′(x0)f'(x) = f'(x_{0}) +(x-x_{0})*f''(x_{0})

  令f′(x)=0f'(x)=0

  得x=x0−f′(x0)f′′(x0)=x1x = x_{0} - \frac{f'(x_{0})}{f''(x_{0})}=x_{1}

  xn+1=xn−f′(xn)f′′(xn)x_{n+1} = x_{n} - \frac{f'(x_{n})}{f''(x_{n})}

牛顿下降法的几何意义

  一阶导数决定的函数当前是否增减,二阶则决定这当时是否凹凸。牛顿下降法用二次曲面去拟合当前所处位置的局部曲面,下降方向上的选择不仅考虑了坡度是否足够大,而且考虑了走了这一步之后,坡度是否会变得更大。所以,牛顿下降法比梯度下降法看得更远,能更快地走到局部的最底部。

牛顿下降法的局限性

  (1)收敛性对初始点的选取依赖性很大;

  (2)每次迭代都要计算Hessian矩阵(二阶导数),计算量大;

  (3)要求二阶可微分,计算Dk时,方程组有时非正定或者病态,无法求解Dk或者Dk不是下降方向。

阻尼牛顿法的引入

  对牛顿法局限性的不同改进,导致阻尼牛顿法和拟牛顿法的出现。

  针对牛顿法,有时得到的牛顿方向不是下降的情况,提出了阻尼牛顿法。上升的情况,比如f′(x)<0,f′′(x)<0f'(x)<0, f''(x)<0。

  解决方法是:在新的迭代之前,找到下降方向,且是下降最大的方向。

  (1)先确定最优解的所在区间[a, b]。

  (2)一维搜索。在解区间[a, b]内搜索使得目标函数下降最大的点。

  其中(1)可以用进退法,找到三个点,使得f(a−h),f(a),f(a+h)f(a-h), f(a), f(a+h)满足大小大的规律即可。

  一维搜索方法主要分为试探法和插值法,试探法有黄金分割法、fibonacci法、平分法、格点法等;插值法有牛顿法、抛物线法等。判断解两边值的大小关系或者求导为0。

  剩下的部分就是跟牛顿下降法一样了。(具体实现看前面的博客)

拟牛顿法的引入

  针对牛顿下降法hessian矩阵计算量大,需要正定矩阵的局限性,提出了拟牛顿法,拟牛顿法的核心是对Hessian矩阵的逆的估计。

  根据不同的估计方法,分为DFP和BFGS。

  




   图 4 DFP

  



  图 5 BFGS

  这里不对拟牛顿法展开了,看得更清楚了再说吧。

总结

  参数寻优的核心:迭代方向和步幅控制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: