作者 | Serdar Yegulalp
編譯 | 夜風輕揚
在過去的一年裡,機器學習炙手可熱。機器學習的“突然”降臨,並不單純因為廉價的雲環境和更強有力的GPU硬體。也因為開放原始碼框架的爆炸式增長,這些框架將機器學習中最難的部分抽象出來,並將這項技術提供給更廣大範圍的開發者。
這裡有新鮮出爐的機器學習框架,既有初次露面的,也有重新修改過的。這些工具被大眾所注意,或是因為其出處,或是因為以新穎的簡單方法處理問題,或是解決了機器學習中的某個特定難題,或者是上述的所有原因。
Apache Spark MLlib
Apache Spark 廣為人所知的是因為它是 Hadoop 家族的一員,但是這個記憶體資料處理框架卻是脫胎於 Hadoop 之外,也正在 Hadoop 生態系統以外為自己獲得了名聲。Hadoop 已經成為可供使用的機器學習工具,這得益於其不斷增長的演算法庫,這些演算法可以高速度應用於記憶體中的資料。
早期版本的 Spark 增強了對 MLib 的支援,MLib 是主要面向數學和統計使用者的平臺,它允許 通過持久化管道特性將 Spark 機器學習工作掛起和恢復。2016 年釋出的 Spark2.0,對 Tungsten 高速記憶體管理系統和新的 DataFrames 流媒體API 進行了改進,這兩點都會提升機器學習應用的效能。
H2O
H2O,現在已經發展到第三版,可以提供通過普通開發環境(Python, Java, Scala, R)、大資料系統(Hadoop, Spark)以及資料來源(HDFS, S3, SQL, NoSQL)訪問機器學習演算法的途徑。H2O 是用於資料收集、模型構建以及服務預測的端對端解決方案。例如,可以將模型匯出為 Java 程式碼,這樣就可以在很多平臺和環境中進行預測。
H2O 可以作為原生 Python 庫,或者是通過 Jupyter Notebook,或者是 R Studio中的 R 語言來工作。這個平臺也包含一個開源的、基於 web 的、在 H2O 中稱為Flow 的環境,它支援在訓練過程中與資料集進行互動,而不只是在訓練前或者訓練後。
Apache Singa
“深度學習”框架增強了重任務型別機器學習的功能,如自然語言處理和影像識別。Singa 是一個 Apache 的孵化器專案,也是一個開源框架,作用是使在大規模資料集上訓練深度學習模型變得更簡單。
Singa 提供了一個簡單的程式設計模型,用於在機器群集上訓練深度學習網路,它支援很多普通型別的訓練工作:卷積神經網路,受限玻爾茲曼機 以及迴圈神經網路。 模型可以同步訓練(一個接一個)或者也非同步(一起)訓練,也可以允許在在 CPU 和 GPU 群集上,很快也會支援 FPGA 。Singa 也通過 Apache Zookeeper 簡化了群集的設定。
Caffe2
深度學習框架 Caffe 開發時秉承的理念是“表達、速度和模組化”,最初是源於2013 年的機器視覺專案,此後,Caffe 還得到擴充套件吸收了其他的應用,如語音和多媒體。
因為速度放在優先位置 ,所以 Caffe 完全用 C+ + 實現,並且支援 CUDA 加速,而且根據需要可以在 CPU 和 GPU 處理間進行切換。分發內容包括免費的用於普通分類任務的開源參考模型,以及其他由 Caffe 使用者社群創造和分享的模型。
一個新的由 Facebook 支援的 Caffe 迭代版本稱為 Caffe2,現在正在開發過程中,即將進行 1.0 釋出。其目標是為了簡化分散式訓練和移動部署,提供對於諸如 FPGA 等新型別硬體的支援,並且利用先進的如16位浮點數訓練的特性。
TensorFlow
與微軟的 DMTK 很類似,Google TensorFlow 是一個機器學習框架,旨在跨多個節點進行擴充套件。 就像 Google 的 Kubernetes 一樣,它是是為了解決 Google 內部的問題而設計的,Google 最終還是把它作為開源產品釋出出來。
TensorFlow 實現了所謂的資料流圖,其中的批量資料(“tensors”)可以通過圖描述的一系列演算法進行處理。系統中資料的移動稱為“流”-其名也因此得來。這些圖可以通過 C++ 或者 Python 實現並且可以在 CPU 和 GPU 上進行處理。
TensorFlow 近來的升級提高了與 Python 的相容性,改進了 GPU 操作,也為TensorFlow 能夠執行在更多種類的硬體上開啟了方便之門,並且擴充套件了內建的分類和迴歸工具庫。
亞馬遜的機器學習
亞馬遜對雲服務的方法遵循一種模式:提供基本的內容,讓核心受眾關注,讓他們在上面構建應用,找出他們真正需要的內容,然後交付給他們。
亞馬遜在提供機器學習即服務-亞馬遜機器學習方面也是如此。該服務可以連線到儲存在亞馬遜 S3、Redshift 或 RDS 上的資料,並且在這些資料上執行二進位制分類、多級分類或者回歸以構建一個模型。但是,值得注意的是生成的模型不能匯入或匯出,而訓練模型的資料集不能超過 100GB。
但是,亞馬遜機器學習展現了機器學習的實用性,而不只是奢侈品。對於那些想要更進一步,或者與亞馬遜雲保持不那麼緊密聯絡的人來說,亞馬遜的深度學習機器圖景包含了許多主要的深度學習框架,包括 Caffe2、CNTK、MXNet 和 TensorFlow。
微軟的 Azure ML Studio
考慮到執行機器學習所需的大量資料和計算能力,對於機器學習應用雲是一種理想環境。微軟已經為 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)的程式碼。
Apache Mahout
在 Spark 佔據主流地位之前很久,Mahout 就已經開發出來,用於在 Hadoop 上進行可擴充套件機器學習。但經過一段長時間的相對沉默之後,Mahout 又重新煥發了活力,例如一個用於數學的新環境,稱為 Samsara,允許多種演算法可以跨越分散式 Spark 群集上執行。並且支援 CPU 和 GPU 執行。
Mahout 框架長期以來一直與 Hadoop 繫結,但它的許多演算法也可以在 Hadoop 之外執行。這對於那些最終遷移到 Hadoop 的獨立應用或者是從 Hadoop 中剝離出來成為單獨的應用都很有用。
Veles (Samsung)
Veles(https://velesnet.ml/)是一個用於深度學習應用的分散式平臺,就像 TensorFlow 和 DMTK 一樣,它是用 C++ 編寫的,儘管它使用 Python 來執行節點之間的自動化和協調。在被傳輸進群集之前,要對資料集分析並且進行自動的歸一化,然後呼叫 REST API 來即刻使用已訓練的模型(假定你的硬體滿足這項任務的需要) 。
Veles 不僅僅是使用 Python 作為粘合程式碼,因為基於 Python 的 Jupyter Notebook 可以用來視覺化和釋出由一個 Veles 叢集產生的結果。Samsung 希望,通過將 Veles 開源將會刺激進一步的開發,作為通往 Windows 和 MacOS 的途徑。
mlpack 2
作為一個基於 C++ 的機器學習庫,mlpack 最初產生於 2011 年,按照庫的創立者想法,設計 mlpack 是為了“可擴充套件性,速度和易於使用。mlpack 既可以通過由若干行命令列可執行程式組成的“黑盒”進行操作,也可以利用 C++ API 來完成複雜的工作。
mlpack 的第二版包含了許多新的演算法,以及現有演算法的重構,以提高它們的速度或使它們瘦身。例如,它捨棄了 Boost 庫的隨機數生成器,轉而採用 C++ 11 的原生隨機數功能。
mlpack 的一個痼疾是缺少對於 C++ 以為語言的支援。這就意味著其他語言的使用者需要第三方庫的支援,如這樣的一個 Pyhton 庫。還有完成了一些工作來增加對 MATLAB 的支援,但是像 mlpack 這樣的專案,在機器學習的主要環境中直接發揮作用時,往往會獲得更大的應用。
Neon
Nervana,一家建立自己的深度學習硬體和軟體平臺的公司(現在是英特爾的一部分),已經提供了一個名為“Neon”的深度學習的框架,它是一個開源專案。Neon使用可插拔的模組,以實現在 CPU、GPU 或者 Nervana 自己開發的晶片上完成繁重的任務。
Neon 主要是用 Python 編寫,也有一部分是用 C++ 和彙編以提高速度。這使得該框架可以為使用 Python 或者其他任何與 Python 繫結框架進行資料科學工作的人所用。
許多標準的深度學習模型,如 LSTM、AlexNet 和 GoogLeNet,都可以作為 Neon 的預訓練模型。最新版本 Neon 2.0,增加了英特爾數學核心庫來提高 CPU 的效能。
Marvin
另一個相對近期的產品——Marvin 神經網路框架,是普林斯頓視覺集團的產物。Marvin“生來就是被黑的”,正如其建立者在該專案文件中解釋的那樣,該專案只依賴於一些用 C++ 編寫的檔案和 CUDA GPU 框架。雖然該專案的程式碼很少,但是還是提供了大量的預訓練模型,這些模型可以像專案本身程式碼一樣,能夠在合適的場合複用或者根據使用者的需要共享。
原文連結:
https://www.infoworld.com/article/3026262/machine-learning/13-frameworks-for-mastering-machine-learning.html#slide15