算法筆記(XIII) 對話進化算法

                                                  圖片

開篇語:

這部分問答來自於Zhang老師,Tang老師以及小組內討論的記錄整理而來,並加入自己的思考,重新整理,主題是關於進化算法的相關內容,並附加如一些關於計算機學科的基本認識以及機器學習的認識(說法不嚴謹,待考證)。

編輯這篇問答的目的在於整理自己的思路,爲下一步打下基礎,同時有些思想也值得其他相關領域已借鑑。

 

(1)進化計算髮展這麼多年,你有什麼看法?

答:談到進化算法,往往很多人想到如遺傳算法、粒子羣以及蟻羣算法等相關算法,然後,對此就存在兩種極端的認識:

1. 對於初學者來說,他們聽到這些玄之又玄的名詞立刻感到這個領域一定艱深,事實上,這些名詞對我們對這個領域的普及推廣曾經有過積極的影響,但是在領域逐漸成熟規範的今天,這些名詞(如所謂的memetic algorithm)已經開始妨礙領域的規範化,這也是很多研究人的共同認識。

2. 第二個極端在於那些計算機學科內的質疑,特別是做確定型算法抑或近似算法的領域研究者。他們認爲作爲對NP難問題的妥協,這些算法的貢獻並不是那麼對計算機學科發展有意義;同時,對於那些數學科班出身研究優化的學者,他們認爲進化算法的求解時近乎於“瞎猜”,說不上道理,而且不能分析,不能給大家保證。

這兩種極端在領域中都是很常見的。在進化計算髮展的前沿上,很多研究者對此進行思考,他們嘗試迴避關於 進化、遺傳、基因、羣體智能等等含糊而有故能玄虛之嫌的說辭,將進化算法併入規範的計算機科學體系中,並給其正名,例如稱之爲 分佈式隨機算法。我對此表示贊成,而且我甚至希望更加的徹底,將進化算法從人工智能學科中剝離開來,而將其併入 計算機算法 中,去除那些進化論、遺傳學、羣體智能等名詞,將進化算法最本質的內容呈現出來。那麼我們要問:什麼是最本質的東西?

我想我在以前已經對此進行簡單的說明,我希望將進化算法歸爲 啓發式算法的一類,所謂啓發式在於解決問題之前,我們引入先驗的知識,或者即使不引入先驗的知識,我們對問題做了假設,如此我簡單的舉個例子,我們使用進化策略的時候,經常在promising點的附近以一定的分佈採樣,這個過程抑或操作,儘管在名詞上稱爲 變異(遺傳學上的名詞),但是其本質是一種假設:那就是在較佳點的附近,我們傾向能發現更好的解(連續函數的連續性),這一點是與我們的常識相符的,比如很多人一起在湖裏釣魚,我們事先並不知道湖那裏魚多。如果有一個人在某個位置釣到魚,大家很快做出假設並猜測:這個位置的附近魚一定很多。我們再舉一個離散問題的例子,這也相關我們熟悉的遺傳算法,衆所周知,它的主要理論是:模式定理,其繁複公式之下表示的是:那些優良的而短的編碼段會在進化中佔優而保留,並期望組合成一個優良的解。顯然這是一個假設,如果我們特意構造一個反例,即那些好的短的編碼段組成的是一個差解。算法在此問題上就成爲無效的了,這就是著名的欺騙問題。它在一定程度上說明了採用二進制編碼以及傳統交叉操作的遺傳算法的搜索極限,總有它不能求解的問題。這也是我在《解決問題的原則》中談到的NFL原理。把握這個原則,相信大家很容易發現自己研究領域中一些方法的侷限性,就此不再多說。

 

(2)能給我們整理一下這個領域的發展過程麼?

答:這是一個很有挑戰的問題,相信我是沒有能力能夠在浩如煙海的文獻中把握領域的發展歷程的,在此我投石問路,嘗試回答這個問題。

在計算機科學的早期,科學家和工程師都發現在紛繁的問題上,傳統的方法的侷限性。如此他們採用一些簡單而有效的算法去求解這些問題,並展現了很強的效果,如著名的蒙特卡洛算法(1940s,我認爲它是以後概率算法的原型)、座標輪換法(1960s)、線搜索法(一維,1960s)、單純形方法(1965,Nelder-Mead 方法)、模式搜索(1961)等,他們是經典的現代啓發式算法,間接啓發了進化算法的提出。現今就有很多的進化算法借鑑他們的思想,甚至直接將他們作爲算法的一部分操作。也就是在這個時期,現今屬於 進化計算 範疇的 進化策略(1960s) 出現了,並在七十年代獲得近一步發展(不同於進化算法,進化策略使用變異與選擇,而不使用交叉操作,不過現今已經很模糊)。

