做者 | Serdar Yegulalp
編譯 | 夜風輕揚
在過去的一年裏,機器學習煊赫一時。機器學習的「忽然」降臨,並不單純由於廉價的雲環境和更強有力的GPU硬件。也由於開放源碼框架的爆炸式增加,這些框架將機器學習中最難的部分抽象出來,並將這項技術提供給更廣大範圍的開發者。
html
這裏有新鮮出爐的機器學習框架,既有初次露面的,也有從新修改過的。這些工具被大衆所注意,或是由於其出處,或是由於以新穎的簡單方法處理問題,或是解決了機器學習中的某個特定難題,或者是上述的全部緣由。
web
Apache Spark 廣爲人所知的是由於它是 Hadoop 家族的一員,可是這個內存數據處理框架倒是脫胎於 Hadoop 以外,也正在 Hadoop 生態系統之外爲本身得到了名聲。Hadoop 已經成爲可供使用的機器學習工具,這得益於其不斷增加的算法庫,這些算法能夠高速度應用於內存中的數據。
算法
早期版本的 Spark 加強了對 MLib 的支持,MLib 是主要面向數學和統計用戶的平臺,它容許 經過持久化管道特性將 Spark 機器學習工做掛起和恢復。2016 年發佈的 Spark2.0,對 Tungsten 高速內存管理系統和新的 DataFrames 流媒體API 進行了改進,這兩點都會提高機器學習應用的性能。
編程
H2O,如今已經發展到第三版,能夠提供經過普通開發環境(Python, Java, Scala, R)、大數據系統(Hadoop, Spark)以及數據源(HDFS, S3, SQL, NoSQL)訪問機器學習算法的途徑。H2O 是用於數據收集、模型構建以及服務預測的端對端解決方案。例如,能夠將模型導出爲 Java 代碼,這樣就能夠在不少平臺和環境中進行預測。
緩存
H2O 能夠做爲原生 Python 庫,或者是經過 Jupyter Notebook,或者是 R Studio中的 R 語言來工做。這個平臺也包含一個開源的、基於 web 的、在 H2O 中稱爲Flow 的環境,它支持在訓練過程當中與數據集進行交互,而不僅是在訓練前或者訓練後。
服務器
「深度學習」框架加強了重任務類型機器學習的功能,如天然語言處理和圖像識別。Singa 是一個 Apache 的孵化器項目,也是一個開源框架,做用是使在大規模數據集上訓練深度學習模型變得更簡單。
網絡
Singa 提供了一個簡單的編程模型,用於在機器羣集上訓練深度學習網絡,它支持不少普通類型的訓練工做:卷積神經網絡,受限玻爾茲曼機 以及循環神經網絡。 模型能夠同步訓練(一個接一個)或者也異步(一塊兒)訓練,也能夠容許在在 CPU 和 GPU 羣集上,很快也會支持 FPGA 。Singa 也經過 Apache Zookeeper 簡化了羣集的設置。
框架
深度學習框架 Caffe 開發時秉承的理念是「表達、速度和模塊化」,最初是源於2013 年的機器視覺項目,此後,Caffe 還獲得擴展吸取了其餘的應用,如語音和多媒體。
機器學習
由於速度放在優先位置 ,因此 Caffe 徹底用 C+ + 實現,而且支持 CUDA 加速,並且根據須要能夠在 CPU 和 GPU 處理間進行切換。分發內容包括免費的用於普通分類任務的開源參考模型,以及其餘由 Caffe 用戶社區創造和分享的模型。異步
一個新的由 Facebook 支持的 Caffe 迭代版本稱爲 Caffe2,如今正在開發過程當中,即將進行 1.0 發佈。其目標是爲了簡化分佈式訓練和移動部署,提供對於諸如 FPGA 等新類型硬件的支持,而且利用先進的如16位浮點數訓練的特性。
與微軟的 DMTK 很相似,Google TensorFlow 是一個機器學習框架,旨在跨多個節點進行擴展。 就像 Google 的 Kubernetes 同樣,它是是爲了解決 Google 內部的問題而設計的,Google 最終仍是把它做爲開源產品發佈出來。
TensorFlow 實現了所謂的數據流圖,其中的批量數據(「tensors」)能夠經過圖描述的一系列算法進行處理。系統中數據的移動稱爲「流」-其名也所以得來。這些圖能夠經過 C++ 或者 Python 實現而且能夠在 CPU 和 GPU 上進行處理。
TensorFlow 近來的升級提升了與 Python 的兼容性,改進了 GPU 操做,也爲TensorFlow 可以運行在更多種類的硬件上打開了方便之門,而且擴展了內置的分類和迴歸工具庫。
亞馬遜對雲服務的方法遵循一種模式:提供基本的內容,讓核心受衆關注,讓他們在上面構建應用,找出他們真正須要的內容,而後交付給他們。
亞馬遜在提供機器學習即服務-亞馬遜機器學習方面也是如此。該服務能夠鏈接到存儲在亞馬遜 S三、Redshift 或 RDS 上的數據,而且在這些數據上運行二進制分類、多級分類或者回歸以構建一個模型。可是,值得注意的是生成的模型不能導入或導出,而訓練模型的數據集不能超過 100GB。
可是,亞馬遜機器學習展示了機器學習的實用性,而不僅是奢侈品。對於那些想要更進一步,或者與亞馬遜雲保持不那麼緊密聯繫的人來講,亞馬遜的深度學習機器圖景包含了許多主要的深度學習框架,包括 Caffe二、CNTK、MXNet 和 TensorFlow。
考慮到執行機器學習所需的大量數據和計算能力,對於機器學習應用雲是一種理想環境。微軟已經爲 Azure 配備了本身的即付即用的機器學習服務 Azure ML Studio,提供了按月、按小時和免費的版本。(該公司的 HowOldRobot 項目就是利用這個系統創立的)你甚至不須要一個帳戶來就能夠試用這項服務;你能夠匿名登陸,無償使用 Azure ML Studio 最多8小時。
Azure ML Studio 容許用戶創立和訓練模型,而後把這些模型轉成被其餘服務所使用的 API。免費用戶的每一個帳號能夠試用多達 10GB 的模型數據,你也能夠鏈接本身的 Azure 存儲以得到更大的模型。有大範圍的算法可供使用,這要感謝微軟和第三方。
近來的改進包括經過 Azure 批處理服務、更好的部署管理控制和詳細的 web 服務使用統計,對訓練任務進行了批量管理。
在機器學習問題中投入更多的機器,會取得更好的效果-可是開發在大量計算機都能運行良好的機器學習應用倒是挺傷腦筋的事。
微軟的 DMTK (分佈式機器學習工具集)框架解決了在系統集羣中分佈多種機器學習任務的問題。
DMTK 被認爲是一個框架而不是一個徹底成熟、隨去隨用的解決方案,所以包含算法的數量是很小的。然而,你仍是會找到一些關鍵的機器學習庫,例如梯度加強框架(LightGBM),以及對於一些像 Torch 和 Theano 這樣深度學習框架的支持。
DMTK 的設計使用戶能夠利用有限的資源構建最大的羣集。例如,羣集中的每一個節點都會有本地緩存,從而減小了與中央服務器節點的通訊流量,該節點爲任務提供參數。
在發佈 DMTK 以後,微軟又推出了另外一款機器學習工具集,即計算網絡工具包,簡稱 CNTK。
CNTK 與 Google TensorFlow 相似,它容許用戶經過一個有向圖來建立神經網絡。微軟也認爲 CNTK 能夠與諸如 Caffe、Theano 和 Torch 這樣的項目相媲美,此外 CNTK 還能經過利用多 CPU 和 GPU 進行並行處理而得到更快的速度。微軟聲稱在 Azure 上的 GPU 羣集上運行 CNTK,能夠將爲 Cortana 的語音識別訓練速度提升一個數量級。
最新版的 CNTK 2.0 經過提升精確性提升了 TensorFlow 的熱度,添加了一個 Java API,用於 Spark 兼容性,並支持kera框架(一般用於 TensorFlow)的代碼。
在 Spark 佔據主流地位以前好久,Mahout 就已經開發出來,用於在 Hadoop 上進行可擴展機器學習。但通過一段長時間的相對沉默以後,Mahout 又從新煥發了活力,例如一個用於數學的新環境,稱爲 Samsara,容許多種算法能夠跨越分佈式 Spark 羣集上運行。而且支持 CPU 和 GPU 運行。
Mahout 框架長期以來一直與 Hadoop 綁定,但它的許多算法也能夠在 Hadoop 以外運行。這對於那些最終遷移到 Hadoop 的獨立應用或者是從 Hadoop 中剝離出來成爲單獨的應用都頗有用。
Veles(https://velesnet.ml/)是一個用於深度學習應用的分佈式平臺,就像 TensorFlow 和 DMTK 同樣,它是用 C++ 編寫的,儘管它使用 Python 來執行節點之間的自動化和協調。在被傳輸進羣集以前,要對數據集分析而且進行自動的歸一化,而後調用 REST API 來即刻使用已訓練的模型(假定你的硬件知足這項任務的須要) 。
Veles 不只僅是使用 Python 做爲粘合代碼,由於基於 Python 的 Jupyter Notebook 能夠用來可視化和發佈由一個 Veles 集羣產生的結果。Samsung 但願,經過將 Veles 開源將會刺激進一步的開發,做爲通往 Windows 和 MacOS 的途徑。
做爲一個基於 C++ 的機器學習庫,mlpack 最初產生於 2011 年,按照庫的創立者想法,設計 mlpack 是爲了「可擴展性,速度和易於使用。mlpack 既能夠經過由若干行命令行可執行程序組成的「黑盒」進行操做,也能夠利用 C++ API 來完成複雜的工做。
mlpack 的第二版包含了許多新的算法,以及現有算法的重構,以提升它們的速度或使它們瘦身。例如,它捨棄了 Boost 庫的隨機數生成器,轉而採用 C++ 11 的原生隨機數功能。
mlpack 的一個痼疾是缺乏對於 C++ 覺得語言的支持。這就意味着其餘語言的用戶須要第三方庫的支持,如這樣的一個 Pyhton 庫。還有完成了一些工做來增長對 MATLAB 的支持,可是像 mlpack 這樣的項目,在機器學習的主要環境中直接發揮做用時,每每會得到更大的應用。
Nervana,一家創建本身的深度學習硬件和軟件平臺的公司(如今是英特爾的一部分),已經提供了一個名爲「Neon」的深度學習的框架,它是一個開源項目。Neon使用可插拔的模塊,以實如今 CPU、GPU 或者 Nervana 本身開發的芯片上完成繁重的任務。
Neon 主要是用 Python 編寫,也有一部分是用 C++ 和彙編以提升速度。這使得該框架能夠爲使用 Python 或者其餘任何與 Python 綁定框架進行數據科學工做的人所用。
許多標準的深度學習模型,如 LSTM、AlexNet 和 GoogLeNet,均可以做爲 Neon 的預訓練模型。最新版本 Neon 2.0,增長了英特爾數學內核庫來提升 CPU 的性能。
另外一個相對近期的產品——Marvin 神經網絡框架,是普林斯頓視覺集團的產物。Marvin「生來就是被黑的」,正如其建立者在該項目文檔中解釋的那樣,該項目只依賴於一些用 C++ 編寫的文件和 CUDA GPU 框架。雖然該項目的代碼不多,可是仍是提供了大量的預訓練模型,這些模型能夠像項目自己代碼同樣,可以在合適的場合複用或者根據用戶的須要共享。
原文連接:
https://www.infoworld.com/article/3026262/machine-learning/13-frameworks-for-mastering-machine-learning.html#slide15