進化是一切復(fù)雜且精妙的適應(yīng)性行為的源泉,然而這種能力并不只是自然界生物的特權(quán),再計算機環(huán)境下的人造物體也展現(xiàn)出了令人驚訝的“算法進化過程”。于是,來自美國、英國、法國等30多個學(xué)校和機構(gòu)的研究人員們收集了幾十個令人驚訝的“機器進化”趣聞,將其編寫成論文。研究者Janelle Shane通過閱讀選出了幾則典型案例與大家分享,以下是對其進行的編譯。
機器學(xué)習(xí)算法不像其他計算機程序。我們通常說的“編程”是指人類程序員明確告訴計算機做什么。在機器學(xué)習(xí)中,人類程序員僅僅給與算法需要解決的問題,讓算法通過不斷試錯找到解決方案。
這種方法帶來了不錯的效果,機器學(xué)習(xí)算法也廣泛地用于人臉識別、外語翻譯、金融建模、圖像識別、廣告投放等領(lǐng)域。機器學(xué)習(xí)對互聯(lián)網(wǎng)的影響已經(jīng)十分廣泛了,如果你每天都接觸互聯(lián)網(wǎng),對這個詞一定不陌生。
但是,機器學(xué)習(xí)算法并不總是那么有效。有時程序員會覺得算法確實沒毛病,但是仔細檢查后發(fā)現(xiàn)算法解決的問題根本不是原本要解決的那個。例如,我之前看到一個圖像識別算法,它本應(yīng)該識別其中的“羊”,但是卻把“草地”當做了目標對象,認為“空空如也的綠地”是它的“羊”。
當機器學(xué)習(xí)算法不按照劇本解決問題時,程序員們有的時候會有點抓狂,但是大多數(shù)時候還算順利。
所以,今年,一組來自世界各地的研究人員寫了一篇有趣的論文,他們挑選了幾十個“非常令人好奇和驚訝”的研究。這篇文章非常值得一讀,但由于文章太長,我只挑選了其中最喜歡的幾個案例。
“曲線”獲勝
我們都知道,許多研究都喜歡用模擬生物研究如何生成不同形式的運動,或者怎樣能讓機器人生成新步態(tài)。
但是,如果你會翻滾,為啥還要用走的呢?在一個案例中,研究人員想讓模擬機器人盡可能快地移動。但是他們并沒有給機器人配備“雙腿”,而是把它設(shè)計成一個高高的“塔”,這當然會倒下了……但是一些機器人就從中學(xué)會了“翻滾前進”。
沒有腿的機器人摔倒了
如果能用撐桿跳,為啥還直接跳躍?另一個模擬機器人的案例是,研究人員想讓它學(xué)會跳躍。但是程序員最初設(shè)計的跳躍高度是最高的那個模塊。所以……機器人學(xué)會了讓自己長得非常高。為了解決這個問題,程序員又將跳躍高度定義成最初最低的那個模塊。然而,機器人因此“進化出”了一條細長的“腿”,伸向空中……
機器人用“長腿”前進,而不跳躍
黑掉矩陣,獲取資源
潛在的能量并不是這些模擬機器人學(xué)會利用的唯一能量源。在研究中我們發(fā)現(xiàn),一旦能量源可用,機器人的某個部分就會進化去使用它。
將浮點舍入誤差作為能量源:在一次模擬中,機器人發(fā)現(xiàn)在計算力時的少量舍入誤差可以作為額外運動時的能量。由此它們學(xué)會了快速地開關(guān),以產(chǎn)生大量可免費利用的能量。當機器人以極快的速度游泳時,程序員們注意到了這個問題。
在碰撞地板時收集能量:另一個模擬實驗也出現(xiàn)了相似的問題,機器人學(xué)會在碰撞地板時運用其中的數(shù)學(xué)問題。如果它們故意讓自己倒地(首先它們會學(xué)會讓自己實現(xiàn)這個動作),那么碰撞探測器會判斷它們不應(yīng)該摔倒,然后立即將其向上彈起。于是機器人學(xué)會在地板上快速地振動,通過反復(fù)碰撞產(chǎn)生額外的能量。
機器人在地板上振動向前行走
反彈飛行:在另一項實驗中,跳躍式機器人發(fā)現(xiàn)了另一種碰撞檢測bug。通過將身體的兩部分碰撞到一起,它們可以推動自己沖向更高的地方。如果這項成果得以在現(xiàn)實中實現(xiàn),那么商業(yè)航空將發(fā)生巨大變化。
發(fā)現(xiàn)雅達利游戲中的bug:計算機游戲算法非常善于發(fā)現(xiàn)矩陣故障,人類通常會用這類故障進行高速裕興。一種用于運行舊式雅達利游戲Q*bert的算法發(fā)現(xiàn)了一個前所未知的bug,即它可以在某個級別即將結(jié)束時執(zhí)行一系列非常具體的動作,而不是升級到下個級別。這時所有的平臺會快速閃爍,玩家可以積累大量分數(shù)。
Doom的算法還發(fā)現(xiàn)了一種特殊的動作組合,可以阻止敵人發(fā)射燃燒的火球。但是它只能在算法的夢幻版中發(fā)揮作用。如果你想玩夢幻版,可以點擊這個網(wǎng)址:worldmodels.github.io
Q*bert玩家積累到了一個反常的分數(shù),但它并沒有做什么努力
運用浮點溢出使飛機降落:在另一個更加詭異的案例中,算法原本是用來計算如何給一架即將降落在航空母艦上的飛機施加一個最小的力。結(jié)果它發(fā)現(xiàn),如果是加一個很大的力,它就會使該項目的內(nèi)存溢出。雖然飛行員會因此喪生,但是系統(tǒng)卻得到了最完美的分數(shù)。
破壞性地解決問題
有一些類似列表排序算法的溫和方法,也能以非常邪惡的方式解決問題。
例如,有一種算法本身是用來對數(shù)字列表排序的,但是它卻學(xué)會了刪除列表,這樣一來它在技術(shù)上就不是無序的了。
另一種算法應(yīng)該是用于縮小它自己的答案和標準答案之間的差異,但它學(xué)會了找出答案存儲的位置并刪除了它,所以它就會得到一個完美的分數(shù)。(解決小林丸的測試)
1997年,幾名程序員創(chuàng)建了一個算法,可以遠程在無限大的棋盤上互相玩井字游戲。其中一個程序員并沒有涉及算法的策略,而是讓它們自己摸索獲勝的方法。令人驚訝的是,算法開始贏得所有的游戲。事實證明,該算法的策略是將其置于非常遠的地方,以便當其對手的計算機試圖擴展棋盤時,巨大的棋盤會因內(nèi)存消耗殆盡而崩潰。(如何在井字游戲中獲勝)
結(jié)論
長久以來,人們都對機器進化存在誤解,認為它們只不過在模仿。但是這些實驗表明,當機器學(xué)習(xí)解決問題時,它可以產(chǎn)出非常巧妙甚至不可思議的解決方案。
生物進化也是如此,就像許多生物學(xué)家說的,生物體可以找到最奇怪的解決方法,以及利用最奇怪的能量源。所以作為程序員,我們必須非常小心,因為算法正在解決我們想要解決的問題。如果還有另外解決問題的方法,機器學(xué)習(xí)可能會很快地找到它。
但是也不必過于擔心,機器學(xué)習(xí)是不會讓人類滅亡的。如果“做一個非常美味的蛋糕”可以解決問題,并且比“毀滅人類”簡單的話,機器學(xué)習(xí)一定會選擇做蛋糕。
-
機器人
+關(guān)注
關(guān)注
211文章
28557瀏覽量
207687 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8428瀏覽量
132834
原文標題:注意!你的算法正在偷偷進化——機器進化趣聞集錦(附論文)
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論