機器學習入門(二):工具與框架的選擇

Cup發表於2018-01-11

專欄系列文章

機器學習:新手入門概覽(一): juejin.im/post/5a5620…
[譯]什麼是蒙特卡洛樹搜尋: juejin.im/post/59f16e…
論深度學習的侷限性
juejin.im/post/597835…

所需工具

根據具體場景的需要(科研/工程),以及團隊規模大小,開發人員能力等問題,選擇合適的語言及框架和輔助工具來進行開發是十分必要的。這不但降低了開發難度,同時也提升了開發效率。
由於框架的快速發展,很多的標準及特性都在不斷地變化,而又很少有人能夠同時使用過多種框架進行開發,因此經過了大量資料收集之後,筆者對各類框架當前的特性進行了簡潔的概況與比較。若想獲得更加具體的描述,可以點選文章末尾的應用資料。

語言工具選擇

區別與優劣:
1.python:

  1. 完全開源免費
  2. 基於 python 的框架很多: TensorFlow(Google), PyTorch(Facebook), Caffe2(Facebook/UC Barkely), PaddlePaddle(Badiu), Keras, CNTK(Microsoft), Theano, MXNet(Amazon)
  3. 框架開源免費,樣例較多,易於部署,社群較為活躍
  4. 語言應用面廣泛,上手快
  5. 其它型別庫很多,易於一起使用

2.MATLAB:

  1. 商業軟體,收費較貴(永久MATLAB+NN工具包:¥22,500)
  2. 工具箱封裝的功能強大,功能較多
  3. 個別時候需要深入理解函式作用,學習時間可能更長
  4. 相對 python 的框架,使用者相對較少
  5. 可移植性相對 python 較弱
  6. 演算法、模擬研究上優勢較大,易於使用

3.Jupyter Notebook(IPython):

  1. 支援多語言:python, Julia, R, Scala
  2. 易於分享
  3. 互動式程式設計,可即時獲得結果

圖片引用來源: Jupyter Notebook 官網

機器學習入門(二):工具與框架的選擇

4.C++:

  1. 計算速度高
  2. 維護及開發代價相對較高,屬於底層語言
  3. 在需要開發新的演算法等模組時,為必會語言

另外還有用於科學計算的語言 Julia, 用於大資料處理的 Scala,指令碼語言 lua 等其他用於資料處理,分析的語言及工具

框架優劣及比較

圖片引用來源:知乎/史丹佛cs231n課件

機器學習入門(二):工具與框架的選擇

0.scikit-learn

開發團隊: GitHub 開源社群的貢獻者

簡介: 基於 python 的第三方庫,用於資料探勘與資料分析,簡單易用,以統計機器學習為主(深度學習相關框架參考之後的各個框架)。基於 NumPy, SciPy, matplotlib, 免費開源。

開源協議: BSD 2.0

1.Tensorflow

開發團隊: Google

簡介: 是 Google 的第二代人工智慧學習系統,基於 Theano 框架進行了更多的優化與改進

開源協議: Apache 2.0

優勢:

  1. Tensorflow 社群活躍,易於找到相關的模型及問題,整體框架的各類配套工具較為成熟
  2. Tensorflow 生產部署的方案成熟,從手機終端到伺服器都比其他框架更加易於部署
  3. Tensorflow 主要向 python 提供 API 開發,同時也向 Java, Go, C++, Haskell, Rust 提供。
  4. Tensorflow 本身之上也有 Keras 等高層框架,可以高效開發,以及之後 Tensorflow 帶來的部署優勢
  5. 根據 cs231n 中的總結, Tensorflow 在處理 RNN 及大規模並行深度學習時的能力非常強大
  6. 有 Tensorflow Serving 可以直接載入模型來提供 RPC 介面服務
  7. 在完成了定義流程圖後,可以進行自動推導,節省了很多的工作

劣勢:

  1. Tensorflow 上手難度較大,實際上是一門新的語言,很多開發者反映寫起來很麻煩
  2. 不適合做快速的想法驗證
  3. 各論文目前所使用的框架中 Tensorflow 比例仍相對較低
  4. 有很多地方屬於黑箱操作,難以理解處理的原理,除錯較難
  5. 功能擴張速度過快,導致現在實際的訓練速度很不理想, arxiv 中的一篇論文顯示(引用資料[2])效能表現在各個框架中最差

2.PyTorch

開發團隊: Facebook 等企業與高校

開源協議: BSD 2.0

優勢:

  1. 相對 Tensorflow 更加易於上手,程式碼為 python 風格,而非自己創立的語言,開發效率較高
  2. 中間過程更加透明,易於 debug 除錯及學習
  3. 對大部分人來說(除專家級),由於能力問題,寫出的程式碼在訓練時要比 Tensorflow 的快
  4. 更適合小型團隊的使用與開發
  5. 框架本身的原始碼相對清晰,可讀性強,比 Tensorflow 要更加易懂

劣勢:

  1. 大部分情況下,速度能力是不如 TensorFlow 的,如 AlexNet 等經典的神經網路,詳情見引用資料[2] 的論文中關於各種模式下,各個框架的表現能力。
  2. 仍在 Beta 測試階段,底層及框架出現 bug 的概率比 TensorFlow 更高
  3. 社群使用者除了從原 Torch 遷移過來的人以外,不如 TensorFlow 的使用者多

3. Caffe2

開發團隊: Facebook

開源協議: Apache 2.0

簡介: Facebook 開發 Caffe2 的目的在於產品應用,而 PyTorch 一般用於研究與想法的實現。同時,Caffe2 的思路更接近於 TensorFlow,與 PyTorch 不同,使用的是靜態圖,而 Torch 使用的是動態圖,因此靈活性上不如 Torch,更加專注於速度表現。

