matlab norm函数_基本梯度优化算法——Matlab实现

a485e3c01ea3f2ba6094d113662abd53.png

1 基于梯度的优化问题——探险家的故事

要形象地理解无约束多变量最优化问题,我们可以想象“一个探险家在广袤无际、完全黑暗的地界上,他要只凭脚底感受到的地面的坡度,找寻最深的谷底”。最优化的过程中,我们面临的就是探险家一般艰难的境况。实际上这个模型还是有点不够准确,因为在我们找寻最低点的过程应当是离散的。因此可以进而改善这个模型:天神听闻探险家的事情,感其诚,遂决定赐予他一个技能——他能够迈步任意距离到下一个位置(如果到达的地点是空中,则视为到对应垂直下方的地面,因此实际上“位置”只需考虑水平面的坐标(x,y)),但每次释放技能都会耗费同等的体力。

现在探险家面临的问题就变成了一个回合制游戏——他的目标是在尽可能少的回合数内到达峡谷的最低点。探险家每回合的行动包含两个部分:(1)往什么方向走?(2)每步走多远?因为探险家什么都看不见,因此脚底坡度的信息对他而言十分重要。他很容易能想到,每次都应该朝梯度下降的方向迈步,这就解决了方向的问题。然而步长(在机器学习中常称为“学习率”)却令他发愁。显而易见,每次行动迈步太短会浪费“体力值”。但是,步长太长则有可能迈过头了,比如从这边山头迈到那边山头,完美错过谷底。探险家应当如何到达至深之地呢?根据探险家的具体情况,我们可以给他私人定制不同的算法。

如果探险家比较老了,记忆力不大好——他每达到一个新的位置,并不怎么记得之前发生了什么,那么他能采用的算法就是简单粗暴的随机梯度下降法(SGD)

如果探险家能够记得他上一步行动的信息,那么利用好这些信息或许能给他的决策带来裨益,因此他可以采用Momentum、AdaGrad、RMSProp、Adam等算法。

以上算法都是仅使用梯度信息的一阶优化算法。假如探险家是一个堪比拉普拉斯妖一般的智者,他不但能从脚底感知梯度,还能感知梯度的梯度(Hessian矩阵),那么他就可以使用二阶优化算法,如牛顿法、阻尼牛顿法、拟牛顿法、共轭梯度法等。

2 探险家的故事续——以一个简单的峡谷为例

下面是探险家面临的一个狭长峡谷

5601a27c142425cb66c771f24d80c230.png

峡谷的函数表达式:

从上帝视角看,很显然最低点在(0,0)处。

探险家若使用固定步长的随机梯度下降法:

while 

da938f9199d760e60e509406306da7d4.png
探险家的轨迹(步长为0.9)

我们发现探险家还是走了不少弯路的,因为步子跨得大了。如果将步长修改为0.1呢?

0778af13d06af54e99031184aa9ac631.png
探险家的轨迹(步长为0.1)

尽管不像上次那样“之”字形移动,但步数太多了,收敛到最低点的速度缓慢。由此可以看到步长对收敛速度影响非常大。

实际上,用展开泰勒级数的方法可以知道,对于能用二次函数很好近似的函数(此例目标函数正是二次函数),可以根据梯度和Hessian矩阵确定最优步长:

if 

eba53e58e2d7abe7b2999adbfe39d060.png
脚底能洞悉Hessian矩阵的Laplace探险家的轨迹

只用三步这位智者探险家就到达最低点了。


以一个更复杂的目标函数为例,用Matlab实现一些基本的梯度优化算法。以下主要是实现算法并绘制收敛轨迹,得到一个对优化过程的形象理解,不保证代码中的参数已经调整至最优。

目标函数:

初值:(-1.2,1.0)

有最低点坐标:(1,1)

fb10b2ba3a2a70e31dc404ab84eaa1cd.png

3 一阶优化算法

3.1 随机梯度下降法(SGD)

% 无线搜索的SGD

收敛步数:9085

x=(0.9889, 0.9779)
收敛速度极慢,且结果不够准确

dd4647806577ceb14004e5855a17e32b.png
收敛轨迹图(每200步标记1个点)

% 有线搜索的SGD

收敛步数:48

x=(1.0002, 1.0004)

收敛速度快,且结果较准确

