數值優化(Numerical Optimization)學習系列-無梯度優化(Derivative-Free Optimization)


 

數值優化(Numerical Optimization)學習系列-無梯度優化(Derivative-Free Optimization)

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/fangqingan_java/article/details/48946903

概述

在實際應用中,有些目標函數的梯度不容易計算,即使使用有限差分等近似算法,也會因為噪聲的存在導致結果不精確。無梯度優化算法(DFO-Derivative-Free Optimization)可以在不計算梯度的情況下進行問題的最優化,主要有兩類思路,一是根據目標函數的樣本進行擬合,對擬合函數進行最優化;二是用一些啟發式算法。 
1. 有限差分和誤差 
2. 基於模型近似的方法 
3. 坐標和模式搜索方法 
4. 其他DFO方法 
5. 總結

有限差分和誤差

有限差分方法在某些情況下可能會有一定的誤差,例如如果函數值需要通過隨機試驗進行模擬,此時會引入人為誤差或者儀器誤差。 
因此對問題進行建模時,將誤差引入目標函數中,然后利用有限差分和梯度相關算法進行優化。

 
f(x)=h(x)+ϕ(x)f(x)=h(x)+ϕ(x)
其中函數h表示某平滑函數, ϕϕ表示誤差分布函數,該函數可以和參數x有關也可以無關。

 

對誤差進行建模后,然后利用中心有限差分方法,進行梯度的計算

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

 

噪聲水平(Noise Level)定義為: 
在x附近噪聲最大值。η(x;ϕ)=sup||zx||ϵ|ϕ(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,en1...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)=minvRnmaxpDkvTp||v||||p||δκ(Dk)=minv∈Rnmaxp∈DkvTp||v||||p||≥δ
     
    βmin||p||βmaxpDkβmin≤||p||≤βmaxp∈Dk
  3. 條件1說明需要保證最少有一個搜索方向和最優方向的夾角小於90,即cos(θθ) > δδ,不能再相反的方向,否則不容易收斂。
  4. 條件2說明搜索方向的模不能相差太大,因此搜索步長統一進行縮放。
  5. 滿足條件的搜索方向有 {e1,e2...en,e1...ene1,e2...en,−e1...−en},供2n個搜索方向或者{pi=12neei,pn+1=12nepi=12ne−ei,pn+1=12ne},供n+1個點
  6. 遞增函數可以選擇為ρ(t)=Mt3/2ρ(t)=Mt3/2

其他DFO算法

共軛方向算法

類似於共軛梯度方法,該方法的目標是最優化

 
f(x)=12xTAxbTxf(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(x1+αipi)αi=f(x1+αipi)pi∂f(x1∗+αipi)∂αi=∂f(x1∗+αipi)pi
,當αi=0f(x1)pi=0αi=0,∇f(x1∗)pi=0,根據最優化條件得到 
 
0=(f(x1)f(x2))pi=(Ax1bAx2+b)pi=(x1x2)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 關注
kkwant

 

498篇文章

排名:9000+

weixin_40709533 關注
weixin_40709533

 

9篇文章

排名:千里之外

Seehidre 關注
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的博客

沒有更多推薦了,返回首頁

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM