智能算法學習筆記

這是我自己看智能算法的時候的一些筆記,貼出來給大家看一下,如果有理解錯誤的地方,千萬請指出,小生在這裏先謝過了^_^

一個比方
在工程實踐中,經常會接觸到一些比較“新穎”的算法或理論,比如模擬退火,遺傳算法,禁忌搜索,神經網絡等。這些算法或理論都有一些共同的特性(比如模擬自然過程),通稱爲“智能算法”。它們在解決一些複雜的工程問題時大有用武之地。
這些算法都有什麼含義?首先給出個局部搜索,模擬退火,遺傳算法,禁忌搜索的形象比喻:
爲了找出地球上最高的山,一羣有志氣的兔子們開始想辦法。
1.兔子朝着比現在高的地方跳去。他們找到了不遠處的最高山峯。但是這座山不一定是珠穆朗瑪峯。這就是局部搜索,它不能保證局部最優值就是全局最優值。
2.兔子喝醉了。他隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。但是,他漸漸清醒了並朝最高方向跳去。這就是模擬退火。
3.兔子們吃了失憶藥片,並被髮射到太空,然後隨機落到了地球上的某些地方。他們不知道自己的使命是什麼。但是,如果你過幾年就殺死一部分海拔低的兔子,多產的兔子們自己就會找到珠穆朗瑪峯。這就是遺傳算法。
4.兔子們知道一個兔的力量是渺小的。他們互相轉告着,哪裏的山已經找過,並且找過的每一座山他們都留下一隻兔子做記號。他們制定了下一步去哪裏尋找的策略。這就是禁忌搜索。
智能優化算法的概述

智能優化算法要解決的一般是最優化問題。最優化問題可以分爲(1)求解一個函數中,使得函數值最小的自變量取值的函數優化問題和(2)在一個解空間裏面,尋找最優解,使目標函數值最小的組合優化問題。典型的組合優化問題有:旅行商問題(Traveling Salesman Problem,TSP),加工調度問題(Scheduling Problem),0-1揹包問題(Knapsack Problem),以及裝箱問題(Bin Packing Problem)等。
優化算法有很多,經典算法包括:有線性規劃,動態規劃等;改進型局部搜索算法包括爬山法,最速下降法等,本文介紹的模擬退火、遺傳算法以及禁忌搜索稱作指導性搜索法。而神經網絡,混沌搜索則屬於系統動態演化方法。
優化思想裏面經常提到鄰域函數,它的作用是指出如何由當前解得到一個(組)新解。其具體實現方式要根據具體問題分析來定。
一般而言,局部搜索就是基於貪婪思想利用鄰域函數進行搜索,若找到一個比現有值更優的解就棄前者而取後者。但是,它一般只可以得到“局部極小解”,就是說,可能這隻兔子登“登泰山而小天下”,但是卻沒有找到珠穆朗瑪峯。而模擬退火,遺傳算法,禁忌搜索,神經網絡等從不同的角度和策略實現了改進,取得較好的“全局最小解”。

 

 


模擬退火算法(Simulated Annealing,SA)

    模擬退火算法的依據是固體物質退火過程和組合優化問題之間的相似性。物質在加熱的時候,粒子間的布朗運動增強,到達一定強度後,固體物質轉化爲液態,這個時候再進行退火,粒子熱運動減弱,並逐漸趨於有序,最後達到穩定。