優勢:

  1. 速度
  2. 相比 Caffe 只支援C++, 支援 C++ 與 python API
  3. 在移動端部署做的很好,可能優於 TensorFlow,但暫無資料證明。不過在工業應用以及分散式訓練中強於 PyTorch,更專注於移動端的表現。
  4. 可以將原 Caffe 的模型轉換至 Caffe2
  5. 與 PyTorch 同屬於 Facebook,之間正在建立溝通協議,共享後端
  6. 可以簡單地呼叫預先訓練好的 Model Zoo 模型

劣勢:

  1. 社群不如 TensorFlow 成熟
  2. 訓練的靈活程度不如 PyTorch

4. MXNet

開發團隊: 陳天奇等人, 現獲 Amazon 投資及支援

優勢:

  1. 支援語言多:python, R, MATLAB, Julia, Go, Scala, Javascript
  2. 專注於深度學習核心,優化好,訓練速度快。由於 MXNet 一直專注於效能的優化,而非如 TensorFlow 一樣做功能上的擴充套件,因此在表現上是佔優勢的。
  3. 亞馬遜的雲服務支援,如今亞馬遜的 AWS 雲端計算服務已經預設 MXNet 作為學習框架
  4. MXNet 的執行步驟相對 TensorFlow 更加地靈活

劣勢:

  1. 社群活躍度較低
  2. 對新手友好程度一般,文件完善程度不夠(但在獲得亞馬遜支援後在改善)

5. PaddlePaddle

開發團隊: Baidu

開源協議: Apache 2.0

優勢:

  1. 簡單易用,尤其是對於已有的模型,只需改變引數和資料即可
  2. 中文文件非常友好
  3. 主程式原始碼使用 C++ 編寫,相對易於閱讀
  4. 似乎尤其適合處理 NLP(自然語言處理) 相關的問題

劣勢:

  1. 文件數量較少
  2. 不適合開發新的演算法或功能,因為二次開發需要從底層 C++ 寫起

6. Keras

開發團隊: GitHub/Keras 團隊

開源協議: MIT

優勢:

  1. 上手快,新手友好,簡單模型開發效率高
  2. 可以靈活選擇底層框架:目前支援 TensorFlow, CNTK, Theano
  3. 同時具有擴充套件性與易用性,可以自己增加所需的演算法等模組
  4. 以層(layer)作為概念進行封裝,易懂

劣勢:

  1. 效能表現不差,但並非優勢
  2. 靈活性的前提是需要熟悉 TensorFlow 或其它的一門底層語言,同時需要閱讀一定量的 Keras 原始碼,因此 靈活性的實現有前置代價
  3. 僅支援 python

7. CNTK

開發團隊: Microsoft

開源協議: C++ 部分採用 Boost Software License,資料集部分另有其它協議

簡介: 僅從 GitHub 的 Star 和 PR 上來看,此專案的活躍程度並不低,只不過國內的知名程度與使用率相比於其它框架要小很多

優勢:

  1. 各類比較的效能中,處於中等偏上位置,往往僅次於 MXNet

劣勢:

  1. 國內的使用人數少,相關資料少
  2. 新手不友好,不易於安裝,建議使用 Docker 進行隔離安裝

8. deeplearning4j

開發團隊: Eclipse

開源協議: Apache 2.0

優勢:

  1. 以 Java 為開發語言,享受Java 虛擬機器帶來的跨平臺優勢
  2. 有一些不錯的例子以供學習
  3. 使用 cuDnn 時速度與其他框架
  4. 支援 Scala

劣勢:

  1. 在訓練時記憶體的垃圾回收(GC)導致效能會出現下降,作者正在改進中
  2. 國內使用人數較少
  3. 文件相對簡單

引用資料

  1. 2017年1月18日Facebook發行的PyTorch相比TensorFlow、MXNet有何優勢? https://www.zhihu.com/question/54914188
  2. S.Shi et al., Benchmarking State-of-the-Art Deep Learning Software Tools, https://arxiv.org/pdf/1608.07249v7.pdf
  3. Stanford University, cs231n :Convolutional Neural Networks for Visual Recognition, http://cs231n.stanford.edu/
  4. 杜客等, cs231n 筆記中文譯稿, https://zhuanlan.zhihu.com/p/21930884
  5. 雷鋒網, 框架對比,https://www.leiphone.com/news/201709/3T4pwc5UBLtRuKvx.html
  6. 知乎, Keras,Theano,pytorch,caffe2 哪個更好一些,應該怎麼嘗試學習?, https://www.zhihu.com/question/59274399
  7. 知乎, 如何評價TensorFlow和其它深度學習系統,https://weibo.com/p/1001603907610737775666
  8. 知乎, 如何評價Caffe2,https://www.zhihu.com/question/58698158/answer/158139047
  9. GitHub, chenrudan, TensorFlow、MXNet、PaddlePaddle三個開源庫對比, http://chenrudan.github.io/blog/2017/02/25/comparetfmxpd.html
  10. CSDN, mxnet 使用體驗, http://blog.csdn.net/u013713010/article/details/71635814
  11. 機器之心, 深度 | 亞馬遜挑中MXNet後,機器之心和他們聊了聊, http://tech.huanqiu.com/news/2016-11/9726439.html
  12. 知乎,Deeplearning4j執行效率怎麼樣?Mnist案例執行時間大約多少?,https://www.zhihu.com/question/49509850
  13. 簡書, 魚心DrFish, 左手程式設計師,右手作家:你必須會的Jupyter Notebook,https://www.jianshu.com/p/86117613b7a6

相關文章