0
| 本文作者: 孔令雙 | 2018-01-19 15:11 |
雷鋒網(wǎng) AI 研習(xí)社按:蔡超,移動營銷平臺 Mobvista 匯量科技技術(shù)副總裁,前亞馬遜中國研發(fā)中心架構(gòu)師,擁有 15 年軟件開發(fā)經(jīng)驗,其中 9 年任世界級 IT 公司軟件架構(gòu)師/首席軟件架構(gòu)師,曾領(lǐng)導(dǎo)開發(fā)了亞馬遜全球新外部直運(yùn)平臺,亞馬遜物流 + 系統(tǒng)及基于機(jī)器學(xué)習(xí)的亞馬遜全球客服系統(tǒng)智能化項目。
此文為蔡超在全球人工智能與機(jī)器學(xué)習(xí)技術(shù)大會(AICon)上演講,雷鋒網(wǎng) AI 研習(xí)社做了不影響原意的編輯。

以下為雷鋒網(wǎng) AI 研習(xí)社整理的演講全文:
有很多工程師想要投入到人工智能的實(shí)踐中,最常見的學(xué)習(xí)過程大概有兩種:一種是看到很多的公式就一頭扎進(jìn)去,花時間去研究每一條公式;二是把人工智能看成一個黑盒,就像全自動洗衣機(jī)一樣,將數(shù)據(jù)或者一些 csv 文件放到黑盒里面,然后就等結(jié)果出來。基本上常見的學(xué)習(xí)方式就是這兩種。 
那么我們到底應(yīng)該怎樣學(xué)習(xí)人工智能?我們先來看看人工智能學(xué)習(xí)和時間過程中的一些陷阱。
第一,大家一直比較強(qiáng)調(diào)模型的 accuracy,初學(xué)者認(rèn)為,準(zhǔn)確性可能是一個非常重要的 metric。這里我有個例子,這個模型能夠預(yù)測未來兩周里購買商品的人數(shù)。它的準(zhǔn)確性有多高呢?經(jīng)過簡短的訓(xùn)練可以達(dá)到 98%。我覺得很納悶,因為這個數(shù)據(jù)其實(shí)并不是這么容易就能預(yù)測的。
后來我把他們的數(shù)據(jù)找出來看了一下,通過兩周的歷史數(shù)據(jù)預(yù)測,我們發(fā)現(xiàn)在一百萬的抽樣人群里,會有兩千人會購買。那么我們來看一下,如果一百萬人里面只有兩千人會在未來兩周購買商品的話,即使你永遠(yuǎn)回答 no,永遠(yuǎn)不會購買,你的準(zhǔn)確性都有 99.8%,大于它摸索訓(xùn)練出來的 98%。
有意思嗎?這只是一個小例子,這樣的事情經(jīng)常發(fā)生,在統(tǒng)計學(xué)上,這樣的數(shù)據(jù)叫做 no information rate。如果你希望你的模型有意義,那么它的 accuracy 應(yīng)該大于 no information rate,對吧?
當(dāng)然,衡量我們機(jī)器學(xué)習(xí)模型的 metric 有很多,accuracy 只是其中一個方面,我們在判斷模型好壞的時候不要陷入到這個誤區(qū)當(dāng)中,應(yīng)該根據(jù)我們自己的 case 尋找合適的 metrics。

