這篇文章中,我們總結兩類做數值優化迭代算法收斂性證明的方法,同時也討論了優化算法設計的思路。
1. 簡介
數值優化在工程應用中有非常重要的作用。但在使用優化算法時候,算法的收斂性是我們需要認真考慮的東西,例如我們需要知道梯度下降是一階收斂而牛頓法是二階收斂,因此一般情況下,牛頓法會比梯度下降運行更快。了解收斂性後,我們才能更好地應用算法。這裡,我們總結兩類做數值算法收斂性證明的方法,同時討論以後我們自己設計算法的思路。
2. 不動點類
該類中,收斂性的證明多使用不動點定理(Fixed Point Theorems)進行證明。不動點定理(Fixed Point Theorems)是數學證明中一個非常重要的定理,許多重要的數學定理都是由不動點定理證明的,例如偏微分方程解的存在性、博弈論中納什均衡點的存在性以及我們這裡即將介紹的數值算法的收斂性等。我們首先介紹一下不動點定理,然後介紹如何使用不動點定理進行算法收斂性證明。
簡單地說,對一個函數 , 如果有一個點 ,使得 ,那麼我們稱 為 的一個不動點。例如對於函數 ,任意一點都是 的不動點,對於 , 為 的不動點。但並不是所有的函數都是有不動點的,例如 就不具有不動點。那麼一個自然的問題就是 在具有什麼樣的條件下有不動點呢?這裡我們介紹巴拿赫固定點定理(Banach Fixed Point Theorem)。
巴拿赫固定點定理:對於函數 ,其中 為以 為源點, 為半徑的球,如果存在一個數 , 使得
那麼, 具有唯一一個不動點 ,即 ,並且我們能通過下列方法來找到 :找一個初始點 ,並按照 的方法生成一個序列 ,那麼我們有 收斂到 。我們稱 為壓縮映射(contraction mapping)。
注意到巴拿赫固定點定理不僅給出了不動點的存在性,而且給出了唯一性以及構造不動點的辦法。那麼我們如何使用這個不動點定理來進行算法收斂性證明和指導算法設計呢?給定一個算法,為了證明其收斂性,我們可以將算法的每一次迭代看做一個函數 ,算法第 次的輸入為 而輸出為 ,那麼我們首先需要證明 為壓縮映射,即滿足性質 ,根據巴拿赫固定點定理,我們就有 的固定點存在,即我們的整個算法收斂。反過來,如果我們要設計一個迭代算法,求解一個值 ,那麼我們需要構造一個壓縮映射 ,將 作為 的一個不動點,再以任意一個初值 出發,按照 的迭代方式,生成序列 ,最終當迭代次數足夠多的時候, 將離 非常接近,即為 的一個好的估計值。
下面我們通過例子來介紹巴拿赫固定點定理如何指導算法的設計,詳細的證明可以參見更專業的書籍或者論文。
2.1 單個函數的優化
這裡我們考慮下列問題
這裡我們假設 足夠的光滑,具有很好的性質。那麼根據微積分裡的定理,如果 為上述問題的解,那麼 滿足
其中 為 的梯度。如果我們想使用巴拿赫不動點定理來設計一個算法求解 ,那麼,我們必須找到一個函數 ,將 作為 的不動點,並且在不動點處, 能滿足條件 。如何尋找這麼一個函數 呢?我們可以從最簡單的開始,將 取負後兩邊同時加上一個 ,我們得到
我們定義 ,那麼 即為 的一個不動點,所以我們可能會期望按照算法 的方式生成一個序列 並且 會收斂到 。這時,我們需要使用巴拿赫固定點定理。我們得去驗證 是否是一個壓縮映射,即是否滿足條件 ,我們會做下列的計算。假設 為 中的一點,我們有
觀察上述式子,我們知道對於一般的函數 ,上述式子並不會給出 的結果。因此,我們需要限定 的討論範圍。我們假設 滿足下列性質:存在 , ,使得
那麼,根據 ,我們有
因此,要使得 滿足條件 ,我們需要 ,即 。那麼我們可以有下列定理
假設 足夠光滑且滿足 和 ,並且 ,定義函數 ,那麼 有唯一一個不動點 ,且 滿足 。從 開始,我們按照下列方式生成一個序列 ,
則 收斂到 。
可以觀察到,如果我們取 ,在 的不動點 處,我們仍然有 ,看起來如此定義的 也是一個生成迭代算法的好的函數。但是 是否滿足壓縮映射的假設呢?讀者可以試著進行 的計算來查看會發生什麼事情。並且思考如何改變 與 的假設使得計算能夠進行下去,思考你改的假設是否合理等等問題 。
對算法熟悉的讀者知道,由 生成的迭代算法 即為梯度下降算法。類似的構造算法還有牛頓法,我們可以取
其中 為 的二階導數。因此,如果在 的不動點 處, 可逆,我們有 ,即
上述式子給出 ,即 為 的一個極值點。讀者可以搜索相關文獻查閱 為壓縮映射需要滿足的條件。
2.2 兩個函數和的優化
這裡我們考慮下列優化問題
問題 在圖像處理、最優傳輸,最優控制等問題中都有出現。我們可以將 看做一個函數,再使用梯度下降來求解。然而由於 是兩個函數的和,我們又可以採用這個特點設計新的算法。為了更清楚的說明整個思想,我們假設 和 都是足夠光滑的,即我們可以求 和 的導數。雖然以下算法的威力在 和 其中一個不可求導的時候才能體現出來,但這樣可以讓我們在這裡避免討論像子導數(Subgradient)的概念,專注算法的設計思想。
根據微積分的定理,我們知道如果 為 中 的最小值點,那麼我們有
類似上一節中我們構造梯度下降的生成函數的思路,我們需要根據 的條件,將 表示為某個函數 的不動點。下面我們介紹幾種算子的劃分算法。
Forward-Backward Splitting.從
,我們可以得到將 的兩邊同時加上 ,我們得到
其中 為Identity Map,即對任意的 ,我們有 。在 中,我們將算子 求逆,得到
因此,我們可以定義
即為 的一個不動點。我們可以使用 生成算法
可以看出 為沿著 的負梯度方向進行一次梯度下降,而 為沿著 的梯度方向找到梯度上升後能夠到達 的位置的點。因此, 被稱作Forward-Backward Splitting。讀者可以查看相關文獻查閱 為壓縮算子所需要的的條件。
Douglas-Rachford Splitting 這裡,為了書寫的方便,我們定義並定義
其中 為 區間的一個實數。讀者可以驗證如果 是 的不動點,那麼根據 得到的 滿足 ,因此,我們可以使用函數 來生成迭代算法。讀者可以參考論文Linear Convergence and Metric Selection forDouglas-Rachford Splitting and ADMM查閱 為壓縮映射所需要的條件。
注: 可以從上面例子看出,我們有非常多的方法來將優化算法的解表示為某個函數 的不動點,然後根據函數 來生成算法。但是並不是每一個這樣構造的算法都收斂。為了保證收斂性,我們需要構造的函數 是壓縮映射。
3. 能量函數類這裡我們仍然考慮單個函數的優化,我們試圖解決下列優化問題
假設 為函數 的最小值點。我們採用某種迭代算法來計算 ,記 為第 步迭代計算所得的值。為了證明該算法的收斂性,我們找到一個能量函數,(一般叫做Lyapunov函數),該函數度量了 與 之間的某種距離。我們將該能量函數記做 ,能量函數必須是大於等於零的。然後我們證明 為遞減的函數,即對任意的 ,我們有
直覺上講, 描述的是在迭代過程中,隨著迭代次數增加, 離 越來越近,我們的算法在收斂。
下面是幾種常見的能量函數:
當然,這裡列出的能量函數並不完整,例如Fast alteranting direction optimization methods這篇文章中,使用原問題與對偶問題的優化條件的殘差(Primal dual residuals)來定義能量函數。在實際問題中,對於具體的問題如何設計好能量函數,仍然是比較靠科研人員的直覺和經驗。
總結這篇文章中,我們介紹了兩類證明算法收斂性的方法:固定點類與能量函數類。對於固定點類的算法,我們討論了如何基於固定點的思想來設計新的算法。這裡的總結一定是不完全的,隨著更多地閱讀論文,以後有機會將更多的方法納入這個歸納中。