閱讀431 返回首頁    go 京東網上商城


大規模數據的分布式機器學習平台

來自阿裏雲IDST褚崴為大家帶來分布式機器學習平台方麵的內容,主要從大數據的特點和潛在價值開始講起,然後介紹阿裏的業務場景中常用到的機器學習算法,以及阿裏采用的分布式機器學習框架,最後介紹了PAI算法平台,一起來看下吧。

 

大數據的特點和潛在價值

bb7952833cbb2acedbed7c3a98100657523fde60

我們正在步入大數據的時代,大數據至少具備以下四個特點:

  • 海量樣本:數據的規模巨大,特征非常多,每40個月翻一番,數據管理複雜;
  • 內容多樣:非結構化數據、異質數據,每天產生的數據裏有圖像、語音、視頻,還有各類傳感器產生的數據,各種定位的信息,交易記錄…
  • 時效性強:數據實時更新,多突發事件,用戶短期行為,要求實時檢索和計算的能力;
  • 質量不均:數據采集渠道多,質量參差不齊,數據分析準確性不一致。

大數據裏蘊藏著豐富的知識,如何使大數據成為知識和力量?這是數據挖掘科學家的使命。

數據挖掘是由軟件實現的機製從海量數據中提取出信息,數據挖掘方法又被稱做算法,在海量樣本裏,我們可以更加準確地發現事件間的關聯關係,對未知的事件有精準預測的能力,幫助我們做出更合理的決策。在電子商務領域,數據挖掘正在廣泛地應用於精準營銷、風險控製、成本管理等方方麵麵。

大數據挖掘的基礎就是分布式的大規模機器學習的能力。阿裏有7.6億的商品,日均訪問量10億次,占C2C市場90%以上,占50%以上的B2C市場,占第三方支付的50%, 這些組成了阿裏的大數據。目前,在阿裏數據平台事業部的服務器上,攢下了超過100PB已處理過的數據,等於104857600個GB,相當於4萬個西雅圖中央圖書館,580億本藏書。

a1775651345f325b2fd285bcff47801da9cbc124

機器學習在阿裏廣泛地應用,在淘寶的主頁上,搜索技術裏的對搜索關健詞的理解和重寫、結果內容的排序、廣告投放點擊率的預估、商品的聚類和去重,還有相關商品的推薦技術等等;在螞蟻金服的業務中,圖像識別技術廣泛應用到證件智能審核和人臉識別,規則挖掘技術也運用在風險控製上;在客服業務裏,語音識別技術也得到廣泛地應用。

 

機器學習算法

通常我們把機器學習的算法分為三大類:有監督學習、無監督學習和強化學習。