在後面的發展中,在現代啓發式方法的範疇內,很多類似於迭代尋優思路的算法不斷提出,如借鑑統計物理的模擬退火算法(1983)、禁忌搜索(1986),他們同樣啓發後期的算法設計。

在八十年代,Holland教授堅持遺傳算法的研究並逐漸獲得認可,他出色的借鑑達爾文進化論的思想,並引入交叉、變異等名詞,一直沿用至今,在那個時代,很多關於這種跨學科的知識引入進化計算中,並對後來新算法的提出產生深遠影響(當然也有我說的負面影響,各種含糊的名詞充斥學科,嚴重妨礙學科的規範化,甚至是同行的學術交流)。

在之後,Goldberg給出了遺傳算法的基本理論,使得算法更加的規範(事實上現在他們仍做進化計算的基礎工作)。應該在那時候,算法擺脫了一些玄虛的名詞描述。

在九十年代,進化算法獲得蓬勃的發展,也就是在這個階段,如蟻羣算法(1992)粒子羣算法(1995)以及差異進化算法(1996)提出,並逐漸獲得認可。

進入2000年後,對以上算法的改進以及諸多應用的論文如雨後春筍,在單純算法領域,仍擺脫不了:交叉,變異,選擇的框架,因此,能獲得認同的新算法並不多,基本上是基於以上框架。

同時,由於機器學習的蓬勃發展,很多研究人員試圖將機器學習的經典思想和方法引入優化中(如果沒有說錯的話,學習和優化是一個互爲表裏的過程,因爲進化算法的過程也是一種對目標函數學習並猜測的過程,這符合人思考的方式)。估計分佈算法(1999)也就是在世紀之交提出並獲得發展,並已經滲透到離散的組合優化與連續優化。值得一提的是估計分佈算法也就是誕生於Goldberg(前面提到的將遺傳算法定理化的專家)領導的伊利諾斯大學遺傳算法實驗室,他們引入概率分佈模型的構造,貝葉斯學習,圖模型等技術,嘗試去學習問題的內在結構,以解決問題。他們的思路擺脫了進化算法的交叉變異選擇框架,而採用構造模型並採樣的廣義模型。儘管思路很好,但是這一類算法在複雜的連續問題上獲得了障礙,近年並沒有獲得突破(而且很可能精確而高效的學習問題的內在結構似乎比做一個好的猜測要難,我覺得只是當今他們面臨的最大障礙)。

 

(3)聽你那麼一說,我咋感覺這麼多算法咋都有點相似呢?好像有點玩概念之嫌。

答:你說的很對。我覺得可以從以下方面來講:

首先這個領域是一個互相交融的學科,所以有時難分你我。來自進化論,統計物理,隨機過程,經典數值分析方法,圖論與貝葉斯理論,多元統計思想,經典數值優化算法,甚至是機器學習的核主成分分析。諸多方法抑或技巧各有優缺,爲了避免淪爲形式化的空泛說明,我簡單說一說這些學科對算法設計者的啓發:

進化論中的思想,如染色體(或稱基因)的交叉變異,多個種羣的協同進化,種羣的遷徙等,這些方法來自於自然界,但是都有其在研究領域(context)下的獨特意義(如跨越局部極值點、提高對廣泛問題的適應能力)。在問題中他們都展現了很好的效果。

統計物理的基本假設:各態歷經假說在算法中有所應用,例如產生混沌序列進行對解空間進行搜索。

隨機過程的知識多用於分析進化計算的行爲,如經典的馬爾科夫鏈。

貝葉斯理論是人類常識的形式化表述,用於如估計分佈算法中對變量依賴性的學習中,而圖就是這種依賴關係的模型。

多元統計思想應用就更爲廣泛,如正交試驗,主成分分析(PCA),典型成分分析(ICA),聚類分析(如特別適合進化算法框架的Kmeans方法)

經典數值分析以及優化算法的引入也廣泛,例如構造二次函數模型去逼近抑或猜測優化函數的鄰域結構(即landscape,不過就將進化算法延伸到了應用數學或者計算數學領域了),因爲須迴避優化函數的解析式,故退而求其次,採用採樣點估計(插值等手段)代替一次或更高次的導數信息。另一個思路是加入梯度信息的局部搜索機制,不過這樣顯然違背黑盒優化的基本claim,因此在領域受爭議。

機器學習的方法,如鑑於PCA只能獲取線性結構的侷限,kernel-PCA方法同樣是對函數的局部非線性結構進行學習的方法。不過核函數的選擇依賴於問題的特性,因此在領域沒有獲得廣泛的認可。

