一個新時代
起源
分布式機器學習是隨著“大數據”概念興起的。在有大數據之前,有很多研究工作為了讓機器學習算法更快,而利多多個處理器。這類工作通常稱為“并行計算”或者“并行機器學習”,其核心目標是把計算任務拆解成多個小的任務,分配到多個處理器上做計算。
分布式計算或者分布式機器學習除了要把計算任務分布到多個處理器上,更重要的是把數據(包括訓練數據以及中間結果)分布開來。因為在大數據時代,一臺機器的硬盤往往裝不下全部數據,或者即使裝下了,也會受限于機器的I/O通道的帶寬,以至于訪問速度很慢。為了更大的存儲容量、吞吐量以及容錯能力,我們都希望把數據分布在多臺計算機上。
那么什么樣的數據大到一臺機器甚至幾百臺機器的硬盤都裝不下呢?要知道,現在很多服務器的硬盤空間都是數TB的了!其實這樣的大數據有很多。比如搜索引擎要爬下很多很多的網頁,對其內容做分析并建立索引。有多少網頁呢?這個數字很難估計,因為這是隨時間變化的。
在Web 2.0出現之前,全球網頁數量的增長相對穩定,因為網頁都是專業人員編輯的。而由于各種Web 2.0工具幫助用戶建立自己的網頁,比如博客、甚至微博,所以網頁數量呈指數速度遞增。
另一種典型的大數據是電商網站上的用戶行為數據。比如在亞馬遜或者淘寶上,每天都很多用戶看到了很多推薦的商品,并且點擊了其中一些。這些用戶點擊推薦商品的行為會被亞馬遜和淘寶的服務器記錄下來,作為分布式機器學習系統的輸入。輸出是一個數學模型,可以預測一個用戶喜歡看到哪些商品,從而在下一次展示推薦商品的時候,多展示那些用戶喜歡的。
類似的,在互聯網廣告系統中,展示給用戶的廣告、以及用戶點擊的廣告也都會被記錄下來,作為機器學習系統的數據,訓練點擊率預估模型。在下一次展示推薦商品時,這些模型會被用來預估每個商品如果被展示之后,有多大的概率被用戶點擊。其中預估點擊率高的商品,往往展示在預估點擊率低的商品之前,從而贏得實際上比較高的點擊率。
從上面的例子我們可以看出來,這些大數據之所以大,是因為它們記錄的是數十億互聯網用戶的行為。而人們每天都會產生行為,以至于百度、阿里、騰訊、奇虎、搜狗這樣的公司的互聯網服務每天收集到很多很多塊硬盤才能裝下的數據。而且這些數據隨時間增加,永無止境。雖然對“大數據”的具體定義見人見智,但是互聯網用戶的行為數據,毫無疑問地被公認為大數據了。
價值
機器學習的應用由來已久。大家可能還記得十幾年前IBM推出的語音識別和輸入系統ViaVoice。這個系統使用的聲學模型和語言模型是用人工收集整理和標注的數據訓練的。當年因為IBM財大氣粗,收集和整理了很多數據,所以ViaVoice的識別準確率在同類產品中遙遙領先。但是,ViaVoice很難保證能識別各種口音的人。所以IBM的工程師們設計了一個自動適應的功能——通過讓用戶標注沒能正確識別的語音對應的文本,ViaVoice可以針對主任的口音做特別的優化。
今天,大家可以通過互聯網使用Google的語音識別系統。我們會發現,不管使用者口音如何,Google的語音識別系統幾乎都能準確識別,以至于幾乎不再需要“適應主人的口音”。而且Google的系統支持的語言種類也更多。這其中的奧妙就在于“大數據”。
在Google發布語音識別引擎之前,先有語音搜索服務。在語音搜索服務之前,有一個打電話查詢的服務。實際上,正式這個電話服務收集了很多用戶的語音輸入。這部分數據經過人工標注,稱為了訓練語言模型和聲學模型的第一批數據。隨后發布的語音搜索收集了世界各地更多互聯網用戶的聲音,加上半自動標注系統的引入,訓練數據大大豐富了。訓練數據越多,能覆蓋的口音和語種越多,機器學習得到的模型的識別準確率也就越高。
以至于當Google發布語音識別引擎之初,識別率就遠高于依賴人工標注訓練數據的IBM ViaVoice。隨著語音識別服務被很多手機應用和桌面應用使用,它能采集更多用戶的語音輸入,模型的準確性會不斷得到提高。
從上面例子我們可以看出,因為互聯網服務收集的數據是萬萬千千用戶的行為的體現,而人類行為是人類智能的結果。
所以如果我們能設計分布式機器學習系統,能從大數據中歸納規律,我們實際上就在歸納整個人類的知識庫。這個聽起來很神奇,實際上在上面的例子里,Google已經做到了。在這一系列的最后一節里,我們會介紹我們開發的一個語義學習系統,它從上千億條文本數據中,歸納漢語中上百萬的“語義”。隨后,只要用戶輸入任何一段文本,這個系統可以利用訓練好的模型在一毫秒之內,理解文本中表達的“語義”。這個理解過程確保消除文本中的歧義,從而讓搜索引擎、廣告系統、推薦系統等應用更好地理解用戶需求。
簡言之,互聯網使得人類第一次有機會收集全人類的行為數據。從而為機器學習這一持續了數十年的研究方向提供了全新的機會——分布式機器學習——從互聯網數據中歸納這個人類的知識,從而讓機器比任何一個個人都要“聰明”。