1. 程式人生 > >深度學習 --- 模擬退火演算法詳解(Simulated Annealing, SA)

深度學習 --- 模擬退火演算法詳解(Simulated Annealing, SA)

上一節我們深入探討了,Hopfield神經網路的性質,介紹了吸引子和其他的一些性質,而且引出了偽吸引子,因為偽吸引子的存在導致Hopfield神經網路正確率下降,因此本節致力於解決偽吸引子的存在。在講解方法之前我們需要再次理解一些什麼是偽吸引子,他到底是如何產生的?

簡單來說說就是網路動態轉移過程,狀態掉進了區域性最優解裡了,就是能量函式沒有達到最低,只是掉進了區域性能量最低的狀態,這和我們梯度容易獲得區域性最優解差不多,大家這樣理解就好,想要深入理解的建議自己多參考文獻。為了解決偽吸引子的問題,人們提出了模擬退火演算法和玻爾茲曼機徹底解決了偽吸引子的問題,但是帶來的另外一個問題就是計算量很大,這些我們會一步步的講解。好,我們知道了問題,也知道了方法,現在是看看到底如何解決的,但是前提我們需要搞明白什麼是模擬退火演算法。

模擬退火演算法:

       為了解決區域性最優解問題, 1983年,Kirkpatrick等提出了模擬退火演算法(SA)能有效的解決區域性最優解問題。我們知道在分子和原子的世界中,能量越大,意味著分子和原子越不穩定,當能量越低時,原子越穩定。‘退火’是物理學術語,指對物體加溫在冷卻的過程。模擬退火演算法來源於晶體冷卻的過程,如果固體不處於最低能量狀態,給固體加熱再冷卻,隨著溫度緩慢下降,固體中的原子按照一定形狀排列,形成高密度、低能量的有規則晶體,對應於演算法中的全域性最優解。而如果溫度下降過快,可能導致原子缺少足夠的時間排列成晶體的結構,結果產生了具有較高能量的非晶體,這就是區域性最優解。因此就可以根據退火的過程,給其在增加一點能量,然後在冷卻,如果增加能量,跳出了局部最優解,這本次退火就是成功的,下面我們就詳細講講他是如何在區域性最優解跳出來到全域性最優解的:

        模擬退火演算法包含兩個部分即Metropolis演算法和退火過程。Metropolis演算法就是如何在區域性最優解的情況下讓其跳出來,是退火的基礎。1953年Metropolis提出重要性取樣方法,即以概率來接受新狀態,而不是使用完全確定的規則,稱為Metropolis準則,計算量較低。下面先形象的說一下,然後在因此數學公式:

    假設開始狀態在A,隨著迭代次數更新到B的區域性最優解,這時發現更新到B時,能力比A要低,則說明接近最優解了,因此百分百轉移,狀態到達B後,發現下一步能量上升了,如果是梯度下降則是不允許繼續向前的,而這裡會以一定的概率跳出這個坑,這各概率和當前的狀態、能量等都有關係,下面會詳細說,如果B最終跳出來了到達C,又會繼續以一定的概率跳出來,可能有人會迷惑會不會跳回之前的B呢?下面會解釋,直到到達D後,就會穩定下來。所以說這個概率的設計是很重要的,下面從數學方面進行解釋。

    假設前一個狀態為x(n),系統根據某一指標(梯度下降,上節的能量),狀態變為x(n+1),相應的,系統的能量由E(n)變為E(n+1),定義系統由x(n)變為x(n+1)的接受概率P為:

                                         P = \left\{\begin{matrix} 1, E(n+1)<E(n)& \\ & \\ & \\ e^{-\frac{E(n+1) - E(n)}{T}}, E(n+1) \geq E(n)& \end{matrix}\right.

從上式我們可以看到,如果能量減小了,那麼這種轉移就被接受(概率為1),如果能量增大了,就說明系統偏離全域性最優值位置更遠了,此時演算法不會立刻將其拋棄,而是進行概率操作:首先在區間【0,1】產生一個均勻分佈的隨機數\varepsilon,如果\varepsilon<P,則此種轉移接受,否則拒絕轉移,進入下一步,往復迴圈。其中P以能量的變化量和T進行決定概率P的大小,所以這個值是動態的。

退火演算法的引數控制

       Metropolis演算法是模擬退火演算法的基礎,但是直接使用Metropolis演算法 可能會導致尋優速度太慢,以至於無法實際使用,為了確保在有限的時間收斂,必須設定控制演算法收斂的引數,在上面的公式中,可以調節的引數就是T,T如果過大,就會導致退火太快,達到區域性最優值就會結束迭代,如果取值較小,則計算時間會增加,實際應用中採用退火溫度表,在退火初期採用較大的T值,隨著退火的進行,逐步降低,具體如下:

    (1)初始的溫度T(0)應選的足夠高,使的所有轉移狀態都被接受。初始溫度越高,獲得高質量的解的概率越大,耗費的時間越長。

    (2) 退火速率。 最簡單的下降方式是指數式下降:

                                                    T(n) = \lambda T(n) ,n =1,2,3,.....

                 其中\lambda是小於1的正數,一般取值為0.8到0.99之間。使的對每一溫度,有足夠的轉移嘗試,指數式下降的收斂速度比較慢,其他下降方式如下:

                                                      T(n) = \frac{T(0)}{log(1+t)}

                                                        T(n) = \frac{T(0)}{1+t}

      (3)終止溫度

                        如果在若干次迭代的情況下每有可以更新的新狀態或者達到使用者設定的閾值,則退火完成。

模擬退火的步驟:   

               1.模擬退火演算法可以分解為解空間、目標函式和初始解三部分。

               2.模擬退火的基本思想:

                    (1) 初始化:初始溫度T(充分大),初始解狀態S(是演算法迭代的起點),每個T值的迭代次數L

                    (2) 對k=1, …, L做第(3)至第6步:

                    (3) 產生新解S′

                    (4) 計算增量ΔT=C(S′)-C(S),其中C(S)為代價函式

                    (5) 若ΔT<0則接受S′作為新的當前解,否則以概率exp(-ΔT/T)接受S′作為新的當前解.

                    (6) 如果滿足終止條件則輸出當前解作為最優解,結束程式。

                    終止條件通常取為連續若干個新解都沒有被接受時終止演算法。

                     (7) T逐漸減少,且T->0,然後轉第2步。

模擬退火演算法新解的產生和接受可分為如下四個步驟:

第一步是由一個產生函式從當前解產生一個位於解空間的新解;為便於後續的計算和接受,減少演算法耗時,通常選擇由當前新解經過簡單地變換即可產生新解的方法,如對構成新解的全部或部分元素進行置換、互換等,注意到產生新解的變換方法決定了當前新解的鄰域結構,因而對冷卻進度表的選取有一定的影響。

第二步是計算與新解所對應的目標函式差。因為目標函式差僅由變換部分產生,所以目標函式差的計算最好按增量計算。事實表明,對大多數應用而言,這是計算目標函式差的最快方法。

第三步是判斷新解是否被接受,判斷的依據是一個接受準則,最常用的接受準則是Metropolis準則: 若ΔT<0則接受S′作為新的當前解S,否則以概率exp(-ΔT/T)接受S′作為新的當前解S。

第四步是當新解被確定接受時,用新解代替當前解,這隻需將當前解中對應於產生新解時的變換部分予以實現,同時修正目標函式值即可。此時,當前解實現了一次迭代。可在此基礎上開始下一輪試驗。而當新解被判定為捨棄時,則在原當前解的基礎上繼續下一輪試驗。

模擬退火演算法與初始值無關,演算法求得的解與初始解狀態S(是演算法迭代的起點)無關;模擬退火演算法具有漸近收斂性,已在理論上被證明是一種以概率l 收斂於全域性最優解的全域性優化演算法;模擬退火演算法具有並行性。

退火演算法程式流程圖;

 

       上面就是模擬退火演算法的全部內容了,本節講的僅僅是可以應用在任何出現區域性最優解的的演算法上,還沒和 Hopfield神經網路結合在一起解決偽吸引子的問題,把退火演算法和Hopfield神經網路結合在一起就是玻爾茲曼機了,下一節在詳細探討,本節到此結束。