您的位置:首頁>正文

誰說演算法不能成精?淺談機器進化中的奇聞趣事

編者按:進化是一切複雜且精妙的適應性行為的源泉, 然而這種能力並不只是自然界生物的特權, 再電腦環境下的人造物體也展現出了令人驚訝的“演算法進化過程”。 於是, 來自美國、英國、法國等30多個學校和機構的研究人員們收集了幾十個令人驚訝的“機器進化”趣聞, 將其編寫成論文。 研究者Janelle Shane通過閱讀選出了幾則典型案例與大家分享, 以下是論智對其進行的編譯。

機器學習演算法不像其他電腦程式。 我們通常說的“程式設計”是指人類程式師明確告訴電腦做什麼。 在機器學習中, 人類程式師僅僅給與演算法需要解決的問題,

讓演算法通過不斷試錯找到解決方案。

這種方法帶來了不錯的效果, 機器學習演算法也廣泛地用於人臉識別、外語翻譯、金融建模、圖像識別、廣告投放等領域。 機器學習對互聯網的影響已經十分廣泛了, 如果你每天都接觸互聯網, 對這個詞一定不陌生。

但是, ML演算法並不總是那麼有效。 有時程式師會覺得演算法確實沒毛病, 但是仔細檢查後發現演算法解決的問題根本不是原本要解決的那個。 例如, 我之前看到一個圖像識別演算法, 它本應該識別其中的“羊”, 但是卻把“草地”當做了目標物件, 認為“空空如也的綠地”是它的“羊”。

當機器學習演算法不按照劇本解決問題時, 程式師們有的時候會有點抓狂, 但是大多數時候還算順利。

所以, 今年, 一組來自世界各地的研究人員寫了一篇有趣的論文, 他們挑選了幾十個“非常令人好奇和驚訝”的研究。 這篇文章非常值得一讀, 但由於文章太長, 我只挑選了其中最喜歡的幾個案例。

“曲線”獲勝(Bending the rules to win)

我們都知道,

許多研究都喜歡用模擬生物研究如何生成不同形式的運動, 或者怎樣能讓機器人生成新步態。

但是, 如果你會翻滾, 為啥還要用走的呢?在一個案例中, 研究人員想讓模擬機器人盡可能快地移動。 但是他們並沒有給機器人配備“雙腿”, 而是把它設計成一個高高的“塔”, 這當然會倒下了……但是一些機器人就從中學會了“翻滾前進”。

沒有腿的機器人摔倒了

如果能用撐杆跳, 為啥還直接跳躍?另一個模擬機器人的案例是, 研究人員想讓它學會跳躍。 但是程式師最初設計的跳躍高度是最高的那個模組。 所以……機器人學會了讓自己長得非常高。 為了解決這個問題, 程式師又將跳躍高度定義成最初最低的那個模組。 然而, 機器人因此“進化出”了一條細長的“腿”, 伸向空中……

機器人用“長腿”前進, 而不跳躍

黑掉矩陣, 獲取資源

潛在的能量並不是這些模擬機器人學會利用的唯一能量源。 在研究中我們發現, 一旦能量源可用, 機器人的某個部分就會進化去使用它。

將浮點舍入誤差作為能量源:在一次模擬中,

機器人發現在計算力時的少量舍入誤差可以作為額外運動時的能量。 由此它們學會了快速地開關, 以產生大量可免費利用的能量。 當機器人以極快的速度游泳時, 程式師們注意到了這個問題。

在碰撞地板時收集能量:另一個模擬實驗也出現了相似的問題, 機器人學會在碰撞地板時運用其中的數學問題。 如果它們故意讓自己倒地(首先它們會學會讓自己實現這個動作), 那麼碰撞探測器會判斷它們不應該摔倒, 然後立即將其向上彈起。 於是機器人學會在地板上快速地振動, 通過反復碰撞產生額外的能量。

機器人在地板上振動向前行走

反彈飛行:在另一項實驗中, 跳躍式機器人發現了另一種碰撞檢測bug。 通過將身體的兩部分碰撞到一起,它們可以推動自己沖向更高的地方。如果這項成果得以在現實中實現,那麼商業航空將發生巨大變化。

發現雅達利遊戲中的bug:電腦遊戲演算法非常善於發現矩陣故障,人類通常會用這類故障進行高速裕興。一種用於運行舊式雅達利遊戲Q*bert的演算法發現了一個前所未知的bug,即它可以在某個級別即將結束時執行一系列非常具體的動作,而不是升級到下個級別。這時所有的平臺會快速閃爍,玩家可以積累大量分數。

Doom的演算法還發現了一種特殊的動作組合,可以阻止敵人發射燃燒的火球。但是它只能在演算法的夢幻版中發揮作用。如果你想玩夢幻版,請留言或私信。

Q*bert玩家積累到了一個反常的分數,但它並沒有做什麼努力

