「水可載舟,亦可覆舟」,這句老話相信我們都很熟悉,套用到機器學習上,即是帶給我們諸多便利的機器學習算法,一個不小心,將因為意想不到的理由帶到我們「驚喜」。原作者對一篇論述此現象的論文進行了解讀,我們將之編譯如下。
機器學習算法與其他計算機程序存在很大的不同。在一般編程行為中,人類程序員都會告訴計算機具體做些什么。來到機器學習,人類程序員只會提供問題,算法必須通過反復試驗來搞明白如何解決它。
目前看來這套做法頗有成效——機器學習算法已廣泛用于面部識別、語言翻譯、財務建模、圖像識別及廣告投放領域。只要你上過網,就可能已經和機器學習算法產生過交互。
然而它并不總是運作良好。有的時候程序員認為自己的算法已經設計得足夠好,可仔細觀察結果,就會發現它解決的是與程序員原先想要的完全不一樣的問題。舉個例子,我見過一個圖像識別算法,原該識別綿羊的它,最終卻學會識別草,且不停將空曠的綠草地標記為含有綿羊。
一群綿羊在郁郁蔥蔥的綠色山坡上吃草
標簽:吃草、綿羊、山、城堡、馬
當機器學習算法以意想不到的方式成功解決問題時,程序員通常會感覺,好吧是的,有時確實挺煩人,但往往都是很純粹的愉悅感。
令人感到驚喜的是,2018 年有一組研究人員據此寫了一篇引人入勝的論文——該論文收集了數十篇「引起研究人員驚訝與贊嘆」的軼事。這篇論文非常值得一讀,包括原始參考文獻也是,這里有我最喜歡的幾個例子。
論文鏈接:
https://arxiv.org/pdf/1803.03453.pdf
扭曲規則,取得勝利!
首先,通過模擬生物來研究不同形式的運動是如何演化的,包括為機器人提供全新的運動思路,已經是一個悠長的傳統。
既然可以撲騰,為何還要選擇走路?在這個例子中,模擬機器人原本應該盡可能地快速前進,但它卻沒有演化自己的雙腿,而是選擇將自己組裝成高塔,然后摔下來。當中有些機器人甚至學會將摔落的動作變成翻筋斗,以增加挪騰的額外距離。
[配圖:機器人成了一座倒下的塔]
既然可以跳康康,何必學跳躍?這組模擬機器人原該演化成可跳躍的形式,可由于程序員一開始將跳躍的高度設置成最高擋塊的高度,于是(又一次犯傻)機器人在形式上變得很高。為了解決這個問題,程序員試圖將跳躍高度定義為最初為最低擋塊的高度。作為回應,機器人演化出一條細長的腿,化身可以將腿蹬至空中的康康舞機器人。
[配圖:高大的機器人將腿伸向空中,而不是跳躍]
為了「超級能源」,黑你沒商量!
勢能并非模擬機器人唯一學會利用的能源。事實證明,像現實生活中發生的一樣,一旦存在可使用能源,肯定會有東西演化去使用它。
作為能源的浮點舍入誤差:在一次模擬中,機器人習得數學中的舍入誤差規則,發現這可以使它們在運動中獲得額外的能量。于是,他們學會了快速抽動,由此產生大量可以利用的自由能量。當機器人開始以驚人的速度在游泳時,程序員才注意到這個問題。
與地板的碰撞中獲取能量:在另一個模擬中,一部學會碰撞檢測規則的機器人則帶來另一些問題。一旦它們設法在地板上讓自己陷入困境(首先學會操縱時間來使之成為可能),碰撞檢測系統會意識到機器人不應在地板上,隨之將它們向上射擊。于是機器人學會在地板上快速振動,通過反復碰撞來產生額外的能量。
[圖片:機器人通過地板上的振動來獲取前進的能量]
「撞擊」飛行:在另一個模擬中,跳躍機器人學會利用不同的碰撞檢測 bug 來幫助自己飛行——每當它們彼此的部件碰到一起時,作力會將它們推至空中。如果這在現實生活中起作用,如今的商業航班將是另一番景象。
鉆「漏洞」:計算機的游戲算法非常擅長發現人類通常也會利用的矩陣故障來提高獲勝速度。一個玩著舊 Atari 游戲 Q * bert 的機器算法發現一個過去未曾發現的 bug,它選擇在一個級別結束時執行一系列特定的動作,而非直接過渡下一級,由此所有平臺將開始快速閃爍,玩家因此得以積累大量積分。
另外有一個主攻 Doom 的游戲算法同樣找到可以阻止敵人發射火球的特殊操作——但它只適用于算法的「夢幻版」Doom。有個好消息是,你可以在這里玩到該版本的游戲。
游戲鏈接:
https://worldmodels.github.io
[配圖:Q * bert 玩家積累了可疑的數量積分,考慮到它并未做過太多事情]
「目標宏大」:在一個令人毛骨悚然的例子中,有個算法原應解決如何對試圖降落航空母艦的飛機應用最小的作力,結果它發現如果應用的是一個「大型」作力,它將溢出程序的內存,進而注冊成為一個非常「微小」的作力。飛行員會死,但是,嘿,完美的分數。
破壞,也是一種解決方案!
即便像列表排序算法那樣顯然是良性的東西,也可能以一種無辜卻險惡的方式解決問題。
你看,它們可不是「未排序」:舉個例子,一個原本應該學會對數字列表進行排序的算法,竟然學會刪除列表,以便從技術層面消除「未排序」的東西。
完成 Kobayashi Maru 測試:該算法原應最小化自身答案與正確答案之間的差距,結果它找著了存儲與刪除答案的位置,因此它獲得了一個完美的分數。
在井字棋游戲中取得勝利:1997 年,一些程序員構建了一個可以在無限大的板上彼此對抗玩井字棋游戲的算法。一名程序員決定放棄設計具體的算法策略,任由其自行發展。令人感到驚訝的是,該算法突然開始贏得所有游戲。結果證明,該算法的策略是棋子放在一個極其遠的位置,因此每當對方的計算機試圖模擬新的擴展板時,過于巨大的游戲板將導致其耗盡內存并崩潰,從而輸掉游戲。
結論
當機器學習解決問題時,它所提出的解決方案可以很聰明,也可以讓人徹頭徹尾感到不可思議。
生物的進化也是這樣運作的——正如任何生物學家會告訴你的那樣,生物總會找到最奇怪的問題解決方案,以及最奇怪的能源來進行開發。一個能夠證明我們未生活在計算機模擬中的最可靠跡象是——如果是,一些微生物將會學會利用它的缺陷。
因此,作為程序員,我們必須非常小心,我們的算法應該解決我們要求它們解決的問題,而不是抄捷徑。一旦存在另一種可以更加容易解決問題的途徑,機器學習很可能會找到它。
幸運的是,「殺死所有人類」真的很難。如果「烤一個令人難以置信的美味蛋糕」也能解決問題,并且比「殺死所有人類」更容易,那么機器學習肯定會選擇站在蛋糕那一邊。
-
人工智能
+關注
關注
1792文章
47409瀏覽量
238923 -
機器學習
+關注
關注
66文章
8424瀏覽量
132765
原文標題:高能 | 驚喜還是驚嚇?盤點機器學習算法的「高能」瞬間
文章出處:【微信號:datawork,微信公眾號:機器學習與人工智能】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論