) 人工智能是近年來科技發(fā)展的重要方向,在大數(shù)據(jù)時(shí)代,對(duì)數(shù)據(jù)采集、挖掘、應(yīng)用的技術(shù)越來越受到矚目。在人工智能和大數(shù)據(jù)的開發(fā)過程中,有哪些特別需要注意的要點(diǎn)?
人工智能領(lǐng)域的算法大師、華盛頓大學(xué)教授Pedro Domingos對(duì)此進(jìn)行了深入思考。
在我們新近翻譯的《智能Web算法》(第2版)中,對(duì)Pedro Domingos教授的觀點(diǎn)進(jìn)行了高度的概括,提煉出12個(gè)注意點(diǎn),為行業(yè)開發(fā)實(shí)踐提供了重要參考:
人工智能與大數(shù)據(jù)開發(fā)的12個(gè)注意點(diǎn)
注意點(diǎn)1:你的數(shù)據(jù)未必可靠
在實(shí)際應(yīng)用中,有很多各種各樣的原因會(huì)導(dǎo)致你的數(shù)據(jù)是不可靠的。因此,當(dāng)你將數(shù)據(jù)用于解決問題前,必須經(jīng)常留心來檢查數(shù)據(jù)是否值得信賴。如果基于糟糕的數(shù)據(jù)來挖掘,無論多么聰明的人也永遠(yuǎn)只會(huì)獲得糟糕的結(jié)果。下面列舉了一些常見的可導(dǎo)致數(shù)據(jù)可靠性問題的因素:
用于開發(fā)的數(shù)據(jù),往往和實(shí)際情況下的數(shù)據(jù)分布不同。例如也許你想把用戶按照身高劃分為“高”、“中等”、“矮”三檔,但如果系統(tǒng)開發(fā)時(shí)使用的數(shù)據(jù)集里最低用戶的身高是6英尺(184cm),那么很有可能你開發(fā)出來的系統(tǒng)里會(huì)把一個(gè)“僅有6英尺”的用戶稱為“矮”用戶。
你的數(shù)據(jù)集中存在很多缺失數(shù)據(jù)。事實(shí)上,除非是人為構(gòu)造的數(shù)據(jù)集合,否則很難避免缺失數(shù)據(jù)問題的發(fā)生,如何處理數(shù)據(jù)缺失的問題是很有技巧的事情。實(shí)踐中我們要么是干脆丟棄一部分殘缺的數(shù)據(jù),要么就是想辦法計(jì)算一些數(shù)值去填補(bǔ)這些缺失值。無論哪種方法都可能導(dǎo)致應(yīng)用結(jié)果的不穩(wěn)定。
你的數(shù)據(jù)可能隨時(shí)在變化。數(shù)據(jù)庫的表結(jié)構(gòu)可能會(huì)變,數(shù)據(jù)定義也可能會(huì)變。
你的數(shù)據(jù)可能沒有被歸一化。假設(shè)你可能在觀察一組用戶的體重,為了能夠獲得有效的結(jié)論,首先需要對(duì)每個(gè)體重的衡量單位進(jìn)行歸一化,是英鎊還是公斤,不能混淆著用。
你的數(shù)據(jù)可能并不適用于相應(yīng)的算法。數(shù)據(jù)存在著各種各樣的形式和規(guī)范,或者叫數(shù)據(jù)類型(data types),有些是數(shù)值化的數(shù)據(jù),有些則不是。有些數(shù)據(jù)集合能被有序排列,有些則做不到。有些是離散化的數(shù)據(jù)(例如房間里的人數(shù)),另一些則是連續(xù)化的(例如氣溫或者氣壓等數(shù)據(jù))。
注意點(diǎn)2:計(jì)算難以瞬間完成
完成任何一個(gè)人工智能解決方案的計(jì)算,都需要一定的時(shí)間,方案的響應(yīng)速度,對(duì)商業(yè)應(yīng)用的成功與否起到十分關(guān)鍵的作用。不能總是盲目假設(shè)任何算法在所有數(shù)據(jù)集上都一定能在規(guī)定時(shí)間內(nèi)完成,你需要測(cè)試下算法的性能是否在可接受的應(yīng)用范圍內(nèi)。
以搜索引擎為例,用戶對(duì)結(jié)果返回的時(shí)長(zhǎng)是有忍耐的限度的。如果用戶等待的時(shí)間超過10秒,50%的用戶會(huì)流失,如果等待時(shí)間超過1分鐘,90%以上的用戶會(huì)流失。在開發(fā)智能應(yīng)用系統(tǒng)時(shí),不能為了達(dá)到更好的算法精度而忽略系統(tǒng)運(yùn)算和等待的時(shí)間,否則會(huì)導(dǎo)致整個(gè)產(chǎn)品的失敗。
注意點(diǎn)3: 數(shù)據(jù)的規(guī)模非常重要
當(dāng)我們考慮智能應(yīng)用時(shí),數(shù)據(jù)規(guī)模是很重要的因素。數(shù)據(jù)規(guī)模的影響可以分為兩點(diǎn)來考察:第一點(diǎn)是規(guī)模會(huì)影響應(yīng)用系統(tǒng)的響應(yīng)速度,上一節(jié)我們剛提過;第二點(diǎn)是在很大的數(shù)據(jù)集上的挖掘出有價(jià)值結(jié)果的能力會(huì)受到考驗(yàn)。例如為100個(gè)用戶開發(fā)的電影或音樂推薦系統(tǒng)可能效果很好,但是同樣的算法移植到有著100000個(gè)用戶的環(huán)境里,效果可能就不盡如人意了。
其次,使用更多的數(shù)據(jù)來訓(xùn)練的簡(jiǎn)單算法,比受制于維度詛咒(Dimension Curse)的復(fù)雜算法往往有好得多的效果。類似Google這樣擁有海量數(shù)據(jù)的大型企業(yè),優(yōu)秀的應(yīng)用效果不僅來自于精妙復(fù)雜的算法,也來自于其對(duì)海量訓(xùn)練數(shù)據(jù)的大規(guī)模分析挖掘。
注意點(diǎn)4: 不同的算法具有不同的擴(kuò)展能力
我們不能假設(shè)智能應(yīng)用系統(tǒng)都可以通過簡(jiǎn)單增加服務(wù)器的方法來擴(kuò)展性能。有些算法是有擴(kuò)展性的,而另一些則不行。
例如如果我們要從數(shù)億的文章標(biāo)題里,找出標(biāo)題相似的各個(gè)組的文章,注意并不是所有的聚類算法此時(shí)都能并行化運(yùn)行的,你應(yīng)該在設(shè)計(jì)系統(tǒng)的同時(shí)就考慮可擴(kuò)展性。有些情況下你需要將數(shù)據(jù)切分成較小的集合,并能夠讓智能算法在各個(gè)集合上并行運(yùn)行。設(shè)計(jì)系統(tǒng)時(shí)所選擇的算法,往往需要有并行化的版本,而在一開始就需要將其納入考慮,因?yàn)橥ǔ@著算法還會(huì)有很多相關(guān)聯(lián)的商業(yè)邏輯和體系結(jié)構(gòu)需要一并考慮。
注意點(diǎn)5:并不存在萬能的方法
你可能聽說過一句諺語“當(dāng)你有了把榔頭的時(shí)候,看什么東西都像釘子”,這里想表達(dá)的意思是:并不存在能夠解決所有智能應(yīng)用問題的萬能算法。
智能應(yīng)用軟件和其他所有軟件類似——具有其特定的應(yīng)用領(lǐng)域和局限性。當(dāng)面對(duì)新的應(yīng)用領(lǐng)域時(shí),一定要充分的驗(yàn)證原有方法的可行性,而且你最好能嘗試用全新的視角來考察問題,因?yàn)椴煌乃惴ㄔ诮鉀Q特定的問題時(shí)才會(huì)更有效和得當(dāng)。
注意點(diǎn)6:數(shù)據(jù)并不是萬能的
根本上看,機(jī)器學(xué)習(xí)算法并不是魔法,它需要從訓(xùn)練數(shù)據(jù)開始,逐步延伸到未知數(shù)據(jù)中去。
例如假設(shè)你已經(jīng)對(duì)數(shù)據(jù)的分布規(guī)律有所了解,那么通過圖模型來表達(dá)這些先驗(yàn)的知識(shí)會(huì)非常有效。除了數(shù)據(jù)以外,你還需要仔細(xì)的考慮,該領(lǐng)域有哪些先驗(yàn)知識(shí)可以應(yīng)用,這對(duì)開發(fā)一個(gè)更有效的分類器會(huì)很有幫助。數(shù)據(jù)和行業(yè)經(jīng)驗(yàn)結(jié)合往往能事半功倍。
注意點(diǎn)7:模型訓(xùn)練的時(shí)間差異很大
在特定應(yīng)用中,可能某些參數(shù)的微小變化就會(huì)讓模型的訓(xùn)練時(shí)間出現(xiàn)很大的差異。例如在深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)就會(huì)有各種各樣的參數(shù)調(diào)節(jié)的情況發(fā)生。
人們往往會(huì)直觀地覺得調(diào)整參數(shù)時(shí),訓(xùn)練時(shí)間是基本穩(wěn)定不變的。例如假設(shè)有個(gè)系統(tǒng)是計(jì)算地球平面上任意兩點(diǎn)之間的距離的,那么任意給出兩個(gè)點(diǎn)的坐標(biāo)時(shí),計(jì)算時(shí)間差不多都是相同的。但在另一些系統(tǒng)里卻并非如此,有時(shí)細(xì)微的調(diào)整會(huì)帶來很明顯的時(shí)間差異,有時(shí)差異甚至可以大到數(shù)小時(shí),而不是數(shù)秒。
注意點(diǎn)8:泛化能力是目標(biāo)
機(jī)器學(xué)習(xí)實(shí)踐中最普遍存在的一個(gè)誤區(qū)是陷入處理細(xì)節(jié)中而忘了最初的目標(biāo)——通過調(diào)查來獲得處理問題的普適的方法。
測(cè)試階段是驗(yàn)證某個(gè)方法是否具備泛化能力(generalization ability)的關(guān)鍵環(huán)節(jié)(通過交叉驗(yàn)證、外部數(shù)據(jù)驗(yàn)證等方法),但是尋找合適的驗(yàn)證數(shù)據(jù)集不容易。如果在一個(gè)只有幾百個(gè)樣本的集合上去訓(xùn)練有數(shù)百萬維特征的模型,試圖想獲得優(yōu)秀的精度是很荒唐的。
注意點(diǎn)9:人類的直覺未必準(zhǔn)確
在特征空間膨脹的時(shí)候,輸入信息間形成的組合關(guān)系會(huì)快速增加,這讓人很難像對(duì)中等數(shù)據(jù)集合那樣能夠?qū)ζ渲幸徊糠謹(jǐn)?shù)據(jù)進(jìn)行抽樣觀察。更麻煩的是,特征數(shù)量增加時(shí)人類對(duì)數(shù)據(jù)的直覺會(huì)迅速降低。
例如在高維空間里,多元高斯分布并不是沿著均值分布,而是像一個(gè)扇貝形狀圍繞在均值附近,這和人們的主觀感受完全不同。在低維空間中建立一個(gè)分類器并不難,但是當(dāng)維度增加時(shí),人類就很難直觀的理解了。
注意點(diǎn)10:要考慮融入更多新特征
你很可能聽說過諺語“進(jìn)來的是垃圾,出去的也是垃圾”(garbage in, garbage out),在建立機(jī)器學(xué)習(xí)應(yīng)用中這一點(diǎn)尤其重要。為了避免挖掘的效果失控,關(guān)鍵是要充分掌握問題所在的領(lǐng)域,通過調(diào)查數(shù)據(jù)來生成各種各樣的特征,這樣的做法會(huì)對(duì)提升分類的準(zhǔn)確率和泛化能力有很大的幫助。僅靠把數(shù)據(jù)扔進(jìn)分類器就想獲得優(yōu)秀結(jié)果的幻想是不可能實(shí)現(xiàn)的。(達(dá)觀數(shù)據(jù) 陳運(yùn)文)
注意點(diǎn)11:要學(xué)習(xí)各種不同的模型
模型的組合(Ensemble)技術(shù)正變得越來越流行了,因?yàn)榻M合方法,僅需要付出少許偏見(bias)的代價(jià),就能大大的減少算法的不確定性。在著名的Netflix算法競(jìng)賽中,冠軍隊(duì)以及成績(jī)優(yōu)異隊(duì)伍們?nèi)际褂昧私M合模型方法,把超過100個(gè)模型合并在一起(在模型上疊加高層的模型形成組合)以提升效果。在人工智能用于實(shí)際應(yīng)用時(shí),從業(yè)者普遍都認(rèn)為,未來的算法一定時(shí)會(huì)通過模型組合的方法來獲得更好精度,但是這也會(huì)抬高非專業(yè)人員理解系統(tǒng)機(jī)制的門檻。
注意點(diǎn)12:相關(guān)關(guān)系不等同于因果關(guān)系
這一點(diǎn)值得反復(fù)強(qiáng)調(diào),我們可以通過一句調(diào)侃的話來解釋:“地球變暖、地震、龍卷風(fēng),以及其他自然災(zāi)害,都和18世紀(jì)以來全球海盜數(shù)量的減少有直接關(guān)系”。這兩個(gè)變量的變化有相關(guān)性,但是并不能說存在因果關(guān)系,因?yàn)橥嬖诘谌?甚至第4、5類)未被觀察到的變量在起作用。相關(guān)關(guān)系應(yīng)該看作是潛在的因果關(guān)系的一定程度的體現(xiàn),但需要進(jìn)一步研究。
在開發(fā)人工智能與大數(shù)據(jù)應(yīng)用系統(tǒng)時(shí),把握好以上十二個(gè)注意點(diǎn),能夠有效避免實(shí)戰(zhàn)中的各種“坑”,幫助技術(shù)在走出實(shí)驗(yàn)室,走向落地應(yīng)用時(shí),能發(fā)揮更加健壯、強(qiáng)大的作用。