第二個誤區(qū),是數(shù)據(jù)和模型之間的關(guān)系。很多初學(xué)者對模型有中天生的熱愛,他們喜歡學(xué)習(xí)各種 fanshion 的模型,拿到一些數(shù)據(jù)之后,他們就找特定的模型來訓(xùn)練,比如最近流行的 Xgboost,反正很多人參加比賽都是用 Xgboost 贏的。
大家在試完一個模型之后看看結(jié)果行不行,不行的話再換一個模型試試。每個模型有很多的參數(shù),在加上模型本身,就會形成很多 combination,很多人每天就在浩瀚無邊的模型和參數(shù)的 combination 里游弋,最終也不一定能夠得到一個很好的結(jié)果。
很多初學(xué)者一開始最常犯的錯誤是認(rèn)為模型是第一位的。下面我們通過一個實(shí)際的案例來看看到底是數(shù)據(jù)重要還是模型重要。 
這個例子來源于我做過的一個真實(shí)項目。亞馬遜的用戶不論是給亞馬遜哪個 site 發(fā)郵件,亞馬遜的 custom service 都會自動回復(fù)一封非常制式的郵件。你也許會覺得,它就是一個郵件模板,通過修改部分用戶信息而生成。其實(shí)全球亞馬遜有 10 萬個這樣的郵件模板,亞馬遜總能在這10 萬份郵件模板中找合適的模板來處理你的 case,但這也是件很麻煩的事,因為很難找到合適的模板。
有人會認(rèn)為這又什么難的,Google 上有成千上萬條信息,用戶只要搜索關(guān)鍵詞就能 match 到想要的信息。但亞馬遜不一樣,亞馬遜的業(yè)務(wù)只涉及很少的幾件事,可是有 10 萬個模板,當(dāng)你輸入一個關(guān)鍵字時,相近的模板會全搜索出來。我們?nèi)騺嗰R遜的客服人員平均工作年限是七個月,所以說大部分都是新手,對于他們來講,篩選這些模板非常困難。
有開發(fā)者會想,這不就是分類問題嗎?我們找一個分類的模型把這些事辦了不就行了?我不知道大家是否有共識,就是大家在看吳恩達(dá)的機(jī)器學(xué)習(xí)課程或者網(wǎng)上的分類問題例子,都是在講患者是否得癌癥,明天的天氣怎樣,分類數(shù)比較少,甚至是二分類。
其實(shí)有句話是這樣說的:只要能把一個問題抽象成二分類的問題,那么基本上就勝利了一半。我們剛才談到,我們有十萬個模板,那就是十萬分類問題,或者說你想要縮小范圍,比如十個模板分一類,那也有一萬個分類,這處理起來也是非常困難的。
回到這些模板的使用數(shù)據(jù)上,我們發(fā)現(xiàn) TOP 10% 的模板其實(shí)能夠 cover 到 80% 的 case,甚至是 80% 以上的 case。那么我們后來怎么做的呢?我們用上周 TOP 10 的模板為下周做推薦,這樣的準(zhǔn)確率能到 56%。后來我們在此基礎(chǔ)上疊加一些學(xué)習(xí)算法做更有效的篩選,最終的準(zhǔn)確性能夠提高到 80%,這是一個非常不錯的成績。
通過這個例子可以看到,我們并沒有去尋找 fanshion 的模型,而是從數(shù)據(jù)出發(fā),通過數(shù)據(jù)就能解決很多問題。在現(xiàn)在這個大數(shù)據(jù)機(jī)器學(xué)習(xí)的時代,大多數(shù)情況下,你都會發(fā)現(xiàn)數(shù)據(jù)遠(yuǎn)比模型重要得多。

