机器学习的一个重要组成部分是如何寻找最优参数解。本文就常见寻优方法进行总结,并给出简单python2.7实现,可能文章有点长,大家耐心些。
寻找最优参数解,就是在一块参数区域上,去找到满足约束条件的那组参数。形象描述,比如代价函数是个碗状的,那我们就是去找最底部(代价最小)的那个地方的对应的参数值作为最优解。那么,如何找到那个底部的最优参数解呢,如何由一个初始值,一步一步地接近该最优解呢。寻优方法,提供了靠近最优解的方法,其中涉及到的核心点,无外乎两点:靠近最优解的方向和步幅(每步的长度)。
最优化,分为线性最优化理论和非线性最优化理论。其中线性最优化又称线性规划。目标函数和约束条件的表达是线性的, Y=aX ;非线性最优化理论,是非线性的。其中包括梯度法,牛顿法,拟牛顿法(DFP/BFGS),约束变尺度(SQP),Lagrange乘子法,信赖域法等。
算法原理及简单推导
最速下降法(梯度下降法)
借助梯度,找到下降最快的方向,大小为最大变化率。
θnew=θold−α∗Gradient
梯度:是方向导数中,变化最大的那个方向导数。
梯度方向:标量场中增长最快的方向。
梯度大小:最大变化率。
更新:沿着梯度的负向,更新参数(靠近最优解)。
*********************************************
Algorithm:GradientDescent
Input:x−Data;y−Label;α−调节步幅;θ0;Iternum;
Output:θoptimal
Process:
1. Initial θ=θ0
2. While Loop<Iternum
H=f(x,θ);模型函数H
Compute Gradient According to f(x,θ)
Update θ:=θ−α∗Gradient
Loop=Loop+1
3. Return θ
*********************************************
梯度下降法
优点:方便直观,便于理解。
缺点:下降速度慢,有时参数会震荡在最优解附近无法终止。
牛顿下降法
牛顿下降法,是通过泰勒展开到二阶,推到出参数更新公式的。
f(x+Δ(x))≈f(x)+f′(x)∗Δ(x)+12∗f′′(x)∗Δ2(x)
上式等价于 f′(x)+f′′(x)∗Δ=0
从而得到更新公式:
xnew−xold=−f′(x)f′′(x)=−[f′′(x)]−1∗f′(x)
调整了参数更新的方向和大小(牛顿方向)。
*********************************************
Algorithm:Newton Descent
Input:x−Data;y−label;θ0;ϵ−终止条件;
Ouput:θoptimal
Process:
1. Initial θ=θ0
2. Compute f′(x,θ)
if|f′(x),θ)|⩽ϵ
return θoptimal=θ
else
Compute H=f′′(x,θ)
Dk=−[H]−1∗f′(x,θ)
Update θ:=θ+Dk
3. Return step 2
*********************************************
牛顿下降法
优点:对于正定二次函数,迭代一次,就可以得到极小值点。下降的目的性更强。
缺点:要求二阶可微分;收敛性对初始点的选取依赖性很大;每次迭代都要计算Hessian矩阵,计算量大;计算Dk时,方程组有时奇异或者病态,无法求解Dk或者Dk不是下降方向。
阻尼牛顿法
这是对牛顿法的改进,在求新的迭代点时,以Dk作为搜索方向,进行一维搜索,求步长控制量
*********************************************
Alg