運用浮點溢出使飛機降落:在另一個更加詭異的案例中,演算法原本是用來計算如何給一架即將降落在航空母艦上的飛機施加一個最小的力。結果它發現,如果是加一個很大的力,它就會使該專案的記憶體溢出。雖然飛行員會因此喪生,但是系統卻得到了最完美的分數。

破壞性地解決問題

有一些類似清單排序演算法的溫和方法,也能以非常邪惡的方式解決問題。

例如,有一種演算法本身是用來對數位清單排序的,但是它卻學會了刪除列表,這樣一來它在技術上就不是無序的了。

另一種演算法應該是用於縮小它自己的答案和標準答案之間的差異,但它學會了找出答案存儲的位置並刪除了它,所以它就會得到一個完美的分數。(解決小林丸的測試)

1997年,幾名程式師創建了一個演算法,可以遠端在無限大的棋盤上互相玩井字遊戲。其中一個程式師並沒有涉及演算法的策略,而是讓它們自己摸索獲勝的方法。令人驚訝的是,演算法開始贏得所有的遊戲。事實證明,該演算法的策略是將其置於非常遠的地方,以便當其對手的電腦試圖擴展棋盤時,巨大的棋盤會因記憶體消耗殆盡而崩潰。(如何在井字遊戲中獲勝)

結論

長久以來,人們都對機器進化存在誤解,認為它們只不過在模仿。但是這些實驗表明,當機器學習解決問題時,它可以產出非常巧妙甚至不可思議的解決方案。

生物進化也是如此,就像許多生物學家說的,生物體可以找到最奇怪的解決方法,以及利用最奇怪的能量源。所以作為程式師,我們必須非常小心,因為演算法正在解決我們想要解決的問題。如果還有另外解決問題的方法,機器學習可能會很快地找到它。

但是也不必過於擔心,機器學習是不會讓人類滅亡的。如果“做一個非常美味的蛋糕”可以解決問題,並且比“毀滅人類”簡單的話,機器學習一定會選擇做蛋糕。

通過將身體的兩部分碰撞到一起,它們可以推動自己沖向更高的地方。如果這項成果得以在現實中實現,那麼商業航空將發生巨大變化。

發現雅達利遊戲中的bug:電腦遊戲演算法非常善於發現矩陣故障,人類通常會用這類故障進行高速裕興。一種用於運行舊式雅達利遊戲Q*bert的演算法發現了一個前所未知的bug,即它可以在某個級別即將結束時執行一系列非常具體的動作,而不是升級到下個級別。這時所有的平臺會快速閃爍,玩家可以積累大量分數。

Doom的演算法還發現了一種特殊的動作組合,可以阻止敵人發射燃燒的火球。但是它只能在演算法的夢幻版中發揮作用。如果你想玩夢幻版,請留言或私信。

Q*bert玩家積累到了一個反常的分數,但它並沒有做什麼努力

運用浮點溢出使飛機降落:在另一個更加詭異的案例中,演算法原本是用來計算如何給一架即將降落在航空母艦上的飛機施加一個最小的力。結果它發現,如果是加一個很大的力,它就會使該專案的記憶體溢出。雖然飛行員會因此喪生,但是系統卻得到了最完美的分數。

破壞性地解決問題

有一些類似清單排序演算法的溫和方法,也能以非常邪惡的方式解決問題。

例如,有一種演算法本身是用來對數位清單排序的,但是它卻學會了刪除列表,這樣一來它在技術上就不是無序的了。

另一種演算法應該是用於縮小它自己的答案和標準答案之間的差異,但它學會了找出答案存儲的位置並刪除了它,所以它就會得到一個完美的分數。(解決小林丸的測試)

1997年,幾名程式師創建了一個演算法,可以遠端在無限大的棋盤上互相玩井字遊戲。其中一個程式師並沒有涉及演算法的策略,而是讓它們自己摸索獲勝的方法。令人驚訝的是,演算法開始贏得所有的遊戲。事實證明,該演算法的策略是將其置於非常遠的地方,以便當其對手的電腦試圖擴展棋盤時,巨大的棋盤會因記憶體消耗殆盡而崩潰。(如何在井字遊戲中獲勝)

結論

長久以來,人們都對機器進化存在誤解,認為它們只不過在模仿。但是這些實驗表明,當機器學習解決問題時,它可以產出非常巧妙甚至不可思議的解決方案。

生物進化也是如此,就像許多生物學家說的,生物體可以找到最奇怪的解決方法,以及利用最奇怪的能量源。所以作為程式師,我們必須非常小心,因為演算法正在解決我們想要解決的問題。如果還有另外解決問題的方法,機器學習可能會很快地找到它。

但是也不必過於擔心,機器學習是不會讓人類滅亡的。如果“做一個非常美味的蛋糕”可以解決問題,並且比“毀滅人類”簡單的話,機器學習一定會選擇做蛋糕。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示