如何把機器學習“做大”


“大數據”無疑是當今行業內最熱門的話題,尤其是大數據與機器學習的結合,給予計算機前所未有的判斷能力和預測能力。機器學習通過數據來訓練模型,數據樣本越大,機器學習就可以訓練出越復雜的模型,進而做出更准確的判別與預測。大數據與機器學習的結合,已經在信息檢索、廣告計算、個性化推薦等諸多領域展現出其強大的威力。

大數據與機器學習

理想的情況下,數據越大,機器學習可以訓練越復雜的模型,模型的能力就越強大——然而目前事實似乎並非如此。大規模的數據給機器學習造成了計算上的困難,尤其是對於復雜的模型,計算量可能會隨數據量超線性增長:比如很多種核方法,數據量增大百倍,計算量就需要增大萬倍。因而面對大規模的數據,工業界通常只是使用非常簡單的模型。目前工業界廣泛使用logistic regression作為廣告預測等多種業務的分類器,原因就是logistic regression是簡單的線性模型,線下訓練和線上預測都非常的高效,不需要過大的計算資源。由於計算的問題,kernel SVM等更為復雜的分類器很少用在工業界大規模的數據上,盡管其分類准確度可以比logistic regression更好。僅僅增加樣本的數量,而沒有采用更復雜的模型,那么大數據下的機器學習與以前的小數據機器學習的方法上並無實質區別。那么如何才能用大數據訓練出復雜的模型?

如何提升機器學習的規模

用大數據訓練復雜模型,最主要的困難就是內存容量限制和計算時間過長。想要將復雜的模型用在大數據上,就必須從算法層面上解決CUP計算量和內存存儲量的問題。通常有三種方法可以把機器學習“做大”:並行算法、在線算法、近似算法。

並行算法。顧名思義,並行算法就是將任務分配到多台機器或多個處理器上,通過增加計算量來減小計算時間。分布式並行計算對硬件條件有較高要求,需要MapReduce集群、MPI集群、GPU集群等計算資源,因而只適用於百度、谷歌這樣計算能力大的公司。但即使有很大的計算資源,也不是所有的算法都適合分布式計算,因為分布式並行計算要求算法具有可並行性。最理想的情況下,用100台機器並行,計算時間為原來的百分之一;但事實上,並行算法很難達到這樣的效果。設計分布式算法,需要考慮到存儲量、通信量、同步異步的問題。

  • 面對大數據,內存容量是一個關鍵的瓶頸,如果分布式算法可以對數據或特征做划分,使得每台機器的內存消耗遠小於不做分布式,那么並行計算就非常有優勢。

  • 機器學習的算法通常需要迭代地更新模型,這就導致每一輪需要有一次通信。集群的機器之間帶寬是有限的,因此大通信量會降低算法的效率。

  • 同步異步問題。如果算法需要對所有的機器進行同步,即每一輪迭代都需要所有機器完成各自的計算,那么就會產生短板效應:所有機器都要等待最慢的那一台機器。因此設計並行算法應該優先考慮可以異步的算法。

在線算法。傳統的機器學習算法通常每一輪用全部的數據來更新模型,而在線算法有所不同,每次獲取少量數據來更新模型。這樣做的好處是內存消耗大大減小,而且每一輪的計算量也很小。隨機優化是在線算法的一種變體。與在線算法思想相同,雖然已經獲取全部數據,但隨機優化每一輪迭代只隨機抽取少量數據,用抽取的數據來更新模型。隨機梯度下降、隨機對偶坐標下降等方法已經被廣泛用於求解各種機器學習的模型。NIPS 2014最新的一篇文章“Scalable Kernel Methods via Doubly Stochastic Gradients”利用隨機優化高效求解核方法,使得核方法可以用於大數據問題。在線算法(或隨機算法)通常比較適用於單機的計算環境,對計算資源要求較小,即使沒有強大的集群也可以用大數據來訓練機器學習的模型。

近似算法。很多機器學習問題,比如主元分析、矩陣補充、主題模型、核方法等,都需要求各種矩陣分解,而這些運算的時間和內存消耗通常正比於數據量的平方。如果不能高效求解矩陣運算,很多機器學習方法就無法用於大數據問題。矩陣分解通常是用數值迭代算法求解,每一輪迭代都需要將整個矩陣掃一輪,進行矩陣乘法等操作,然后更新分解出的矩陣。如果在集群上並行計算,每一台機器都需要很大的內存,而且每一輪迭代都需要巨大的通信量。因此矩陣分解並非很適合並行計算。目前處理大規模矩陣分解的最有效的方法就是隨機近似,即快速求出一個小矩陣,使得小矩陣盡量多的保留原矩陣的某種性質,然后對小矩陣進行矩陣分解等操作,最后用小矩陣的分解結果近似作為大矩陣的分解。乍看之下,這樣的隨機近似算法似乎很不靠譜,似乎與精確結果相差十萬八千里,然而,不論從理論誤差界還是實驗結果來看,這種隨機近似都是高度精確的。現在隨機投影、Nystrom方法等隨機近似算法已經成為處理大規模矩陣分解最有效的方法。

結語

在筆者看來,大數據下的機器學習並非是簡單地用大數據去訓練簡單的模型,而是真正地把機器學習方法的規模做大,讓復雜模型也能用在大數據上。大數據下的機器學習當今最熱門的研究方,不斷有新的算法可以使得各種機器學習方法做得更大。隨着大規模機器學習算法的發展,大數據將會被機器學習更好的利用。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com