機器人公園是一個巨大的機器人工廠,被1萬平方英裏的叢林、城市等包圍著。感覺那個叢林就是人類建造過的最高、最厚的牆,布滿哨所、探照燈、炮塔。這堵牆有兩個作用:把入侵者擋在外麵,把公園的“居民”(數百萬個為工廠生存而戰、對工廠進行管理的機器人)保護在裏麵。獲勝的機器人能夠“產卵”,它們完成繁殖的方法就是通過對體內的3d打印機儲庫進行編程。慢慢地,機器人變得更智能、更快速以及更致命。機器人公園由美軍運營,其目標是使終極戰士進化。


    機器人公園現在還不存在,但有一天它可能就會出現。我建議把它作為幾年前dapra(美國國防部先進計劃研究局)研討會的一個思維實驗,而出席該會議的一位軍隊高層人士實事求是地說:“那個想法可行。”但如果這支軍隊為了訓練士兵,已經在加州沙漠對阿富汗村落進行全麵模擬,模擬中還包括村民,而且為了培養終極戰士,幾十億美元也隻是個小數目。想到這些,他這麽爽快地認可這個想法,就不會覺得多麽讓人吃驚了。


    人們已經開始向機器人公園邁出第一步。在霍德·利普森位於康奈爾大學的創意機器實驗室中,奇形怪狀的機器人正在學習爬行和飛行,可能正巧它們在做這些時,你也正讀到這裏。其中一個機器人看起來像膠塊壘成的滑行塔,另外一個像裝了蜻蜓翅膀的直升機,還有一個能變形的萬能工匠。這些機器人並不是人類工程師設計出來的,而是進化而來的,和地球上生命多樣性產生的過程一樣。雖然機器人最初在計算機的模擬中得以進化,一旦這些機器人的技術達到熟練水平,足以在真實世界中運用,真實版的機器人就會通過3d打印機被製造出來。這些機器人還沒有做好掌管世界的準備,但和開始時的“原生湯”模擬物相比,它們已經有了很大進步。


    使這些機器人進化的算法,是19世紀由查爾斯·達爾文發明的。那時他不覺得這是一種算法,部分原因在於當時仍缺少一個關鍵的子程序。一旦1953年詹姆斯·沃森和弗朗西斯·克裏克提供了該子程序,進化就會進入第二個階段:該進化是在計算機中而不是在活體中進行,而且會比活體進化快10億倍。該子程序的提倡者是一位麵色紅潤、永遠麵帶微笑的中西部人,名叫約翰·霍蘭德。    <h2>達爾文的算法</h2>


    和許多其他早期的機器學習研究者一樣,霍蘭德開始時研究的是神經網絡,但他的興趣使情況發生轉變。在密歇根大學讀研究生時,他閱讀了羅納德·費雪(ronald fisher)的經典著作《自然選擇的遺傳理論》(the g: cal theory of natural selection)。在該著作中,同時作為現代統計學奠基人的費雪,提出了關於進化的第一套數學理論。雖然這個理論很妙,但霍蘭德認為它遺漏了進化論的精華。費雪孤立地看待每個基因,但是有機體的適應度就是它所有函數的複值函數。如果基因都是獨立的,它們變量的相對頻率會快速收斂至最大適應點,然後從此保持均衡。但如果基因相互作用,進化(追求最大適應度)就要複雜得多。如果有1000個基因,每個基因有兩個變量,那麽基因組就有21000種可能的狀態,宇宙中沒有哪個星球可以大到或者古老到能夠一一嚐試這些可能。但是在地球上,通過進化可以得到適應力很強的有機體,而達爾文的自然選擇理論至少從數量上解釋了怎樣找到這樣的有機體。霍蘭德決定將其變成一種算法。


    但他首先得畢業。他謹慎地為其論文選擇了一個更為保守的主題——布爾周期電路,1959年他獲得了計算機科學領域的首個博士學位。即便如此,他讀博士期間的導師亞瑟·伯克斯激發了霍蘭德在進化計算領域的興趣,並幫助他在密歇根找到了教師工作,還讓他避開那些不把進化計算歸入計算機科學的資深同事。伯克斯本人思想很開明,因為他之前就已經是約翰·馮·諾依曼的親密合作夥伴。馮·諾依曼證明了自我再生機器的可能性。的確,自從1957年馮·諾依曼因為癌症逝世後,完成這個工作的重任就落到了伯克斯肩上。在當時遺傳學和計算機科學的原始水平下,馮·諾依曼能夠證明這種機器的存在,這已經很了不起。但他的機器人智能僅能複製和自己一模一樣的副本,要製造出進化版的機器人,還得由霍蘭德來完成。


    隨著霍蘭德的創作漸漸為人所知,遺傳算法的關鍵輸入就是一個適應度函數。給定一個待定程序和某個設定的目標,適應度函數會給程序打分,反映它與目標的契合度。在自然選擇當中,適應度是否能這樣解釋,值得懷疑:雖然翅膀對於飛行的適應度很高,這個說法很直觀,但整個進化過程卻沒有已知的目標。即便如此,在機器學習中,掌握諸如適應度函數這樣的事情還是很容易的。如果我們需要一個能夠診斷疾病的程序,如果一種算法能夠正確診斷我們數據庫中60%的病人,這樣的算法就比準確率僅為55%的算法要好,所以可行的適應度函數能夠幫助準確診斷。


    就這一點而言,遺傳算法就有點像選擇育種。達爾文在《物種起源》開篇時就談到這個問題,層層深入,解釋較難理解的自然選擇概念。現在我們自然而然地認為,經過馴化的動植物就是一代一代經過選擇和交配的結果,是最能讓我們達到各種用途的有機體:果實最大的玉米、最甜的果樹、毛最多的羊、最強健的馬匹。遺傳算法也會做同樣的事情,它產出的是程序而不是活的生物體,而一代對它而言是幾秒的計算機時間,而不是生物的一生。


    適應度函數將人在這個過程中扮演的角色概括化了。但和人的角色相比,更為微妙的部分是自然的角色。開始,是一群適應力不那麽強的個體(可能是完全隨機的個體)遺傳算法得找出變量,然後這些變量依據適應度而被選擇。自然怎樣做到這一點?達爾文不知道。這就是遺傳算法的一部分。dna依據堿基對的序列對有機體進行編碼,同理,我們也可以依據一串二進製數字對程序進行編碼。dna的4個基本組成單位,不是0和1,而是4個基本堿基,包括腺嘌呤、胸腺嘧啶、胞嘧啶、鳥嘌呤,但這僅僅是表麵上的差異。變量,無論在dna序列中,還是在位串中,都可通過幾種方法產生。最簡單的方法就是點突變,即隨意翻轉位串中的一個比特值,或者改變一段dna中的單個基本堿基。但對霍蘭德來說,遺傳算法的真正威力在於更為複雜的東西:性。


    把外衣脫光,隻剩下基本部位(請不要笑出聲),有性生殖包括在父親和母親的染色體之間進行材料交換,這個過程稱作染色體交叉。這個過程會產生兩條新的染色體,一條染色體交叉點的一邊是母親的染色體,另外一邊則是父親的染色體,另外一條則相反(見圖5–1)。


    圖5–1


    遺傳算法通過模擬這個過程發揮作用。它為每一代中兩個適應力最強的個體進行配對,通過隨機交叉父母位串中的一點,讓每對父母生出兩個後代。將點突變應用到新的位串後,算法讓這些點突變在其虛擬世界中釋放。每個點突變都會反饋適應度得分,然後重複這個過程。每一代都會比前一代的適應度更高,當達到理想的適應度或者時間用盡時,這個過程就會結束。


    例如,假設我們想對一個規則進行進化,用於過濾垃圾郵件,結果會怎麽樣?如果有1萬個不同的詞出現在訓練數字中,每個待選規則會用一條由2萬個比特組成的位串來表示,每兩個比特就是一個單詞。與單詞“free”(免費的)相對應的第一個比特就是1,條件是包含“free”的郵件允許與規則匹配;與單詞“free”相對應的第一個比特就是0,條件是包含“free”的郵件不允許與規則匹配。第二個比特則相反:結果就是1,條件是不包含“free”的郵件允許與規則匹配;否則結果就是0,且不允許與規則匹配。那麽如果兩個比特都是1,郵件不管是否包含“free”都允許與規則匹配,而且規則實際上對那個詞不設條件。另外,如果兩個比特都是0,那麽沒有郵件會與規則匹配,因為總有一個比特會發生故障,而且所有郵件都會通過過濾器。總的來說,一封郵件隻有在其出現和不出現的單詞模式都經過規則允許時,才能與規則匹配。一個規則的適應度就是規則正確分類郵件的百分數。從一堆隨機的字符串開始,每個位串代表一個包含隨機條件的規則,通過不斷重複和改變每代中的最匹配位串,這時遺傳算法就可以進化出越來越好的規則。例如,如果當前包含這些規則:如果郵件包含“free”,那麽它就是垃圾郵件,如果郵件包含“easy”(簡單的)那麽它就是垃圾郵件。將這兩個規則交叉可能會產生適應度更高的規則:如果郵件都包含“free”和“easy”,那麽它就是垃圾郵件,前提是交叉點不落在與這些詞(free、easy)相對應的兩個比特中間。它也可能會產生這樣的規則:所有的郵件都是垃圾郵件,這樣的規則是拋棄所有條件後得出的,但它在下一代中不太可能產生很多子規則。


    既然我們的目標是盡可能設計出最好的垃圾郵件過濾器,和老老實實模擬真正的自然選擇相反,我們可以大大方方地作弊,方法就是通過改變算法來適應我們的需求。遺傳算法能夠頻繁作弊的方法,就是允許有永不滅亡的東西(現實生活中卻不存在,太糟了)。在那種方法中,適應力很強的個體不僅會在它那一代中為了繁殖而競爭,還會跟它的“兒子”“孫子”“重孫”等競爭,隻要在群體中還保留有其中一個適應力最強的個體。相反,在現實世界中,適應能力強的個體能做到最好的,也就是將其一半的基因傳給許多孩子,而每個孩子的適應能力可能不會那麽高,因為遺傳了父母另外一方的基因。不朽性避免了這樣的倒退,而且如果幸運,能讓算法更快地達到理想的適應力。當然,既然曆史上最適合生存的人類都是通過其後代的數量來衡量的,比如成吉思汗(當今200個人中就有一個人是他的後代)。現實世界中沒有永生這一說,也許也沒那麽糟糕。


    如果我們想對一整套而不隻是一個垃圾郵件過濾規則進行進化,我們可以用含有nx20 000個比特的字符串(每個規則有20 000個,和之前一樣,假設數據裏有1萬個不同的詞)來代表有n個規則的規則集。有些詞會用“00”來表示,那些包含這些詞的規則實際上會從規則集中消失,因為這些規則不會和任何郵件相匹配,這和我們之前看到的一樣。如果一封郵件和規則集中的任何規則都匹配,那麽它就被分類成垃圾郵件,否則就是合法郵件。我們還可以把適應度當作正確分類郵件的百分數,但為了防止過擬合,我們可能想從這個百分數中扣除與規則集中和活性條件相稱的處罰比例。


    我們甚至可以做得更好,方法就是允許過渡概念的規則進行進化,然後將這些規則在運行時串起來。例如,我們可以對這樣的規則進行進化:如果郵件包含“貸款”一詞,那麽這是一封詐騙郵件;如果這封郵件是詐騙郵件,那麽它就是垃圾郵件。既然一個規則的結果不再總是“垃圾郵件”,這需要引入規則字符串中的額外比特的信息來代表它們的結果。當然,計算機不會按照字麵引用“詐騙”這個詞,它隻會找出任意的比特串來表示這個概念,但這對實現我們的目標已經起到很好的作用。霍蘭德稱類似這樣的規則集為“分類器係統”,是他建立的機器學習部落中的一匹“馱馬”:演化新論。和多層感知器一樣,分類器係統會麵臨讚譽分布問題——過渡概念的規則適應度是什麽?另外,霍蘭德設計出所謂的“桶隊算法”(bucket brigade algorithm)來解決這個問題。即便如此,分類係統和分層感知器相比,其應用範圍要窄得多。


    和費雪梳理的簡單模型相比,遺傳算法有了很大的進步。達爾文悲歎自己的數學能力不行,但如果他晚生一個世紀,他可能又會希望自己有很強的編程能力。的確,通過一組方程來充分體現自然選擇很困難,但將自然選擇表達為一種算法又是另外一回事,而且這樣還能闡明許多其他棘手的問題。為什麽一些物種會突然出現在化石記錄中?能夠證明這些物種是漸漸由早期物種進化而來的證據在哪裏?1972年,尼爾斯·埃爾德雷奇和史蒂芬·傑伊·古爾德提出進化過程由一係列“間斷平衡”組成,長期的停滯與短暫的快速變化相互交替,就像寒武紀爆發那樣。這個問題引起激烈的討論,“間斷平衡”理論的批評家將其命名為“跳躍式進化”,而埃爾德雷奇和古爾德則反駁稱,漸進主義就是“匍匐式進化”。遺傳算法的經驗會對支持“跳躍式進化”的一方有利。如果你運行10萬代遺傳算法,然後每隔1000代觀察群體的數量,那麽適應度與時間的曲線圖可能看起來會像高低錯落的樓梯,圖形突然上升,然後是隨著時間慢慢變長的平台期。要弄明白為什麽也不難。一旦算法達到適應度的局部最大值(適應度中的峰值),算法會在這一點停很長時間,直到某次幸運的變異或者交叉,讓處於坡上的個體等到更高的峰頂,在這一點上該個體會進行大量繁殖,然後和過往的每一代來爬上這個坡。當前的峰值越高,該過程發生前的那段時間就越長。當然,自然選擇比這還要複雜:一個原因就是,環境可能會變化,要麽是自然上的改變,要麽是因為其他有機體自身進化了。另外,處於峰值的有機體可能會突然發現,對於再次進化,它麵臨巨大的壓力。因此,雖然有用,當前的遺傳算法還遠遠不是故事的結局。    <h2>探索:利用困境</h2>


    我們應注意遺傳算法和多層感知器的差異程度。反向傳播會在任何給定時間堅持單一假設,而且這個假設會漸漸改變,直到其適應某個局部最優值。遺傳算法會在每一步中考慮整個群體的假設,而由於交叉行為,這些假設可以從這一代跨到下一代。將初始權值設為小的隨機值後,反向傳播才會確定繼續進行下去。相反,遺傳算法則充滿隨機選擇:該使哪些假設成立並進行交叉(適應度更高的假設更有可能成為備選對象),該在哪裏對兩個字符串進行交叉,該使哪些比特的信息發生突變。反向傳播為了預先設定的網絡結構掌握權值;密集度更大的網絡更為靈活,但掌握起來也更困難。除了通用式以外,遺傳算法不會對它們即將學習的結構進行預先假設。


    因為這個原因,和反向傳播相比,遺傳算法陷入局部最優值困境的可能性較小,而且原則上也更有可能找到真正新穎的東西,但遺傳算法分析起來也要難得多。我們怎麽知道,遺傳算法會得出有意義的結果,而不是像眾所周知的酒鬼那樣到處晃悠?問題的關鍵在於要從構建模塊的角度去考慮。字符串比特的每個子集都可能會對有用的構造塊進行編碼,當我們將兩個字符串進行交叉時,這些構造塊會聚集到一起,形成一大塊構造塊,反過來這個大構造塊又會變成“磨坊中的穀物”。霍蘭德喜歡用警方提供的畫像來解釋構造塊的力量。在計算機還沒出現的年代,警局的拚圖師能夠很快將嫌疑人的畫像拚在一起,方法就是在采訪中讓目擊者從畫有典型嘴型的一組紙帶中挑選嘴巴,然後用同樣的方法選出眼睛、鼻子、下巴等。隻有10個構造塊,每個構造塊有10個選擇,這個係統會慮及100億張臉,比地球上的總人口還要多。


    在機器學習中,和計算機科學的其他領域一樣,沒有什麽比得到這種對你有利而非有害的組合爆炸更好的東西了。遺傳算法的靈活之處就在於,每個字符串都暗含指數數量的構造塊,被稱為“基模”,因此該研究比它看起來的還要高效得多。這是因為字符串比特的每個子集都是一個基模,代表可能合適的性能組合,而一個字符串有指數數量的子集。我們可以用這樣的方法來代表基模,也就是用“*”來代替字符串中不屬於該字符串的比特。如110這個字符串中包含以下基模:***、***0、1**、*10、11*、1*0,以及110。每選一個不同的比特,我們就得到一個不同的基模,因為每個比特我們有兩個選擇(包含或不包含),那麽我們就有2n個基模。相反,在群體中,一個特定的基模可能由許多不同的字符串來表示,而且每當這時,這些基模都會受到隱式評估。假設在下一代中仍成立的概率與其適應度成正比,那會怎樣?霍蘭德表明,在這種情況下,和平均值相比,在某代中表示基模的字符串適應度越高——我們能期望的——在下一代中看到這些表示字符串的數量也越多。那麽,雖然遺傳算法暗地裏對字符進行操縱,它也會找到基模更大的可能性。隨著時間的流逝,適應度更高的基模會主導群體,所以不像醉漢那樣,遺傳算法能找到回家的路。


    機器學習中最重要的問題之一(也是關於生命最重要的問題之一),就是探索—利用困境。如果已經找到能發揮作用的東西,你還會繼續找嗎?還是做新的嚐試會更好,知道這樣可能會浪費時間,但也許會找到更好的辦法?你想做牛仔還是農民?想自己開一家公司,還是管理一家已經成立的公司?想用情專一,還是三心二意?中年危機意味著把多年的時間花費在利用某種東西之後,會極度渴望探索新事物。一時衝動之下,你飛到拉斯韋加斯,準備賭光你畢生的積蓄,變成百萬富翁。你進入賭場,然後麵對一排老虎機。你要在能給你平均回報最多的那台機器上玩,但你不知道是哪台。那麽你就得每台都試,次數夠了才能弄明白。但如果花太多時間來做這個,你就把錢浪費在會輸的那台機器上。相反,如果操之過急,選了一台前幾輪碰巧讓你手氣不錯的機器,但實際上並不是讓你獲得回報最多的一台,那麽今晚剩下的時間你就會把錢浪費在這台機器上。這就是探索—利用困境。每次你玩的時候,要麽你就選擇重複目前為止發現的最好的一把,這樣就能給你最好的回報,要麽就試試其他幾把,這樣能夠讓你知道怎樣才能贏得更多。利用兩台老虎機,霍蘭德表明最優策略就是每次拋一個偏幣,在這個策略中,隨著你進行這些步驟,和原來的硬幣相比,這時的硬幣會呈指數偏倚(如果這種方法對你不起作用,別指控我。記住最後贏的總是賭場)。一台老虎機看起來越好,你就越應該玩它,但也別完全放棄另外一台,畢竟另外一台也有可能會讓你贏得更多。


    遺傳算法就像一群賭徒中的元凶,同時在市裏的每個賭場玩老虎機。如果兩個基模包含相同的比特量而且至少有一個比特的值不同,那麽這兩個基模就會互相競爭,例如*10和*11,而n個互相競爭的基模就像n台老虎機一樣。每個互相競爭的基模集都是一個“賭場”,遺傳算法會同時弄清楚每個“賭場”中會贏的機器,依據的是最優策略:以成倍增長的頻率去玩看起來贏得越來越多的機器。太聰明了!


    在《銀河係漫遊指南》中,外來種族為了回答終極問題,造了一台巨大的超級計算機,過了很長時間,計算機吐出“42”這個數字。但這台計算機還指出,外星人不知道問題是什麽,所以他們又造了一台更大的計算機來弄明白這個問題是什麽。這台計算機(也稱“行星地球”)很遺憾地在持續了幾百萬年的計算,即將完成的幾分鍾前,被摧毀了,因為要為空間高速公路讓路。現在我們隻能猜那個問題是什麽了,可能會是:你打算玩哪台老虎機?    <h2>程序的適者生存法則</h2>


    在開始的幾十年,遺傳算法的陣營主要由約翰·霍蘭德、他的學生、這些學生的學生組成。大約在1983年的時候,遺傳算法解決的最大問題就是學會控製天然氣管道係統。不過,大概同樣的時間段,神經網絡回歸了,人們對進化計算的興趣也開始濃厚起來。關於遺傳算法的第一次會議於1985年在匹茲堡舉行,遺傳算法的寒武紀大爆發也正在進行中。其中的一些變體嚐試更加接近地模擬進化(畢竟基本遺傳算法僅對進化進行了非常粗略的模擬)而其他變體則從不同方向模擬,利用讓達爾文困惑的計算機科學概念來跨越進化論觀點。


    霍蘭德的學生中較為出色的是約翰·科紮。1987年,他在意大利參加會議,飛回加利福尼亞時,有一瞬間他突然醒悟了。我們要不要對成熟的計算機程序進行進化,而不是發展相對簡單的東西,如“如果……那麽……”規則以及天然氣管道控製?如果那是目標,為什麽還要繼續用字符串來表示呢?程序就像是一棵子程序調用樹,所以最好還是直接穿過那些子樹,而不是將它們硬塞到字符串中,而且當你隨機取點穿過這些子樹時,會冒著將很好的程序摧毀的風險。


    例如,假設你想進化一個程序,根據行星到太陽的距離d來計算該行星的運行周期t。根據開普勒第三定律,t是d的立方的開平方,乘以一個常數c,該常數的值取決於你使用的時間和距離單位。遺傳算法應該像開普勒那樣,通過查看第穀·布拉赫關於行星運行的數據,就可以發現這個規律。在科紮的方法中,d和c是程序樹上的葉子,而將其結合起來的運算,比如乘法運算和求平方根運算,就是內部節點。以下程序樹能準確計算出t(見圖5–2)。


    科紮稱他的方法為“遺傳編程”,在這個方法中,我們通過隨機交換程序樹的兩棵子樹,來對兩棵程序樹進行交叉。例如,將這兩棵樹的高亮節點交叉,就會產生能夠計算出t的程序,這個程序為其中的一棵子樹(見圖5–3)。


    圖5–2


    圖5–3


    我們可以測量程序的適應度(或缺乏適應度),方法就是通過其輸出值與訓練數據中的準確值之間的差距來判斷。例如,如果程序說地球的周期是300天,這就意味著要從其適應度中減掉65。以一群隨機程序樹作為開頭,遺傳編程利用交叉、變異、生存來漸漸進化出更好的程序,直到滿意為止。


    當然,計算行星的周期是一個很簡單的問題,僅僅涉及乘法和平方根運算。一般情況下,程序樹包含全麵的編程結構,例如“如果……那麽……”陳述、循環、遞歸。更能解釋“遺傳編程用來做什麽”的例子就是,弄明白機器人需要按照什麽順序來行動,以達到某個目標。比如我讓辦公機器人從走廊的櫃子裏拿一個訂書機。機器人可進行大量的動作,例如,走到走廊中、開門、拿起某個物品等。這些動作反過來可以由各種小動作組成,比如機器人的手向物品移動,或者在各種不同的點抓住物品。每個行為是否可能會被執行,取決於之前行為的結果,也可能需要被重複多次等。這個挑戰在於要組合這些動作和子動作的正確結構,以及每個動作的參數,例如,手要移動多長的距離。機器人的“原子性”動作以及每個動作的結合為開端,遺傳編程能夠組合一個複雜的動作,並達到理想目標。通過這種方法,許多研究人員已經為機器人足球運動員製定了策略。


    對程序樹而不是字符串進行交叉得出的一個結果就是,生成的程序可以任意大,這讓學習活動變得更加靈活。然而,整體的趨勢就是會變得膨脹,因為隨著進化持續的時間變長(也稱為“適者生存”),樹也會越長越大。演化新論者可以從這個事實中獲取安慰:人類編寫的程序之間並沒有什麽不同(微軟的windows係統:4500萬行的代碼和計算),而且人造代碼也不會允許這樣一種簡單的方法:將複雜性處罰添加到適應度函數中就可以了。


    遺傳編程的第一次成功是在1995年,也就是成功設計了電子電路。以一堆電子元件為開端,例如,晶體管、電阻器、電容器,科紮的係統為了一台低通濾波器,徹底改造之前的一個專利設計(這是一個電路圖,其用途之一就是加強舞蹈音樂中的低音)。自那以後,他就開始對專利設備進行改造,成打地改造出其他設備。下一個裏程碑於2005年到來,當時美國專利及商標局為一項專利頒獎,該專利根據遺傳學設計,是工廠的優化係統。如果圖靈測試愚弄的是專利審查員而不是談話高手,那麽2005年1月25日,就是一個可載入史冊的日子。


    科紮的自信在這樣一個不以謙遜著稱的領域顯得尤為突出。他將遺傳編程當作一台會發明東西的機器,當作21世紀的矽版愛迪生。他和其他演化新論者相信,它可以掌握一切程序,這讓他們進入了終極算法的爭奪賽中。2004年,他們創立一年一度的“人類競爭獎”(humie awards),來認可“人類競賽”相關的遺傳編程創作。迄今為止,已經頒發39個獎項。    <h2>性有何用</h2>


    盡管他們取得了成功,也對諸如漸進主義與間斷平衡的問題發表見解,但遺傳算法還有一個很大的謎團沒有解開:性在進化過程中所起的作用。演化新論者非常重視交叉行為,但其他學派的成員認為沒有必要如此麻煩。霍蘭德沒有哪個理論結果表明,交叉行為能起作用。經過一段時間,突變足以成倍地增加群體中最適合留下的基模的頻率。而“構造模塊”的直覺很吸引人,但很快就會遇到麻煩,即使用上遺傳算法也沒用。隨著模塊演變得越來越大,交叉行為也會越來越趨向於將這些模塊解散。還有,一旦適應力強的個體出現,其後代很有可能快速掌管該群體,並有可能將更好的基模擠出,這些基模受到整體上不那麽相配的個體的牽絆。這有效減少了研究適應度冠軍變化的工作量。研究者已經找到許多方案,能夠保存群體中的多樣性,但研究結果還不確定。工程師們當然廣泛應用構造模塊,但將這些構造塊結合起來就會在很大程度上涉及工程學的內容。這不是用舊辦法把它們丟在一起那麽簡單,也不是明顯的交叉行為就能取得成功的。


    消除性別對於演化新論者來說,就隻剩下變異作為其理論的推動力。如果群體的規模大體上比基因的數量大,很有可能每個點突變都已體現在其中,而研究就變成爬山法的一種:嚐試所有可能的單步變種,挑選最好的一個,然後重複這個步驟(或者挑選幾個最好的變種,這種情況就被稱為“定向搜索”)。應特別指出的是,符號學派一直用這種方法來掌握規則集,雖然他們不把它當成進化的一種形式。為了避免陷入局部最大值的陷阱,爬山法可以通過隨機性(以某個概率做下坡移動)和隨機重啟(過一會兒後,跳到隨機狀態,然後從那兒繼續)來得到加強。這樣做已經足以找到解決問題的好辦法。為其添加交叉行為是否能證明額外計算成本的合理性,這有待回答。


    沒人知道為什麽性別在自然界中無處不在。人們已經提出幾個理論,但沒有一個被廣泛接受。這方麵的領先理論是“紅皇後”假說,馬特·裏德利在同名書中向人們介紹該理論。在《愛麗絲鏡中世界奇遇記》中,紅桃皇後對愛麗絲說:“全力奔跑,這樣你才能留在原地。”依照這個觀點,有機體和寄生蟲就會永遠處在競賽中,而性可以保持群體的多樣性,這樣單一微生物就不會感染整個群體了。如果這就是答案,那麽性就和機器學習不相關,這至少持續到掌握的程序因為處理器時間和內存而與計算機病毒進行抗戰(有趣的是,丹尼·希利斯稱,有意將共同進化的寄生蟲引入遺傳算法中,可以幫它避免局部最大值困境,方法就是逐步加大難度,但還沒有人繼續采用他的觀點)。赫裏斯托斯·帕帕季米特裏烏和同事表明,性優化的不是適應度,而是他們所謂的“混合度”:當與其他基因結合時,一個基因表現出平均水平良好的能力。就像自然選擇一樣,當適應度函數要麽不是已知,要麽不是常數時,這個說法會起作用。但是在機器學習和最優化中,爬山可能會做得更好。


    遺傳編程的問題不會就此結束。的確,雖然它獲得的成功可能不會像演化新論者希望的那樣和遺傳有很大聯係。以電路設計為例,這就是遺傳編程成功的典型。作為一種規則,即使相對簡單的設計也需要大量的研究,而且也不知道,得出的結果多大程度上歸功於蠻力強攻而不是遺傳學智慧。為了回應越來越多的批評者,科紮1992年的書《遺傳編程》(gic programming)包含的實驗表明,遺傳編程在布爾電路合成問題上打敗了隨機生成備選項,但勝利的優勢很小。接著,1995年在加利福尼亞太浩湖舉辦的機器學習國際會議(icml)上,凱文·朗發表了一篇論文,論文表明爬山法在相同的問題上打敗了遺傳編程,而且勝利的優勢很大。科紮和其他演化新論者已經不斷嚐試在icml上發表論文,因為這是該領域的重要會議,但讓他們越來越感到挫敗的是,因為經驗驗證不足,他們不斷遭到拒絕。論文被拒已經讓科紮感到失落,看到朗的文章,更讓科紮感到氣急敗壞。在短時間內,他以icml的兩欄格式,整理了一篇23頁的論文,反駁朗的結論,並控訴icml評審員的科學不端行為。他接著在會堂的每個位置都放了一份論文複印件。依據你的觀點,不是朗的論文,就是科紮的回應成為最後一根稻草。不管怎樣,太浩湖事件標誌著演化新論者與機器學習陣營中其他流派最後的決裂。遺傳編程員開始舉辦自己的會議,這些會議與遺傳算法會議合並,成為“遺傳與進化計算會議”(go)。對於演化新論者這部分,機器學習主流學派已經很大程度上把他們忘記。這是一個悲傷的結局,但在曆史上並不是第一次,性是決裂的原因。


    性在機器學習中可能還未取得成功,但作為一種安慰,它已經在技術的發展中起到重要作用。色情描寫是萬維網中未公開承認的“殺手級應用”,更別說它在印刷、攝影、視頻領域就更受歡迎了。振動器是第一台手持電子設備,預示著一個世紀之後手機的出現。小型摩托車在戰後的歐洲,特別是在意大利受到歡迎,因為它們能夠讓年輕的夫婦離開家人。100萬年前,當直立人發現火時,其中的一個“殺手級應用”當然是便於約會。同樣肯定的是,“擬人化”機器人變得越來越真實,其主要推動力是性愛機器人行業的發展。性似乎才是最後的結局,而不是技術演化的手段。    <h2>先天與後天</h2>


    演化新論者和聯結學派重要的共同點是:他們都因為受到自然啟發而設計了學習算法,不過後來分道揚鑣了。演化新論者關注的是學習架構,對他們來說,通過參數優化來對演化的架構進行微調,這是次重要的事情。相反,聯結學派更喜歡用一個簡單、手工編寫的結構,加上許多連接行為,然後讓權值學習來完成所有工作。這就是機器學習版本關於先天和後天的爭論,而且雙方都有很好的論據。


    一方麵,進化已經產生許多神奇的東西,但沒有什麽比產生你更神奇的了。有或者沒有交叉行為,進化結構都是終極算法的基本部分。大腦可以學習任何東西,但終極算法卻無法使大腦進化。如果徹底了解大腦的結構,就可以將其運用到計算機硬件中,但我們還遠遠做不到這一點。通過計算機模擬進化尋求幫助是一件容易的事情。另外,我們也想對機器人的大腦、裝有任意傳感器的係統、超級人工智能設備進行進化。如果有更好的東西來完成這些任務,我們就沒有理由繼續使用根據人類大腦設計出來的設備。另一方麵,進化的過程緩慢到讓人難以忍受。一個有機體的一生隻會產生一條與其基因組相關的信息:它的適應度,反映在後代有機體的數量上。這簡直是在浪費大量的信息,神經學習會通過在使用的點上(可以這麽說)獲取信息來避免這個問題。正如聯結學派的傑夫·辛頓指出的那樣,基因組攜帶的信息沒有什麽優勢,因為我們可以從感知中獲取這些信息。當新生兒睜開眼睛時,感知世界會湧入大腦,而大腦隻需組織這些感知。然而,基因組中需要確定的信息是,完成這些組織工作的“機器”的結構。


    在先天與後天之爭中,兩方都沒有完整的答案,關鍵在於找到如何將兩方結合起來。終極算法既不是遺傳編程,也不是反向傳播,但它得包含這兩者的重要部分:結構學習和權值學習。在傳統觀點看來,先天自然完成第一部分(進化大腦),後天培育再將大腦填滿信息。我們可以在學習算法中重複這個過程。首先,學習網絡的結構,利用爬山法(舉個例子)來決定神經元之間如何連接:試著將每個可能的新連接添加到網絡中,保持那個最能提高性能的連接,然後重複這些步驟。之後利用反向傳播來學習連接權值,那麽你全新的大腦馬上就可以使用了。


    如今在自然和人工進化中,都存在一個很重要的微妙之處。我們會為每個備選的結構而不僅僅是最終的那個,而一直學習權值,目的是為了明白這些結構在生存競爭(在自然情況下)以及訓練數據(在人工條件下)中的表現如何。在每一步中,我們想選擇的結構,是在掌握權值之後(而不是之前),表現最好的那個。因此,實際上,先天自然並不一定會排在後天培育之前。它們是互相交替的,每輪中的“培育”學習會為下一輪的“自然”學習做好基礎,反之亦然。因為後天的培育,先天也會得到進化。皮質關聯區域的進化在感知區域依賴於神經學習,沒有神經學習,它就會變得毫無用處。小鵝跟著媽媽到處走(進化的行為),但得首先認識媽媽(通過學習掌握的能力)。如果它們孵化出來時第一個見到你,就會跟著你走,正如康拉德·洛倫茨明確表明過的那樣。新生大腦已經對環境的特點進行編碼,但不是很明顯,進化過程會將大腦優化,從預期的輸入信息中提取那些特點。同樣的道理,在交替學習結構和權值的算法中,每個新結構都暗中成為前幾輪掌握的權值的函數。


    在所有可能的基因組中,很少有基因組和活性有機體對應。因此典型的適應度“地形”就由廣袤的“平原”組成,偶爾有幾座“尖峰”,這讓進化變得十分困難。如果你從堪薩斯州出發,蒙住眼睛,你就不知道通往落基山脈的路在哪裏,那麽偶然撞上山腳並開始往上爬之前,你很長一段時間都是在晃悠。但如果你把進化和神經學習結合起來,有趣的事情就發生了。如果你在平地上,距離山腳不是很遠,網絡學習會幫你到達那裏,距離山腳越近,它越有可能幫你。它就像有環視功能一樣:在威奇托,它幫不上你,但在丹佛,你會看到遠處的落基山脈,然後往那個方向走。丹佛現在看起來就比你之前蒙住眼時看起來的要適應得多了。淨效應會將適應度頂峰加寬,這樣你從之前艱難的地方出發,找到通往這些峰頂的路就成為可能,就像圖5–4中的a點。


    圖5–4


    在生物學中,這稱作“鮑德溫效應”,該效應是以j·m·鮑德溫的名字命名的,他於1896年提出這個概念。在鮑德溫進化中,初次掌握的行為,之後會變成天生的本領。如果像狗一樣的哺乳動物能學會遊泳,那麽它們進化成海豹的可能性會比淹死的可能性更大。選擇個體學習可以影響進化,不必依賴拉馬克學說。傑夫·辛頓和史蒂芬·諾蘭論證了機器學習中的鮑德溫效應,方法就是利用遺傳算法來進化神經網絡結構,並觀察到隻有個體學習被允許時,適應度才會隨時間增加。    <h2>誰學得最快,誰就會贏</h2>


    進化尋求好的結構,而神經學習則填滿這些結構:這樣的結合是我們走向終極算法最簡單的一步。先天與後天之爭是無休止的波折,這個波折持續了2500年,且爭論會越來越激烈,對於熟悉這一點的人來說,這可能就像一個驚喜。然而,通過計算機的眼睛來看待生命能夠將很多東西進行分類。“自然”對計算機來說就是它運行的程序,而“人工”則是獲取的數據。“這兩個哪個重要”這樣的問題明顯有點荒唐。沒有程序和數據,就沒有輸出信息,比如也沒有這樣的說法:60%的輸出信息由程序得出,另外的40%由數據得出。熟悉機器學習,會讓你擺脫這種線性思維。


    另外,你也許想知道,都到這點了,為什麽我們還沒有完成目標呢?如果我們把自然的兩個主算法——進化和大腦——結合起來,我們當然就可以這樣問。遺憾的是,目前我們隻是大概知道自然如何學習,對許多應用來說已經足夠,但對於真實的東西來說,還隻是灰蒙蒙的影子。例如,胚胎發育是生命的重要組成部分,但在機器學習中,就沒有和胚胎對應的類似物:“有機體”是基因組非常簡單的功能,而我們可能忽視了重要的東西。另一個原因就是,即使已經弄明白自然如何學習,我們也不會滿足。一方麵,這個過程太緩慢。進化需要數十億年來進行學習,而大腦需要一輩子。文化會好些:我可以花一輩子時間來學習一本書,而你可以幾個小時把它讀完。但學習算法應該有在幾分鍾或幾秒鍾內掌握知識的能力。誰學得快,誰就贏了,無論是加快進化速度的鮑德溫效應、語言交流促進人類的學習效果,還是計算機以光的速度發現模型。機器學習是地球上生命之間競爭的最新篇章,更加快速的硬件隻是等式的一邊,另一邊是更加智能的軟件。


    最重要的是,機器學習的目標是盡可能找到最好的學習算法,利用一切可能的方法,而進化和大腦不可能提供學習算法。進化的產物有很多明顯的錯誤。例如,哺乳動物的視覺神經和視網膜前端而不是後端相連,這樣會引起不必要的(而且異乎尋常的)盲點,就在中心凹旁邊,而這裏是視覺最敏銳的地方。活細胞的分子生物學原理非常混亂,分子生物學家常常自嘲道,隻有對分子生物學一點也不懂的人才會相信智能設計。大腦的構造很有可能有相似的錯誤(大腦有許多計算機沒有的限製,比如非常有限的短期記憶),而且沒有理由待在這些限製裏。另外,我們聽說過許多這樣的情形,人類似乎堅持做錯誤的事情,正如丹尼爾·卡尼曼在他的書《思考,快與慢》裏詳細說明的那樣。


    與聯結學派及演化新論者相反,符號學派和貝葉斯學派不相信“法自然”的說法。他們想從基本原理中找出學習算法該做什麽,而且也包括我們人類。例如,如果我們學習如何診斷癌症,就說一句“這就是自然進行學習的方法,我們也照做”還不夠。這其中有太多的利害關係,誤差的代價就是生命。醫生應該盡可能用最安全的方法來進行診斷,這些方法和那些數學家用來證明定理的方法相似,或者盡可能接近他們能掌控的水平(考慮到做到那樣嚴謹有點不太可能)。他們需要權衡證據,目的是把診斷誤差降到最小;或者更確切地說,誤差的代價越大,他們犯錯的可能性就越小(例如,未能找到確實存在的腫瘤,與診斷出其實不存在的腫瘤相比,可能要糟糕很多)。醫生們得做出最優選擇,而不是表麵看起來不錯的選擇。


    這是一個讓人緊張的實例,貫穿科學和心理學的很多領域:是描述性理論與規範性理論之間的分歧,是“這就是它的樣子”與“這就是它應該成為的樣子”之間的分歧。然而,符號學派和貝葉斯學派想指出,弄明白“我們該怎樣學習”也可以幫助我們了解人類如何學習,因為這兩者大概不會完全不相關(遠非如此)。特別指出的是,對於生存有重要意義、已經經曆很長一段時間進化的行為應該就是最優的。我們不是很擅長回答關於概率的書麵問題,但我們擅長快速選擇手和手臂的動作來擊中目標。許多心理學家已經使用符號學或貝葉斯的模型來解釋人類行為的方方麵麵。符號學主導了認知心理學的頭幾十年。在20世紀八九十年代,聯結主義者占支配地位,但現在貝葉斯學者的數量正在上升。


    對於最困難的問題——我們真的想解決但沒能解決的問題,例如,治愈癌症的問題——純粹受到自然啟發的方法要成功可能太無知,即使給定大量的數據也還是如此。原則上,我們可以掌握細胞新陳代謝網絡的完整模型,方法就是結合結構研究,利用或者不利用交叉,通過反向傳播來進行參數學習,但有太多不利的局部最優陷阱。我們得利用更大塊的數據來進行推理,根據需要集合或重新集合這些數據,然後利用逆向演繹來填補空缺。要讓這樣的目標來引導我們的學習行為:以最優方法診斷癌症,然後找到治療癌症的最佳藥物。


    最優學習是貝葉斯學派的中心目標,而且他們肯定自己已經找到了實現這個目標的方法。請看這裏……

章節目錄

閱讀記錄

終極算法:機器學習和人工智能如何重塑世界所有內容均來自互聯網,鉛筆小說網隻為原作者佩德羅·多明戈斯的小說進行宣傳。歡迎各位書友支持佩德羅·多明戈斯並收藏終極算法:機器學習和人工智能如何重塑世界最新章節