数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization)

2015年12月27日 18:51:19 下一步 阅读数 4357更多

分类专栏: 数值优化
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

概述

在实际应用中,有些目标函数的梯度不容易计算,即使使用有限差分等近似算法,也会因为噪声的存在导致结果不精确。无梯度优化算法(DFO-Derivative-Free Optimization)可以在不计算梯度的情况下进行问题的最优化,主要有两类思路,一是根据目标函数的样本进行拟合,对拟合函数进行最优化;二是用一些启发式算法。 
1. 有限差分和误差 
2. 基于模型近似的方法 
3. 坐标和模式搜索方法 
4. 其他DFO方法 
5. 总结

有限差分和误差

有限差分方法在某些情况下可能会有一定的误差,例如如果函数值需要通过随机试验进行模拟,此时会引入人为误差或者仪器误差。 
因此对问题进行建模时,将误差引入目标函数中,然后利用有限差分和梯度相关算法进行优化。

 
f(x)=h(x)+ϕ(x)f(x)=h(x)+ϕ(x)

其中函数h表示某平滑函数,ϕϕ表示误差分布函数,该函数可以和参数x有关也可以无关。

对误差进行建模后,然后利用中心有限差分方法,进行梯度的计算

 
∂f∂xi≈f(x+ϵei)−f(x−ϵei)2ϵ∂f∂xi≈f(x+ϵei)−f(x−ϵei)2ϵ

噪声水平(Noise Level)定义为: 
在x附近噪声最大值。η(x;ϕ)=sup||z−x||≤ϵ|ϕ(z)|η(x;ϕ)=sup||z−x||≤ϵ|ϕ(z)|

此时使用有限差分方法,近似误差来源于固有误差和噪声误差。

基于模型的方法

主要思路是,在第k步迭代时,基于该点进行模型近似,通过采样推导出模型中的参数,基于该模型进行最优化计算。

二次模型近似

在第k步迭代时,构建一个二次模型进行近似

 
mk(xk+p)=c+gTp+12pTGpmk(xk+p)=c+gTp+12pTGp

,其中g和G分别表示函数f的一阶和二阶梯度。 
由于该模型参数c、g和G都是未知的,因此需要1+n+(n+1)n/2=(n+1)(n+2)/2个未知数需要计算。 
所以基于点Xk需要采样这么多个点进行未知数计算。 
样本Y=y1,y2...yqY=y1,y2...yq,假设该集合中的点值都比x_k大。根据拟合等式mk(yl)=f(yl)mk(yl)=f(yl) 
此时可以唯一确定模型m,然后利用信赖域或者梯度方法进行最优化。

在实际应用中,我们仅需要更新模型M即可,不用每次都重新计算。可以选择合适方便计算的基函数。

算法过程如下 
 

算法过程如下 
1. 构建插值集合Y=y1,y2...yqY=y1,y2...yq需要保证线性方式的解存在。 
2. 求解插值方程 
3. 根据二次模型进行最优解计算 
4. 根据最优解的效果,决定是否采用该解。 
5. 根据一个几何过程更新几何Y。

二次模型的缺点:样本点选择是O(n^2)的,如果维度越高计算复杂度越大。因此可以考虑线性模型,此时只有O(n+1)个样本需要求解,复杂度会降低。

坐标和模式搜索方法

不同于梯度相关的算法,基于模式搜索方法的搜索方向都是事先确定好的,该方法需要从方向集合中选择一个下降方向作为搜索方向并且更新该方向集合,之后利用线搜索决定步长,逐步迭代得到最优解。 
坐标下降是模式搜索方法中的一个特例。

坐标搜索方法(Coordinate SearchMethod)