模擬退火的解不再像局部搜索那樣最後的結果依賴初始點。它引入了一個接受概率p。如果新的點(設爲pn)的目標函數f(pn)更好,則p=1,表示選取新點;否則,接受概率p是當前點(設爲pc)的目標函數f(pc),新點的目標函數f(pn)以及另一個控制參數“溫度”T的函數。也就是說,模擬退火沒有像局部搜索那樣每次都貪婪地尋找比現在好的點,目標函數差一點的點也有可能接受進來。隨着算法的執行,系統溫度T逐漸降低,最後終止於某個低溫,在該溫度下,系統不再接受變化。
模擬退火的典型特徵是除了接受目標函數的改進外,還接受一個衰減極限,當T較大時,接受較大的衰減,當T逐漸變小時,接受較小的衰減,當T爲0時,就不再接受衰減。這一特徵意味着模擬退火與局部搜索相反,它能避開局部極小,並且還保持了局部搜索的通用性和簡單性。
在物理上,先加熱,讓分子間互相碰撞,變成無序狀態,內能加大,然後降溫,最後的分子次序反而會更有序,內能比沒有加熱前更小。就像那隻兔子,它喝醉後,對比較近的山峯視而不見,迷迷糊糊地跳一大圈子,反而更有可能找到珠峯。
值得注意的是,當T爲0時,模擬退火就成爲局部搜索的一個特例。

 

模擬退火的僞碼錶達:
procedure simulated annealing
begin
t:=0;
initialize temperature T
select a current string vc at random;
evaluate vc;
repeat
  repeat
   select a new string vn in the neighborhood of vc;      (1)
   if f(vc)<f(vn)
     then vc:=vn;
     else if random [0,1] <exp ((f (vn)-f (vc))/T)         (2)
           then vc:=vn;
until (termination-condition)                        (3)
T:=g(T,t);                                         (4)
T:=t+1;
   until (stop-criterion)                                 (5)
end;

上面的程序中,關鍵的是(1)新狀態產生函數,(2)新狀態接受函數,(3)抽樣穩定準則,(4)退溫函數,(5)退火結束準則 (簡稱三函數兩準則)是直接影響優化結果的主要環節。雖然實驗結果證明初始值對於最後的結果沒有影響,但是初溫越高,得到高質量解的概率越大。所以,應該儘量選取比較高的初溫。
上面關鍵環節的選取策略:
(1)狀態產生函數:候選解由當前解的鄰域函數決定,可以取互換,插入,逆序等操作產生,然後根據概率分佈方式選取新的解,概率可以取均勻分佈、正態分佈、高斯分佈、柯西分佈等。
(2)狀態接受函數:這個環節最關鍵,但是,實驗表明,何種接受函數對於最後結果影響不大。所以,一般選取min [1, exp ((f (vn)-f (vc))/T)]。
(3)抽樣穩定準則:一般常用的有:檢驗目標函數的均值是否穩定;連續若干步的目標值變化較小;規定一定的步數;
(4)退溫函數:如果要求溫度必須按照一定的比率下降,SA算法可以採用 ,但是溫度下降很慢;快速SA中,一般採用 。目前,經常用的是 , 是一個不斷變化的值。
(5)退火結束準則:一般有:設置終止溫度;設置迭代次數;搜索到的最優值連續多次保持不變;檢驗系統熵是否穩定。

爲了保證有比較優的解,算法往往採取慢降溫、多抽樣、以及把“終止溫度”設的比較低等方式,導致算法運行時間比較長,這也是模擬退火的最大缺點。人喝醉了酒辦起事來都不利索,何況兔子?

遺傳算法(Genetic Algorithm, GA)

“物競天擇,適者生存”,是進化論的基本思想。遺傳算法就是模擬自然界想做的事。遺傳算法可以很好地用於優化問題,若把它看作對自然過程高度理想化的模擬,更能顯出它本身的優雅——雖然生存競爭是殘酷的。
遺傳算法以一種羣體中的所有個體爲對象,並利用隨機化技術指導對一個被編碼的參數空間進行高效搜索。其中,選擇、交叉和變異構成了遺傳算法的遺傳操作;參數編碼、初始羣體的設定、適應度函數的設計、遺傳操作設計、控制參數設定五個要素組成了遺傳算法的核心內容。 作爲一種新的全局優化搜索算法,遺傳算法以其簡單通用、健壯性強、適於並行處理以及高效、實用等顯著特點,在各個領域得到了廣泛應用,取得了良好效果,並逐漸成爲重要的智能算法之一。
遺傳算法的僞碼:

