《電子技術應用》
您所在的位置:首頁 > MEMS|傳感技術 > 業(yè)界動態(tài) > 如何快速使用大規(guī)模機器學習的核心技術?

如何快速使用大規(guī)模機器學習的核心技術?

2016-02-26

  過去兩年,機器學習書寫了一卷強大的成長史,無論你是否真的覺察,它都是如此直接且普遍地在我們的生活中體現(xiàn)價值:客服機器人、垃圾郵件過濾、人臉識別、語音識別、個性化推薦……機器學習和人的洞察力這對組合正逐漸滲透到各行各業(yè),使我們在面對這些冷冰冰的現(xiàn)代設備時,享受到靈活、智能、且越來越富人情味兒的服務。

  的確,神經(jīng)網(wǎng)絡、人工智能和機器學習沒什么新穎的,這些算法早在幾十年前就存在。但為什么這瓶老酒直到最近,才發(fā)酵出勢不可擋的香氣呢?數(shù)十億用戶每天行走于互聯(lián)網(wǎng)中,面對這巨大的行為數(shù)據(jù)體量,傳統(tǒng)統(tǒng)計分析方法已經(jīng)無力招架。圍繞著數(shù)據(jù)和工具發(fā)生的變化,可擴展的計算能力在急劇上升,這些都推動著機器學習以前所未有的方式大步向前。

  除此之外,面向機器學習的可用框架也迎來了爆發(fā)式增長。巨頭們紛紛將最為復雜的技術從機器學習中抽象出來,開源給開發(fā)者和學術研究人員,在幫助更多人的同時,使自身技術方案不斷得到完善和進步。微軟也如是。

  去年11月,微軟亞洲研究院將分布式機器學習工具包(DMTK)通過GitHub開源。隨著某些應用場景下數(shù)據(jù)量越來越大,分布式機器學習技術的重要性日益顯現(xiàn)。但將大量設備匯聚起來并開發(fā)出能夠順利跨越各設備運行的機器學習應用絕非易事。大規(guī)模機器學習技術的挑戰(zhàn)在哪里?優(yōu)勢又是什么?對于開發(fā)者,怎樣結合實際業(yè)務需求更好地使用DMTK?帶著這些問題,51CTO記者走進微軟亞洲研究院向DMTK團隊研究員——微軟亞洲研究院主管研究員王太峰拋出了我們的疑問。

  微軟亞洲研究院主管研究員 王太峰

  DMTK是什么

  王太峰介紹,DMTK由一個服務于分布式機器學習的框架和一組分布式機器學習算法構成,是一個將機器學習算法應用在大數(shù)據(jù)上的工具包。DMTK目前聚焦于解決Offline-training的并行化。除了分布式學習框架,它還包括了主題模型和詞向量學習的算法,這些算法可以應用于自然語言處理方面,比如文本分類與聚類、話題識別以及情感分析等。為了適應不同的集群環(huán)境,DMTK框架支持兩種進程間的通信機制:MPI和ZMQ。應用程序端不需要修改任何代碼就能夠在這兩種方式之間切換。DMTK支持Windows和Linux兩種操作系統(tǒng)。目前主要支持C和C++,之后會考慮到一些高級語言的升級,比如Python。

  在實現(xiàn)算法的過程中DMTK團隊看到,用一個框架來將這些算法很容易地并行到大量機器上來解決大規(guī)模機器學習問題,是非常必要的。因此,微軟將DMTK框架和幾個例子開源出來,一方面與開發(fā)者和學術研究人員共同分享技術,另一方面希望通過大家貢獻改進意見,并將更多的算法添加到這套框架中來。

  如何應對大規(guī)模機器學習的挑戰(zhàn)

  在被問及DMTK如何解決大規(guī)模機器學習的挑戰(zhàn)時,王太峰主要從如何處理大規(guī)模數(shù)據(jù)和訓練大規(guī)模模型兩方面做了回答。

  1. 大規(guī)模數(shù)據(jù):基于DMTK我們可以利用多個機器一同完成處理,每個機器處理一部分數(shù)據(jù)。在多個機器中同時存在多個參數(shù)的副本,它們獨立基于本地數(shù)據(jù)產(chǎn)生對參數(shù)的更新,并在參數(shù)服務器端進行參數(shù)更新的合并。通過這種數(shù)據(jù)并行的方式,利用多個機器同時處理大規(guī)模的數(shù)據(jù),大大加速了學習過程。即使是每臺機器處理相對小的數(shù)據(jù)分塊,但是有時候模型參數(shù)非常多,以至于基于全部參數(shù)在內存中更新的算法變得不可行。

  2. 大規(guī)模模型:在大規(guī)模模型中,學習參數(shù)在單個機器中裝不下。就這個問題,DMTK可以從兩個方面解決,首先DMTK框架中的參數(shù)服務器本身即為分布式,所以可利用很多機器分布式存儲模型。其次,在單個機器進行本地學習的過程中,通過設計精巧的分段學習方法,使得參數(shù)更新分批次完成。即使模型再大,也能保證本地參數(shù)學習順利完成。

  具體來說,DMTK當前版本的工具包主要有以下幾個部分:

