0
本文作者: 孔令雙 | 2018-01-19 15:11 |
雷鋒網(wǎng) AI 研習(xí)社按:蔡超,移動(dòng)營銷平臺(tái) Mobvista 匯量科技技術(shù)副總裁,前亞馬遜中國研發(fā)中心架構(gòu)師,擁有 15 年軟件開發(fā)經(jīng)驗(yàn),其中 9 年任世界級(jí) IT 公司軟件架構(gòu)師/首席軟件架構(gòu)師,曾領(lǐng)導(dǎo)開發(fā)了亞馬遜全球新外部直運(yùn)平臺(tái),亞馬遜物流 + 系統(tǒng)及基于機(jī)器學(xué)習(xí)的亞馬遜全球客服系統(tǒng)智能化項(xiàng)目。
此文為蔡超在全球人工智能與機(jī)器學(xué)習(xí)技術(shù)大會(huì)(AICon)上演講,雷鋒網(wǎng) AI 研習(xí)社做了不影響原意的編輯。
以下為雷鋒網(wǎng) AI 研習(xí)社整理的演講全文:
有很多工程師想要投入到人工智能的實(shí)踐中,最常見的學(xué)習(xí)過程大概有兩種:一種是看到很多的公式就一頭扎進(jìn)去,花時(shí)間去研究每一條公式;二是把人工智能看成一個(gè)黑盒,就像全自動(dòng)洗衣機(jī)一樣,將數(shù)據(jù)或者一些 csv 文件放到黑盒里面,然后就等結(jié)果出來?;旧铣R姷膶W(xué)習(xí)方式就是這兩種。
那么我們到底應(yīng)該怎樣學(xué)習(xí)人工智能?我們先來看看人工智能學(xué)習(xí)和時(shí)間過程中的一些陷阱。
第一,大家一直比較強(qiáng)調(diào)模型的 accuracy,初學(xué)者認(rèn)為,準(zhǔn)確性可能是一個(gè)非常重要的 metric。這里我有個(gè)例子,這個(gè)模型能夠預(yù)測(cè)未來兩周里購買商品的人數(shù)。它的準(zhǔn)確性有多高呢?經(jīng)過簡短的訓(xùn)練可以達(dá)到 98%。我覺得很納悶,因?yàn)檫@個(gè)數(shù)據(jù)其實(shí)并不是這么容易就能預(yù)測(cè)的。
后來我把他們的數(shù)據(jù)找出來看了一下,通過兩周的歷史數(shù)據(jù)預(yù)測(cè),我們發(fā)現(xiàn)在一百萬的抽樣人群里,會(huì)有兩千人會(huì)購買。那么我們來看一下,如果一百萬人里面只有兩千人會(huì)在未來兩周購買商品的話,即使你永遠(yuǎn)回答 no,永遠(yuǎn)不會(huì)購買,你的準(zhǔn)確性都有 99.8%,大于它摸索訓(xùn)練出來的 98%。
有意思嗎?這只是一個(gè)小例子,這樣的事情經(jīng)常發(fā)生,在統(tǒng)計(jì)學(xué)上,這樣的數(shù)據(jù)叫做 no information rate。如果你希望你的模型有意義,那么它的 accuracy 應(yīng)該大于 no information rate,對(duì)吧?
當(dāng)然,衡量我們機(jī)器學(xué)習(xí)模型的 metric 有很多,accuracy 只是其中一個(gè)方面,我們?cè)谂袛嗄P秃脡牡臅r(shí)候不要陷入到這個(gè)誤區(qū)當(dāng)中,應(yīng)該根據(jù)我們自己的 case 尋找合適的 metrics。
第二個(gè)誤區(qū),是數(shù)據(jù)和模型之間的關(guān)系。很多初學(xué)者對(duì)模型有中天生的熱愛,他們喜歡學(xué)習(xí)各種 fanshion 的模型,拿到一些數(shù)據(jù)之后,他們就找特定的模型來訓(xùn)練,比如最近流行的 Xgboost,反正很多人參加比賽都是用 Xgboost 贏的。
大家在試完一個(gè)模型之后看看結(jié)果行不行,不行的話再換一個(gè)模型試試。每個(gè)模型有很多的參數(shù),在加上模型本身,就會(huì)形成很多 combination,很多人每天就在浩瀚無邊的模型和參數(shù)的 combination 里游弋,最終也不一定能夠得到一個(gè)很好的結(jié)果。
很多初學(xué)者一開始最常犯的錯(cuò)誤是認(rèn)為模型是第一位的。下面我們通過一個(gè)實(shí)際的案例來看看到底是數(shù)據(jù)重要還是模型重要。
這個(gè)例子來源于我做過的一個(gè)真實(shí)項(xiàng)目。亞馬遜的用戶不論是給亞馬遜哪個(gè) site 發(fā)郵件,亞馬遜的 custom service 都會(huì)自動(dòng)回復(fù)一封非常制式的郵件。你也許會(huì)覺得,它就是一個(gè)郵件模板,通過修改部分用戶信息而生成。其實(shí)全球亞馬遜有 10 萬個(gè)這樣的郵件模板,亞馬遜總能在這10 萬份郵件模板中找合適的模板來處理你的 case,但這也是件很麻煩的事,因?yàn)楹茈y找到合適的模板。
有人會(huì)認(rèn)為這又什么難的,Google 上有成千上萬條信息,用戶只要搜索關(guān)鍵詞就能 match 到想要的信息。但亞馬遜不一樣,亞馬遜的業(yè)務(wù)只涉及很少的幾件事,可是有 10 萬個(gè)模板,當(dāng)你輸入一個(gè)關(guān)鍵字時(shí),相近的模板會(huì)全搜索出來。我們?nèi)騺嗰R遜的客服人員平均工作年限是七個(gè)月,所以說大部分都是新手,對(duì)于他們來講,篩選這些模板非常困難。
有開發(fā)者會(huì)想,這不就是分類問題嗎?我們找一個(gè)分類的模型把這些事辦了不就行了?我不知道大家是否有共識(shí),就是大家在看吳恩達(dá)的機(jī)器學(xué)習(xí)課程或者網(wǎng)上的分類問題例子,都是在講患者是否得癌癥,明天的天氣怎樣,分類數(shù)比較少,甚至是二分類。
其實(shí)有句話是這樣說的:只要能把一個(gè)問題抽象成二分類的問題,那么基本上就勝利了一半。我們剛才談到,我們有十萬個(gè)模板,那就是十萬分類問題,或者說你想要縮小范圍,比如十個(gè)模板分一類,那也有一萬個(gè)分類,這處理起來也是非常困難的。
回到這些模板的使用數(shù)據(jù)上,我們發(fā)現(xiàn) TOP 10% 的模板其實(shí)能夠 cover 到 80% 的 case,甚至是 80% 以上的 case。那么我們后來怎么做的呢?我們用上周 TOP 10 的模板為下周做推薦,這樣的準(zhǔn)確率能到 56%。后來我們?cè)诖嘶A(chǔ)上疊加一些學(xué)習(xí)算法做更有效的篩選,最終的準(zhǔn)確性能夠提高到 80%,這是一個(gè)非常不錯(cuò)的成績。
通過這個(gè)例子可以看到,我們并沒有去尋找 fanshion 的模型,而是從數(shù)據(jù)出發(fā),通過數(shù)據(jù)就能解決很多問題。在現(xiàn)在這個(gè)大數(shù)據(jù)機(jī)器學(xué)習(xí)的時(shí)代,大多數(shù)情況下,你都會(huì)發(fā)現(xiàn)數(shù)據(jù)遠(yuǎn)比模型重要得多。
另外,還有一個(gè)誤區(qū),大家在訓(xùn)練模型的時(shí)候喜歡找很多的 feature。大家總以為 feature 越多越好,把 feature 之間的組合關(guān)系做得非常巨大。我在網(wǎng)上找了一個(gè)廣告的數(shù)據(jù)集,這個(gè)數(shù)據(jù)集很多書籍都在用,那我通過這個(gè)數(shù)據(jù)集來告訴大家, feature 和模型優(yōu)劣的關(guān)系,是不是 feature 越多你的模型就會(huì)越好呢?
這個(gè)數(shù)據(jù)顯示的是在電視、收音機(jī)、報(bào)紙上投放的廣告 sales 的預(yù)測(cè)。你們可以看到第一個(gè) sales 就到代表我利用的所有 feature。那么做完之后,我們看到 PPT 的下腳,它的均方根誤差 RMSE 是 1.723615。那 Rsquared 是什么呢?我簡單解釋下,它是用來標(biāo)識(shí)這個(gè)模型的擬合程度,取值在 0 和 1 之間,越接近于 1,擬合程度越高。
當(dāng)我們把 newspaper 的 feature 去掉的時(shí)候,我們發(fā)現(xiàn) RMSE 從 1.723615 降到了 1.676055,Rsquared 也得到了一個(gè)提升,變成了 0.8975927。所以說,我們?cè)跍p少 feature 的情況下有時(shí)候會(huì)得到更好的效果。
另外一個(gè)誤區(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)站上的客戶反饋,通常情況下,不同的人對(duì)于各個(gè)商品有不同的關(guān)注度,比如說買相機(jī),有人關(guān)注鏡頭,有人關(guān)注成像質(zhì)量。那么每個(gè)人在挑選相機(jī)的時(shí)候就會(huì)有不同的側(cè)重,關(guān)注點(diǎn)會(huì)不一樣。
大家可以看看,下面這個(gè)頁面和前一個(gè)頁面有一點(diǎn)點(diǎn)不同,橘黃色框選中的地方是 Topic 欄,系統(tǒng)會(huì)自動(dò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)。
第一個(gè)是比較常見的挑戰(zhàn),我相信很多人都遇到過這個(gè)問題,比如你要做一個(gè)異常檢測(cè),監(jiān)測(cè)每個(gè)應(yīng)用系統(tǒng)是否發(fā)生了異常,那么在 99% 的情況下,甚至是 99.99% 的情況下,這些系統(tǒng)都不應(yīng)該有異常。如果,50% 的系統(tǒng)有異常的話,那該系統(tǒng)根本就沒法上線。那你知道的,我們一般用 imbalance data 去訓(xùn)練的時(shí)候,都會(huì)呈現(xiàn)出我們剛才所說的,類似 accuracy 那樣的情況。
開發(fā)者訓(xùn)練一個(gè)模型,從整體上來看會(huì)傾向于獲得高 accuracy,在這樣的情況下你的模型就沒法獲取你想要看到的那個(gè)異常,這種模型非常難訓(xùn)練。在一般情況下,開發(fā)者會(huì)采用 scale up 或者 scale down 的方法,就是說我去將這個(gè)問題的數(shù)量復(fù)制一下,或者是生成一些重要的調(diào)檔。有個(gè)數(shù)據(jù)是 1:5 或者 1:3,我問西雅圖的同時(shí)為什么是這個(gè)數(shù)據(jù)?他們說:「It's 啊magic number」,沒有證據(jù)證明為什么,但是這個(gè)數(shù)據(jù)總能獲得成功。但整體而言,這個(gè)問題都是非常困難的,以 scale down 為例,你 scale down 的時(shí)候會(huì)失去大量的數(shù)據(jù)。
接下來我們?cè)诳纯矗?strong>有時(shí)候我們并不需要用傳統(tǒng)的監(jiān)督學(xué)習(xí)來解決問題,有種技術(shù)叫做 Anomaly Detection。
CPU 或者是 Memory 利率的分布有可能是一個(gè)正態(tài)分布,或者經(jīng)過 log 變換后變成一個(gè)正態(tài)分布。正態(tài)分布一個(gè)很大的特點(diǎn)就是兩個(gè)方差之外的可能性只有 5%,你可以認(rèn)為這個(gè) 5% 就是異常點(diǎn),甚至你可以將兩邊擴(kuò)展到三個(gè)方差,進(jìn)一步縮減異常點(diǎn)的范圍。如果你們的 CPU 和 Memory 是獨(dú)立變換的話,你只要把它們相乘就行了,這是非常簡單的。
當(dāng)你有大量的數(shù)據(jù),數(shù)據(jù)集的正樣本數(shù)和負(fù)樣本數(shù)懸殊很大的時(shí)候,應(yīng)該考慮下研究它們的分布,看看能不能用 Anomaly Detection 分布既簡單又高效地解決問題。
如果樣本數(shù)相差不太大的情況下,當(dāng)然,我們可以嘗試使用傳統(tǒng)的監(jiān)督學(xué)習(xí)。
還有一個(gè)對(duì)初學(xué)者常見的挑戰(zhàn),我們找一個(gè)模型并不難,有很多現(xiàn)成的模型可用,甚至我們可以借鑒別人訓(xùn)練好的模型權(quán)值,但是對(duì)于一個(gè)初學(xué)者來講,困難的是 feature 的預(yù)處理。
當(dāng)我們拿到 feature 的時(shí)候要把它中心化、縮放,我們剛才也談到了,feature 不是越多越好,我們要選擇有效的 feature,將這些 feature 組合在一起。更常見的是一些異常值和丟失數(shù)據(jù)的處理,這些需要很高的處理技巧。
這里我給大家一個(gè)小小的建議,當(dāng)你想快速實(shí)驗(yàn)一個(gè)不太拿手的模型時(shí),我建議使用樹模型,尤其是 Random Forest 模型。Random Forest 能夠自動(dòng)幫你篩選這些 feature,而且會(huì)告訴你 feature importance。
好,下面我們談一些更具挑戰(zhàn)性的問題,我會(huì)用實(shí)際項(xiàng)目給大家解釋這些挑戰(zhàn)。
第一, 有些圖片在某些國家和地區(qū)是不能出現(xiàn)的,比如在有的地方展示內(nèi)衣時(shí),是不能穿在人身上的。面對(duì)這樣的情況,我們可以對(duì)圖像做變形、模糊化等處理,由一個(gè)樣子變成多個(gè)樣子。
另外一個(gè)挑戰(zhàn)是什么呢?你的標(biāo)注數(shù)據(jù)較少,沒辦法做更多的實(shí)驗(yàn),目前來說有沒有深度學(xué)習(xí)網(wǎng)絡(luò)的 bible 或者是一種 pattern 來告訴你最佳的結(jié)構(gòu)是什么。只是大家不斷地在探索。
相關(guān)的 paper 有很多,大家隨便拿一份 paper 來看,講的都是作者用一個(gè)數(shù)據(jù)集的時(shí)候取得了一個(gè)非常好的效果,然后把這個(gè) structure 粘貼上來,但是并不知道其中的原理。這樣的 paper 非常多,昨天我聽一個(gè)老師說,現(xiàn)在高中生都能寫一篇論文發(fā)表,我看也有這個(gè)趨勢(shì),因?yàn)榇蠹叶疾惶非蠼忉屵@個(gè) Why。
那么在這樣的情況下可以使用一些現(xiàn)成的,良好的模型,一方面可以彌補(bǔ)訓(xùn)練數(shù)據(jù)的缺少,另一方面可以彌補(bǔ)在模型構(gòu)建上經(jīng)驗(yàn)的缺失。
遷移學(xué)習(xí)是另一種機(jī)器學(xué)習(xí)的方式。它會(huì)找到一個(gè)現(xiàn)成的模型,在深度學(xué)習(xí)里較低層模型把 feature extract 出來后,高層的模型可以從較低層的 feature 里把 high level 的 feature 一點(diǎn)一點(diǎn)的 extract 出來。我們可以看到上面這張圖片變成 pixel 的 RGB 值之后呢,它的邊會(huì)被 extract 出來,然后上面會(huì)是一些邊的組合。
那么最后我來給大家總結(jié)一下,如何學(xué)習(xí)和實(shí)踐機(jī)器學(xué)習(xí):我們要從具體問題開始,從數(shù)據(jù)開始,不要從模型開始,另外,在選擇模型時(shí),要從簡單的開始。比如現(xiàn)在很多人傾向從深度的神經(jīng)網(wǎng)絡(luò)開始學(xué)習(xí),而深度神經(jīng)網(wǎng)絡(luò)涉及到的權(quán)值非常多,你的訓(xùn)練周期會(huì)很長,調(diào)節(jié)的時(shí)間甚至是放棄的時(shí)間也會(huì)更長,會(huì)經(jīng)過非常多的迭代,訓(xùn)練成本也會(huì)大好多,所以一定要從簡單的開始。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。