小議機器學習平台
「好的平台才能體現人生的價值」
雖然Spark框架嘗試提供「通用」的大數據計算平台,其優勢是可滿足近乎80%的計算需求,但劣勢也正恰恰是無法滿足特定20%的計算場景,而當這20%的場景恰好又要支撐80%的業務價值產出時,則需要單獨優化了。
舉個例子,各互聯網巨頭的搜索、廣告和推薦系統,是各公司的主要利潤來源,如何保證演算法高效、穩定的運行並不斷提升優化,這已不是單一的演算法問題了,涉及更多的工程架構問題,需要搭建特定場景下的演算法平台,例如本文將討論的大規模可擴展的機器學習平台。
機器學習演算法並行化有兩個基本思路,分別是數據並行以及模型並行。
所謂數據並行,是指將數據拆為多份,每份數據單獨訓練,然後再將模型集成融合。該思路的優勢是簡單直接,並且不限於具體的機器學習演算法類型。但缺點也很明顯,獨立的訓練過程沒有考慮模型參數之間的相關性,當數據量不充足時可能導致各個弱分類器都弱,集成效果也不明顯。
所謂模型並行,則是將機器學習模型對應的不同任務分布在不同的機器上計算。直觀理解是TensorFlow的設計實現機制,將神經網路的計算任務分解為有向無環圖的形式,每個節點均可單獨在任意機器上計算,而邊決定了不同任務的依賴關係,相當於在集群上組成了一條並行生產的高效「流水線」。
然而,當在大規模數據場景下,上億的特徵對應的模型參數也可能上千萬,因此,如何高效的存儲模型參數並與不同計算節點高效通信成為了平台性能的瓶頸,由此,參數伺服器的思路運用而生。
簡單的,可以將模型參數統一存儲到高性能的KV資料庫中。但針對不同規模的問題場景和物理資源限制,還可能需要對模型參數進行拆分,或者對每個模型計算任務進行拆分。拆分意味著後續還要組合,並且如何減少不同節點的通信耗時也是需考慮的問題。
當然,不論何種並行方式,大規模系統平台本質上都是將一個單機功能系統轉變為一個分散式系統。分散式計算在帶來規模和效率提升的同時,也帶來了複雜性,時鐘同步、資源調度、存儲容錯等等工作都需要是額外的工作保證。
回到開頭,並非所有場景都需要獨立建設特定的技術平台,例如離線場景通過腳本和作業的方式控制即可;而小規模實時計算場景,通過Restful API或將模型封裝為PMML格式供後端服務調用等方式;再者還可以使用第三方開源平台如基於Spark的PredictionIO,或者付費購買第三方平台服務等。


※智能哲學:「學習機器」與「機器學習」 ——解讀圖靈思想中的人工智慧
※意想不到的盟友:改善隱私問題可以帶來表現更好的機器學習模型
TAG:機器學習 |