procedure genetic algorithm
begin
  initialize a group and evaluate the fitness value ;    (1)
  while not convergent                            (2)
  begin
    select;                                       (3)
    if random[0,1]<pc then                        
      crossover;                                 (4)
    if random (0,1)<pm then                       
      mutation;                                  (5)
  end;
end
上述程序中有五個重要的環節:
(1)編碼和初始羣體的生成:GA在進行搜索之前先將解空間的解數據表示成遺傳空間的基因型串結構數據,這些串結構數據的不同組合便構成了不同的點。然後隨機產生N個初始串結構數據,每個串結構數據稱爲一個個體, N個體構成了一個羣體。GA以這N個串結構數據作爲初始點開始迭代。
比如,旅行商問題中,可以把商人走過的路徑進行編碼,也可以對整個圖矩陣進行編碼。編碼方式依賴於問題怎樣描述比較好解決。初始羣體也應該選取適當,如果選取的過小則雜交優勢不明顯,算法性能很差(數量上佔了優勢的老鼠進化能力比老虎強),羣體選取太大則計算量太大。
(2)檢查算法收斂準則是否滿足,控制算法是否結束。可以採用判斷與最優解的適配度或者定一個迭代次數來達到。
(3)適應性值評估檢測和選擇:適應性函數表明個體或解的優劣性,在程序的開始也應該評價適應性,以便和以後的做比較。不同的問題,適應性函數的定義方式也不同。根據適應性的好壞,進行選擇。選擇的目的是爲了從當前羣體中選出優良的個體,使它們有機會作爲父代爲下一代繁殖子孫。遺傳算法通過選擇過程體現這一思想,進行選擇的原則是適應性強的個體爲下一代貢獻一個或多個後代的概率大。選擇實現了達爾文的適者生存原則。
(4)雜交:按照雜交概率(pc)進行雜交。雜交操作是遺傳算法中最主要的遺傳操作。通過雜交操作可以得到新一代個體,新個體組合了其父輩個體的特性。雜交體現了信息交換的思想。
可以選定一個點對染色體串進行互換,插入,逆序等雜交,也可以隨機選取幾個點雜交。雜交概率如果太大,種羣更新快,但是高適應性的個體很容易被淹沒,概率小了搜索會停滯。
(5)變異:按照變異概率(pm)進行變異。變異首先在羣體中隨機選擇一個個體,對於選中的個體以一定的概率隨機地改變串結構數據中某個串的值。同生物界一樣,GA中變異發生的概率很低。變異爲新個體的產生提供了機會。
變異可以防止有效基因的缺損造成的進化停滯。比較低的變異概率就已經可以讓基因不斷變更,太大了會陷入隨機搜索。想一下,生物界每一代都和上一代差距很大,會是怎樣的可怕情形。

就像自然界的變異適和任何物種一樣,對變量進行了編碼的遺傳算法沒有考慮函數本身是否可導,是否連續等性質,所以適用性很強;並且,它開始就對一個種羣進行操作,隱含了並行性,也容易找到“全局最優解”。


禁忌搜索算法(Tabu Search,TS)

爲了找到“全局最優解”,就不應該執着於某一個特定的區域。局部搜索的缺點就是太貪婪地對某一個局部區域以及其鄰域搜索,導致一葉障目,不見泰山。禁忌搜索就是對於找到的一部分局部最優解,有意識地避開它(但不是完全隔絕),從而獲得更多的搜索區間。兔子們找到了泰山,它們之中的一隻就會留守在這裏,其他的再去別的地方尋找。就這樣,一大圈後,把找到的幾個山峯一比較,珠穆朗瑪峯脫穎而出。
當兔子們再尋找的時候,一般地會有意識地避開泰山,因爲他們知道,這裏已經找過,並且有一隻兔子在那裏看着了。這就是禁忌搜索中“禁忌表(tabu list)”的含義。那隻留在泰山的兔子一般不會就安家在那裏了,它會在一定時間後重新回到找最高峯的大軍,因爲這個時候已經有了許多新的消息,泰山畢竟也有一個不錯的高度,需要重新考慮,這個歸隊時間,在禁忌搜索裏面叫做“禁忌長度(tabu length)”;如果在搜索的過程中,留守泰山的兔子還沒有歸隊,但是找到的地方全是華北平原等比較低的地方,兔子們就不得不再次考慮選中泰山,也就是說,當一個有兔子留守的地方優越性太突出,超過了“best to far”的狀態,就可以不顧及有沒有兔子留守,都把這個地方考慮進來,這就叫“特赦準則(aspiration criterion)”。這三個概念是禁忌搜索和一般搜索準則最不同的地方,算法的優化也關鍵在這裏。

 

 

 

 