可以对比得到学习率的线搜索策略的对于优化过程的重要性

2fd56feca6abdae4156a1dd6de88ba00.png
收敛轨迹图(每步标记1个点)

3.2 动量随机梯度下降法(Momentum)

% Momentum

收敛步数:812

x=(0.9890, 0.9780)

e4ca8ebc73ba2c3d98e4d8bd2e172eaa.png
收敛轨迹图(每10步标记1个点)

3.3 AdaGrad

% AdaGrad

收敛步数:4762

x=(0.9889, 0.9779)

6ab2b83924ba5d5e36309573310e0fd4.png
收敛轨迹图(每100步标记1个点)

3.4 RMSProp

% RMSProp

收敛步数:23956

x=(0.9889, 0.9779)

eef138d345eee13b3900516588042681.png
收敛轨迹图(每100步标记1个点)

% Nesterov-RMSProp

收敛步数:724

x=(0.9985, 0.9970)

9b93a4827cf377dc4daa977379459314.png
收敛轨迹图(每10步标记1个点)

3.5 Adam

% Adam

收敛步数:12314

x=(0.9889, 0.9779)

23a2ad691cb1ec8e246a8fc46cc346cd.png
收敛轨迹图(每10步标记1个点)

4 二阶优化算法

二阶方法收敛速度非常快,对于参数较少的问题优势很大。然而由于要存储Hessian逆矩阵,二阶方法复杂度非常高(大多是多项式复杂度),在深度学习的训练中存在计算量大、训练慢等问题,目前还不能广泛适用于深度学习模型的训练中。

4.1 牛顿法

% 牛顿法


收敛步数:5
x=(1.0000,1.0000)

7641376f2f414bb52214ea776c4eca52.png
收敛轨迹图

4.2 阻尼牛顿法

% 阻尼牛顿法

收敛步数:11

x=(0.9996,0.9993)

586bb3c424ef6cc363df52a6207de358.png
收敛轨迹图

4.3 DFP拟牛顿法

% DFP拟牛顿法

收敛步数:35

x=(0.9999,0.9997)

8e1565d20c74694e5fb1c77960287b03.png
收敛轨迹图

除此以外,拟牛顿法中还有更先进的BFGS及L-BFGS算法。

4.4 共轭梯度法

% 共轭梯度法

收敛步数:14

x=(1.0000,1.0000)

f606909d8795397c3ca5f7047ba37f0c.png
收敛轨迹图
matlab优化程序包括:无约束一维极值问题、进退法、黄金分割法、斐波那契法、牛顿法基本牛顿法、全局牛顿法、割线法、抛物线法、三次插值法、可接受搜索法、Goidstein法、Wolfe Powell法、单纯形搜索法、Powell法、最速下降法、共轭梯度法、牛顿法、修正牛顿法、拟牛顿法、信赖域法、显式最速下降法、Rosen梯度投影法、罚函数法、外点罚函数法、內点罚函数法、混合罚函数法、乘子法、G-N法、修正G-N法、L-M法、线性规划、单纯形法、修正单纯形法、大M法、变量有界单纯形法、整数规划、割平面法、分支定界法、0-1规划、二次规划、拉格朗曰法、起作用集算法、路径跟踪法、粒子群优化算法基本粒子群算法、带压缩因子的粒子群算法、权重改进的粒子群算法、线性递减权重法、自适应权重法、随机权重法、变学习因子的粒子群算法、同步变化的学习因子、异步变化的学习因子、二阶粒子群算法、二阶振荡粒子群算法 (matlab optimization process includes Non-binding one-dimensional extremum problems Advance and retreat method Golden Section Fibonacci method of basic Newton s method Newton s method Newton s Law of the global secant method parabola method acceptable to the three interpolation search method Goidstein France Wolfe.Powell France Simplex search method Powell steepest descent method Conjugate gradient method Newton s method Newton s method to amend Quasi-Newton Method trust region method explicitly steepest descent method, Rosen gradient projection method Penalty function method outside the penalty function method within the penalty function method Mixed penalty function multiplier method G-N was amended in G-N method L-M method Of linear programming simplex method, revised simplex method Big M method variables bounded simplex method, Cutting Plane Method integer programming branch and bound method 0-1 programming quadratic programming )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值