该方法也称之为坐标下降法或者变量交替方法,主要思路是依次沿着坐标轴方向进行线搜索。 
详细过程如下 
1. 选择某个迭代点x=(x1,x2…xn),固定x2…xn,优化x1使得目标函数最小 
2. i=2..n 优化x_i使得目标函数最小 
3. 重复以上步骤 
对于二维情况下,搜索过程如下 

  1. 从上图中可以看出,对于条件数比较大的问题,收敛速度非常低。
  2. 实际中,如果沿着线性独立的搜索方向搜索,可能不能保证收敛。但是优点是不需要计算梯度,并且对于变量松耦合的情况下,收敛速度可以接受。
  3. 另外为了进行优化,搜索方向可以选择为{e1,e2...en,en−1...e1e1,e2...en,en−1...e1}

模式搜索方法

每次搜索方向都是从一个“结构集”中选取,找到某个下降点,进行线搜索,否则修改步长,重复该过程。 
该方法会受到噪声点、函数值不精确、不平滑的影响。算法过程如下 
算法描述如下 
定义 
* DkDk表示第k迭代的方向集合 
* γkγk表示第k步线性搜索参数,即步长,如果找到下降方向,则xk+γkpkxk+γkpk为最优点 
* ρ(t)ρ(t)为递增函数,并且当t接近0时,该函数值为0 
算法过程 
1. 初始化搜索方向集合D0D0 
2. 循环迭代一下过程,直到搜索步长满足给定阈值。 
3. 如果找到满足一定下降条件的搜索方向,则修改最优值点,并且增大步长。 
4. 否则减少步长 
关键点

  1. 初始化搜索方向集合D0D0如何选取,需要保证包含最优解的方向。
  2. 有理论保证如果搜索方向满足一下条件,则一定能保证收敛。
     
    κ(Dk)=minv∈Rnmaxp∈DkvTp||v||||p||≥δκ(Dk)=minv∈Rnmaxp∈DkvTp||v||||p||≥δ
     
    βmin≤||p||≤βmaxp∈Dkβmin≤||p||≤βmaxp∈Dk
  3. 条件1说明需要保证最少有一个搜索方向和最优方向的夹角小于90,即cos(θθ) > δδ,不能再相反的方向,否则不容易收敛。
  4. 条件2说明搜索方向的模不能相差太大,因此搜索步长统一进行缩放。
  5. 满足条件的搜索方向有 {e1,e2...en,−e1...−ene1,e2...en,−e1...−en},供2n个搜索方向或者{pi=12ne−ei,pn+1=12nepi=12ne−ei,pn+1=12ne},供n+1个点
  6. 递增函数可以选择为ρ(t)=Mt3/2ρ(t)=Mt3/2

其他DFO算法

共轭方向算法

类似于共轭梯度方法,该方法的目标是最优化

 
f(x)=12xTAx−bTxf(x)=12xTAx−bTx

,不同点在于共轭方向的计算仅仅依靠函数值得到,不依赖梯度的计算。

Parallel subspace property

通过该方法可以找到一系列共轭方向,并且沿着该方向可以得到最优解,以二维情况为例 
 
如上图如果直线l1和l2平行,并且x1*和x2*是目标函数沿着该直线的最优解,则x1*-x2*共轭于直线的法向量。 
因此只要沿着某两个平行子空间寻找最优解,则最优解的差就共轭于该平面的法向量。 
假设{p1,p2...plp1,p2...pl}是线性独立的向量,定义两个平行平面

 
s1={x1+∑i=1..lαipi}s1={x1+∑i=1..lαipi}
 
s2={x2+∑i=1..lαipi}s2={x2+∑i=1..lαipi}

并且目标函数沿着该平面的最优解分布为x1*和x2*,则x2*-x1*共轭于p1,p2...plp1,p2...pl

证明很简单 
由于x1*是最优解,则有

 
∂f(x∗1+αipi)∂αi=∂f(x∗1+αipi)pi∂f(x1∗+αipi)∂αi=∂f(x1∗+αipi)pi