僞碼錶達:
procedure tabu search;
begin
  initialize a string vc at random,clear up the tabu list;
  cur:=vc;
  repeat
select a new string vn in the neighborhood of vc;   
if va>best_to_far then {va is a string in the tabu list}
begin
  cur:=va;
  let va take place of the oldest string in the tabu list;
  best_to_far:=va;
end else
begin
  cur:=vn;
  let vn take place of the oldest string in the tabu list;
end;
  until (termination-condition);
end;

以上程序中有關鍵的幾點:
(1)禁忌對象:可以選取當前的值(cur)作爲禁忌對象放進tabu list,也可以把和當然值在同一“等高線”上的都放進tabu list。
(2)爲了降低計算量,禁忌長度和禁忌表的集合不宜太大,但是禁忌長度太小容易循環搜索,禁忌表太小容易陷入“局部極優解”。
(3)上述程序段中對best_to_far的操作是直接賦值爲最優的“解禁候選解”,但是有時候會出現沒有大於best_to_far的,候選解也全部被禁的“死鎖”狀態,這個時候,就應該對候選解中最佳的進行解禁,以能夠繼續下去。
(4)終止準則:和模擬退火,遺傳算法差不多,常用的有:給定一個迭代步數;設定與估計的最優解的距離小於某個範圍時,就終止搜索;當與最優解的距離連續若干步保持不變時,終止搜索;

禁忌搜索是對人類思維過程本身的一種模擬,它通過對一些局部最優解的禁忌(也可以說是記憶)達到接納一部分較差解,從而跳出局部搜索的目的。
 
人工神經網絡(Artificial Neural Network,ANN)

神經網絡從名字就知道是對人腦的模擬。它的神經元結構,它的構成與作用方式都是在模仿人腦,但是也僅僅是粗糙的模仿,遠沒有達到完美的地步。和馮·諾依曼機不同,神經網絡計算非數字,非精確,高度並行,並且有自學習功能。
生命科學中,神經細胞一般稱作神經元,它是整個神經結構的最基本單位。每個神經細胞就像一條胳膊,其中像手掌的地方含有細胞核,稱作細胞體,像手指的稱作樹突,是信息的輸入通路,像手臂的稱作軸突,是信息的輸出通路;神經元之間錯綜複雜地連在一起,互相之間傳遞信號,而傳遞的信號可以導致神經元電位的變化,一旦電位高出一定值,就會引起神經元的激發,此神經元就會通過軸突傳出電信號。
而如果要用計算機模仿生物神經,就需要人工的神經網絡有三個要素:(1)形式定義人工神經元;(2)給出人工神經元的連接方式,或者說給出網絡結構;(3)給出人工神經元之間信號強度的定義。
歷史上第一個人工神經網絡模型稱作M-P模型,非常簡單:
 
其中, 表示神經元i在t時刻的狀態,爲1表示激發態,爲0表示抑制態; 是神經元i和j之間的連接強度; 表示神經元i的閾值,超過這個值神經元才能激發。
這個模型是最簡單的神經元模型。但是功能已經非常強大:此模型的發明人McCulloch和Pitts已經證明,不考慮速度和實現的複雜性,它可以完成當前數字計算機的任何工作。
以上這個M-P模型僅僅是一層的網絡,如果從對一個平面進行分割的方面來考慮的話,M-P網絡只能把一個平面分成個半平面,卻不能夠選取特定的一部分。而解決的辦法就是“多層前向網路”。

            圖2
