优化算法(1):最速下降法、牛顿法
文章目录
- 优化算法
- 下降迭代算法
- 前言
- 要求
- 收敛准则(criterion)
- 线搜索
- 基本无约束优化算法
- 最速下降法(梯度)
- 优缺点
- 改良方法
- 步长改良
- 牛顿法
- 优缺点
- 牛顿法改良
- 阻尼牛顿法
- Levenberg-Marquardt Method (Hesse奇异)
- Code
优化算法
下降迭代算法
前言
可能有很多刚开始学优化的同学还对一些知识还不太了解,那就先从一些基本的概念开始说起吧。
优化中,基本问题就是求解一个目标函数的最值,例如最小值。
那么,如何求解这个目标函数的最小值呢,很多函数无法通过数学公式直接得到解析解,或是求解的代价很大,因此更合理的方式是通过一系列的下降迭代算法来获取一个误差在可接受范围内的数值解 x∗x^*x∗
今天首先要讲的就是无约束优化算法。
要求
首先,迭代产生的一系列点{xi}\{x_i\}{xi}需要满足下降性和收敛性,因此,下降迭代算法可以分解为以下几个问题:
- 寻找初始点 x0x_0x0
- 确定下降方向 dkld^kldkl
- 寻求在 dkd^kdk 方向的搜索步长 tkt^ktk,使其满足
xk+1=xk+tkdkf(xk+1)<f(xk)tk:f(xk+tkdk)=minf(xk+tdk)x^{k+1} = x^k + t^k d^k \qquad f(x^{k+1}) < f(x^k) \\ t^k: \quad f(x^k+t^kd^k) = min\ f (x^k + td^k) xk+1=xk+tkdkf(xk+1)<f(xk)tk:f(xk+tkdk)=min f(xk+tdk) - 根据criterion判断是否达到极小点
收敛准则(criterion)
下列三种可选择一种进行使用,各有优劣
- ∣∣∇f(x)∣∣<ε1||\nabla f(x)|| < \varepsilon_1∣∣∇f(x)∣∣<ε1
- ∣∣xk−xk+1∣∣≤ε2∣∣xk−xk+1∣∣∣∣xk∣∣≤ε2′||x^k - x^{k+1}|| \leq \varepsilon_2 \qquad \frac{||x^{k} - x^{k+1}||}{||x^{k}||}\leq \varepsilon_2'∣∣xk−xk+1∣∣≤ε2∣∣xk∣∣∣∣xk−xk+1∣∣≤ε2′
- ∣∣f(xk)−f(xk+1)∣∣∣∣f(xk)∣∣≤ε3\frac{||f(x^{k}) - f(x^{k+1})||}{||f(x^{k})||}\leq \varepsilon_3∣∣f(xk)∣∣∣∣f(xk)−f(xk+1)∣∣≤ε3
线搜索
- 牛顿法
ti+1=ti−y′(ti)y′′(ti)t^{i+1} = t^{i} - \frac{y'(t^i)}{y''(t^i)} ti+1=ti−y′′(ti)y′(ti)
当 yyy 为二次型时只需要一次迭代就能达到最优目标
每次计算需要一阶和二阶导数,计算量大
其中的导数可以使用有限差商来近似(割线法) - 此外还有一些如区域缩减法、多项式拟合等方法,在此不做介绍
基本无约束优化算法
最速下降法(梯度)
- 函数的某一点上的负梯度方向是此函数的函数值下降最快的方向
- 取当前迭代点的负梯度方向作为下降方向(做单位化处理)
- 步长一般寻求最优步长或定步长试探,以求得可接受点
- 给定步长t‾\overline tt,若得到的点满足下降性则完成一次步长试探,否则,取 αt‾→t‾,0<α<1\alpha \overline t \to \overline t, \ 0 < \alpha < 1αt→t, 0<α<1 反复直到满足下降性
{dk=−∇f(xk)/∣∣∇f(xk)∣∣xk+1=xk+tkdk\left\{ \begin{aligned} & d^k = -\nabla f(x^k) / ||\nabla f(x^k)|| \\ & x^{k+1} = x^k + t^k d^k \end{aligned} \right. {dk=−∇f(xk)/∣∣∇f(xk)∣∣xk+1=xk+tkdk
- 给定步长t‾\overline tt,若得到的点满足下降性则完成一次步长试探,否则,取 αt‾→t‾,0<α<1\alpha \overline t \to \overline t, \ 0 < \alpha < 1αt→t, 0<α<1 反复直到满足下降性
优缺点
- 方法简单,单次迭代所需的计算量和存储量少
- 有全局收敛性,对初始点要求不高
- 收敛缓慢,后面呈锯齿形收敛
- 鲁棒性不强,对小的扰动可能不稳定,影响算法收敛
改良方法
步长改良
由上述推导以及上图可得,由于最速下降法选择了最优的步长,且跟随梯度方向,因此每一步之间都是垂直的,导致后续的锯齿形收敛并且速度极慢。
因此,若是设置步长因子 α\alphaα 使得 αtk→tk\alpha t^k \to t^kαtk→tk,则能够避免垂直慢速收敛的情况,部分代码如下:
% update the x position% This is step length without \alpha
% xk1 = xk + tk * dk;% modify the step to avoid vertical condition% Here we set the \alpha = 0.9 xk1 = xk + 0.9 * tk * dk;
对于同一个问题
未使用步长改良时:
迭代21次,耗时4.0366s
使用步长改良时:
迭代10次,耗时2.3305s
牛顿法
由Taylor展开可得:
f(xk+Δk)=f(xk)+ΔkT∇f(xk)+12ΔkTH(xk)Δf(x^k + \Delta k) = f(x^k) + \Delta k^T \nabla f(x^k) + \frac{1}{2}\Delta k^T H(x^k)\Delta f(xk+Δk)=f(xk)+ΔkT∇f(xk)+21ΔkTH(xk)Δ
所以可求出:
xk+1=xk−[H(xk)]−1∇f(xk)x^{k+1} = x^k - [H(x^k)]^{-1} \nabla f(x^k) xk+1=xk−[H(xk)]−1∇f(xk)
- 其中,牛顿法的步长 tk=1t^k = 1tk=1
- 对于Hesse阵 HHH,要求非奇异且正定
优缺点
- 收敛快,至少二阶收敛
- 对于二次凸函数,一步收敛
- 如果选择的起始点 x0x^0x0 距离 x∗x^*x∗ 不远,则迭代收敛快(极小点附近会呈现二次函数性质)
- 要求 f(x)f(x)f(x) 二次可微,且每次迭代都需要计算函数的二阶导数矩阵并且求逆矩阵,计算困难并且计算量大
- 若是 x0x^0x0 距离 KaTeX parse error: Expected 'EOF', got '&' at position 2: x&̲* 较远,则迭代有可能发散
牛顿法改良
阻尼牛顿法
- 增加沿牛顿方向的一维搜索
tk:minf(xk−t[H(xk)]−1∇f(xk))t^k: \ min\ f(x^k - t[H(x^k)]^{-1}\nabla f(x^k)) tk: min f(xk−t[H(xk)]−1∇f(xk)) - 可以看做对最速下降法的纠正,使之不仅利用了函数的一阶导数信息,也利用了函数的二阶信息,将下降方向通过 Hesse 阵进行了适当的偏转,加快了收敛
Levenberg-Marquardt Method (Hesse奇异)
dk=−[βkQk+H(xk)]−1∇f(xk)tk:minf(xk+tkdk)d^k = -[\beta_k Q^k + H(x^k)]^{-1}\nabla f(x^k) \\ t^k: \ min \ f(x^k + t^k d^k) dk=−[βkQk+H(xk)]−1∇f(xk)tk: min f(xk+tkdk)
- 其中,βk\beta_kβk非负,QkQ^kQk 为给定的正定矩阵
- βk\beta_kβk 足够小,则变为正常牛顿法
- βk\beta_kβk 足够大,则 QkQ^kQk 起作用,若 Qk=IQ^k=IQk=I 则转变为最速下降法
实现代码时,可令
G=H(xk)+βQG = H(x^k) + \beta Q G=H(xk)+βQ
若 G−1G^{-1}G−1 存在则继续,否则,
αβ→β,α>1\alpha\beta \to \beta, \alpha > 1 αβ→β,α>1
其中α\alphaα是人为设定的参数
Code
所有详细的代码可参考我的Github,会不断更新,将Matlab Code传至Github
optimization-algorithms
优化算法(1):最速下降法、牛顿法相关推荐
- matlab共轭梯度法_优化算法之牛顿法
牛顿法(Newton's method)是一种在实数域和复数域上近似求解方程的方法,,它使用函数f(x)的泰勒级数的前面几项来寻找方程f(y)=0的根. 牛顿法最初由艾萨克·牛顿在<Method ...
- 机器学习知识总结系列-机器学习中的优化算法总结(1-4)
文章目录 1.梯度下降 1.1批量梯度下降(BGD) 1.2随机梯度下降(SGD) 1.3 小批量随机梯度下降(MSGD) 1.4 比较: 1.5 动量算法(momentum) 1.6 Nestrov ...
- 深度学习经典优化算法-公式汇总
-----整理自DeepLearning chapter8,主要是方便做算法的对比. 1.基础算法 1.1 随机梯度下降(SGD,Stochastic Gradient Descent) 随机梯度下降 ...
- 深度学习中的梯度下降优化算法综述
1 简介 梯度下降算法是最常用的神经网络优化算法.常见的深度学习库也都包含了多种算法进行梯度下降的优化.但是,一般情况下,大家都是把梯度下降系列算法当作是一个用于进行优化的黑盒子,不了解它们的优势和劣 ...
- 机器学习、深度学习中常用的优化算法详解——梯度下降法、牛顿法、共轭梯度法
一.梯度下降法 1.总述: 在机器学习中,基于基本的梯度下降法发展了三种梯度下降方法,分别为随机梯度下降法,批量梯度下降法以及小批量梯度下降法. (1)批量梯度下降法(Batch Gradient D ...
- 优化算法之梯度下降法、牛顿法、拟牛顿法和拉格朗日乘数法
在机器学习中,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解最优化问题. - 无约束最优化问题:梯度下降法.牛顿法.拟牛顿法: - 有约束最优化问题:拉格朗 ...
- 常用的优化算法:梯度下降法,牛顿法,拟牛顿法,共轭梯度法
目录 0.几个数学概念 1. 梯度下降法(Gradient Descent) 2. 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods) 3. 共轭 ...
- 几种优化算法的读书笔记——梯度下降、牛顿法、拟牛顿法、随机梯度下降、AdaGrad、RMSProp、Adam及选择优化算法的建议
文章目录 1 梯度下降 1.1 特点 1.2 思想 1.3 数学基础 1.4 具体算法 2 牛顿法和拟牛顿法 2.1 特点 2.2 牛顿法 2.2.1 数学基础 2.2.2 思想 2.2.3 具体算法 ...
- 优化算法——牛顿法(Newton Method)
一.牛顿法概述 除了前面说的梯度下降法,牛顿法也是机器学习中用的比较多的一种优化算法.牛顿法的基本思想是利用迭代点处的一阶导数(梯度)和二阶导数(Hessen矩阵)对目标函数进行二次函数近似,然后把二 ...
- 机器学习萌新必备的三种优化算法 | 选型指南
作者 | Nasir Hemed 编译 | Rachel 出品 | AI科技大本营(id:rgznai100) [导读]在本文中,作者对常用的三种机器学习优化算法(牛顿法.梯度下降法.最速下降法)进行 ...
最新文章
- com/alipay/config/AlipayConfig.java:[1,1] 非法字符: '\ufeff'
- openstack中手动修改虚拟机IP后不能通信
- 想拿下互联网大厂OFFER,都需要准备什么?
- How to correctly encode .mp4 files for streaming
- Git 使用遇到的各种问题
- 制作漫画风图片(无需下载APP无需PS无需电脑)
- jQuery之事件绑定到触发全过程及知识点补充
- GNS3中RIP的过滤和修改
- dfema规则_DFMEA失效分析简介
- ArcGIS中通过JPG图片文件提取矢量要素
- 巴特沃斯(Butterworth)滤波器(二)
- 优化高德地图加载出现白色
- 十四、中国为什么没有自己的指令集
- 最新!2016中国城市GDP排名出炉
- python并行编程 - 进程篇
- spring boot 项目页面显示不出来
- Layer visibleRegion的计算过程
- C语言练习题:厘米换算英尺英寸
- Boost.Spirit.Karma 自定义directive
- 我对计算机专业的看法及对未来的计划
热门文章
- PyTorch1.13 亮点一览,TorchEval、MultiPy 、TorchSnapshot 新库大解读
- 基于稀疏表示的图像超分辨
- 【Visual C 】游戏开发笔记三十五 站在巨人的肩膀上 游戏引擎导论
- html5 如何播放h264流,html5播放rtsp视频流的方法
- EDA课程设计(设计一个4时隙的时分复用模块)(岭)
- Java游戏编程——愤怒的小鸟(一)
- Mybatis源码阅读之一——工厂模式与SqlSessionFactory
- 计算机病毒库更新记录表,计算机病毒库
- 手机屏幕驱动板1080x1920分辨率HDMI红米note3 note4 note4x屏幕Fondar自制投影 光固化
- Redis集群:./redis-trib.rb:24:in `require': no such file to load -- rubygems