專欄系列文章
機器學習:新手入門概覽(一): juejin.im/post/5a5620…
[譯]什麼是蒙特卡洛樹搜尋: juejin.im/post/59f16e…
論深度學習的侷限性
juejin.im/post/597835…
所需工具
根據具體場景的需要(科研/工程),以及團隊規模大小,開發人員能力等問題,選擇合適的語言及框架和輔助工具來進行開發是十分必要的。這不但降低了開發難度,同時也提升了開發效率。
由於框架的快速發展,很多的標準及特性都在不斷地變化,而又很少有人能夠同時使用過多種框架進行開發,因此經過了大量資料收集之後,筆者對各類框架當前的特性進行了簡潔的概況與比較。若想獲得更加具體的描述,可以點選文章末尾的應用資料。
語言工具選擇
區別與優劣:
1.python:
- 完全開源免費
- 基於 python 的框架很多: TensorFlow(Google), PyTorch(Facebook), Caffe2(Facebook/UC Barkely), PaddlePaddle(Badiu), Keras, CNTK(Microsoft), Theano, MXNet(Amazon)
- 框架開源免費,樣例較多,易於部署,社群較為活躍
- 語言應用面廣泛,上手快
- 其它型別庫很多,易於一起使用
2.MATLAB:
- 商業軟體,收費較貴(永久MATLAB+NN工具包:¥22,500)
- 工具箱封裝的功能強大,功能較多
- 個別時候需要深入理解函式作用,學習時間可能更長
- 相對 python 的框架,使用者相對較少
- 可移植性相對 python 較弱
- 演算法、模擬研究上優勢較大,易於使用
3.Jupyter Notebook(IPython):
- 支援多語言:python, Julia, R, Scala
- 易於分享
- 互動式程式設計,可即時獲得結果
圖片引用來源: Jupyter Notebook 官網
4.C++:
- 計算速度高
- 維護及開發代價相對較高,屬於底層語言
- 在需要開發新的演算法等模組時,為必會語言
另外還有用於科學計算的語言 Julia, 用於大資料處理的 Scala,指令碼語言 lua 等其他用於資料處理,分析的語言及工具
框架優劣及比較
圖片引用來源:知乎/史丹佛cs231n課件
0.scikit-learn
開發團隊: GitHub 開源社群的貢獻者
簡介: 基於 python 的第三方庫,用於資料探勘與資料分析,簡單易用,以統計機器學習為主(深度學習相關框架參考之後的各個框架)。基於 NumPy, SciPy, matplotlib, 免費開源。
開源協議: BSD 2.0
1.Tensorflow
開發團隊: Google
簡介: 是 Google 的第二代人工智慧學習系統,基於 Theano 框架進行了更多的優化與改進
開源協議: Apache 2.0
優勢:
- Tensorflow 社群活躍,易於找到相關的模型及問題,整體框架的各類配套工具較為成熟
- Tensorflow 生產部署的方案成熟,從手機終端到伺服器都比其他框架更加易於部署
- Tensorflow 主要向 python 提供 API 開發,同時也向 Java, Go, C++, Haskell, Rust 提供。
- Tensorflow 本身之上也有 Keras 等高層框架,可以高效開發,以及之後 Tensorflow 帶來的部署優勢
- 根據 cs231n 中的總結, Tensorflow 在處理 RNN 及大規模並行深度學習時的能力非常強大
- 有 Tensorflow Serving 可以直接載入模型來提供 RPC 介面服務
- 在完成了定義流程圖後,可以進行自動推導,節省了很多的工作
劣勢:
- Tensorflow 上手難度較大,實際上是一門新的語言,很多開發者反映寫起來很麻煩
- 不適合做快速的想法驗證
- 各論文目前所使用的框架中 Tensorflow 比例仍相對較低
- 有很多地方屬於黑箱操作,難以理解處理的原理,除錯較難
- 功能擴張速度過快,導致現在實際的訓練速度很不理想, arxiv 中的一篇論文顯示(引用資料[2])效能表現在各個框架中最差
2.PyTorch
開發團隊: Facebook 等企業與高校
開源協議: BSD 2.0
優勢:
- 相對 Tensorflow 更加易於上手,程式碼為 python 風格,而非自己創立的語言,開發效率較高
- 中間過程更加透明,易於 debug 除錯及學習
- 對大部分人來說(除專家級),由於能力問題,寫出的程式碼在訓練時要比 Tensorflow 的快
- 更適合小型團隊的使用與開發
- 框架本身的原始碼相對清晰,可讀性強,比 Tensorflow 要更加易懂
劣勢:
- 大部分情況下,速度能力是不如 TensorFlow 的,如 AlexNet 等經典的神經網路,詳情見引用資料[2] 的論文中關於各種模式下,各個框架的表現能力。
- 仍在 Beta 測試階段,底層及框架出現 bug 的概率比 TensorFlow 更高
- 社群使用者除了從原 Torch 遷移過來的人以外,不如 TensorFlow 的使用者多
3. Caffe2
開發團隊: Facebook
開源協議: Apache 2.0
簡介: Facebook 開發 Caffe2 的目的在於產品應用,而 PyTorch 一般用於研究與想法的實現。同時,Caffe2 的思路更接近於 TensorFlow,與 PyTorch 不同,使用的是靜態圖,而 Torch 使用的是動態圖,因此靈活性上不如 Torch,更加專注於速度表現。
優勢:
- 速度 快
- 相比 Caffe 只支援C++, 支援 C++ 與 python API
- 在移動端部署做的很好,可能優於 TensorFlow,但暫無資料證明。不過在工業應用以及分散式訓練中強於 PyTorch,更專注於移動端的表現。
- 可以將原 Caffe 的模型轉換至 Caffe2
- 與 PyTorch 同屬於 Facebook,之間正在建立溝通協議,共享後端。
- 可以簡單地呼叫預先訓練好的 Model Zoo 模型
劣勢:
- 社群不如 TensorFlow 成熟
- 訓練的靈活程度不如 PyTorch
4. MXNet
開發團隊: 陳天奇等人, 現獲 Amazon 投資及支援
優勢:
- 支援語言多:python, R, MATLAB, Julia, Go, Scala, Javascript
- 專注於深度學習核心,優化好,訓練速度快。由於 MXNet 一直專注於效能的優化,而非如 TensorFlow 一樣做功能上的擴充套件,因此在表現上是佔優勢的。
- 亞馬遜的雲服務支援,如今亞馬遜的 AWS 雲端計算服務已經預設 MXNet 作為學習框架
- MXNet 的執行步驟相對 TensorFlow 更加地靈活
劣勢:
- 社群活躍度較低
- 對新手友好程度一般,文件完善程度不夠(但在獲得亞馬遜支援後在改善)
5. PaddlePaddle
開發團隊: Baidu
開源協議: Apache 2.0
優勢:
- 簡單易用,尤其是對於已有的模型,只需改變引數和資料即可
- 中文文件非常友好
- 主程式原始碼使用 C++ 編寫,相對易於閱讀
- 似乎尤其適合處理 NLP(自然語言處理) 相關的問題
劣勢:
- 文件數量較少
- 不適合開發新的演算法或功能,因為二次開發需要從底層 C++ 寫起
6. Keras
開發團隊: GitHub/Keras 團隊
開源協議: MIT
優勢:
- 上手快,新手友好,簡單模型開發效率高
- 可以靈活選擇底層框架:目前支援 TensorFlow, CNTK, Theano
- 同時具有擴充套件性與易用性,可以自己增加所需的演算法等模組
- 以層(layer)作為概念進行封裝,易懂
劣勢:
- 效能表現不差,但並非優勢
- 靈活性的前提是需要熟悉 TensorFlow 或其它的一門底層語言,同時需要閱讀一定量的 Keras 原始碼,因此 靈活性的實現有前置代價
- 僅支援 python
7. CNTK
開發團隊: Microsoft
開源協議: C++ 部分採用 Boost Software License,資料集部分另有其它協議
簡介: 僅從 GitHub 的 Star 和 PR 上來看,此專案的活躍程度並不低,只不過國內的知名程度與使用率相比於其它框架要小很多
優勢:
- 各類比較的效能中,處於中等偏上位置,往往僅次於 MXNet
劣勢:
- 國內的使用人數少,相關資料少
- 新手不友好,不易於安裝,建議使用 Docker 進行隔離安裝
8. deeplearning4j
開發團隊: Eclipse
開源協議: Apache 2.0
優勢:
- 以 Java 為開發語言,享受Java 虛擬機器帶來的跨平臺優勢
- 有一些不錯的例子以供學習
- 使用 cuDnn 時速度與其他框架
- 支援 Scala
劣勢:
- 在訓練時記憶體的垃圾回收(GC)導致效能會出現下降,作者正在改進中
- 國內使用人數較少
- 文件相對簡單
引用資料
- 2017年1月18日Facebook發行的PyTorch相比TensorFlow、MXNet有何優勢? https://www.zhihu.com/question/54914188
- S.Shi et al., Benchmarking State-of-the-Art Deep Learning Software Tools, https://arxiv.org/pdf/1608.07249v7.pdf
- Stanford University, cs231n :Convolutional Neural Networks for Visual Recognition, http://cs231n.stanford.edu/
- 杜客等, cs231n 筆記中文譯稿, https://zhuanlan.zhihu.com/p/21930884
- 雷鋒網, 框架對比,https://www.leiphone.com/news/201709/3T4pwc5UBLtRuKvx.html
- 知乎, Keras,Theano,pytorch,caffe2 哪個更好一些,應該怎麼嘗試學習?, https://www.zhihu.com/question/59274399
- 知乎, 如何評價TensorFlow和其它深度學習系統,https://weibo.com/p/1001603907610737775666
- 知乎, 如何評價Caffe2,https://www.zhihu.com/question/58698158/answer/158139047
- GitHub, chenrudan, TensorFlow、MXNet、PaddlePaddle三個開源庫對比, http://chenrudan.github.io/blog/2017/02/25/comparetfmxpd.html
- CSDN, mxnet 使用體驗, http://blog.csdn.net/u013713010/article/details/71635814
- 機器之心, 深度 | 亞馬遜挑中MXNet後,機器之心和他們聊了聊, http://tech.huanqiu.com/news/2016-11/9726439.html
- 知乎,Deeplearning4j執行效率怎麼樣?Mnist案例執行時間大約多少?,https://www.zhihu.com/question/49509850
- 簡書, 魚心DrFish, 左手程式設計師,右手作家:你必須會的Jupyter Notebook,https://www.jianshu.com/p/86117613b7a6