天天看點

深度學習架構(轉自知乎)

作者:ZOMI

連結:https://www.zhihu.com/question/53465308/answer/289859169

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

吃貨的我來舉個栗子。深度學習就像菜單,資料就是肉和青菜,深度學習架構就是炒菜的鍋和鏟。誰說炒一碟紅燒洋芋一定要用caffe出品的鍋,誰說炒一碟香煎蓮藕一定要用google出品的鏟?我們隻要學會菜單,研究一下鍋和鏟的屬性并多加實踐練習,就可以炒出一碟香噴噴的菜。

既然提到深度學習的架構,那麼我們現在可以來分析一下深度學習的架構:

在深度學習領域的五大巨頭裡,它們都各自力挺一種深度學習架構:像谷歌有自家的TensorFlow、Facebook有Torch、百度有Paddle Paddle、微軟有CNTK、而亞馬遜的AWS則有MXNet,現在還有支援HADOOP的NL4J深度學習架構。

<img src="https://pic1.zhimg.com/50/v2-4ec760be04f2ac6aace2c739d1c11aa6_hd.jpg" data-caption="" data-size="normal" data-rawwidth="890" data-rawheight="283" class="origin_image zh-lightbox-thumb" width="890" data-original="https://pic1.zhimg.com/v2-4ec760be04f2ac6aace2c739d1c11aa6_r.jpg">

深度學習架構(轉自知乎)

表1.1 是五大主流深度學習架構概要對比表。每種架構都有其優缺點,選擇的時候更加需要根據自身業務的實際需求。例如需要用到對時間序列分析的,那麼就會使用循環神經網絡RNN,而Caffe、MXNet就是對圖像卷積處理非常友善而缺乏循環神經網絡,Google的TensorFlow則是支援其他機器學習算法,還支援增強學習Reinforcement learning算法。常言道,欲先攻必先利器,在正式進入深度學習之前,讓我們一起來了解一下各大主流深度學習架構之間的關系與其優缺點。

<img src="https://pic1.zhimg.com/50/v2-44ef48565954ca16171fa8756b31739e_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1380" data-rawheight="438" class="origin_image zh-lightbox-thumb" width="1380" data-original="https://pic1.zhimg.com/v2-44ef48565954ca16171fa8756b31739e_r.jpg">

深度學習架構(轉自知乎)

1. Caffe 1.0

Caffe1.0 是第一個主流的工業級深度學習工具。在2013年底由UC Berkely的賈揚清基于C和C++開發的深度學習架構,其特點是具有非常出色的卷積神經網絡實作,尤其在13年至16年期間大部分與視覺有關的深度學習論文都采用了caffe架構。而到至今為止Caffe在計算機視覺領域依然是最流行的工具包。可是因為開發早和曆史遺留問題,其架構的缺點是不夠靈活、缺乏對遞歸網絡RNN和語言模組化的支援,是以Caffe不适用于文本、聲音或時間序列資料等其他類型的深度學習應用。

2. TensorFlow 0.88

TensorFlow基于python編寫,通過C/C++引擎加速,是Google開源的第二代深度學習架構。TensorFlow處理遞歸神經網RNN非常友好,并且内部實作使用了向量運算的符号圖方法,使用圖graph來表示計算任務,這樣使得新網絡的指定變得相當容易,支援快速開發。TensorFlow其用途不止于深度學習,還可以支援增強學習和其他算法,是以擴充性很好。缺點是目前TensorFlow還不支援“内聯(inline)”矩陣運算,必須要複制矩陣才能對其進行運算,複制龐大的矩陣會導緻系統運作效率降低,并占用部分記憶體。另外TensorFlow不提供商業支援,僅為研究者提供的一種新工具,是以公司如果要商業化需要考慮開源協定問題。

3. Torch

Torch由Facebook用Lua編寫的開源計算架構,支援機器學習算法。其具有有較好的靈活性和速度。實作并且優化了基本的計算單元,可以很簡單地在此基礎上實作自己的算法,不用浪費精力在計算優化上面。Facebook于2017年1月開放了Torch的Python API ― PyTorch源代碼,其支援動态計算圖,能處理長度可變的輸入和輸出,這尤其适用于循環神經網絡RNN的應用。缺點是接口為lua語言,需要時間去學習新的程式設計語言。

4. Theano

Theano是深度學習架構中的元老,使用Python編寫。Theano派生出了大量Python深度學習庫,最著名的包括Blocks和Keras。其最大特點是非常的靈活,适合做學術研究的實驗,且對遞歸網絡和語言模組化有較好的支援,缺點是速度較慢。

5. MXNet

MXNet主要由C/C++編寫,提供多種API的機器學習架構,面向R、Python和Julia等語言,目前已被亞馬遜雲服務作為其深度學習的底層架構。由于MXNet是16年新興的深度學習架構,是以大量借鑒了Caffe的優缺點。其最主要的特定是是分布式機器學習通用工具包DMLC 的重要組成部分,是以其分布式能力較強。MXNet還注重靈活性和效率,文檔也非常的詳細,同時強調提高記憶體使用的效率,甚至能在智能手機上運作諸如圖像識别等任務。但是其與Caffe一樣缺乏對循環神經網絡RNN的支援,相對比使用JAVA實作的NL4J在分布式方面沒有JAVA友善。

href="">6. Keras

Keras 是一個基于Theano和TensorFlow的深度學習庫,由于受到深度學習元老架構Torch的啟發,擁有較為直覺的API,有望成為未來開發神經網絡的标準Python API。而本書主要采用Keras作為主要代碼API,因為其具有簡潔的API接口,友善了解深度學習的原理與插入代碼片段。

<img src="https://pic1.zhimg.com/50/v2-d5e3d2f9ffd1d39a482b466ecd517778_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1356" data-rawheight="1080" class="origin_image zh-lightbox-thumb" width="1356" data-original="https://pic1.zhimg.com/v2-d5e3d2f9ffd1d39a482b466ecd517778_r.jpg">

深度學習架構(轉自知乎)

<img src="https://pic4.zhimg.com/50/v2-82db7e75420366f13b8ea034620cfec4_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1372" data-rawheight="262" class="origin_image zh-lightbox-thumb" width="1372" data-original="https://pic4.zhimg.com/v2-82db7e75420366f13b8ea034620cfec4_r.jpg">

深度學習架構(轉自知乎)

根據筆者的實際開發經驗,希望未來的深度學習模型可以應用于大型的伺服器和分布式叢集裡面,建議采用MXNet或者DL4J,如果需要與Hadoop的業務相結合,DL4J或許是最好的選擇。如果隻懂C或者C++,不懂python,Caffe或許是你最好的選擇。如果是非商業開發,可以選擇Google的TensorFlow或者是Facebook的Torch,具體需要根據不同的語言進行選擇。對于簡單的教學和demo實驗,我們可以使用Keras去實作簡單的深度學習模型。最後可惜的是在2017年下半年,Yoshua Bengio 宣布 Theano 停止更新維護。

深度學習的架構日新月異,可能上面的總結會有點過時,但是百變不離其中。好好學習一下菜單,炒個香噴噴,熱辣辣的菜出來震驚一下食神的舞台。

繼續閱讀