無約束最佳化約束

來源:互聯網
上載者:User

標籤:des   http   使用   資料   問題   演算法   

無約束最佳化概述

無約束最佳化的基本問題是要解決如下的問題:$$ argmin_x \; f(x) $$在這裡要求$ f(x) $是連續且可導的。

最佳化的基本策略

如果最佳化問題不能夠直接求解,那麼解決問題的方法只有通過不停的迭代。迭代的基本方式如下:

  1. 設定初始點 $ x_0 $,同時設定迭代計數器 $ i = 0 $ ;
  2. 根據當前點 $x_i$ 的$ Gradient,Hessian$ 或者是之前點的資訊計算得最佳化方向$ d_i $
  3. 計算最佳化方向 $ di $ 對應的步長 $ \alphai $,然後獲得下一個點 $ x{i+1} = xi + \alphai di $
  4. 計算當前點 $ x_{i+1} $ 是否收斂,如果收斂則獲得答案,否則轉回步驟2。

在這樣的計算架構中,基本可以分解成三部分,第一是是產生最佳化方向,第二是計算步長,第三是檢查整個過程是否收斂。一個完成的最佳化演算法就是由這三個部分組成的。計算步長的過程基本可以獨立於第一步,第三步和第一步是整個演算法最密切相關的。

對一個演算法的評估包括以下幾個方面,首先是演算法的收斂速度如何,然後是演算法的計算複雜度是多少,最後會考慮演算法的穩定性。穩定性的考慮是因為演算法的解決依賴於數值計算方法,如果演算法不穩定,那麼會導致一個理論可行的演算法不能給出最優解甚至不能解決問題。

$ Gradient Descent $

梯度下降法的推到特別簡單,使用泰勒一階展式即可:$$ f(xk + dk) = f(xk) + \nabla f(x) ^ T dk + o $$在這裡 $ O $ 代表一個低階項,先在足夠近的情況下可以直接忽略。使用這樣的近似,可以看出如果想要減小函數值,那麼選擇$ \; d_k \; $為 $ - \nabla f(x) $即可,當 $ \nabla f(x) $ 為0時,函數值無法再減小,因此可以使用 $ \nabla f(x) $ 作為終止條件。由於使用的是一階展式,如果步長過大,那麼這樣的近似就可能是錯誤的。而且梯度下降法在問題的規模較大時需要花費很長的時間收斂,因此在現實中幾乎不可用。

$ Newton Method $

牛頓法可以使用泰勒二階展式推到:$$ f(xk + dk) = f(xk) + \nabla f(x) ^ T dk + 1/2 \cdotp dk ^ T Hk dk + o $$對這個二階的問題最佳化,對右邊的等式求導並令其倒數為0,可獲得方向 $ dk = - Hk ^ {-1} \nabla f(x) $。迭代的停止條件可以選擇是$ \nabla f(x) $或者是 $ \nabla f(x) ^ T Hk \nabla f(x) $,如果這兩個數值小於一定的程度,那麼可以考慮將演算法收斂。牛頓法最大的問題就在于海森矩陣的計算,如果問題的規模較大,而且沒有特殊的結構可以使用,牛頓法就是不可使用的。

$ Quasi-Newton Method $

牛頓法具有二次收斂速度,但是需要計算 $ Hk $,因此擬牛頓法的提出是為瞭解決這個問題。在擬牛頓法中不顯示的計算海森矩陣,而且從每一步的迭代資訊中構造海森矩陣的一個近似,替代真實的海森矩陣去計算最佳化方向。在牛頓法中迭代方向計算是 $ dk = - Hk ^ {-1} \nabla f(xk) $,現在計算方法如下 $ dk = - Bk \nabla f(xk) $。為了唯一的求得矩陣$ Bk $,我們必須施加一定的限制。假設當前點為$ xk $,迭代方向是$ \alphak dk $,下一個迭代點 $ x{k+1} = xk + \alphak dk $,在點 $ x{k+1} $ 上構造近似如下:$$ f(p) = f(x{k+1}) + \nabla f(x{k+1}) ^ T p + 1/2 p ^ T B{k+1} p $$對這個函數求導可得 $ \nabla f(p) = B{k+1} p \; +\; \nabla f(x{k+1}) $,如果將$ p = xk - x{k+1} $,那麼近似函數的倒數應該等於函數$ f(x) $ 在 $ xk $ 處的導數$ \nabla f(xk) $:$$ \nabla f(xk) = B{k+1}p +\nabla f(x{k+1}) $$定義$ sk = x{k+1} - xk; yk = \nabla f(x{k+1}) - \nabla f(xk) $,那麼上述公式可以寫成如下形式: $$ B{k+1} sk = yk $$事實上如果要求 $ B{k+1} $ 是 $ Hk $ 的近似,那麼應該滿足如下的等式要求:$$ B{k+1} si = yi \quad (i =0, 1, ..., k) $$因此為了獲得$ B{k+1} $,我們需要最佳化如下的問題:$$ argminB \left|| B - Bk \right|| $$$$ s.t. B = B ^ T ; B sk = yk $$使用不同的範數,可以獲得不同的由 $ Bk $ 產生 $ B_{k+1} $的方法。

$ SR1 \; Update $

全稱是Symmetric Rank 1 updae, 具有如下形式的迭代:$$ B{k+1} = Bk + \alpha \beta \beta ^ T $$這裡主要的問題就在於如何計算這個修正項。 (skip )

$ DFP & BFGS Update $

對應的是兩個不同的更新規則,但是這裡使用的是Rank 2更新。 Wikipedia

$ L-BFGS Update $

在BFGS更新的基礎上,只保留最近幾個迭代的資訊用於計算海森矩陣的近似。可以適用於大規模的資料最佳化。在這個演算法中不需要顯示的構造矩陣 $ B_k $ 即可完成迭代方向的計算。

$ Conjugate \; Gradient $

共軛梯度法本來是為解方程 $Ax = b$ 提出的,但是最後發現也可以使用到一般的函數最佳化中。共軛梯度法就是在一組相互共軛的方向上最佳化目標函數,知道目標函數達到最優點。兩個向量共軛定義如下: $$ v ^ T H \mu = 0 $$ 其中矩陣H是正定矩陣。如果一組向量共軛,那麼意味著這組向量中任意兩個向量都是共軛向量。可以證明對於二次函數 $ 1/2 x ^ T A x + b ^ T x $來說,沿著一組有n個向量的方向最佳化,那麼最終可以到達最優點。對於共軛梯度來來說,產生新的迭代方向使用如下的公式:h $$ d{k+1} = - \nabla f(x{k+1}) + \beta dk $$,也就是實現當前點的梯度和之前的迭代方向來產生新的最佳化方向 $d{k+1}$。相比於其他的方法,共軛梯度法使用更少的記憶體,這是很大的優勢。

評價

從數值最佳化的角度,梯度下降法幾乎不可用,因此對於實際的問題可能需要很長的時間去迭代。但是對於機器學習來說,這卻不是問題,因為機器學習方法並不對解的精度有要求,唯一的要求是泛化效能。牛頓法具有二階收斂速度,但是由於需要使用很多的記憶體,因此在實際中很少使用。擬牛頓法和L-BFGS方法,由於需要的記憶體較少,而且可以實現超線性收斂,在實踐中被廣泛使用,特別是L-BFGS。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.