另外,還有一個誤區(qū),大家在訓(xùn)練模型的時候喜歡找很多的 feature。大家總以為 feature 越多越好,把 feature 之間的組合關(guān)系做得非常巨大。我在網(wǎng)上找了一個廣告的數(shù)據(jù)集,這個數(shù)據(jù)集很多書籍都在用,那我通過這個數(shù)據(jù)集來告訴大家, feature 和模型優(yōu)劣的關(guān)系,是不是 feature 越多你的模型就會越好呢? 
這個數(shù)據(jù)顯示的是在電視、收音機(jī)、報紙上投放的廣告 sales 的預(yù)測。你們可以看到第一個 sales 就到代表我利用的所有 feature。那么做完之后,我們看到 PPT 的下腳,它的均方根誤差 RMSE 是 1.723615。那 Rsquared 是什么呢?我簡單解釋下,它是用來標(biāo)識這個模型的擬合程度,取值在 0 和 1 之間,越接近于 1,擬合程度越高。 
當(dāng)我們把 newspaper 的 feature 去掉的時候,我們發(fā)現(xiàn) RMSE 從 1.723615 降到了 1.676055,Rsquared 也得到了一個提升,變成了 0.8975927。所以說,我們在減少 feature 的情況下有時候會得到更好的效果。 
另外一個誤區(qū),很多人在學(xué)習(xí)機(jī)器學(xué)習(xí)之后,認(rèn)為機(jī)器學(xué)習(xí)都應(yīng)該是監(jiān)督學(xué)習(xí),而第一件是就是要找標(biāo)注好的數(shù)據(jù)。其實(shí)機(jī)器學(xué)習(xí)本質(zhì)上來將就是從數(shù)據(jù)中找出 pattern,并不是所有的問題都適合用監(jiān)督學(xué)習(xí)解決。Cluster,聚類,就是非常重要的一種學(xué)習(xí)方式,其實(shí)還有關(guān)聯(lián)關(guān)系等,在這里我們簡單介紹下聚類。 
這是亞馬遜網(wǎng)站上的客戶反饋,通常情況下,不同的人對于各個商品有不同的關(guān)注度,比如說買相機(jī),有人關(guān)注鏡頭,有人關(guān)注成像質(zhì)量。那么每個人在挑選相機(jī)的時候就會有不同的側(cè)重,關(guān)注點(diǎn)會不一樣。

大家可以看看,下面這個頁面和前一個頁面有一點(diǎn)點(diǎn)不同,橘黃色框選中的地方是 Topic 欄,系統(tǒng)會自動 extract 你關(guān)注的 topic,上面列出來的也是跟所關(guān)注的 topic 相關(guān)的。這是通過聚類的方式完成的,聚類是機(jī)器學(xué)習(xí)的一種,但不是監(jiān)督學(xué)習(xí)。 
OK,下面我們來講一講機(jī)器學(xué)習(xí)應(yīng)用和實(shí)踐中的一些挑戰(zhàn)。

第一個是比較常見的挑戰(zhàn),我相信很多人都遇到過這個問題,比如你要做一個異常檢測,監(jiān)測每個應(yīng)用系統(tǒng)是否發(fā)生了異常,那么在 99% 的情況下,甚至是 99.99% 的情況下,這些系統(tǒng)都不應(yīng)該有異常。如果,50% 的系統(tǒng)有異常的話,那該系統(tǒng)根本就沒法上線。那你知道的,我們一般用 imbalance data 去訓(xùn)練的時候,都會呈現(xiàn)出我們剛才所說的,類似 accuracy 那樣的情況。 
開發(fā)者訓(xùn)練一個模型,從整體上來看會傾向于獲得高 accuracy,在這樣的情況下你的模型就沒法獲取你想要看到的那個異常,這種模型非常難訓(xùn)練。在一般情況下,開發(fā)者會采用 scale up 或者 scale down 的方法,就是說我去將這個問題的數(shù)量復(fù)制一下,或者是生成一些重要的調(diào)檔。有個數(shù)據(jù)是 1:5 或者 1:3,我問西雅圖的同時為什么是這個數(shù)據(jù)?他們說:「It's 啊magic number」,沒有證據(jù)證明為什么,但是這個數(shù)據(jù)總能獲得成功。但整體而言,這個問題都是非常困難的,以 scale down 為例,你 scale down 的時候會失去大量的數(shù)據(jù)。 
接下來我們在看看,有時候我們并不需要用傳統(tǒng)的監(jiān)督學(xué)習(xí)來解決問題,有種技術(shù)叫做 Anomaly Detection。 
CPU 或者是 Memory 利率的分布有可能是一個正態(tài)分布,或者經(jīng)過 log 變換后變成一個正態(tài)分布。正態(tài)分布一個很大的特點(diǎn)就是兩個方差之外的可能性只有 5%,你可以認(rèn)為這個 5% 就是異常點(diǎn),甚至你可以將兩邊擴(kuò)展到三個方差,進(jìn)一步縮減異常點(diǎn)的范圍。如果你們的 CPU 和 Memory 是獨(dú)立變換的話,你只要把它們相乘就行了,這是非常簡單的。
當(dāng)你有大量的數(shù)據(jù),數(shù)據(jù)集的正樣本數(shù)和負(fù)樣本數(shù)懸殊很大的時候,應(yīng)該考慮下研究它們的分布,看看能不能用 Anomaly Detection 分布既簡單又高效地解決問題。

