人工智能與大數據開發的12個注意事項


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

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

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

人工智能與大數據開發的12個注意點

注意點1:你的數據未必可靠

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

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

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

• 你的數據可能隨時在變化。數據庫的表結構可能會變,數據定義也可能會變

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

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

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

人工智能與大數據開發的12個注意點

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

以搜索引擎爲例,用戶對結果返回的時長是有忍耐的限度的。如果用戶等待的時間超過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類)未被觀察到的變量在起作用。相關關係應該看作是潛在的因果關係的一定程度的體現,但需要進一步研究。

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


發佈了31 篇原創文章 · 獲贊 21 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章