人工智慧和大資料開發需要注意的12點

資料工程師陳晨發表於2019-04-21

 人工智慧是近年來科技發展的重要方向,在大資料時代,對資料採集、挖掘、應用的技術越來越受到矚目。在人工智慧和大資料的開發過程中,有哪些特別需要注意的要點?

 

  人工智慧領域的演算法大師、華盛頓大學教授Pedro Domingos對此進行了深入思考。

 

  在我們新近翻譯的《智慧Web演算法》中,對Pedro Domingos教授的觀點進行了高度的概括,提煉出12個注意點,為行業開發實踐提供了重要參考:

網際網路科技發展蓬勃興起,人工智慧時代來臨,抓住下一個風口。為幫助那些往想網際網路方向轉行想學習,卻因為時間不夠,資源不足而放棄的人。我自己整理的一份最新的大資料進階資料和高階開發教程,大資料學習群: 740041381 歡迎進階中和進想深入大資料的小夥伴加入。

  注意點1:你的資料未必可靠

 

  在實際應用中,有很多各種各樣的原因會導致你的資料是不可靠的。因此,當你將資料用於解決問題前,必須經常留心來檢查資料是否值得信賴。如果基於糟糕的資料來挖掘,無論多麼聰明的人也永遠只會獲得糟糕的結果。下面列舉了一些常見的可導致資料可靠性問題的因素:

 

  用於開發的資料,往往和實際情況下的資料分佈不同。例如也許你想把使用者按照身高劃分為“高”、“中等”、“矮”三檔,但如果系統開發時使用的資料集裡最低使用者的身高是6英尺(184cm),那麼很有可能你開發出來的系統裡會把一個“僅有6英尺”的使用者稱為“矮”使用者

 

  你的資料集中存在很多缺失資料。事實上,除非是人為構造的資料集合,否則很難避免缺失資料問題的發生,如何處理資料缺失的問題是很有技巧的事情。實踐中我們要麼是乾脆丟棄一部分殘缺的資料,要麼就是想辦法計算一些數值去填補這些缺失值。無論哪種方法都可能導致應用結果的不穩定

 

  你的資料可能隨時在變化。資料庫的表結構可能會變,資料定義也可能會變

 

  你的資料可能沒有被歸一化。假設你可能在觀察一組使用者的體重,為了能夠獲得有效的結論,首先需要對每個體重的衡量單位進行歸一化,是英鎊還是公斤,不能混淆著用

 

  你的資料可能並不適用於相應的演算法。資料存在著各種各樣的形式和規範,或者叫資料型別(data types),有些是數值化的資料,有些則不是。有些資料集合能被有序排列,有些則做不到。有些是離散化的資料(例如房間裡的人數),另一些則是連續化的(例如氣溫或者氣壓等資料)。

 

  注意點2:計算難以瞬間完成

 

  完成任何一個人工智慧解決方案的計算,都需要一定的時間,方案的響應速度,對商業應用的成功與否起到十分關鍵的作用。不能總是盲目假設任何演算法在所有資料集上都一定能在規定時間內完成,你需要測試下演算法的效能是否在可接受的應用範圍內。

 

  以搜尋引擎為例,使用者對結果返回的時長是有忍耐的限度的。如果使用者等待的時間超過10秒,50%的使用者會流失,如果等待時間超過1分鐘,90%以上的使用者會流失。在開發智慧應用系統時,不能為了達到更好的演算法精度而忽略系統運算和等待的時間,否則會導致整個產品的失敗。

 

  注意點3:資料的規模非常重要

 

  當我們考慮智慧應用時,資料規模是很重要的因素。資料規模的影響可以分為兩點來考察:第一點是規模會影響應用系統的響應速度,上一節我們剛提過;第二點是在很大的資料集上的挖掘出有價值結果的能力會受到考驗。例如為100個使用者開發的電影或音樂推薦系統可能效果很好,但是同樣的演算法移植到有著100000個使用者的環境裡,效果可能就不盡如人意了。

 

  其次,使用更多的資料來訓練的簡單演算法,比受制於維度詛咒(Dimension Curse)的複雜演算法往往有好得多的效果。類似Google這樣擁有海量資料的大型企業,優秀的應用效果不僅來自於精妙複雜的演算法,也來自於其對海量訓練資料的大規模分析挖掘。

 

  注意點4:不同的演算法具有不同的擴充套件能力

 

  我們不能假設智慧應用系統都可以通過簡單增加伺服器的方法來擴充套件效能。有些演算法是有擴充套件性的,而另一些則不行。

 

  例如如果我們要從數億的文章標題裡,找出標題相似的各個組的文章,注意並不是所有的聚類演算法此時都能並行化執行的,你應該在設計系統的同時就考慮可擴充套件性。有些情況下你需要將資料切分成較小的集合,並能夠讓智慧演算法在各個集合上並行執行。設計系統時所選擇的演算法,往往需要有並行化的版本,而在一開始就需要將其納入考慮,因為通常圍繞著演算法還會有很多相關聯的商業邏輯和體系結構需要一併考慮。

 

  注意點5:並不存在萬能的方法

 

  你可能聽說過一句諺語“當你有了把榔頭的時候,看什麼東西都像釘子”,這裡想表達的意思是:並不存在能夠解決所有智慧應用問題的萬能演算法。

 

  智慧應用軟體和其他所有軟體類似——具有其特定的應用領域和侷限性。當面對新的應用領域時,一定要充分的驗證原有方法的可行性,而且你最好能嘗試用全新的視角來考察問題,因為不同的演算法在解決特定的問題時才會更有效和得當(達觀資料 陳運文)。

 

  注意點6:資料並不是萬能的

 

  根本上看,機器學習演算法並不是魔法,它需要從訓練資料開始,逐步延伸到未知資料中去。

 

  例如假設你已經對資料的分佈規律有所瞭解,那麼通過圖模型來表達這些先驗的知識會非常有效。除了資料以外,你還需要仔細的考慮,該領域有哪些先驗知識可以應用,這對開發一個更有效的分類器會很有幫助。資料和行業經驗結合往往能事半功倍。

 

  注意點7:模型訓練的時間差異很大

 

  在特定應用中,可能某些引數的微小變化就會讓模型的訓練時間出現很大的差異。例如在深度神經網路訓練時就會有各種各樣的引數調節的情況發生。

 

  人們往往會直觀地覺得調整引數時,訓練時間是基本穩定不變的。例如假設有個系統是計算地球平面上任意兩點之間的距離的,那麼任意給出兩個點的座標時,計算時間差不多都是相同的。但在另一些系統裡卻並非如此,有時細微的調整會帶來很明顯的時間差異,有時差異甚至可以大到數小時,而不是數秒。

 

  注意點8:泛化能力是目標

 

  機器學習實踐中最普遍存在的一個誤區是陷入處理細節中而忘了最初的目標——通過調查來獲得處理問題的普適的方法。

 

  測試階段是驗證某個方法是否具備泛化能力(generalization ability)的關鍵環節(通過交叉驗證、外部資料驗證等方法),但是尋找合適的驗證資料集不容易。如果在一個只有幾百個樣本的集合上去訓練有數百萬維特徵的模型,試圖想獲得優秀的精度是很荒唐的。

 

  注意點9:人類的直覺未必準確

 

  在特徵空間膨脹的時候,輸入資訊間形成的組合關係會快速增加,這讓人很難像對中等資料集合那樣能夠對其中一部分資料進行抽樣觀察。更麻煩的是,特徵數量增加時人類對資料的直覺會迅速降低。

 

  例如在高維空間裡,多元高斯分佈並不是沿著均值分佈,而是像一個扇貝形狀圍繞在均值附近,這和人們的主觀感受完全不同。在低維空間中建立一個分類器並不難,但是當維度增加時,人類就很難直觀的理解了。

 

  注意點10:要考慮融入更多新特徵

 

  你很可能聽說過諺語“進來的是垃圾,出去的也是垃圾”(garbage in, garbage out),在建立機器學習應用中這一點尤其重要。為了避免挖掘的效果失控,關鍵是要充分掌握問題所在的領域,通過調查資料來生成各種各樣的特徵,這樣的做法會對提升分類的準確率和泛化能力有很大的幫助。僅靠把資料扔進分類器就想獲得優秀結果的幻想是不可能實現的。

 

  注意點11:要學習各種不同的模型

 

  模型的組合(Ensemble)技術正變得越來越流行了,因為組合方法,僅需要付出少許偏見(bias)的代價,就能大大的減少演算法的不確定性。在著名的Netflix演算法競賽中,冠軍隊以及成績優異隊伍們全都使用了組合模型方法,把超過100個模型合併在一起(在模型上疊加高層的模型形成組合)以提升效果。在人工智慧用於實際應用時,從業者普遍都認為,未來的演算法一定時會通過模型組合的方法來獲得更好精度,但是這也會抬高非專業人員理解系統機制的門檻。

 

  注意點12:相關關係不等同於因果關係

 

  這一點值得反覆強調,我們可以通過一句調侃的話來解釋:“地球變暖、地震、龍捲風,以及其他自然災害,都和18世紀以來全球海盜數量的減少有直接關係”。這兩個變數的變化有相關性,但是並不能說存在因果關係,因為往往存在第三類(甚至第4、5類)未被觀察到的變數在起作用。相關關係應該看作是潛在的因果關係的一定程度的體現,但需要進一步研究。

 

  在開發人工智慧與大資料應用系統時,把握好以上十二個注意點,能夠有效避免實戰中的各種“坑”,幫助技術在走出實驗室,走向落地應用時,能發揮更加健壯、強大的作用。

相關文章