圖2是多層前向網絡的示意圖。最下面的 稱作輸入層,最上面一層稱作輸出層,任何一箇中間層都接受來自前一層的所有輸入,加工後傳入後一層。每一層的神經元之間沒有聯繫,輸入輸出層之間也沒有直接聯繫,並且僅僅是單向聯繫,沒有反饋。這樣的網絡被稱作“多層前向網絡”。數據在輸入後,經過每一層的加權,最後輸出結果。

                    圖3
如圖3,用可覆蓋面來說明多層網絡的功能:單層網絡只能把平面分成兩部分,雙層網絡就可以分割任意凸域,多層網絡則可以分割任意區域。
爲了讓這種網絡有合適的權值,必須給網絡一定的激勵,讓它自己學習,調整。一種方法稱作“向後傳播算法(Back Propagation,BP)”,其基本思想是考察最後輸出解和理想解的差異,調整權值,並把這種調整從輸出層開始向後推演,經過中間層,達到輸入層。
可見,神經網絡是通過學習來達到解決問題的目的,學習沒有改變單個神經元的結構和工作方式,單個神經元的特性和要解決的問題之間也沒有直接聯繫,這裏學習的作用是根據神經元之間激勵與抑制的關係,改變它們的作用強度。學習樣本中的任何樣品的信息都包含在網絡的每個權值之中。
BP算法中有考察輸出解和理想解差異的過程,假設差距爲w,則調整權值的目的就是爲了使得w最小化。這就又包含了前文所說的“最小值”問題。一般的BP算法採用的是局部搜索,比如最速下降法,牛頓法等,當然如果想要得到全局最優解,可以採用模擬退火,遺傳算法等。當前向網絡採用模擬退火算法作爲學習方法的時候,一般成爲“波爾茲曼網絡”,屬於隨機性神經網絡。
在學習BP算法學習的過程中,需要已經有一部分確定的值作爲理想輸出,這就好像中學生在學習的時候,有老師的監督。如果沒有了監督,人工神經網絡該怎麼學習?
就像沒有了宏觀調控,自由的市場引入了競爭一樣,有一種學習方法稱作“無監督有競爭的學習”。在輸入神經元i的若干個神經元之間開展競爭,競爭之後,只有一個神經元爲1,其他均爲0,而對於失敗的神經元,調整使得向對競爭有利的方向移動,則最終也可能在一次競爭中勝利;
人工神經網絡還有反饋網絡如Hopfield網絡,它的神經元的信號傳遞方向是雙向的,並且引入一個能量函數,通過神經元之間不斷地相互影響,能量函數值不斷下降,最後能給出一個能量比較低的解。這個思想和模擬退火差不多。

人工神經網絡應用到算法上時,其正確率和速度與軟件的實現聯繫不大,關鍵的是它自身的不斷學習。這種思想已經和馮·諾依曼模型很不一樣。

總結
模擬退火,遺傳算法,禁忌搜索,神經網絡在解決全局最優解的問題上有着獨到的優點,並且,它們有一個共同的特點:都是模擬了自然過程。模擬退火思路源於物理學中固體物質的退火過程,遺傳算法借鑑了自然界優勝劣汰的進化思想,禁忌搜索模擬了人類有記憶過程的智力過程,神經網絡更是直接模擬了人腦。
它們之間的聯繫也非常緊密,比如模擬退火和遺傳算法爲神經網絡提供更優良的學習算法提供了思路。把它們有機地綜合在一起,取長補短,性能將更加優良。
這幾種智能算法有別於一般的按照圖靈機進行精確計算的程序,尤其是人工神經網絡,是對計算機模型的一種新的詮釋,跳出了馮·諾依曼機的圈子,按照這種思想來設計的計算機有着廣闊的發展前景

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=152563

 
發佈了1 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章