685.jpeg

  DMTK分布式機器學習框架

  主要由參數(shù)服務器和客戶端軟件開發(fā)包(SDK)兩部分構成。

  1. 參數(shù)服務器。重新設計過的參數(shù)服務器在原有基礎上從性能和功能上都得到了進一步提升——支持存儲混合數(shù)據(jù)結構模型、接受并聚合工作節(jié)點服務器的數(shù)據(jù)模型更新、控制模型同步邏輯等。

  2. 客戶端軟件開發(fā)包(SDK)。包括網(wǎng)絡層、交互層的一些東西,支持維護節(jié)點模型緩存(與全局模型服務器同步)、節(jié)點模型訓練和模型通訊的流水線控制、以及片狀調度大模型訓練等。用戶并不需要清楚地知道參數(shù)和服務器的對應關系,SDK會幫助用戶自動將客戶端的更新發(fā)送至對應的參數(shù)服務器端。

  通用分布式機器學習算法

  LightLDA:LightLDA是一種全新的用于訓練主題模型的學習算法,是具有可擴展、快速、輕量級,計算復雜度與主題數(shù)目無關等特點的高效算法。在其分布式實現(xiàn)中,DMTK團隊做了大量系統(tǒng)優(yōu)化使得其能夠在一個普通計算機集群上處理超大規(guī)模的數(shù)據(jù)和模型。例如,在一個由8臺計算機組成的集群上,只需要一個星期左右的時間,可以在具有1千億訓練樣本(token)的數(shù)據(jù)集上訓練具有1千萬詞匯表和1百萬個話題(topic)的LDA模型(約10萬億個參數(shù))。這種規(guī)模的實驗以往在數(shù)千臺計算機的集群上也需要數(shù)以月計的時間才能得到相似結果。

  分布式詞向量:詞向量技術近來被普遍地應用于計算詞匯的語義表示,它可以用作很多自然語言處理任務的詞特征。微軟為兩種計算詞向量的算法提供了高效的分步式實現(xiàn):一種是標準的word2vec算法,另一種是可以對多義詞計算多個詞向量的新算法。

  詞向量的作用是為了比較兩個詞之前的距離,基于這個距離來判斷語義上更深的信息。以前的詞向量模型以單詞為維度建立,每個單詞學出一組參數(shù),每組參數(shù)即為詞向量,每個單詞通過映射至詞向量上來進行語義上的表達。一個向量在語義空間中對應一個點。而一詞多義的現(xiàn)象極為普遍,但如果多個意思在語義空間中只用一個點來表達就不太科學。如果我們希望學出多個語義空間中的點,在建立模型時就不會讓每個單詞只表達出一個向量,而是最開始時就讓每個單詞選擇N個向量進行定義,而后置入概率混合模型。這個模型通過在學習過程中不斷的優(yōu)化,產(chǎn)生對每個單詞多個向量的概率分布,結合語境對每個向量分配概率,從而學習更有意義的詞向量表達。

  一詞多義的學習框架和學習過程與一詞一義并沒什么不同,但它有更多的參數(shù),并且需要在學習過程中分配多個向量各自對應的概率,因此復雜度更高。由于整個過程通過多機進行并行,因此還是能夠保證以足夠快的速度完成訓練。比如在對某網(wǎng)頁數(shù)據(jù)集(約1千億單詞)進行訓練時,8臺機器大概40個小時內就可以完成模型訓練。

  DMTK提供了豐富的API接口給研發(fā)人員。大數(shù)據(jù)接口主要集中在并行框架這部分,來解決很多機器一起學習時,單機的客戶端如何調用參數(shù)服務器的問題。

  王太峰為我們列舉了DMTK中對于不同需求的開發(fā)者設計的API:

  保持原有機器學習算法流程:這類開發(fā)人員最需要的API就是同步參數(shù),依照自己原有的算法進行訓練,只在需要多機之間交互時利用DMTK的API來獲取模型參數(shù)(GET)和發(fā)送更新(ADD)。通常這類開發(fā)需要花的精力比較少。 從頭設計算法:這類開發(fā)人員不需要設計完整算法流程,只需按照DMTK中對數(shù)據(jù)塊描述,接口會告訴DMTK每條數(shù)據(jù)需要什么參數(shù),如何利用數(shù)據(jù)進行參數(shù)更新。DMTK客戶端SDK會自動啟動內置的學習流程,進行逐條數(shù)據(jù)的訓練,并在必要的時候進行模型交互。

  目前DMTK在GitHub上有1400多顆星,在分布式機器學習的框架上來說排名是非??壳暗摹S脩粢卜答伭撕芏鄬Υa修復的意見、和對增加一些額外功能需求的建議。

  DMTK并非完整的開箱即用解決方案,其中分布式的算法,如LightLDA,WordEmbedding可以為很多用戶直接所用。同時,DMTK在設計上允許用戶進行后續(xù)擴展,使其能夠支持更多的算法和平臺。王太峰還透露,目前DMTK還是利用現(xiàn)有的文檔系統(tǒng)(Filesystem),直接將數(shù)據(jù)分布在里面,各個機器處理本地硬盤上的數(shù)據(jù)。在此基礎上,DMTK正逐漸增加對Hadoop的一些支持,如利用HDFS去讀數(shù)據(jù),幫助用戶調度作業(yè)等。

  后記

  就在不久前,微軟公司還發(fā)布了另一套機器學習工具包,即計算網(wǎng)絡工具包(Computational Network Toolkit)——或者簡稱CNTK。另外,谷歌開源人工智能系統(tǒng)TensorFlow,IBM開源機器學習平臺SystemML。這對廣大開發(fā)者和創(chuàng)業(yè)公司來說,無疑在很大程度上簡化基礎技術的投入和難度。

  大規(guī)模機器學習是一柄利刃,但決不是萬能的。對于大規(guī)模機器學習領域來說,業(yè)務技術的重要性勝過基礎技術。這么多巨頭將機器學習平臺開源,作為開發(fā)者,我們再沒理由不利用好。


本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。