Search
Close this search box.

讓 AI 演算你的萬聖節穿搭!拇指臉 Elsa 榮登我的人生摯愛

【我們為什麼挑選這篇文章】各大公司在萬聖節這天幾乎都會舉辦萬聖節派對,想當然爾員工也都卯足全力穿上各種奇怪搞笑的裝扮,但萬聖節最尷尬的就是跟別人扮的「一樣」,如果你是今晚才要參加最後派對,趕緊看看這篇文章,用 AI 演算法幫你算出最特別造型,再也不用苦惱跟別人撞「怪」了!(責任編輯:鄭惟馨)

聊起機器學習的時候,人們總覺得它特別的神秘。我們知道 AI 演算法能完成一些任務,但是不知道它具體是怎麼做到的。

嚴格的來說,機器學習演算法是人工智慧 AI 的一個分支,但是我們其實也可以把它當成一種預測演算法看待。

比如根據一個影迷在豆瓣上評分的數據,演算法能預測出他喜歡什麼樣的電影;根據一個求職者的履歷,演算法能預測它這次去面試被刷的幾率;或者說(重點來了!)根據過去幾年裡萬聖節服裝的訂單,演算法能夠預測今年的狂歡中人們是怎麼裝扮自己的。

萬聖節的裝扮預測好像是個不錯的話題哈(沒錯,我們就是在炒熱度!)。為了實現這個小應用,我們找到了一個叫「textgenrnn」的演算法,它的能力是模仿文本。

「演算法」從大量訂單中學習,成功預測出最搞怪萬聖節裝扮