,当αi=0,∇f(x∗1)pi=0,根据最优化条件得到αi=0,∇f(x1∗)pi=0,根据最优化条件得到

 
0=(∇f(x∗1)−∇f(x∗2))pi=(Ax1−b−Ax2+b)pi=(x1−x2)Api0=(∇f(x1∗)−∇f(x2∗))pi=(Ax1−b−Ax2+b)pi=(x1−x2)Api

根据共轭条件可以得到。

Nelder-Mead 方法

也叫做Nelder-Mead simplex reflection方法。 
保存n+1个点,并且这些点构成一个单纯性,在每次循环中搜索使得函数值最低的点,去掉后,用其他更好的点替代。

Implicit Filtering方法

对比于带有噪声的有限微分方法,适用于noise level随着迭代减小的情形。

总结

通过该小结的学习,可以了解到 
1. 对于梯度不可求的复杂函数,可以通过DFO的方式进行优化 
2. 通过随机试验估计函数值的最优化问题,可以考虑带噪声的有限差分。 
3. 了解基于模型的方法,但是复杂度可能会比较大 
4. 了解坐标下降法和模式搜索算法 
5. 了解基于共轭方向等其他方法。

 

Derivative-Free and Blackbox Optimization

11-24

这是关于黑盒优化的电子书,高清,最新版本,经典著作,英文版

下载

qpOASES库keil移植的问题

02-26

-问答

qpOASES: a parametric active-set algorithm for quadratic programming

11-12

qpOASES: a parametric active-set algorithm for quadratic programming,一种QP问题求解方法,Apollo中的MPC控制使用该方法用于

下载

如何解决labview循环结构中调用matlab节点后,程序运行缓慢的问题

02-28

-问答

网上兼职不靠谱,赚不到钱?来这教你轻松挣几百!大观

qpOASES:特殊QP类型的求解1(翻译)

阅读数 552

ad博文来自: 博客

关注
kkwant

498篇文章

排名:9000+

关注
weixin_40709533

9篇文章

排名:千里之外

关注
Seehidre

637篇文章

排名:7000+

Matlab 不等式 线性方程式最优解

08-02

-问答

如何在服务器中保存OpenAI gym库中的视频

03-05

-问答

二次型求导

阅读数 1549

二次型求导博文来自: jinglingsheshou的博客

no kernel image is available for execution on the device,计算能力不匹配的问题?

03-05

-问答

openssl移植到armBN_mod_inverse:no inverse

03-14

-问答

画图问题,怎样用R语言将多个图片连接在一个圆形上?如下图

02-26

-问答

KUKA KR-16串联6轴机器人D-H坐标系建立以及参数确定问题

04-22

-问答

道路的修建,一个最优化的规划问题的算法,怎么用C语言的代码来实现呢

03-28

-问答

Opencv里vector<Mat>的问题

03-04

-问答

库文件更新,工程本地需要更新库重新编译吗?

03-15

-问答

算法工程师大致是做什么的?大观

使用CVXPY遇到个问题,请教。。

12-06

我用的CVXPY做最优化,一组数据昨天还能跑出结果的,刚才再一跑就出现这个 Internal problem occured in ECOS while setting up the problem的论坛

数值优化(Numerical Optimization)学习

阅读数 1972

数值优化学习参考CSDN博客博文来自: u012238433的博客

3.webpack的optimization配置

阅读数 867

阿达博文来自: weixin_43678786的博客

没有更多推荐了,返回首页

 

