大資料架構詳解:從資料獲取到深度學習
機器學習(Machine Learning,ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。其專門研究計算機是怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構,使之不斷改善自身的效能。此外,資料探勘和機器學習有很大的交集。本文將從架構和應用角度去解讀這兩個領域。
機器學習和資料探勘的聯絡與區別資料探勘是從海量資料中獲取有效的、新穎的、潛在有用的、最終可理解的模式的非平凡過程。資料探勘中用到了大量的機器學習界提供的資料分析技術和資料庫界提供的資料管理技術。從資料分析的角度來看,資料探勘與機器學習有很多相似之處,但不同之處也十分明顯,例如,資料探勘並沒有機器學習探索人的學習機制這一科學發現任務,資料探勘中的資料分析是針對海量資料進行的,等等。從某種意義上說,機器學習的科學成分更重一些,而資料探勘的技術成分更重一些。
學習能力是智慧行為的一個非常重要的特徵,不具有學習能力的系統很難稱之為一個真正的智慧系統,而機器學習則希望(計算機)系統能夠利用經驗來改善自身的效能,因此該領域一直是人工智慧的核心研究領域之一。在計算機系統中,“經驗”通常是以資料的形式存在的,因此,機器學習不僅涉及對人的認知學習過程的探索,還涉及對資料的分析處理。實際上,機器學習已經成為計算機資料分析技術的創新源頭之一。由於幾乎所有的學科都要面對資料分析任務,因此機器學習已經開始影響到電腦科學的眾多領域,甚至影響到電腦科學之外的很多學科。機器學習是資料探勘中的一種重要工具。然而資料探勘不僅僅要研究、拓展、應用一些機器學習方法,還要通過許多非機器學習技術解決資料倉儲、大規模資料、資料噪聲等實踐問題。機器學習的涉及面也很寬,常用在資料探勘上的方法通常只是“從資料學習”。然而機器學習不僅僅可以用在資料探勘上,一些機器學習的子領域甚至與資料探勘關係不大,如增強學習與自動控制等。所以筆者認為,資料探勘是從目的而言的,機器學習是從方法而言的,兩個領域有相當大的交集,但不能等同。
圖1是一個典型的推薦類應用,需要找到“符合條件的”潛在人員。要從使用者資料中得出這張列表,首先需要挖掘出客戶特徵,然後選擇一個合適的模型來進行預測,最後從使用者資料中得出結果。
圖1
把上述例子中的使用者列表獲取過程進行細分,有如下幾個部分(見圖2)。
圖2
-
業務理解:理解業務本身,其本質是什麼?是分類問題還是迴歸問題?資料怎麼獲取?應用哪些模型才能解決?
-
資料理解:獲取資料之後,分析資料裡面有什麼內容、資料是否準確,為下一步的預處理做準備。
-
資料預處理:原始資料會有噪聲,格式化也不好,所以為了保證預測的準確性,需要進行資料的預處理。
-
特徵提取:特徵提取是機器學習最重要、最耗時的一個階段。
-
模型構建:使用適當的演算法,獲取預期準確的值。
-
模型評估:根據測試集來評估模型的準確度。
-
模型應用:將模型部署、應用到實際生產環境中。
-
應用效果評估:根據最終的業務,評估最終的應用效果。
整個過程會不斷反覆,模型也會不斷調整,直至達到理想效果。
機器學習概覽機器學習的演算法有很多,這裡從兩個方面進行介紹:一個是學習方式,另一個是演算法類似性。
學習方式
根據資料型別的不同,對一個問題的建模可以有不同的方式。在機器學習或人工智慧領域,人們首先會考慮演算法的學習方式。在機器學習領域有如下幾種主要的學習方式。
-
監督式學習:在監督式學習下,輸入資料被稱為“訓練資料”,每組訓練資料都有一個明確的標識或結果,如對防垃圾郵件系統中的“垃圾郵件”、“非垃圾郵件”,對手寫數字識別中的“1”、“2”、“3”、“4”等。在建立預測模型的時候,監督式學習建立一個學習過程,將預測結果與“訓練資料”的實際結果進行比較,不斷地調整預測模型,直到模型的預測結果達到一個預期的準確率。監督式學習的常見應用場景包括分類問題和迴歸問題。常見演算法有邏輯迴歸和反向傳遞神經網路。
-
非監督式學習:在非監督式學習下,資料並不被特別標識,學習模型是為了推斷出資料的一些內在結構。常見的應用場景包括關聯規則的學習及聚類等。常見演算法包括Apriori演算法和K-Means演算法。
-
半監督式學習:在半監督式學習下,輸入資料部分被標識,部分沒有被標識。這種學習模型可以用來進行預測,但是模型首先需要學習資料的內在結構,以便合理地組織資料進行預測。其應用場景包括分類和迴歸。常見演算法包括一些對常用監督式學習演算法的延伸。這些演算法首先試圖對未標識的資料進行建模,然後在此基礎上對標識的資料進行預測,如圖論推理演算法或拉普拉斯支援向量機等。
-
強化學習:在強化學習下,輸入資料作為對模型的反饋,不像監督模型那樣,輸入資料僅僅作為一種檢查模型對錯的方式。在強化學習下,輸入資料直接反饋到模型,模型必須對此立刻做出調整。常見的應用場景包括動態系統及機器人控制等。常見演算法包括Q-Learning及時間差學習(Temporal Difference Learning)等。
在企業資料應用的場景下,人們最常用的可能就是監督式學習和非監督式學習。在影象識別等領域,由於存在大量的非標識資料和少量的可標識資料,目前半監督式學習是一個很熱門的話題。而強化學習更多地應用在機器人控制及其他需要進行系統控制的領域。
演算法類似性
根據演算法的功能和形式的類似性,可以對演算法進行分類,如基於樹的演算法、基於神經網路的演算法等。當然,機器學習的範圍非常龐大,有些演算法很難明確歸到某一類。而對於有些分類來說,同一分類的演算法可以針對不同型別的問題。這裡,我們儘量把常用的演算法按照最容易理解的方式進行分類。
-
迴歸演算法:迴歸演算法是試圖採用對誤差的衡量來探索變數之間的關係的一類演算法。迴歸演算法是統計機器學習的利器。常見的迴歸演算法包括最小二乘法、邏輯迴歸、逐步式迴歸、多元自適應迴歸樣條及本地散點平滑估計等。
-
基於例項的演算法:基於例項的演算法常常用來對決策問題建立模型,這樣的模型常常先選取一批樣本資料,然後根據某些近似性把新資料與樣本資料進行比較,從而找到最佳的匹配。因此,基於例項的演算法常常被稱為“贏家通吃學習”或者“基於記憶的學習”。常見的演算法包括k-Nearest Neighbor(kNN)、學習向量量化(Learning Vector Quantization,LVQ)及自組織對映演算法(Self-Organizing Map,SOM)等。
-
正則化演算法:正則化演算法是其他演算法(通常是迴歸演算法)的延伸,根據演算法的複雜度對演算法進行調整。正則化演算法通常對簡單模型予以獎勵,而對複雜演算法予以懲罰。常見的演算法包括Ridge Regression、Least Absolute Shrinkage and Selection Operator(LASSO)及彈性網路(Elastic Net)等。
-
決策樹演算法:決策樹演算法根據資料的屬性採用樹狀結構建立決策模型,常用來解決分類和迴歸問題。常見演算法包括分類及迴歸樹(Classification and Regression Tree,CART)、ID3(Iterative Dichotomiser 3)、C4.5、Chi-squared Automatic Interaction Detection(CHAID)、Decision Stump、隨機森林(Random Forest)、多元自適應迴歸樣條(MARS)及梯度推進機(GBM)等。
-
貝葉斯演算法:貝葉斯演算法是基於貝葉斯定理的一類演算法,主要用來解決分類和迴歸問題。常見的演算法包括樸素貝葉斯演算法、平均單依賴估計(Averaged One-Dependence Estimators,AODE)及Bayesian Belief Network(BBN)等。
-
基於核的演算法:基於核的演算法中最著名的莫過於支援向量機(SVM)。基於核的演算法是把輸入資料對映到一個高階的向量空間,在這些高階向量空間裡,有些分類或者回歸問題能夠更容易地解決。常見的基於核的演算法包括支援向量機(Support Vector Machine,SVM)、徑向基函式(Radial Basis Function,RBF)及線性判別分析(Linear Discriminate Analysis,LDA)等。
-
聚類演算法:聚類演算法通常按照中心點或者分層的方式對輸入資料進行歸併。所有的聚類演算法都試圖找到資料的內在結構,以便按照最大的共同點將資料進行歸類。常見的聚類演算法包括K-Means演算法及期望最大化演算法(EM)等。
-
關聯規則學習:關聯規則學習通過尋找最能夠解釋資料變數之間關係的規則,來找出大量多元資料集中有用的關聯規則。常見的演算法包括Apriori演算法和Eclat演算法等。
-
人工神經網路演算法:人工神經網路演算法模擬生物神經網路,是一類模式匹配演算法,通常用於解決分類和迴歸問題。人工神經網路是機器學習的一個龐大的分支,有幾百種不同的演算法(深度學習就是其中的一類演算法)。常見的人工神經網路演算法包括感知器神經網路、反向傳遞、Hopfield網路、自組織對映及學習向量量化等。
-
深度學習演算法:深度學習演算法是對人工神經網路的發展。在計算能力變得日益廉價的今天,深度學習演算法試圖建立大得多也複雜得多的神經網路。很多深度學習演算法是半監督式學習演算法,用來處理存在少量未標識資料的大資料集。常見的深度學習演算法包括受限波爾茲曼機(RBN)、Deep Belief Networks(DBN)、卷積網路(Convolutional Network)及堆疊式自動編碼器 (Stacked Auto-encoders)等。
-
降低維度演算法:與聚類演算法一樣,降低維度演算法試圖分析資料的內在結構,不過降低維度演算法通過非監督式學習,試圖利用較少的資訊來歸納或者解釋資料。這類演算法可以用於高維資料的視覺化,或者用來簡化資料以便監督式學習使用。常見的降低維度演算法包括主成分分析(Principle Component Analysis,PCA)、偏最小二乘迴歸(Partial Least Square Regression,PLSR)、Sammon對映、多維尺度(Multi-Dimensional Scaling,MDS)及投影追蹤(Projection Pursuit)等。
-
整合演算法:整合演算法用一些相對較弱的學習模型獨立地就同樣的樣本進行訓練,然後把結果整合起來進行整體預測。整合演算法的主要難點在於究竟整合哪些獨立的、較弱的學習模型,以及如何把學習結果整合起來。這是一類非常強大的演算法,同時也非常流行。常見的整合演算法包括Boosting、Bootstrapped Aggregation(Bagging)、AdaBoost、堆疊泛化(Stacked Generalization,Blending)、梯度推進機(Gradient Boosting Machine,GBM)及隨機森林(Random Forest)等。
前面瞭解了機器學習和資料探勘的基本概念,下面來看一下業界成熟的案例,對機器學習和資料探勘有一個直觀的理解。
尿布和啤酒的故事
先來看一則有關資料探勘的故事——“尿布與啤酒”。
總部位於美國阿肯色州的世界著名商業零售連鎖企業沃爾瑪擁有世界上最大的資料倉庫系統。為了能夠準確瞭解顧客在其門店的購買習慣,沃爾瑪對其顧客的購物行為進行購物籃分析,想知道顧客經常一起購買的商品有哪些。沃爾瑪資料倉庫裡集中了其各門店的詳細原始交易資料,在這些原始交易資料的基礎上,沃爾瑪利用NCR資料探勘工具對這些資料進行分析和挖掘。一個意外的發現是:跟尿布一起購買最多的商品竟然是啤酒!這是資料探勘技術對歷史資料進行分析的結果,反映了資料的內在規律。那麼,這個結果符合現實情況嗎?是否有利用價值?
於是,沃爾瑪派出市場調查人員和分析師對這一資料探勘結果進行調查分析,從而揭示出隱藏在“尿布與啤酒”背後的美國人的一種行為模式:在美國,一些年輕的父親下班後經常要到超市去買嬰兒尿布,而他們中有30%~40%的人同時也為自己買一些啤酒。產生這一現象的原因是:美國的太太們常叮囑她們的丈夫下班後為小孩買尿布,而丈夫們在買完尿布後又隨手帶回了他們喜歡的啤酒。
既然尿布與啤酒一起被購買的機會很多,於是沃爾瑪就在其各家門店將尿布與啤酒擺放在一起,結果是尿布與啤酒的銷售量雙雙增長。
決策樹用於電信領域故障快速定位
電信領域比較常見的應用場景是決策樹,利用決策樹來進行故障定位。比如,使用者投訴上網慢,其中就有很多種原因,有可能是網路的問題,也有可能是使用者手機的問題,還有可能是使用者自身感受的問題。怎樣快速分析和定位出問題,給使用者一個滿意的答覆?這就需要用到決策樹。
圖3就是一個典型的使用者投訴上網慢的決策樹的樣例。
圖3
影象識別領域
-
小米麵孔相簿
這項功能的名字叫“面孔相簿”,可以利用影象分析技術,自動地對雲相簿照片內容按照面孔進行分類整理。開啟“面孔相簿”功能後,可以自動識別、整理和分類雲相簿中的不同面孔。
“面孔相簿”還支援手動調整分組、移出錯誤面孔、通過系統推薦確認面孔等功能,從而彌補機器識別的不足。
這項功能的背後其實使用的是深度學習技術,自動識別圖片中的人臉,然後進行自動識別和分類。
-
支付寶掃臉支付
馬雲在2015 CeBIT展會開幕式上首次展示了螞蟻金服的最新支付技術“Smile to Pay”(掃臉支付),驚豔全場。支付寶宣稱,Face++ Financial人臉識別技術在LFW國際公開測試集中達到99.5%的準確率,同時還能運用“互動式指令+連續性判定+3D判定”技術。人臉識別技術基於神經網路,讓計算機學習人的大腦,並通過“深度學習演算法”大量訓練,讓它變得極為“聰明”,能夠“認人”。實現人臉識別不需要使用者自行提交照片,有資質的機構在需要進行人臉識別時,可以向全國公民身份證號碼查詢服務中心提出申請,將採集到的照片與該部門的權威照片庫進行比對。
也就是說,使用者在進行人臉識別時,只需開啟手機或電腦的攝像頭,對著自己的正臉進行拍攝即可。在智慧手機全面普及的今天,這個參與門檻低到可以忽略不計。
使用者容易擔心的隱私問題在人臉識別領域也能有效避免,因為照片來源權威,同時,一種特有的“脫敏”技術可以將照片模糊處理成肉眼無法識別而只有計算機才能識別的影象。
-
圖片內容識別
前面兩個案例介紹的都是圖片識別,比圖片識別更難的是圖片語義的理解和提取,百度和Google都在進行這方面的研究。
百度的百度識圖能夠有效地處理特定物體的檢測識別(如人臉、文字或商品)、通用影象的分類標註,如圖4所示。
圖4
來自Google研究院的科學家發表了一篇博文,展示了Google在圖形識別領域的最新研究進展。或許未來Google的圖形識別引擎不僅能夠識別出圖片中的物件,還能夠對整個場景進行簡短而準確的描述,如圖5所示。這種突破性的概念來自機器語言翻譯方面的研究成果:通過一種遞迴神經網路(RNN)將一種語言的語句轉換成向量表達,並採用第二種RNN將向量表達轉換成目標語言的語句。
圖5
而Google將以上過程中的第一種RNN用深度卷積神經網路CNN替代,這種網路可以用來識別影象中的物體。通過這種方法可以實現將影象中的物件轉換成語句,對影象場景進行描述。概念雖然簡單,但實現起來十分複雜,科學家表示目前實驗產生的語句合理性不錯,但距離完美仍有差距,這項研究目前僅處於早期階段。圖6展示了通過此方法識別影象物件併產生描述的過程。
圖6
自然語言識別
自然語言識別一直是一個非常熱門的領域,最有名的是蘋果的Siri,支援資源輸入,呼叫手機自帶的天氣預報、日常安排、搜尋資料等應用,還能夠不斷學習新的聲音和語調,提供對話式的應答。微軟的Skype Translator可以實現中英文之間的實時語音翻譯功能,將使得英文和中文普通話之間的實時語音對話成為現實。
Skype Translator的運作機制如圖7所示。
圖7
在準備好的資料被錄入機器學習系統後,機器學習軟體會在這些對話和環境涉及的單詞中搭建一個統計模型。當用戶說話時,軟體會在該統計模型中尋找相似的內容,然後應用到預先“學到”的轉換程式中,將音訊轉換為文字,再將文字轉換成另一種語言。
雖然語音識別一直是近幾十年來的重要研究課題,但是該技術的發展普遍受到錯誤率高、麥克風敏感度差異、噪聲環境等因素的阻礙。將深層神經網路(DNNs)技術引入語音識別,極大地降低了錯誤率、提高了可靠性,最終使這項語音翻譯技術得以廣泛應用。
深度學習
Artificial Intelligence(人工智慧)是人類美好的願望之一。雖然計算機技術已經取得了長足的進步,但截至目前,還沒有一臺計算機能夠產生“自我”的意識。的確,在人類和大量現有資料的幫助下,計算機可以表現得十分強大,但是離開了這兩者,它甚至都不能分辨兩隻小動物。
深度學習演算法自動提取分類所需的低層次或者高層次特徵。高層次特徵是指該特徵可以分級(層次)地依賴其他特徵。例如,對於機器視覺,深度學習演算法從原始影象去學習得到它的一個低層次表達,如邊緣檢測器、小波濾波器等,然後在這些低層次表達的基礎上再建立表達,如這些低層次表達的線性或者非線性組合,然後重複這個過程,最後得到一個高層次的表達。
深度學習能夠得到更好地表示資料的特徵,同時由於模型的層次、引數很多,容量足夠,因此,模型有能力表示大規模資料。所以對於影象、語音這種特徵不明顯(需要手工設計且很多沒有直觀的物理含義)的問題,能夠在大規模訓練資料上取得更好的效果。此外,從模式識別特徵和分類器的角度來看,深度學習框架將特徵和分類器結合到一個框架中,用資料去學習特徵,在使用中減少了手工設計特徵的巨大工作量,因此,不僅效果更好,而且使用起來也有很多方便之處。
當然,深度學習本身並不是完美的,也不是解決任何機器學習問題的利器,不應該被放大到一個無所不能的程度。
小結本文主要介紹了機器學習、資料探勘以及當前最熱門的深度學習。深度學習可以說掀起了人工智慧的又一次熱潮,但是大家要清楚地認識到,這離真正的AI(人工智慧)還差得很遠。但總的來說,我們離電影中描述的未來世界更近了一步,不是嗎?