機器學習筆記-坐標下降法


坐標下降法(Coordinate Descent)


[轉載自]: https://zhuanlan.zhihu.com/p/59734411?from_voters_page=true

目錄

  1. 坐標下降法的概念
  2. 坐標下降法的原理
  3. 坐標下降法與全局最小值
  4. 總結

坐標下降法(Coordinate Descent)是一個簡單但卻高效的非梯度優化算法。與梯度優化算法沿着梯度最速下降的方向尋找最小值不同,坐標下降法依次沿着坐標軸的方向最小化目標函數值。

1. 坐標下降法的概念

坐標下降法的核心思想是將一個復雜的優化問題分解為一系列簡單的優化問題以進行求解。我們知道,對高維的損失函數

\[f(x_0,x_1,\dots,x_n) \]

求解最小值並不是一件容易的事情,而坐標下降法就是迭代地通過將大多數自變量

\[(x_0, x_1,\dots,x_{i-1},x_{i+1},\dots,x_n) \]

固定,即看作已知常量,而只針對剩余的自變量

\[(x_i) \]

極值的過程。這樣,一個高維的優化問題就被分解成了多個一維的優化問題,從而大大降低了問題的復雜性。

2. 坐標下降法的原理

下面直接通過一個簡單的例子來演示坐標下降法是如何工作的:

假設我們有目標函數

\[f(x,y) = 5x^2-6xy+5y^2 \]

其等高線圖如下所示,求\((x,y)\)以使得目標函數在該點的值最小。