如果樣本數(shù)相差不太大的情況下,當(dāng)然,我們可以嘗試使用傳統(tǒng)的監(jiān)督學(xué)習(xí)。
還有一個對初學(xué)者常見的挑戰(zhàn),我們找一個模型并不難,有很多現(xiàn)成的模型可用,甚至我們可以借鑒別人訓(xùn)練好的模型權(quán)值,但是對于一個初學(xué)者來講,困難的是 feature 的預(yù)處理。

當(dāng)我們拿到 feature 的時候要把它中心化、縮放,我們剛才也談到了,feature 不是越多越好,我們要選擇有效的 feature,將這些 feature 組合在一起。更常見的是一些異常值和丟失數(shù)據(jù)的處理,這些需要很高的處理技巧。 
這里我給大家一個小小的建議,當(dāng)你想快速實(shí)驗一個不太拿手的模型時,我建議使用樹模型,尤其是 Random Forest 模型。Random Forest 能夠自動幫你篩選這些 feature,而且會告訴你 feature importance。
好,下面我們談一些更具挑戰(zhàn)性的問題,我會用實(shí)際項目給大家解釋這些挑戰(zhàn)。

第一, 有些圖片在某些國家和地區(qū)是不能出現(xiàn)的,比如在有的地方展示內(nèi)衣時,是不能穿在人身上的。面對這樣的情況,我們可以對圖像做變形、模糊化等處理,由一個樣子變成多個樣子。 
另外一個挑戰(zhàn)是什么呢?你的標(biāo)注數(shù)據(jù)較少,沒辦法做更多的實(shí)驗,目前來說有沒有深度學(xué)習(xí)網(wǎng)絡(luò)的 bible 或者是一種 pattern 來告訴你最佳的結(jié)構(gòu)是什么。只是大家不斷地在探索。 
相關(guān)的 paper 有很多,大家隨便拿一份 paper 來看,講的都是作者用一個數(shù)據(jù)集的時候取得了一個非常好的效果,然后把這個 structure 粘貼上來,但是并不知道其中的原理。這樣的 paper 非常多,昨天我聽一個老師說,現(xiàn)在高中生都能寫一篇論文發(fā)表,我看也有這個趨勢,因為大家都不太追求解釋這個 Why。
那么在這樣的情況下可以使用一些現(xiàn)成的,良好的模型,一方面可以彌補(bǔ)訓(xùn)練數(shù)據(jù)的缺少,另一方面可以彌補(bǔ)在模型構(gòu)建上經(jīng)驗的缺失。

遷移學(xué)習(xí)是另一種機(jī)器學(xué)習(xí)的方式。它會找到一個現(xiàn)成的模型,在深度學(xué)習(xí)里較低層模型把 feature extract 出來后,高層的模型可以從較低層的 feature 里把 high level 的 feature 一點(diǎn)一點(diǎn)的 extract 出來。我們可以看到上面這張圖片變成 pixel 的 RGB 值之后呢,它的邊會被 extract 出來,然后上面會是一些邊的組合。
那么最后我來給大家總結(jié)一下,如何學(xué)習(xí)和實(shí)踐機(jī)器學(xué)習(xí):我們要從具體問題開始,從數(shù)據(jù)開始,不要從模型開始,另外,在選擇模型時,要從簡單的開始。比如現(xiàn)在很多人傾向從深度的神經(jīng)網(wǎng)絡(luò)開始學(xué)習(xí),而深度神經(jīng)網(wǎng)絡(luò)涉及到的權(quán)值非常多,你的訓(xùn)練周期會很長,調(diào)節(jié)的時間甚至是放棄的時間也會更長,會經(jīng)過非常多的迭代,訓(xùn)練成本也會大好多,所以一定要從簡單的開始。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。