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