在閱讀相關文獻的時候,經常會遇到梯度下降,座標下降,牛頓迭代這樣的術語,今天把他們的概念整理一下。
梯度下降
整理自百度
梯度下降法是一個最優化算法,通常也稱爲最速下降法。
%% 最速下降法圖示
% 設置步長爲0.1,f_change爲改變前後的y值變化,僅設置了一個退出條件。
syms x;f=x^2;
step=0.1;x=2;k=0; %設置步長,初始值,迭代記錄數
f_change=x^2; %初始化差值
f_current=x^2; %計算當前函數值
ezplot(@(x,f)f-x.^2) %畫出函數圖像
axis([-2,2,-0.2,3]) %固定座標軸
hold on
while f_change>0.000000001 %設置條件,兩次計算的值之差小於某個數,跳出循環
x=x-step*2*x; %-2*x爲梯度反方向,step爲步長,!最速下降法!
f_change = f_current - x^2; %計算兩次函數值之差
f_current = x^2 ; %重新計算當前的函數值
plot(x,f_current,'ro','markersize',7) %標記當前的位置
drawnow;pause(0.2);
k=k+1;
end
hold off
fprintf('在迭代%d次後找到函數最小值爲%e,對應的x值爲%e\n',k,x^2,x)
缺點:
-
靠近極小值時收斂速度減慢。
-
直線搜索時可能會產生一些問題。
-
可能會“之字形”地下降。容易陷入局部最優解
問題的描述:給定一個可微的凸函數,如果在某一點x,使得f(x)在每一個座標軸上都是最小值,那麼f(x)是不是一個全局的最小值。
形式化的描述爲:是不是對於所有的d,i都有
這裏的代表第i個標準基向量。
答案爲成立。
這是因爲:
但是問題來了,如果對於凸函數f,若不可微該會怎樣呢?
答案爲不成立,上面的圖片就給出了一個反例。
那麼同樣的問題,現在,其中g是可微的凸函數,每一個hi都是凸的?
答案爲成立。
證明如下,對每一個y
座標下降(Coordinate descent):
這就意味着,對所有的,其中g是可微的凸函數,每一個hi都是凸的,我們可以使用座標下降尋求一個最小值,我們從一個最初的猜想開始,對k進行循環:
每一次我們解決了,我們都會使用新的值。
Tseng (2001)的開創性工作證明:對這種f(f在緊集上連續,且f到達了其最小值),的極限值,k=1,2,3….是f的一個最小元(minimizer)。
在實分析領域:
隨後收斂與x*( Bolzano-Weierstrass)
收斂於f*( monotoneconvergence)
其中:
座標下降的順序是任意的,可以是從1到n的任意排列。
可以在任何地方將單個的座標替代成座標塊
關鍵在於一次一個地更新,所有的一起更新有可能會導致不收斂
我們現在討論一下座標下降的應用:
線性迴歸:
令,其中,A有p列:
最小化xi,對所有的xj,j不等於i:
解得:
座標下降重複這個更新對所有的
對比座標下降與梯度下降在線性迴歸中的表現(100個實例,n=100,p=20)
將座標下降的一圈與梯度下降的一次迭代對比是不是公平呢?是的。
其中r=y-Ax。每一次的座標更新需要O(n)個操作,其中O(n)去更新r,O(n)去計算,所以一圈就需要O(np),跟梯度下降是一樣的。
我們用相同的例子,用梯度下降進行比較,似乎是與計算梯度下降的最優性相違背。
那麼座標下降是一個一階的方法嗎?事實上不是,它使用了比一階更多的信息。
現在我們再關注一下支持向量機:
SVM對偶中的座標下降策略:
SMO(Sequentialminimal optimization)算法是兩塊的座標下降,使用貪心法選擇下一塊,而不是用循環。
回調互補鬆弛條件(complementaryslackness conditions):
v,d,s是原始的係數,截距和鬆弛,其中,使用任何的(1)中i使得來計算d,利用(1)(2)來計算2.
SMO重複下面兩步:
選出不滿足互補鬆弛的αi,αj
最小化αi,αj使所有的變量滿足條件
第一步使用啓發式的方法貪心得尋找αi,αj,第二步使用等式約束。
牛頓迭代法(Newton’s method)又稱爲牛頓-拉夫遜方法(Newton-Raphson method),它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。
把f(x)在x0點附近展開成泰勒級數 f(x) = f(x0)+(x-x0)f’(x0)+(x-x0)^2*f”(x0)/2! +… 取其線性部分,作爲非線性方程f(x) = 0的近似方程,即泰勒展開的前兩項,則有f(x0)+f’(x0)(x-x0)=0 設f’(x0)≠0則其解爲x1=x0-f(x0)/f’(x0) 這樣,得到牛頓法的一個迭代序列:x(n+1)=x(n)-f(x(n))/f’(x(n))。