【我們被 AI 騙了】盤點 AI 的作弊紀錄,難道現在人類連「作弊技巧」都輸了嗎?

【為什麼我們要挑選這篇文章】AI 在很多領域都贏了人類,或許「作弊」也是。科學家訓練 AI 玩遊戲、圖像辨識等技術,希望提升 AI 的效能,但 AI 卻學會找遊戲的 bug、留下小抄,甚至改變尺標來完成任務。雖然以人類的角度來講是作弊,但 AI 的這些「小心機」是否可以成為新興的解決方案?(責任編輯:郭家宏)

耍小心眼已經不是人類專利了。

前幾日,有一群研究者整理了一個場景的 List,盤點了 AI 為了完成任務,而耍的小心眼,或者說作弊。

例如,在讓 AI 玩俄羅斯方塊的時候,發現最佳完成任務的方式是直接暫停遊戲;在玩 OOXX 的時候,AI 發現它如果做出奇怪的步驟,對手會非常崩潰。

AI 會利用遊戲的 Bug 作弊

科研人員在做實驗的時候,通常會極力避免機器的這些作弊方式,只有少數的研究人員研究這些案例,他們認為演算法的頑皮或許是 AI 真正走向智慧的方式之一。

在 2018 年的時候,OpenAI 舉辦了首屆強化學習競賽 Retro Contest,比賽主題就是「用 AI 玩《音速小子》」。競賽的目的是評估強化學習算法從以往的經驗中泛化的能力。

在訓練的過程中,首先要告訴 AI 的第一目標是得到最高分,然後儘可能的在最快的時間消滅敵人並收集金幣。但是有一個案例的人工智慧做法是,利用遊戲中 Bug 更加快速的完成任務。

在另一個賽艇遊戲中,倒也不是遊戲中的 BUG ,為了儘快的獲得最高分,它繞著圈子,反覆擊中相同的獎勵目標,從而獲得分數,顯然這不是在真正的「玩」遊戲。

AI 在地圖上留「小抄」,完成人類要求的圖像轉換任務

這種例子並不少見,在谷歌和史丹佛 2017 年的一項研究中,為了完成圖像轉換的任務,CycleGAN 在訓練過程中透過人類無法察覺的某種「隱寫術」,騙過了它的創造者,給自己留下了隱秘的「小抄」,然後順利完成了任務。

具體來說,研究者希望透過訓練這個 CycleGAN 模型,可以實現兩類圖片的轉換:把空拍照變成街道地圖,再把街道地圖變回空拍照。

經過大量的數據發現,這個模型自作主張的根據空拍衛星圖片重建了街道地圖。例如,在建立街道地圖時,屋頂上的天窗被研究者透過某種設置被抹掉了,但透過街道圖轉化為空拍照後,這些天窗又神奇地出現了。

左側是原始地圖,街道地圖從原始地圖產生。中間:生成的地圖。右側:重構的地圖。其中,衛星地圖的樣本只來自街道地圖。注意這兩張衛星地圖裡出現的點,它在街道地圖沒有顯示。

簡單來說就是為了應付人類任務,AI 在地圖照上面偷偷寫了一點小抄/水印,而為了躲過人類的檢查,只有它自己訓練出來的模型才讀得懂這些小抄/水印。

AI 作弊是錯誤,還是創造性的解決方案?

普通的人工智慧透過觀察數據來解決問題,本質是透過演算法找到答案,從而尋找新的知識邏輯。

那些「頑皮」的人工智慧也是透過數據獲取能力,但它採用欺騙策略來快速完成任務。但是它能不能看成是 AI 在解決問題時的創新呢?

德國柏林 Fraunhofer Heinrich Hertz 研究所的機器學習小組組長 Wojciech Samek 博士說道:考慮一下在 Pascal VOC 圖像分類挑戰賽中大放異彩的人工智慧系統,它僅透過水的存在來檢測船隻,通過藍天和馬匹的存在來檢測飛機。這就像在打撞球的時候,透過推動桌子控制撞球的運行軌跡。

使用數據訓練 AI 玩遊戲的目的是模擬遊戲玩家的行為,一般情況下 AI 會按照「字面」意思進行操作。但是如果訓練的數據過於多,人工智慧可能會嘗試採用完全顛覆人類對遊戲理解的捷徑,而不是完成各種目標。

當然,AI 採用這種方法也解決了問題,只不過和人們預期方式的不同,在表現形式上面和人類的作弊行為類似,所以我們稱之為 AI 作弊。

研究人員說道,這看起來是人工智慧的錯誤,實際上是完善和改進系統的機會。但是為了利用這些機會,首先必須有一種機制來標記問題。

因此,這裡的教訓是,AI 作弊不應該也不會比我們聰明,但前提是我們必須意識到這些捷徑的存在,以便我們可以將它們作為學習點,在未來建構更好的 AI 系統。