「textgenrnn」的作者叫 Max Woolf,他開源的這個演算法在開始的時候沒有任何知識,就是一張白紙。它可以根據你輸入的任何的文字進行學習。所以我們首先拿到了一年內人們發送給 aiweirdness.com 的 7182 個萬聖節服裝訂單,然後把這個訂單的文字訊息餵給 textgenrnn,看看能發生什麼有趣的事情。(textgenrnn 的 github 連結:https://github.com/minimaxir/textgenrnn)

aiweirdness.com 的鏈接是:嗯,就是它自己,看名字就知道不是什麼正經的服裝廠哈哈

下面就是演算法產生的一些結果:

演算法很聰明,在沒有人來教它的情況下,僅僅根據我們輸入的訂單信息就學到了上面圖片裡面的單詞和詞組。

這個演算法是這樣工作的,首先它要預測每個訂單里的衣服的名稱,名稱就是英文單詞啦。

然後它會自己檢查一下預測的這個單詞是不是不對,檢查的比對文本就是訓練的數據。如果預測錯了(演算法剛開始訓練的時候幾乎都是錯的),它會改變自己的內部演算法結構。漸漸的,演算法就學會了預測的技巧,然後預測的結果就變得越來越好。

為了直觀感受一下,下面這張圖是 textgenrnn 神經網路在不同的訓練階段所生成的文字結果。這里所說的不同階段就是訓練中的不同的 epoch,就是更新了幾代的意思。(它只能生成文字,不能生成圖片,為了讓生成的文字更直觀,我們請來了靈魂畫師對其進行靈感作畫)

什麼鬼……

額,難為畫師了

嗯,可以可以,尤其是第三個,夠sexy!

這里生成的文字就有點意思了

不錯不錯,尤其是外星人的胸肌

第 11 次更新就已經很棒了,大概能知道是什麼了,貓巫好萌!

演算法的最愛:什麼服裝都要加上「sexy」!

當我們讓演算法生成服裝名稱的時候,我們還可以給它設置一個「創造性」選項。如果給它的創造性空間比較小的話,它總是根據自己的最好的預測生成一些重復的結果;如果我們給它「自由過頭」的話,它會冒險進入一些它認為不太可能的領域裡面然後輸出一些奇奇怪怪的東西。

在訓練剛開始的時候,神經網路對於輸入的內容一無所知。它不知道英文字母和空格是有區別的,也不知道一個文字是怎麼拼寫的。當訓練更新的次數增加,它就能學到一些事情了。嗯,當然了,鑒於萬聖節定製服裝這幫人的癖好,演算法妥妥學到的第一個單詞是……「sexy」(性感)。

在訓練的過程中,演算法學到了各種詞匯,比如說「steampunk(蒸汽龐克)」,「minion(小小兵)」,「cardinalfish(一種鯛魚)」,「Bellatrix(對對對,哈利波特裡殺死多比的那個粉底抹多了的女巫)」。它學會了這些之後就不務正業了,開始在各種刺激的地方加上「sexy」這個詞,包括一些訓練數據里根本沒出來過的情況,比如:

靈魂畫手辣眼睛……依次是性感的路易十六、性感的麥可賽拉、性感的印表機、性感的大 x 蜂、性感的錫人、性感的林肯、性感的甜菜、性感的 Minecraft 人?!來,請告訴我性感的印表機是怎麼回事兒,怎麼還有馬賽克!嗯…林肯的胸毛確實很性感,還有甜菜的溝溝。

演算法也可以直接從訓練數據集合里複製一些結果出來。如果我們允許這樣的操作的話,演算法的確會這樣輸出。其實對於演算法來說,這樣複製出的結果肯定是最完美的(因為肯定真實)。

無法解釋的演算法:從舊有資料產生的模型組合仍很難預測

演算法知道的所有知識都來自於訓練集,它沒有別的訊息來源。比如說,它不知道今年有什麼熱門電影,所以它還是會輸出一大堆「Pink Panther(頑皮豹)」,而不是時下更熱門的漫威電影「Black Panther(黑豹)」。當然這個演算法還會自造詞,比如弄出來一些類似於「Fary Potter」和「Werefish」的詞匯。造這些詞的時候其實不是因為演算法已經理解了單詞的意思,而是因為單純的覺得這個詞是萬聖節服裝訂單里的內容,覺得它是個合理的單詞組合。

其實,這就是神經網路和其他機器學習演算法看起來有點可怕的地方:人很難預測模型會弄出來什麼樣的組合。比如它會輸出一些「Bloody Horse」(血淋淋的馬),「Gothed Pines」(哥特式松樹)和「Ballerina Trump」(跳芭蕾舞的川普,幹得漂亮!)。雖然我們能夠去在演算法級查閱每一層神經元在幹什麼,但是,仍舊無法對其進行解釋。

人類現在正在研究演算法的解釋性,比如說,Google 和 CMU 的大佬們最近展示了他們的研究成果,就是用一個識別耳朵的演算法去識別狗。但是很多演算法還是很難解釋,比如說那些輔助做貸款和假釋的決策演算法,這些演算法在現在看起來就是一個黑盒,根本無法解釋怎麼就能讓它允許貸款,怎麼就提高假釋的概率。

演算法並不能解決所有問題

有時候,演算法會產生一些災難性的後果。2013 年的時候 MIT 的研究人員做了一個演算法來解決數字列表的排序問題。人類告訴演算法說,目標是減小序列中的順序錯誤。

你以為演算法會創造出一種新型的快速排序?不,它把所有數字都刪了……(真聰明,這樣真是沒有任何順序錯誤了)。然後在 1997 年的時候,為了讓飛機在航母上降落的更柔和,研究人員做了一個飛機降落演算法

然後在模擬裡面,飛機降落時候對航母的沖擊結果是 0,人們驚呆了,以為發現了什麼不得了的事情。但是查過了之後才發現,演算法是讓飛機以一種極大的沖擊力撞擊航母,然後這個力太大,導致模擬器中存儲力量數值的變量存儲溢出了,所以得到一個0……(人才呀,這撞的得多慘)

「演算法的偏見」往往來自於人類的偏見

面對一個人類根本不瞭解的演算法給出的決定,我們通常都很難接受。但是其實機器學習演算法都是從數據集裡面學的,就算學到了特別奇怪的東西,也是人類的偏見。

換句話說,機器學習返回給我們的,都是我們想要的,不論是好還是壞。

比如說,當一個演算法從一個數據集裡面學習一個人被雇傭的概率的時候,如果數據集裡面就包含了種族偏見(比如某公司更喜歡雇傭某人種的員工)的話,那麼演算法肯定也會帶有這個偏見進行預測。畢竟我們並沒有告訴演算法最好的決策是怎樣的,我們只告訴它數據集裡面是怎麼做的了,而數據集里的樣本體現的很可能不是最好的結果。

這種錯誤隨處可見,演算法中有偏見也是常有的事。我們說這個故事的寓意不是想讓 AI 更公平公正,也不是想讓 AI 能給我們提供達成目標的小線索。我們真正想說的是,AI 只能返回我們請求的事件的結果,所以我們應該仔細思考和選擇我們請求事件的類型和方式。比如來說,我們不該在沒有仔細校驗的情況下就將那個以強烈撞擊導致數值溢出而使沖擊力=0 的演算法實際應用到飛機上。

同樣,如果我們這個萬聖節服裝預測模型要是輸出很多奇奇怪怪的服飾的話,我們也還是別信的好(比如說有人穿 Spirit of Potatoes 你敢信?!馬鈴薯大俠?我的天,我第一反應是植物大戰僵屍裡面的堅果…)。

(本文經合作夥伴 大數據文摘 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈腦洞 | 還在為萬聖節穿什麼發愁?AI給出的這份穿搭建議你敢試試嗎 〉。)

歷年萬聖節

LINE 也要過萬聖節!期間限定三款隱藏彩蛋,你都玩過了嗎
萬聖節加無人機迸出嚇人新招,走在路上心臟真的要大顆點
萬聖節還能玩什麼招?快看,這些全是用 Arduino 做出來的!