其次,從領域的歷史來看,各個算法的發展互相重疊,很可能互相借鑑互相補充,導致現今算法看起來似乎都有相似。

 

(4)進化算法這個領域的一些定義似乎不清?是這樣麼?

答:是的,我認爲只是這個領域的很大問題。如果一個領域的一些基本問題定義不明確,那麼顯然這個學科離規範化還是有很大的距離。我來簡要說明領域的那些定義不清晰:

全局與局部:經常在文獻上見到,這個算法或者操作的全局搜索能力強或者局部精度很高等等,這些往往並不能很好的引導讀者。甚至有人試圖說,在開始的時候注重全局能力,在後期強調局部能力。什麼是全局?什麼是局部?什麼時候是在全局搜索?這些問題都是難以回答的。說出這種話在論文審稿的時候很可能被審稿人抓住把柄。難怪有人說,知道算法在某個問題何時是全局搜索何時在局部搜索,本是就和這個問題一樣難,甚至比問題本身還難。如果你強行界定,設置閾值,如果這個閾值對問題不敏感還好,如果敏感顯然,你已經潛在將你的先驗知識加入了,你怎麼知道這個問題就適合這個參數值呢?

問題定義不清:特別體現在 動態優化問題的定義上,很多文章自己定義問題,自己提出解決方案,這顯然不是一個好的導向。

評價標準不清:體現在多目標優化中,各人使用自己設置的標準將自己的算法和別人的算法進行比較,甚至只依賴於算法產生的直觀圖像作爲評價的標準,顯然這都不利於領域的長期發展。

最後,我認爲這些定義將隨着領域的逐步規範而清晰起來,大家拭目以待。

 

(5)每一個研究領域都有它的根本問題以及基本矛盾,你能說說進化算法領域內的問題麼?

答:我認爲基本問題仍圍繞着《解決問題的原則》上提到的五個原則,進化算法解決的是一類黑盒問題,如在實際問題中無法獲知問題解析式的(甚至本是就無法解析表達的問題),那麼意味着在初始化時,我們假設對問題是一無所知的。但是,這顯然違背原則。我們一定潛在的隱性或顯性的加入了我們對問題的認識,這些知識本身伴隨着編碼方式,交叉操作方法、變異方式,甚至是選擇機制已經嵌入到我們的算法中了,即使我們並不知道他到底起了什麼作用。那麼,不如我直接說,這個領域本身就是一個矛盾:

問題的初始假設(我們對問題一無所知)和算法利用的假設間(我們必須加入自己的認識才能使算法有效)的矛盾。

另一個值得一提的問題就是,每個算法由於其基本的假設必然有其能力的極限,這一點可在今年的文獻中一窺端倪,在連續全局優化領域,遺傳算法,差異進化,粒子羣並沒有獲得本質的提升,一些問題求解不了,仍求解不了。如進化策略範疇內的CMA-ES(2001)已經達到很好的效果,本質上並沒有突破(重啓動另當別說)。

 

(6)進化計算似乎和機器學習有點關係啊,兩者有什麼異同嗎?

答: 進化計算入門的門檻很低,可以說工科相對理科並沒有任何的劣勢,但是要真正做好一個有效而在進化計算範疇內有效的算法是不容易的,很多巧妙的算法儘管簡單,但是隱含很深的道理。特別是,好的算法要在領域基本假設和算法假設間做個很好的平衡是很難得。

機器學習的入門門檻較高,需要廣泛而紮實的數學知識,如線性代數,統計學,泛函分析,甚至是微分幾何。但是一旦熟悉這個領域,往往很多論文淪爲玩數學技巧,類似於控制理論中,自己定義問題,然後自己瞭解這種定義下適合什麼樣的數學處理或者技巧,然後就得出方案,現在這個領域就有這樣的現象。

 

(7)進化算法的未來趨勢是怎樣的?或者更直接,未來有哪些方面更可能出成果?

答:直接的說,我期望這個領域能從問題的特性出發,進行研究,而不是單純的拼結果的那點微不足道的精度。我覺得未來的趨勢可以從問題的特性上出發進行闡述:

1.高維問題,低維問題不論是在離散優化抑或連續優化中已經取得很好的效果,要再做出更加好的效果並不那麼容易,相對而言,高維問題可以拉大各個算法的差異,也更加有挑戰性。

2.多變量耦合問題。這個問題是包括遺傳算法,粒子羣,差異進化等算法的最大缺陷。單純的依靠交叉和變異似乎對於多變量的耦合與事無補。甚至有人質疑,交叉和變異真的是那麼有效麼?

等等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章