數值優化(Numerical Optimization)學習系列-無梯度優化(Derivative-Free Optimization)
概述
在實際應用中,有些目標函數的梯度不容易計算,即使使用有限差分等近似算法,也會因為噪聲的存在導致結果不精確。無梯度優化算法(DFO-Derivative-Free Optimization)可以在不計算梯度的情況下進行問題的最優化,主要有兩類思路,一是根據目標函數的樣本進行擬合,對擬合函數進行最優化;二是用一些啟發式算法。
1. 有限差分和誤差
2. 基於模型近似的方法
3. 坐標和模式搜索方法
4. 其他DFO方法
5. 總結
有限差分和誤差
有限差分方法在某些情況下可能會有一定的誤差,例如如果函數值需要通過隨機試驗進行模擬,此時會引入人為誤差或者儀器誤差。
因此對問題進行建模時,將誤差引入目標函數中,然后利用有限差分和梯度相關算法進行優化。
對誤差進行建模后,然后利用中心有限差分方法,進行梯度的計算
噪聲水平(Noise Level)定義為:
在x附近噪聲最大值。η(x;ϕ)=sup||z−x||≤ϵ|ϕ(z)|η(x;ϕ)=sup||z−x||≤ϵ|ϕ(z)|
此時使用有限差分方法,近似誤差來源於固有誤差和噪聲誤差。
基於模型的方法
主要思路是,在第k步迭代時,基於該點進行模型近似,通過采樣推導出模型中的參數,基於該模型進行最優化計算。
二次模型近似
在第k步迭代時,構建一個二次模型進行近似
由於該模型參數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. 重復以上步驟
對於二維情況下,搜索過程如下
- 從上圖中可以看出,對於條件數比較大的問題,收斂速度非常低。
- 實際中,如果沿着線性獨立的搜索方向搜索,可能不能保證收斂。但是優點是不需要計算梯度,並且對於變量松耦合的情況下,收斂速度可以接受。
- 另外為了進行優化,搜索方向可以選擇為{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. 否則減少步長
關鍵點
- 初始化搜索方向集合D0D0如何選取,需要保證包含最優解的方向。
- 有理論保證如果搜索方向滿足一下條件,則一定能保證收斂。
κ(Dk)=minv∈Rnmaxp∈DkvTp||v||||p||≥δκ(Dk)=minv∈Rnmaxp∈DkvTp||v||||p||≥δβmin≤||p||≤βmaxp∈Dkβmin≤||p||≤βmaxp∈Dk- 條件1說明需要保證最少有一個搜索方向和最優方向的夾角小於90,即cos(θθ) > δδ,不能再相反的方向,否則不容易收斂。
- 條件2說明搜索方向的模不能相差太大,因此搜索步長統一進行縮放。
- 滿足條件的搜索方向有 {e1,e2...en,−e1...−ene1,e2...en,−e1...−en},供2n個搜索方向或者{pi=12ne−ei,pn+1=12nepi=12ne−ei,pn+1=12ne},供n+1個點
- 遞增函數可以選擇為ρ(t)=Mt3/2ρ(t)=Mt3/2
其他DFO算法
共軛方向算法
類似於共軛梯度方法,該方法的目標是最優化
Parallel subspace property
通過該方法可以找到一系列共軛方向,並且沿着該方向可以得到最優解,以二維情況為例
如上圖如果直線l1和l2平行,並且x1*和x2*是目標函數沿着該直線的最優解,則x1*-x2*共軛於直線的法向量。
因此只要沿着某兩個平行子空間尋找最優解,則最優解的差就共軛於該平面的法向量。
假設{p1,p2...plp1,p2...pl}是線性獨立的向量,定義兩個平行平面
證明很簡單
由於x1*是最優解,則有
根據共軛條件可以得到。
Nelder-Mead 方法
也叫做Nelder-Mead simplex reflection方法。
保存n+1個點,並且這些點構成一個單純性,在每次循環中搜索使得函數值最低的點,去掉后,用其他更好的點替代。
Implicit Filtering方法
對比於帶有噪聲的有限微分方法,適用於noise level隨着迭代減小的情形。
總結
通過該小結的學習,可以了解到
1. 對於梯度不可求的復雜函數,可以通過DFO的方式進行優化
2. 通過隨機試驗估計函數值的最優化問題,可以考慮帶噪聲的有限差分。
3. 了解基於模型的方法,但是復雜度可能會比較大
4. 了解坐標下降法和模式搜索算法
5. 了解基於共軛方向等其他方法。
數值優化(Numerical Optimization)學習系列-懲罰和增廣拉格朗日方法(Augmented Lagrangian Methods)
閱讀數 1431
概述求解帶約束的最優化問題,一類很重要的方法就是將約束添加到目標函數中,從而轉換為一系列子問題進行求解,最終逼近最優解。關鍵問題是如何將約束進行轉換。本節主要介紹1.二次懲罰方...博文來自: kkwant的博客

qpOASES:使用說明(翻譯)
閱讀數 1431
qpOASES使用說明1 說明2 主要步驟創建QProblem類的實例第一個QP的初始化和求解求解后續QP一個實列設置自己的實例本文將在幾分鍾內向您解釋如何通過qpOASES解決二次規划(QP)問題或...博文來自: 博客
數值優化(Numerical Optimization)學習系列-目錄
閱讀數 1萬+
概述數值優化對於最優化問題提供了一種迭代算法思路,通過迭代逐漸接近最優解,分別對無約束最優化問題和帶約束最優化問題進行求解。該系列教程可以參考的資料有1.《NumericalOptimization2...博文來自: fangqingan_java的專欄
Derivative-Free and Blackbox Optimization
11-24qpOASES庫keil移植的問題
-問答
qpOASES: a parametric active-set algorithm for quadratic programming
11-12如何解決labview循環結構中調用matlab節點后,程序運行緩慢的問題
-問答
神經網絡控制學習筆記——神經網絡背景1
閱讀數 686
神經網絡控制學習筆記——BackgroundonNeuralNetworks1因為不太熟悉怎么用CSDN的編輯器來編輯文本,也懶得花時間學了。這里貼上在word寫好后轉成pdf的截圖好了。相關的引用文...博文來自: huangdianye
數值優化(Numerical Optimization)學習系列-概述
閱讀數 1萬+
數值優化的學習過程是長期的、是枯燥的也是最有用的,一旦入門對機器學習者、算法工作者都會有很大的幫助。在此記錄NumericalOptimization的學習、思考和實踐。...博文來自: fangqingan_java的專欄

數值優化(Numerical Optimization)學習系列-大規模無約束最優化(Large-Scale Unconstrained Optimization)
閱讀數 2128
概述當最優化問題參數個數增加,求解問題所需要的時間和空間復雜度會增加。計算時間和空間是一個權衡,只需要存儲一階梯度時,時間復雜度可能為超線性;如果利用Hessian矩陣可以達到二次收斂,但是需要o(n...博文來自: fangqingan_java的專欄
Apollo代碼學習(六)—模型預測控制(MPC)
閱讀數 1萬+
Apollo代碼學習—模型預測控制前言模型預測控制預測模型滾動優化反饋矯正前言查看Apollo中關於MPC_controller的代碼可以發現,它的主體集成了橫縱向控制,在計算控制命令時,計算了橫縱向...博文來自: follow輕塵的博客
Matlab 不等式 線性方程式最優解
-問答
百度Apollo自動駕駛專題講座筆記之運動規划模塊
閱讀數 145
主講人:范昊陽包括運動規划基礎概述、自動駕駛運動規划、環境下運動規划、運動規划內優化、Apolloemplanner開發環節、強化學習與數據驅動方法七個部分第一部分:運動規划基礎概述1、什么是規划問題...博文來自: zhongweidu3的博客
如何在服務器中保存OpenAI gym庫中的視頻
-問答
python,matlab,C++ 凸優化庫——anaconda spyder->cvxpy,matlab->cvx,C++->qpOASES
閱讀數 356
python:使用spyder安裝所需庫,包時需要在控制台輸入命令!pipinstallxxxx但是有可能源不太好,導致安裝失敗因此最好去官網下載,然后將下載包放置到工作空間,使用!pipinstal...博文來自: qinze5857的博客
Python——使用scipy求解帶約束的最優化問題
閱讀數 1013
我們要求解的最優化問題的形式如下:min f(x)s.t.gi(x)>0,i=1,...,mhj(x)=0,j=1,...,n\begin{aligned}min\f(x)\\...博文來自: HappyRocking的專欄

rqt_plot工具——ROS中查看變量時間趨勢線
閱讀數 1405
rqt_plot工具——ROS中查看變量時間趨勢線工欲善其事,必先利其器本篇博文依舊是小白教程,最近在寫利用二次規划方法優化機械臂關節軌跡的代碼。想要通過查看誤差變量的時間趨勢線看一下控制效果。百度了...博文來自: huangdianye
roscpp添加第三方依賴庫——以QuadProg++為例
閱讀數 594
roscpp添加第三方依賴庫——以QuadProg++為例roscpp添加第三方依賴庫——以QuadProg++為例【小白教程,不喜勿噴】昨天倒騰了一晚上,在roscpp的C++代碼中添加求解二次規划...博文來自: huangdianye
no kernel image is available for execution on the device,計算能力不匹配的問題?
-問答
openssl移植到armBN_mod_inverse:no inverse
-問答
畫圖問題,怎樣用R語言將多個圖片連接在一個圓形上?如下圖
-問答
KUKA KR-16串聯6軸機器人D-H坐標系建立以及參數確定問題
-問答
道路的修建,一個最優化的規划問題的算法,怎么用C語言的代碼來實現呢
-問答
Opencv里vector<Mat>的問題
-問答
庫文件更新,工程本地需要更新庫重新編譯嗎?
-問答
基於【Apollo】進程異常崩潰定位方法
閱讀數 807
現象在dreamview里面,打開Navi_planning或者Planning模塊的開關,開關運行一段時間后會自動關閉並重新開啟。定位過程查看dreamview代碼,模塊開關定義在modules/d...博文來自: sunyoop的博客
ubuntu 16.04下安裝和配置ros(ORB-SLAM-A)
閱讀數 2339
書上和網上關於ubuntu下安裝ros的文章很多,但是很多介紹的不完整,並且ubuntu和ros之間其實是有版本對應關系的,並不是所有的ros都能安裝到所有的ubuntu上,(很多書上或者文章介紹用的...博文來自: 開源節流

使用CVXPY遇到個問題,請教。。
我用的CVXPY做最優化,一組數據昨天還能跑出結果的,剛才再一跑就出現這個 Internal problem occured in ECOS while setting up the problem的論壇
數值優化(Numerical Optimization)學習系列-信賴域方法
閱讀數 9833
信賴域方法和線搜索類似都是迭代方法,與其不同的是,每次迭代時,在一個選定的可信賴區域內,選擇當前迭代點的近似模型mkm_k,然后計算最優步長;如果步長不合適,可以對區域進行縮放。該小結主要介紹:信賴域...博文來自: fangqingan_java的專欄
matlab學習optimization tools (solve中各方法的理解應用)
閱讀數 827
1.quadprog二次規划的函數Matlab中二次規划的數學模型可表述如下其中H是把目標函數二次項部分進行實對稱矩陣,???這個什么意思?f是線性函數的列向量。例求解二次規划得到h=[4,-4;-4...博文來自: ZC496496的博客

webpack4 optimization配置
閱讀數 5978
從webpack4開始官方移除了commonchunk插件,改用了optimization屬性進行更加靈活的配置,這也應該是從V3升級到V4的代碼修改過程中最為復雜的一部分,下面的代碼即是optimi...博文來自: 柏燦的博客

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