乙個簡單的最優化問題如下:
在二維空間上尋找函式的最大值。
一般我們常見的解析法,是求導,得極值點。這裡不再討論。
很多情況下解析法很難求解,常會用到一種迭代慢慢逼近的方法,就是迭代法。如下圖。
迭代法由乙個基本的可行點出發,依次產生乙個可行點列,x1,x2,…,xk,f(xk+1)迭代法基本步驟如下:
1. 乙個初始的位置x0;
2. 乙個迭代搜尋的方向p
3. 乙個前進的步長a.
乙個很自然的問題,關於目標函式f(x),我們要選擇哪個方向才能夠下降最快呢?
由taylor公式有:
其中a表示步長,p表示方向。
當a一定時,p取-g(x)方向,能夠使得f(x+ap)最小,也就是當前下降最快,即
為最速下降方向。
如果做精確的搜尋,那麼我們可以求得乙個精確的步長:
不過精確搜尋計算量過大,一般不採用這種方法,而是任意指定乙個可行的步長。
關於收斂性:
經證明,最速下降法是整體收斂的,且為線性收斂,收斂速度較慢。
用matlab求解y=x^2-3x+1,如下:
clear;
clc;
x=-1:0.1:3;
y=x.*x-3*x+1;
e=0.0001;
a=0.5;
e_temp=1;
x=-1;
count=0;
while(e_temp>e)
p=2*x-3;
x_temp=x;
x=x-a*p;
e_temp=x-x_temp;
count=count+1;
endminy=x*x-3*x+1
minx=x
count
plot(x,y);
圖:
結果為:
miny =
-1.2500
minx =
1.5000
迭代次數:2
最速下降法以線性的taylor展開得出下降方向,本質使用線性函式假設目標函式。我們想要達到更快的收斂,需要考慮對目標函式的高維逼近。
我們把f(x)看做關於xk的乙個二維函式,然後用解析法求出二維函式的精確最小值,得到xk+1。
首先,f(x)在xk處taylor展開,只保留到二次:
我們把xk當做已知變數,x為未知,用解析法直接求解x,得到近似值。
如果f(x)是二次函式,那麼newton法一次就能得到最優值。
另一種更直觀的解釋:
假設函式f(x),如下,現在要求解f(x)的零點。
可以按照上圖中的方法迭代求解,每次的更新如下:
現在,對於l(x),我們要求其最小值,也就是l'(x)=0的點。參照上面的方法,我們有如下更新:
收斂性:
只有當初始點x0充分接近極小點時,才能保證收斂,否則直接扔掉二次以後的taylor項,會導致區域性收斂,而且每次迭代都要計算g,如果g是奇異的,還不能得到解。
newton是二次收斂的,是其最大優勢。
matlab求解y=x^3+10x^2+1,如下:
clear;
clc;
x=-1:0.1:3;
y=x.*x.*x+10*x.*x+1;
e=0.0001;
e_temp=1;
x=-1;
while(e_temp>e)
g=6*x+20;
p=(3*x*x+20*x)/(g);
x_temp=x;
x=x-p;
e_temp=x-x_temp;
endminy=x*x-3*x+1
minx=x
plot(x,y);
圖:
結果:miny =
0.9806
minx =
0.0065
迭代次數:2
同樣是通過taylor展開得到的方向,最速下降法取其一次部分,假設函式為線性。而newton法取二次,假設函式維二次,會有更快的收斂速度,不過也有上述的種種問題。
對於newton的缺點,改進的有相應的阻尼newton等等方法。
擬牛頓法與最速下降法
擬牛頓法是求解非線性優化問題最有效的方法之一。dfp bfgs l bfgs演算法都是重要的擬牛頓法。對f x 在xn附近做一階泰勒展開 f x f xn f xn x xn 假設xn 1是該方程的根 那麼就得到 xn 1 xn f xn f xn 通過不斷迭代從而得到真正的函式的根x 即是對一階導...
最速下降法 and 共軛梯度法
註明 程式中呼叫的函式jintuifa.m golddiv.m我在之前的筆記中已貼出 最速下降法 最速下降法求解f 1 2 x1 x1 9 2 x2 x2的最小值,起始點為x0 9 1 演算法根據最優化方法 天津大學出版社 97頁演算法3.2.1編寫 v1.0 author liuxi bit fo...
機器學習 最速下降法和牛頓下降法
入門教材常用二分法來求解實數求根的問題。我們現在來用普通迭代法 下降法來求解實數開立方根的問題。設當前實數為n,求根次數為k,根為s,那麼有s k n。所得偏差函式為f s s k n。顯然當代價函式f s 0時,我們便求出了n的k次根。現在我們開立方根,那麼k 3,代價函式為f s s 3 n。普...