還在為萬聖節穿什麼發愁?AI給出的這份穿搭建議你敢試試嗎
聊起機器學習的時候,人們總覺得它特別的神祕。我們知道AI演算法能完成一些任務,但是不知道它具體是怎麼做到的。
嚴格的來說,機器學習演算法是人工智慧AI的一個分支,但是我們其實也可以把它當成一種預測演算法看待。
比如根據一個影迷在豆瓣上評分的資料,演算法能預測出ta喜歡什麼樣的電影;根據一個求職者的履歷,演算法能預測它這次去面試被刷的機率;或者說(重點來了!)根據過去幾年裡萬聖節服裝的訂單,演算法能夠預測今年的狂歡中人們是怎麼裝扮自己的。
萬聖節的裝扮預測好像是個不錯的話題哈(沒錯,我們就是在蹭熱度!)。為了實現這個小應用,我們找到了一個叫“textgenrnn”的演算法,它的能力是模仿文字。
textgenrnn的作者叫Max Woolf,他開源的這個演算法在開始的時候沒有任何知識,就是一個白板。它可以根據你輸入的任何的文字進行學習。所以我們首先拿到了一年內人們傳送給aiweirdness.com的7182個萬聖節服裝訂單,然後把這個訂單的文字資訊餵給textgenrnn,看看能發生什麼有趣的事情。
textgenrnn的github連結:
https://github.com/minimaxir/textgenrnn
aiweirdness.com的連結是:嗯,就是它自己,看名字就知道不是什麼正經的服裝廠哈哈
下面就是演算法產生的一些結果:
演算法很聰明,在沒有人來教它的情況下,僅僅根據我們輸入的訂單資訊就學到了上面圖片裡面的單詞和片語。
這個演算法這這樣工作的,首先它要預測每個訂單裡的衣服的名稱,名稱就是英文單詞啦。
然後它會自己檢查一下預測的這個單詞是不是不對,檢查的比對文字就是訓練的資料。如果預測錯了(演算法剛開始訓練的時候幾乎都是錯的),它會改變自己的內部演算法結構。漸漸的,演算法就學會了預測的技巧,然後預測的結果就變得越來越好。
為了直觀感受一下,下面這張圖是textgenrnn神經網路在不同的訓練階段所生成的文字結果。這裡所說的不同階段就是訓練中的不同的epoch,就是迭代了幾次的意思。(它只能生成文字,不能生成圖片,為了讓生成的文字更直觀,我們請來了靈魂畫師對其進行靈感作畫)
什麼鬼……
額,難為畫師了
嗯,可以可以,尤其是第三個,夠sexy!
這裡生成的文字就有點意思了
不錯不錯,尤其是外星人的胸肌
11次迭代就已經很棒了,大概能知道是什麼了,貓巫好萌!
當我們讓演算法生成服裝名稱的時候,我們還可以給它設定一個“創造性”選項。如果給它的創造性空間比較小的話,它總是根據自己的最好的預測生成一些重複的結果;
如果我們給它“自由過了火”的話,它會冒險進入一些它認為不太可能的領域裡面然後輸出一些奇奇怪怪的東西。
在訓練剛開始的時候,神經網路對於輸入的內容一無所知。它不知道英文字母和空格是有區別的,也不知道一個文字是怎麼拼寫的。當訓練迭代的次數增加,它就能學到一些事情了。嗯,當然了,鑑於萬聖節定製服裝這幫人的癖好,演算法妥妥學到的第一個單詞是……“sexy”(性感)。
在訓練的過程中,演算法學到了各種詞彙,比如說“steampunk(蒸汽朋克)","minion(小兵)","cardinalfish(一種魚)","Bellatrix(對對對,哈利波特里殺死多比的那個粉底抹多了的女巫)"。它學會了這些之後就不務正業了,開始在各種刺激的地方加上“sexy”這個詞,包括一些訓練資料里根本沒出來過的情況,比如:
靈魂畫手辣眼睛……依次是性感的路易十六、性感的麥克賽拉、性感的印表機、性感的大x蜂、性感的錫人、性感的林肯、性感的甜菜、性感的Minecraft人?!來,請告訴我性感的印表機是怎麼回事兒,怎麼還有馬賽克!嗯。。。林肯的胸毛確實很性感,還有甜菜的溝溝。
演算法也可以直接從訓練資料集裡拷貝一些結果出來。如果我們允許這樣的操作的話,演算法的確會這樣輸出。其實對於演算法來說,這樣拷貝出的結果肯定是最完美的(因為肯定真實)。
演算法知道的所有知識都來自於訓練集,它沒有別的資訊來源。比如說,它不知道今年有什麼熱門電影,所以它還是會輸出一大堆“Pink Panther(就是那個粉紅豹子表情包)”,而不是時下更熱門的漫威電影“Black Panther(黑豹)”。當然這個演算法還會自造詞,比如弄出來一些類似於“Fary Potter”和“Werefish”的詞彙。造這些詞的時候其實不是因為演算法已經理解了單詞的意思,而是因為單純的覺得這個詞是萬聖節服裝訂單裡的內容,覺得它是個合理的單詞組合。
其實,這就是神經網路和其他機器學習演算法看起來有點可怕的地方:人很難預測模型會弄出來什麼樣的組合。比如它會輸出一些“Bloody Horse”(血淋淋的馬),“Gothed Pines”(哥特式松樹)和“Ballerina Trump”(跳芭蕾舞的川普,幹得漂亮!)。雖然我們能夠去在演算法級查閱每一層神經元在幹什麼,但是,仍舊無法對其進行解釋。
人類現在正在研究演算法的解釋性,比如說,谷歌和CMU的大佬們最近展示了他們的研究成果,就是用一個識別耳朵的演算法去識別狗。但是很多演算法還是很難解釋,比如說那些輔助做貸款和假釋的決策演算法,這些演算法在現在看起來就是一個黑盒,根本無法解釋怎麼就能讓它允許貸款,怎麼就提高假釋的概率。
有時候,演算法會產生一些災難性的後果。2013年的時候MIT的研究人員做了一個演算法來解決數字列表的排序問題。人類告訴演算法說,目標是減小序列中的順序錯誤。
你以為演算法會創造出一種新型的快速排序?不,它把所有數字都刪了……(真聰明,這樣真是沒有任何順序錯誤了)。然後在1997年的時候,為了讓飛機在航母上降落的更柔和,研究人員做了一個飛機降落演算法。
然後在模擬裡面,飛機降落時候對航母的衝擊結果是0,人們驚呆了,以為發現了什麼不得了的事情。但是查過了之後才發現,演算法是讓飛機以一種極大的衝擊力撞擊航母,然後這個力太大,導致模擬器中儲存力量數值的變數儲存溢位了,所以得到一個0……(人才呀,這撞的得多寸)
排序例子的詳情戳這裡:
https://link.springer.com/chapter/10.1007%2F978-3-642-39742-4_1
https://arxiv.org/abs/1803.03453
降落演算法的詳情戳這裡:
https://ieeexplore.ieee.org/document/765682
面對一個人類根本不瞭解的演算法給出的決定,我們通常都很難接受。但是其實機器學習演算法都是從資料集裡面學的,就算學到了特別奇怪的東西,也是人類的偏見。
換句話說,機器學習返回給我們的,都是我們想要的,不論是好還是壞。
比如說,當一個演算法從一個數據集裡面學習一個人被僱傭的概率的時候,如果資料集裡面就包含了種族偏見(比如某公司更喜歡僱傭某人種的員工)的話,那麼演算法肯定也會帶有這個偏見進行預測。畢竟我們並沒有告訴演算法最好的決策是怎樣的,我們只告訴它資料集裡面是怎麼做的了,而資料集裡的樣本體現的很可能不是最好的結果。
僱傭員工的演算法例子詳情戳這裡:
https://www.propublica.org/article/machine-bias-risk-assessments-in-criminal-sentencing
這種錯誤隨處可見,演算法中有偏見也是常有的事。我們說這個故事的寓意不是想讓AI更公平公正,也不是想讓AI能給我們提供達成目標的小線索。我們真正想說的是,AI只能返回我們請求的事件的結果,所以我們應該仔細思考和選擇我們請求事件的型別和方式。比如來說,我們不該在沒有仔細校驗的情況下就將那個以強烈撞擊導致數值溢位而使衝擊力=0的演算法實際應用到灰機上。
同樣,如果我們這個萬聖節服裝預測模型要是輸出很多奇奇怪怪的服飾的話,我們也還是別信的好(比如說有人穿Spirit of Potatoes你敢信?!土豆俠?我天,我第一反應是植物大戰殭屍裡面的堅果兄)。
注:土豆俠……啊……說到這的時候,譯者在翻譯的時候突然聽到金庸先生去世的訊息,心情沉痛。飛雪連天射白鹿,笑書神俠倚碧鴛。先生千古。
想看更多的演算法錯誤和偏見戳這裡:
https://www.teenvogue.com/story/artificial-intelligence-isnt-good-for-women-but-we-can-fix-it?mbid=social_twitter
https://arxiv.org/abs/1607.06520