阿里卜居:從Caffe開始深度學習實戰,徒手hack程式碼樂趣更多
阿里雲工程師卜居接受CSDN記者專訪,介紹了他在深度學習領域的實踐經驗和成長心得,以及完成Caffe著作背後的原因和故事。
從Geoffrey Hinton 2006年的論文算起,這一波深度學習(DL)浪潮才10年,而如果只算國內,深度學習的流行也不過5年,儘管如此,深度學習現在已經紮根中國網際網路,成為BAT、京東、360、今日頭條等公司的基礎技術和戰略技術,與之伴隨的,則是深度學習技術人員的快速成長,例如,阿里雲工程師卜居(趙永科,部落格),2014年才開始接觸深度學習實戰,如今已在深度學習及計算優化方面方面有很獨到的見解。卜居在最近寫了一本濃縮其深度學習實戰經驗的書——《深度學習—21天實戰Caffe》,該書獲得了機器學習前輩的肯定。日前,卜居接受CSDN記者專訪,介紹了他在深度學習領域的實踐經驗和成長心得,以及完成Caffe著作背後的原因和故事。
卜居認為,深度學習具備強大的表達能力和靈活多變的模型結構,並在各種硬體加速方案的支撐下不斷成熟,而Caffe具有高效的C++/CUDA實現、Matlab/Python介面、獨特的網路描述方式、清晰的程式碼框架等優勢,徒手hack程式碼的樂趣更多,同時Caffe框程式碼於穩定,掌握了閱讀技巧可以事半功倍,因而可以作為初學者學習的第一個深度學習框架,由此逐步深入瞭解使用C++/CUDA程式碼實現深度學習的計算過程。
談到新書《深度學習—21天實戰Caffe》,卜居表示,這是一本透過原始碼解讀深度學習的書,也是一本注重“實戰”的書。讀者可以從本書中學習Caffe設計模式、程式設計技巧,以及深度學習最新的進展和生產環境批量部署等內容。而書中的一些思考題需要深入實踐和思考之後才能得到答案,這可以讓讀者養成獨立思考的習慣,從而更加從容地面對實際問題。
此外,對於不同的硬體加速方案,卜居認為,深度學習本身在不斷演進,沒有哪個計算架構能夠一勞永逸,得到某方面優勢會喪失另一部分特性,最終起決定作用的仍然是應用需求,例如批量離線處理更適合利CPU/GPU叢集的規模優勢,而線上應用、移動端應用更適合利用FPGA/ASIC的低功耗、低延遲特性。
以下為採訪實錄:
卜居與深度學習
CSDN:請介紹您自己,您是如何與深度學習結緣的,它的哪些特質吸引您?
卜居:大家好,我部落格筆名是卜居(出自《楚辭》),在阿里花名是以亭(《鏡花緣》探花唐敖之字),真名趙永科,2014年畢業於中國科學院大學,目前就職於阿里雲端計算有限公司高效能運算團隊,從事CPU/GPU/FPGA上的計算優化工作。
我最早接觸“神經網路”、“深度學習”還是在中科院微波成像實驗室從事現代訊號處理工作期間,通過閱讀Simon Heykin的大部頭著作《Adaptive Filter Theory》《Neural Networks : A Comprehensive Foundation》,初次瞭解其設計理念,但當時僅僅停留在一些抽象理論上,一直希望有機會將它們應用到實際專案中。
直到2014年我到阿里巴巴集團核心系統部實習,看到周圍同事在用Caffe做深度學習演算法優化,而且已經有很多內部專案(即後來的拍立淘、OCR等)在使用該框架。當時首先被名字吸引:“快速特徵植入的卷積結構”(Convolutional Architecture for Fast Feature Embedding),諧音“咖啡”。當時的Caffe還只是雛形,我看了一遍程式碼後深深被其設計所吸引,高效的C++/CUDA實現、Matlab/Python介面、獨特的網路描述方式、清晰的程式碼框架……當時對深度學習的認識一下子從教科書上的抽象概念落地到實實在在的程式碼實現,甚至對其稍作修改就可以應用於線上生產環境,直接面向廣大使用者!也是從那個時候,我開始關注每年的ILSVRC比賽,看到計算機視覺領域逐漸接受深度學習方法,並隨後在語音識別、自然語言處理取得巨大成功,意識到這次深度學習高潮不是泡沫,而是逐漸邁向成熟的標誌。
現在,深度學習強大的表達能力、靈活多變的模型結構、在CPU/GPU/FPGA/ASIC上加速方案等,都是吸引我的閃光點。
CSDN:阿里巴巴的很多業務都使用了深度學習技術,能否介紹和您的工作有直接關係的技術環節包括哪些?
卜居:在阿里雲我們組主要是計算平臺支援和計算效率提升兩個環節。
計算平臺支援方面,我們的HPC支援當前大多數主流計算框架(Caffe/Torch/Theano/MxNet/TensorFlow/……),利用IB+雙萬兆網路實現多機互聯,提供多機多卡並行訓練系統,最近使用專門為深度學習定製的Tesla M40 GPU加速器將單節點計算能力提升到16 TFLOPS。
計算效率提升方面,我們自研了CUDA Native彙編器(文件下載),進一步挖掘硬體計算能力,實現更高計算效率。
深度學習及實踐經驗
CSDN:目前深度學習的論文非常多,您會關注哪類論文?神經網路最近的哪些進展讓您印象深刻?
卜居:我比較感興趣的還是計算優化方面,包括計算體系結構優化和計算軟體優化兩類。
最近的ResNet實現了深達1000層的模型結構,這不禁讓人思考:“深度學習”還可以多深?除了加深之外,網路結構也逐漸表現出了生物特徵,例如出現了分形結構,這些讓人愈發感受到自然之美、生命之美。
CSDN:ICML、CVPR上來自Deepmind等大公司的論文比較出彩,這其中不乏大公司投入比較大要求少的因素,比如LeCun說目前Facebook對FAIR還沒有盈利要求,能否介紹您的團隊如何要求DL研究的投入?
卜居:我不敢妄談公司戰略,單從個人角度談下。
DL不僅是我在阿里雲高效能運算團隊工作時需要了解的內容,同時也是我個人愛好,對於論文和前沿的技術一般是用業餘時間學習,工作時間更多是面向使用者需求。在阿里雲有得天獨厚的研究條件,我們有大規模GPU叢集可以折騰,周圍許多同事自己攢機體驗最新的硬體(GPU、FPGA),研發氛圍濃厚,討論問題熱烈,都是自發行為。
總體來看,大公司在資料規模、基礎設施方面有較大優勢,初創團隊一般在業務演算法、模型調參方面更有優勢。
CSDN:論文雖多,深度學習理論體系卻不似SVM那麼優美,在很多實際應用場景中的效果也還不盡人意,從開發人員的角度,您如何看待當前深度學習技術的缺陷?成功應用深度學習有沒有一些“黃金法則”?
卜居:深度學習不需要專門特徵工程師,降低了模型設計門檻,但對於調超參“黑科技”方面,經驗仍然很重要,不然會經常出現使用了深度學習技術效果反而不如傳統方法的尷尬局面。
- 模型引數遠大於資料量時,相當於求解一個欠定方程,存在多解的可能性大,容易產生過擬合問題。
- 模型引數遠小於資料量時,相當於求解超定方程,可能無解,或者有解但準確率很低,這屬於欠擬合問題。
- 模型引數與資料量匹配時,相當於求解恰定方程,既能避免過擬合,又能兼顧準確率,但模型引數量和資料量怎樣才能做到匹配,是一個工程問題。
所以,如果你選擇用某個模型處理資料,那麼應該考慮這個因素,越大的模型越難訓練,因為需要與之匹配的資料量、一系列避免過擬合的方法才能訓練得到一個較為理想的模型。幸運的是,我們可以將大模型首先在較大的資料集(如ImageNet)上預訓練,得到模型,再對特定資料集(如人臉資料)進行精調(fine-tuning),即可得到較為理想的結果。
深度學習目前的應用場景只是冰山一角,對於更多傳統領域的應用,一方面需要引起該領域工程師對深度學習技術的關注,另一方面要重視資料,作為待開發的礦產資源。
CSDN:您曾經做過CNN硬體加速的分享,重點談了阿里雲用到的FPGA方案,但目前還有很多ASIC的嘗試,包括Google的TPU、中科院的寒武紀等,同時考慮到神經網路的應用越來越廣,比如LSTM在語音、機器翻譯中的應用,您認為未來DL平臺應當是什麼樣的架構,主流的加速方案是什麼,應當具備哪些特性?
卜居:阿里雲HPC團隊是一個既注重技術創新、又貼近使用者實際業務的團隊,我們在平臺選擇方面,會首先根據使用者需求進行優化和定製,而一些通用的模組則逐漸沉澱成為公共服務。
DL本身在不斷演進,沒有哪個計算架構能讓DL一勞永逸,得到某方面優勢會喪失另一部分特性,最終起決定作用的仍然是應用需求,例如批量離線處理更適合利CPU/GPU叢集的規模優勢,而線上應用、移動端應用更適合利用FPGA/ASIC的低功耗、低延遲特性。
CSDN:阿里雲已經在用Docker來提供DL服務,您認為DL任務中使用Docker有哪些坑需要填好?
卜居:Docker 的優點在於一次開發,處處部署,簡化了開發測試環境與生產環境的遷移。目前已經有越來越多使用者選擇Docker,越來越多開源DL框架開始支援Docker部署,進一步降低了這些框架使用難度。Docker本身也在不斷髮展中,存在一些坑也是正常的,對於個人使用者而言Docker基本坑都已經填好,是時候學習和掌握這門技術了。
關於“21天實戰Caffe”
CSDN:深度學習開源工具眾多,您的新書寫的是Caffe,而您最近的部落格在寫TensorFlow,能否介紹您嘗試過哪些DL框架?如何看待它們的優缺點?
卜居:在阿里雲HPC平臺上我們支援當前大多數主流計算框架(Caffe/Torch/Theano/MxNet/TensorFlow/……),我個人都使用過這些工具,還通讀過其中幾個框架的原始碼。
Caffe可以作為初學者學習的第一個深度學習框架,因為程式碼組織較規範,徒手hack程式碼的樂趣更多。但相比之下所需依賴庫比較多,適合在固定計算平臺(如伺服器、帶GPU的桌上型電腦)上執行。
TensorFlow提供了更靈活的設計,不僅可以部署在伺服器端,對資源受限的硬體支援也更好,例如內建了定點化運算庫,適合做移動、嵌入式裝置上的DL應用。
CSDN:從KDnuggets的統計來看,用得最多的似乎是Pylearn2而不是Caffe,能否進一步介紹您的新書選擇寫Caffe的原因?
卜居:誠然,從上述統計結果看,Caffe受歡迎程度可能不及Pylearn2、Theano。但我們在企業一線生產環境統計的結果來看,直接使用Pylearn2、Theano接生產任務的應用幾乎是鳳毛麟角。效能是一個關鍵的因素。
新書選擇Caffe,是希望讀者不僅知其然,更要知其所以然,知道怎樣使用 C++/CUDA程式碼實現深度學習的計算過程。
CSDN:Caffe的架構還在發展,社群文件也在不斷完善,您為什麼會在現在寫Caffe的書?這本書適合的閱讀物件是誰?讀者需要一些知識基礎嗎?
卜居:從誕生到現在已經過去2年時間,Caffe經歷過很多變化,框架程式碼其實變動不大,掌握了閱讀技巧可以事半功倍,寫這本書是希望更多讀者可以加入hack Caffe、改進Caffe的行列中。
建議讀者具備高等數學、線性代數、概率論等知識水平。程式設計方面,建議讀者至少具備C++、Python、MATLAB基礎。對於本科生,建議大二以上閱讀本書。研究生、博士生理論基礎達標,可以從本書中學習Caffe設計模式、程式設計技巧方面內容,充實自己的科研生活。企業一線工程師,可以通過本書瞭解深度學習最新的進展和生產環境批量部署等內容。
CSDN:您認為這本書的最大的亮點是什麼?
卜居:這是第一本透過原始碼解讀深度學習的書,也是一本注重“實戰”的書。
CSDN:如果開發者能完全吸收書中的營養,21天之後的DL水平是怎麼樣的?
卜居:本書不是一部讓讀者從0開始,21天之後精通 Caffe 的“武林祕籍”,更像是遊戲攻略,可以讓讀者更快地找到捷徑,避免在原地徘徊。每章後面的思考題,有些是需要深入實踐和思考之後才能得到答案的。相信通過這些鍛鍊,讀者可以養成獨立思考的習慣,面對實際問題時更加胸有成竹。
CSDN:開發人員在讀完這本書之後,如何繼續提升DL技能?還有一些DL書籍可以推薦?
卜居:DL修行道阻且長,要有紮實的數學基礎、精湛的程式設計技術,還要有廣闊的視野,不斷吸取其他領域的營養。推薦繼續閱讀其他ML/DL大部頭著作(例如Youshua Bengio的《Deep Learning》值得深入閱讀),以及該領域的經典論文。
筆耕收穫
CSDN:能否介紹您寫這本書的最大挑戰和收穫?
卜居:克服惰性。寫書後,我養成了早起的習慣,每天精神了許多。
CSDN:從您2008年發表第一篇CSDN部落格文章,到現在已經8年,能否介紹您堅持寫部落格的動力和收穫、心得?部落格創作對您的技術工作和完成著作有多大的幫助?
卜居:2008年我還是在大一、大二剛剛學習程式設計的階段,每期《程式設計師》、《電腦報》、《黑客 X 檔案》都要細細閱讀。偶然的機會看到CSDN上面的一些部落格寫得很好,於是也註冊了一個號,嘗試自己寫文章。在此之前我寫文章都是發表在QQ空間、人人網,發一些程式設計相關的文章不太“合群”,於是逐漸淡出了這些圈子,全面轉向CSDN。
早期的文章不成體系,很少堅持。真正開始寫系列文章是從研究生開始,結合自己學習CUDA的心得體會,整理了十篇左右,反響不錯。後來又整理了關於Zynq開發的系列文章,訪問量暴增,進一步增加了寫部落格的動力和信心。再後來畢業後參加工作,接觸 DL,學習Caffe、TensorFlow,這時的部落格更像筆記,比較隨性。
寫部落格最大的收穫,是查資料時可以先從自己部落格中找,如果Cache命中,直接返回;否則再找其他人部落格,學習後收藏。部落格相比網際網路上零散知識點而言更有凝聚性,可以集中解決一類問題,習慣從部落格中找答案可以觸類旁通。
此外,寫部落格也會認識更多同行者,可以在交流之間取長補短,相互促進,並開啟視野,這對工作和學習有很大幫助。
CCAI 2016中國人工智慧大會將於8月26-27日在京舉行,AAAI主席,多位院士,MIT、微軟、大疆、百度、滴滴專家領銜全球技術領袖和產業先鋒打造國內人工智慧前沿平臺,6+重磅大主題報告,4大專題論壇,1000+高質量參會嘉賓,探討人機互動、機器學習、模式識別及產業實戰。門票限時六折優惠中。
相關文章
- 從Caffe開始深度學習實戰,徒手hack程式碼樂趣更多深度學習
- 《深度學習:21天實戰Caffe》深度學習
- 從零開始學習如何部署程式碼
- 開始學習電商實戰
- 《谷歌JAX深度學習從零開始學》簡介谷歌深度學習
- 《Python深度學習從零開始學》簡介Python深度學習
- 學習小程式從“你”開始
- 深度學習趣談:什麼是遷移學習?(附帶Tensorflow程式碼實現)深度學習遷移學習
- 【深度】監督學習—從好的label開始
- Caffe 深度學習框架上手教程深度學習框架
- 《從零開始學Swift》學習筆記(Day 59)——程式碼排版Swift筆記
- 【教程】如何從零開始構建深度學習專案?深度學習
- 動手學深度學習(二)——多層感知機(從零開始)深度學習
- 【caffe2從頭學】:2.學習caffe2
- 賈揚清分享_深度學習框架caffe深度學習框架
- 從零開始:深度學習軟體環境安裝指南深度學習
- 如何學習 PHP 原始碼 – 從編譯開始PHP原始碼編譯
- 從頭開始在Python中開發深度學習字幕生成模型Python深度學習模型
- 從頭開始學習VuexVue
- 從零開始學習KafkaKafka
- 從零開始學習機器學習機器學習
- 從零開始學習laravelLaravel
- 從0開始學習java,應該從那塊開始學起?Java
- 【開源推薦】進階實戰,從一款音樂播放器開始播放器
- 從0開始學習Webpack(一)Web
- eclipse學習從零開始Eclipse
- 實戰 | 基於深度學習模型VGG的影象識別(附程式碼)深度學習模型
- 深度學習 Caffe 記憶體管理機制理解深度學習記憶體
- 深度學習---之caffe如何加入Leaky_relu層深度學習
- 深度學習、強化學習核心技術實戰深度學習強化學習
- 從零開始徒手擼一個vue的toast彈窗元件VueAST元件
- 【深度學習】如何從零開始構建深度學習專案?這裡有一份詳細的教程深度學習
- 《從零開始學習Python爬蟲:頂點小說全網爬取實戰》Python爬蟲
- go學習--->開始編碼Go
- 從零開始實現放置遊戲(八)——實現掛機戰鬥(6)程式碼重構遊戲
- 深度學習程式碼積累深度學習
- 回顧·機器學習/深度學習工程實戰機器學習深度學習
- 深度學習:TensorFlow入門實戰深度學習