圖1 等高線圖(圖片來源:https://en.wikipedia.org/wiki/Coordinate_descent)

圖中紅色十字標示的是起始點\((-0.5,-1.0)\),此時\(f=3.25\)。現在我們固定\(x\),將\(f\)看成關於\(y\)的一元二次方程並求當\(f\)最小時\(y\)的值:

\[f(x,y) = 5x^2-6xy+5y^2 \]

代入\(x\)的值

\[\begin{aligned} f(y|x=0.5) &= 5\times (-0.5)^2 - 6\times (-0.5)\times y + 5\times y^2 \\ &= 5y^2+3y+1.25 \end{aligned}\]

通過令導數為零,求極值,得到新的\(y\)

\[f^{'}_{y|x=0.5} = 10y+3 = 0 \]

\[y = -0.3 \]

即,現在自變量的取值就更新成了\((-0.5,-0.3)\)\(f=0.8\)。如圖2所示


圖2 第一輪迭代

下一步,將新得到的\(y\)值固定,將\(f\)看成關於\(x\)的一元二次方程並求當\(f\)最小時\(x\)的值。計算過程與上一步相似,由於計算比較簡單,我們直接繪制出經過多輪如上迭代后自變量\((x,y)\)的運動軌跡,如圖3所示:


圖3 多輪迭代坐標變化軌跡

可見,隨着\((x,y)\)依次在相應坐標軸上移動,目標函數逐漸接近其極小值點,直至在某次迭代中函數得不到優化,即達到某一駐點后停止。這就是一次完整的優化過程。我們將這個過程一般化:

對於\(f(x_0,x_1,\dots,x_n)\),求\(x\)以得到

\[\smash{\min_{x=(x_0,x_1,\dots,x_n)}}f(x) \]

假設\(x^{(k)}\)表示第\(k\)輪迭代,那么從初始值開始循環\(k=1,2,3....\):

\[\begin{aligned} x_0^{(k)} & = argmin_{x_0}f(x_0,x_1^{(k-1)},x_2^{(k-1)}, \dots,x_n^{(k-1)}) \\ x_1^{(k)} & = argmin_{x_1}f(x_0^{(k)},x_1,x_2^{(k-1)}, \dots,x_n^{(k-1)}) \\ x_2^{(k)} & = argmin_{x_2}f(x_0^{(k)},x_1^{(k)},x_2, \dots,x_n^{(k-1)}) \\ \vdots \\ x_n^{(k)} & = argmin_{x_n}f(x_0^{(k)},x_1^{(k)},x_2^{(k)}, \dots,x_n) \end{aligned}\]

直至收斂。

注意:每次得到的新的\(x_i^{(k)}\)的值會立即使用到后續的計算中。

以上便是坐標下降法的算法原理。

3. 坐標下降法與全局最小值

那么問題來了,假如我們尋找到了一個點\(x\)使得在所有單個坐標軸上\(f(x)\)都最小,是否證明我們找到了全局最小值點?

這個問題要分情況來看:

a. 若\(f(x)\)是可微的凸函數,答案是Yes,因為\(f(x)\)在任何坐標方向上求偏導都是0,並且對於凸函數來說,局部極小值就是全局最小值,如圖4所示:

\[\nabla f(x) = (\cfrac{\partial f}{\partial x_1}(x), \dots, \cfrac{\partial f}{\partial x_n}(x)) = 0 \]


圖4 可微的凸函數

b. 若\(f(x)\)是不可微的凸函數,答案是No,我們可以很容易舉出反例,比如圖5中算法會在不可微點(右圖中紅色虛線交叉點)停止迭代,因為在任意坐標方向上\(f(x)\)都找不到的更小值了。


圖5 不可微的凸函數

c. 若\(f(x)=g(x) + \sum_{i=0}^nh_i(x_i)\),其中\(g(x)\)是可微的凸函數,而每一個\(h_i\)都是凸函數,答案是Yes,證明如下:

假設\(x_0\)是通過坐標下降法得到的坐標點,那么,對於任意一點\(y\)來說,

\[\begin{aligned} f(y)-f(x) &= g(y)+h(y)-(g(x)+h(x)) \\ &\ge \nabla g(x)^T(y-x)+ \sum_{i=0}^nh_i(y_i)-h_i(x_i) \\ &= \sum_{i=0}^n(\nabla_i g(x)(y_i-x_i)+h_i(y_i)-h_i(x_i)) \\ &\ge 0 \end{aligned}\]


圖6

以上,就是坐標下降法的理論依據。

坐標下降法的幾點注意事項

  • 坐標軸的順序可以是任意的,可以使用\(\{1,2,\dots,n\}\)的任何排列
  • 之前我們介紹的是嚴格的坐標下降法,即每次進沿着單個坐標軸的方向尋找函數極小值。與之對應的是塊坐標下降法,即每次沿着多個坐標軸的方向(超平面)取極值
  • 將新的\(x_i^{(k)}\)的值立馬代入后續的\((x_{i+1}^{(k)},\dots,x_n^{(k)})\)的計算很重要,否則有可能導致不收斂
  • 當多個變量之間有較強的關聯性時,坐標下降不是一個很好的方法。比如函數\(f(x)=(x_1-x_2)^2+\alpha(x_1^2+x_2^2)\),其中\(\alpha\)是正值常數。為了使\(f(x)\)最小,\((x_1-x_2)^2\)鼓勵兩個變量有相似值,而\((x_1^2+x_2^2)\)鼓勵它們趨近於零。最終解是兩者都為零,但當\(\alpha\)很小的時候,坐標下降法會使得優化過程異常緩慢,因為\((x_1-x_2)^2\)不允許單個變量變為和另一個變量當前值顯著不同的值。所以在應用坐標下降法之前可以先使用主成分分析法(Principle Components Analysis,PCA)使各變量之間盡可能相互獨立。

4. 總結

至此,坐標下降法就介紹完了。坐標下降法的優點是非常簡單高效,但與此同時,很多的研究人員也正因為它過於簡單而忽視了它。不過近幾年情況有所好轉,越來越多的人意識到了它的強大競爭力並擴展出了一些變形,逐漸更廣泛地將其應用在實際問題中。


免責聲明!

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



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