邏輯回歸(Logistic Regression

e506e0477404d445038d0f673c0cca240906605c

邏輯回歸廣泛地運用在二分類的問題,基於多個輸入變量來估計某一事件發生的概率。在CTR預估的任務中,最常用到的線性邏輯回歸的模型:

087248701d2cf261244214b6798cfb3838cb8ec4

輸入變量描述上下文,預估用戶點擊的概率。可以包含廣告質量信息與搜索關鍵字的相關性,曆史記錄中的點擊情況,以及用戶的個人信息等等,利用日誌中的上一次的曆史事件學習一個線性模型來擬合用戶的點擊行為,這個線性模型的輸出值通過一個logit model把一個實數映射到0~1之間,成為一個概率值,通常我們假定樣本是互不相關的,利用極大似然法來優化線型模型的權重,根據具體情況我們還會加上正則項來獲得相對更簡單的模型,其他的多分類問題 (multiclass classification) 或 序數回歸 (Ordinal Regression)也可以轉化為二分類的問題來求解,所以邏輯回歸適用範圍非常廣。

聚類(Clustering

e5ed448ec2db483eb9436fd894d31f15b7d3dace

K-Means是一個常用的聚類算法,把樣本按照空間位置劃分成K個類,K事先設定目標是把空間位置相近的樣本聚在同一個類裏,樣本可以是用戶,也可以是商品或者照片等等,每個樣本由一組特征來描述,我們通過損失目標函數最小化來優化每個聚類中的中心位置和各個樣本的所屬類,這個算法的大致過程如下:

初始化每個聚類的中心,可以隨機的選K個樣本作為中心,然後計算每個樣本達到K個中心點的距離,距離可以是歐式空間距離,也可以是其它距離,每個樣本選擇距離最近的中心點作為該樣本的所屬類,之後根據該類裏麵所有樣本來更新該類的中心點位置,可以就是樣本的平均值,根據新的各類中心點位置再決定每個樣本的歸屬類迭代,直到結果不再變化,這樣我們最終獲得了K個類,每個類裏麵都有很相似的樣本。此外,還有其它的聚類算法,例如譜聚類和LDA等等。

決策樹(Decision Tree

30b29e601f1c19be311592fd107322da07df2090

決策樹是一種監督學習,給定一堆樣本,每個樣本都有一組屬性和一個類別,這些類別是事先確定的,通過學習得到一個分類器,分類器能夠對新出現的對象給出正確的分類,決策樹是一種樹型的結構,其中每個內部節點表示一個屬性上的測試,每個分枝代表了一個測試輸出,每一個葉節點代表一個類別特征和分類點,由信息熵的增益來決定。隨機森林是一個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的眾數而定,我們建立多棵決策樹,各個決策樹之間沒有關聯,分別學習部分訓練樣本而最終的結果由投票決定。

e060b8f9b80e61f9acea08276cf0c8bc7627fe9b

GBDT的全稱是Gradient Boost Decision Tree,和隨機森林一樣,是由多棵決策樹組成的,依次生成決策樹,減小損失函數,各個決策樹之間是有關聯的,因為下一顆樹是在現有模型的殘差的基礎上生成的,最終的結論由累加的各個決策樹結果來決定。在生成一顆新樹的時候,目標值設定為當前模型的梯度,然後按照常規的方法來建立決策樹。

深度學習(Deep Learning

深度學習核心是神經元網絡模型,隨著近年來並行分布式計算能力的發展,使得在海量數據上訓練複雜模型成為了現實,實踐也證明複雜的神經元網絡模型在高難度的學習任務上表現優異,例如圖像識別、語音識別、機器翻譯等領域。

神經元網絡模型包括一個輸入層,由輸入特征決定;一個輸出層,由學習目標來決定;還有至少一個隱藏層,深度學習研究的模型一般都包含多個隱藏層,形成比較複雜的網絡結構。

常用的網絡結構有用於圖像識別的CNN卷積神經元網絡、用於語音和翻譯的RNN、還有深度置信模型DBN,下麵舉例介紹CNN:

4f1c7516eca5440dac223130ff30939346971a51

這是經典的LeNet5結構圖,圖中的卷積網絡工作流程是,輸入層有32乘32的感知節點組成,接受原始圖像,然後計算流程在卷積和子抽樣之間交替進行。第一個隱藏層進行卷積,它有八個特征映射組成,每個特征映射有28乘28的神經元組成,每一個神經元指定一個5乘5的接受域;第二個隱藏層實現子抽樣和局部平均,它同樣由8個特征映射而成,但每個特征映射由14乘14的神經元組成,每個神經元具有一個2乘2的接受域,一個可訓練係數、一個可訓練偏置和一個sigmoid激活函數,訓練係數和偏置控製神經元的操作點;第三隱藏層進行第二次卷積,它有20個特征映射組成,每個特征映射由10乘10的神經元組成,該隱藏層中的每個神經元可以具有和下一個隱藏層幾個特征映射相連的突觸連接,它以與第一個卷積層的相似方式來操作;第四個隱藏層進行第二次子抽樣和局部平均計算,它由20個特征映射組成,但每個特征映射由5乘5的神經元組成,它與第一次抽樣相似的方式進行;第五個隱藏層實現卷積的最後階段,它由120神經元組成,每個神經元指定一個5乘5的接受域,最後是一個全連接層,得到輸出的向量。

 

常見的分布式機器學習框架

分布式機器學習的計算框架有兩個,一是基於消息傳播接口的MPI框架,一是參數服務器框架。

4460695ca8a2c02dc586e31954ff450f78771d04

這是阿裏的數據生態圈的示意圖,底層的存儲層是ODPS,中間層是計算層,搭載著MapReduce 、Spark、Graph還有MPI和參數服務器,最上層是應用層,支持阿裏各個BU的業務,包括廣告、搜索、淘寶、天貓、聚劃算和螞蟻金服。

Message Passing InterfaceMPI)框架

4cfb5466e4a522c031344ed5346307d77d185700

MPI是1994年5月發布的一種消息傳播接口,它實際上是一個消息傳播函數庫的標準說明,吸收了眾多消息傳遞係統的優點,是目前國際上最流行的並行編程環境之一。

MPI是一種標準,封裝了消息傳遞編程接口、減少網絡編程,MPI具有許多的優點:

具有可移植性和易用性,具有完備的異步通信功能,有正式和詳細的精確定義。在基於MPI編程模型中,計算是由一個或多個彼此通過調用庫函數進行消息收發通信的進程所組成,在絕大部分MPI實現中,一組固定的進程,在程序初始化的時候產生,一般情況下,一個處理器隻生成一個進程,這些進程,可以執行相同或不同的程序,進程間的通信可以是點到點,也可以是集合的,MPI提供了一個並行環境庫,通過調用MPI的庫函數來達到並行的目的,目前流行的實現包括MPICH、OpenMPI和LamMPI,MPI提供C語言和FORTRAN等多語言的接口,支持迭代,支持ODPS平台,非常適合實現分布式機器學習算法。

上圖是關於MapReduce數據分片,每個節點隻處理一部分數據,通過增加處理節點,減少每個節點的計算工作量,從而完成大規模的數據處理任務,MPI框架支持節點間的通信,一般節點0就擔當匯總的節點,推動其它節點,進行迭代計算的工作。

參數服務器(Parameter Server)框架

30d4d87670698ccfc76920bdd84af376ba288508

參數服務器是穀歌的一個大規模分布式計算平台,用來訓練深度學習的模型。這個架構支持模型分片,可以把一個超大規模的模型分解成很多的小部分,一個參數服務器隻負責模型的一小部分,可以通過增加參數服務器的數目來提升模型處理的規模;參數服務器利用稀疏特性減小通信。

在數據分片方麵和MPI一樣,可以通過增加節點來提升數據處理的規模,另外這個框架還支持異步迭代和Failover機製。框架會保存每一個節點的狀態,當任何一個節點任務失敗以後,框架會啟動一個新的任務繼續跑未跑完的任務。

K-Means 的分布式實現

MPI框架下具體過程如下:

1.         數據分片;

2.         節點0保存當時各個聚類的中心點的信息;

3.         每一個節點從節點0把當前各個聚類的中心點信息拉下來,然後計算每個樣本到這些中心點的距離,根據最短的距離獲得所屬類,並累計本地的中心點信息,遍曆所有的樣本,將本地的中心點的信息推送到節點0;

4.         節點0收集到所有信息之後更新當前的各個類的中心點的信息,就是同步迭代;

5.         各個節點繼續各自的計算,直到收斂,也就是各個中心點的位置不再變化。

當特征維度非常高的時候,節點0可能沒有足夠的內存資源來保存中心點的信息,而參數服務器正好可以解決這樣的難題,參數服務器框架具體過程如下:

1.         首先模型分片;

2.         參數服務器分別保存當前類中心點的一部分特征維度;

3.         每一個節點從參數服務器上拉下來中心點的部分特征,累計每個樣本到各個中心點的距離,再從參數服務器上拉下來另外一部分特征,繼續計算到各個中心點的距離,直到得到完整的本地中心點的信息,之後將本地中心點的信息推送到參數服務器;

4.         參數服務器搜集到所有的信息之後,更新當前的各個類的中心點的信息,還是同步迭代;

5.         各個節點繼續各自的計算,直到收斂。

 

PAI算法平台

7412ea3c531d065f1bc182653a9ca094865c1042

這是PAI算法平台的一個Snapshot,PAI算法平台將提供Web服務,支持拖拽的圖形見麵操作,在授權的基礎上,所有的算法模塊都可以共享,所有的實驗記錄都可以複用,我們希望營造一個算法的生態圈,每一個社區成員都可以分享他的實驗設計和結果。

謝謝大家!

最後更新:2017-05-17 23:31:15

  上一篇:go  用Python開源機器人和5美元,我在Instagram上搞到了2500個真粉兒
  下一篇:go  快速學會SVN的搭建和使用