数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization)的更多相关文章

  1. Caffe 学习系列

    学习列表: Google protocol buffer在windows下的编译 caffe windows 学习第一步:编译和安装(vs2012+win 64) caffe windows学习:第一 ...

  2. 数值优化(Numerical Optimization)学习系列-文件夹

    概述 数值优化对于最优化问题提供了一种迭代算法思路,通过迭代逐渐接近最优解,分别对无约束最优化问题和带约束最优化问题进行求解. 该系列教程能够參考的资料有 1. <Numerical Optim ...

  3. 数值优化(Numerical Optimization)学习系列-目录

    数值优化(Numerical Optimization)学习系列-目录 置顶 2015年12月27日 19:07:11 下一步 阅读数 12291更多 分类专栏: 数值优化   版权声明:本文为博主原 ...

  4. [转] 数值优化(Numerical Optimization)学习系列-目录

    from:https://blog.csdn.net/fangqingan_java/article/details/48951191 概述数值优化对于最优化问题提供了一种迭代算法思路,通过迭代逐渐接 ...

  5. opencv-python教程学习系列9-程序性能检测及优化

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍程序性能检测及优化,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环 ...

  6. 在线学习和在线凸优化(online learning and online convex optimization)—基础介绍1

    开启一个在线学习和在线凸优化框架专题学习: 1.首先介绍在线学习的相关概念 在线学习是在一系列连续的回合(rounds)中进行的: 在回合,学习机(learner)被给一个question:(一个向量 ...

  7. 【深度学习系列3】 Mariana CNN并行框架与图像识别

    [深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ...

  8. 【深度学习系列2】Mariana DNN多GPU数据并行框架

    [深度学习系列2]Mariana DNN多GPU数据并行框架  本文是腾讯深度学习系列文章的第二篇,聚焦于腾讯深度学习平台Mariana中深度神经网络DNN的多GPU数据并行框架.   深度神经网络( ...

  9. 深度学习系列 Part(3)

    这是<GPU学习深度学习>系列文章的第三篇,主要是接着上一讲提到的如何自己构建深度神经网络框架中的功能模块,进一步详细介绍 Tensorflow 中 Keras 工具包提供的几种深度神经网 ...

随机推荐

  1. windows下安装MongoDB服务

    1,参考:https://www.cnblogs.com/lecaf/p/mongodb.html 2,要设置环境变量 3,设置用户 use admin  注:MongoDB安装好以后由默认的admi ...

  2. Ubuntu配置ISCSI

      target端: 1.安装 iscsi target相关的软件 $ sudo apt-get install iscsitarget iscsitarget-source iscsitarget- ...

  3. [JDBC]批量提交插入语句以提高数据插入速度(效率提升不明显)

    // Initialize conn&stmt Connection conn=null; Statement stmt=null; ... conn=dataSource.getConnec ...

  4. vscode如何右键选择浏览器运行html文件

    我们利用Vscode软件编写html的时候,一般都想右键选择html文件,然后直接选择浏览器运行,但是默认是没有的: 下面鄙人给大家分享一下如何设置. 这里你会发现有好多类似的插件,你自己选择一个喜欢 ...

  5. handler方法

    post(Runnable) postAtTime(Runnable,long) postDelayed(Runnable long) post类方法允许你排列一个Runnable对象到主线程队列中 ...

  6. C标准库中转换wchar_t和char类型的字符串

    C 库函数 - mbstowcs()  C 标准库 - <stdlib.h> 描述 C 库函数 size_t mbstowcs(schar_t *pwcs, const char *str ...

  7. 11 MySQL之性能优化

    01-优化简介 MySQL数据库优化是多方面的,原则是减少系统瓶颈,减少资源的占用,增加系统的反应速度. 1.通过优化文件系统,提高磁盘I\O的速写速度: 2.通过优化操作系统的调度策略,提高MySQ ...

  8. 一百零九:CMS系统之前端根据不同权限渲染不同菜单

    给用户绑定为开发者 个人信息中渲染角色和权限 {% extends 'cms/cms_base.html' %} {% block title %} 个人信息{% endblock %} {% blo ...

  9. Python3 编程第一步_斐波纳契数列_连续赋值

    # Fibonacci series: 斐波纳契数列 # 两个元素的总和确定了下一个数 a, b = 0, 1 while b < 10: print(b) a, b = b, a+b # 1 ...

  10. Linux命令集锦:ssh命令

    保持连接配置服务端SSH总是被强行中断,导致效率低下,可以在服务端配置,让 server 每隔30秒向 client 发送一个 keep-alive 包来保持连接: vim /etc/ssh/sshd ...