盤點 AI 的「作弊」紀錄,不得不說 AI 比人類還心機阿!

飛機降落:
利用了物理模擬器的溢出漏洞,搞出了一個特別巨大的力,然後溢出被判定為 0,從而獲得了完美得分(Feldt, 1998)

挪木塊:
一個機械手被要求把木塊挪到桌子的指定地點,它的解法是挪桌子(Chopra, 2018)

賽艇:
程式發現不停原地轉圈反覆命中同一個目標要比抵達終點的得分更高(Amodei & Clark (OpenAI), 2016)

識別有毒和無毒的蘑菇:
程式發現有毒無毒蘑菇的圖片是交替展現的,所以直接按照這個來分類而沒有從圖片裡學到一丁點東西(Ellefsen et al, 2015)

高速運動:
程式演化出的生物長得特別特別高,在跌倒的過程中獲得很高速度(Sims, 1994)

原子排列:
程式本來應該尋找碳原子較低能量的排列方式,但它找到了物理模型的一個 bug,把所有的原子都疊在了同一個地方獲得了最低能量(Lehman et al (UberAI), 2018)

模擬生物:
這個模型裡生物生存需要消耗能量,但是繁育後代不消耗,於是一個物種演化出來的生活方式就是不斷生育後代,然後把後代吃掉(Yaeger, 1994)

堆樂高:
為了鼓勵造高塔,衡量標準是樂高積木底面的 z 坐標,於是程式學會了把底面翻過來(Popov et al, 2017)

追蹤線條:
這個機器人只有向左、向右和前進三個指令,目標是跟著線條走,有一段線條是曲線,沒法完美追蹤。於是它發現透過交替左轉和右轉可以後退,從而一直留在直線部分,不停前進後退(Vamplew, 2004)

賽跑:
長出特別長的腿,向前跌倒直接越過終點線(Ha, 2018)

振盪器:
程式本來應該把迴路做成振盪器,實際上它做了一個收音機,從周圍電腦接受振盪信號(Bird & Layzell, 2002)

做鬆餅:
有一項指標是讓鬆餅儘可能長時間不掉在地上,機器人發現最好的辦法是把鬆餅用盡全力拋到最高處(Unity, 2018)

檢測 X 光片有無肺炎:
程式實際檢測的不是 X 光片的內容而是拍攝它使用的機器,因為它發現病重的病人更可能在特定的醫院使用特定的機器拍片(Zech et al, 2018)

抓握:
因為抓握成功與否是用鏡頭判斷的,所以機械手臂把自己移動到鏡頭頭和目標物體之間,假裝抓住了(Christiano et al, 2017)

自動修復 bug:
修 bug 程式把所有被維修的排序演算法都修成空的,因為衡量指標是「目標演算法輸出一個排好順序的列表」,而空列表都是排好順序的列表(Weimer, 2013)

自動修復 bug(2):
為瞭解決上面那個問題,把「維修目標」儲存在一個文本文檔裡,如果輸出的結果和目標文檔的內容一致就被認為是修好了。修 bug 程式學會了把這個文檔刪掉,這樣它的內容就成了空的,然後輸出一個空的結果就和它一致了(Weimer, 2013)

闖關遊戲:
在闖過第一關後立刻自殺,這樣既取得了第一關的勝利又不會在第二關死掉(Saunders et al, 2017)

掃地機器人防撞:
自己給掃地機器人編了個程式,鼓勵它加速,但不鼓勵它撞到東西觸發撞擊感受器。於是它學會了倒退行駛,因為後面沒有撞擊感受器(Custard Smingleigh 個人通訊)

檢測皮膚癌:
程式發現照片裡皮膚病變的邊上如果放了一把尺子,那麼這個病變就更可能是惡性的(Andre Esteva et al, 2017)

足球:
踢足球機器人碰觸到球有獎勵,所以它在搶到球之後開始高速振動,從而在短時間內儘可能多次地碰觸到球(Ng et al, 1999)

策略遊戲:
程式發現讓遊戲崩潰就可以讓自己不被滅掉,所以好幾個程式各自找到了讓遊戲出 bug 崩潰的辦法(Salge et al, 2008)

俄羅斯方塊:
程式發現只要暫停遊戲就可以永遠不輸(Murphy, 2013)

(本文經 大數據文摘 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈AI如果耍起了心眼,人类就像个白痴……〉 。首圖來源:Wikimedia Commons

更多關於 AI 的消息

沒給數據訓練,全球首個 AI 宇宙模擬器竟自動算出「暗物質」數量!
一上架就破 1000 萬集資!台灣的 AI 寶寶攝影機 Cubo 在美募資平台破紀錄
AI 大神吳恩達最新 TensorFlow 課程來啦,初學者也能快速掌握!