参数寻优:梯度下降/牛顿下降法 追根溯源
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
这里不对拟牛顿法展开了,看得更清楚了再说吧。
总结
参数寻优的核心:迭代方向和步幅控制。相关文章推荐
- could not build module 'uikit'
- Java当中的反射
- Android:控件WebView显示网页 -摘自网络
- nginx源码分析2———基础数据结构五(ngx_hash_wildcard_t)
- 常见的机器视觉工具(转载)
- 算法和策略之间的混沌关系
- 谈谈对数据库的认识
- @protocol使用讲解
- LeetCode222——Count Complete Tree Nodes
- 机器视觉开源代码集合(转载)
- Codeforces Gym100425 A. Luggage Distribution
- Qt之JSON生成与解析
- POJ 3311 Hie with the Pie 担货郎问题 DP Floyd/Dijkstra + DFS
- 定义一个二维int数组,编写代码获取最小元素
- java的poi技术读取Excel[2003-2007,2010]
- iOS开发学习之自定义cell
- 视图
- PythonProject(1)vim的Hustoj插件
- linux系统的7种运行级别
- 【shiro】UsernamePasswordToken中char[]替代String的安全性