1
本文作者: 大牛講堂 | 2016-10-12 09:42 |
雷鋒網(wǎng)按:本文作者賈揚(yáng)清,擁有加州大學(xué)伯克利分校計算機(jī)科學(xué)博士學(xué)位、清華大學(xué)碩士學(xué)位和學(xué)士學(xué)位,曾于新加坡國立大學(xué)、微軟亞洲研究院、NEC美國實驗室、Google Brain工作,現(xiàn)任Facebook研究科學(xué)家,負(fù)責(zé)前沿AI平臺的開發(fā)以及前沿的深度學(xué)習(xí)研究。
在伯克利期間開發(fā)了深度學(xué)習(xí)框架Caffe,在Google期間參與了ImgeNet2014比賽、TensorFlow平臺的開發(fā)、基于深度學(xué)習(xí)的產(chǎn)品開發(fā)和產(chǎn)品咨詢等。在AI領(lǐng)域有數(shù)年的研究經(jīng)歷。
在深度學(xué)習(xí)領(lǐng)域,Caffe框架是人們無法繞過的一座山。這不僅是因為它無論在結(jié)構(gòu)、性能上,還是在代碼質(zhì)量上,都稱得上一款十分出色的開源框架。更重要的是,它將深度學(xué)習(xí)的每一個細(xì)節(jié)都原原本本地展現(xiàn)出來,大大降低了人們學(xué)習(xí)研究和開發(fā)的難度。
這一次,大牛講堂將Caffe框架的作者賈揚(yáng)清請到了地平線,他將結(jié)合自己在Google、Facebook的工作經(jīng)歷以及Caffe等學(xué)習(xí)架構(gòu)的開發(fā)經(jīng)驗,為大家分享「怎樣打造更加優(yōu)秀的深度學(xué)習(xí)架構(gòu)」。
深度學(xué)習(xí)的框架總會不斷改變,Caffe也會有被新框架代替的一天。但是在開發(fā)Caffe的過程中,賈揚(yáng)清發(fā)現(xiàn)大家喜歡的框架其實有著很多相似的地方,這些閃光點(diǎn)擁有很長的生命周期,發(fā)現(xiàn)并掌握人們這些共同偏好將為以后開發(fā)新的框架積累經(jīng)驗。他在反復(fù)總結(jié)之后,認(rèn)為Caffe之所以廣受歡迎可能是因為有以下的四個特點(diǎn):
1、 穩(wěn)定的模型架構(gòu)
Caffe通過Protobuf來定義一個網(wǎng)絡(luò)的結(jié)構(gòu),而這個由Google開源的庫具有優(yōu)秀的版本兼容性。隨著Caffe的框架源碼的不斷更新迭代,之前定義的網(wǎng)絡(luò)結(jié)構(gòu)依然能兼容解析,模型仍然能正確加載運(yùn)行。
2、較好的設(shè)備抽象
合理的設(shè)備抽象能夠精簡代碼,提高框架適用性。在這方面Caffe做了比較好的嘗試,模型的訓(xùn)練和使用與不同的平臺耦合比較低,只要平臺能解析網(wǎng)絡(luò)結(jié)構(gòu)并讀取二進(jìn)制的模型參數(shù),就能運(yùn)行該模型。這樣大大拓展了框架的應(yīng)用范圍,自然更加符合用戶的使用需求。
3、清晰的說明教程
如何讓首次接觸到框架的人通過說明教程就能最快地熟悉運(yùn)用,這對于一個新面世的框架來說尤為重要。以Caffe為例,用戶只需要將官方文檔的例子跑一遍,基本就能清楚Caffe的操作過程和細(xì)節(jié),這給它的廣泛傳播提供了最堅實的基礎(chǔ)。
4、開放的模型倉庫
目前Caffe還維護(hù)了一個Model Zoo, 許多論文的作者會將模型發(fā)布到這里,其它用戶可以利用這些材料輕松地將模型復(fù)現(xiàn),還可以在github上參與開發(fā)討論,從而更深入地學(xué)習(xí)實踐。
人們的需求多種多樣,目前,還沒有任何一種深度學(xué)習(xí)的框架能夠滿足人們所有的需求。對于工業(yè)界而言,從業(yè)者看重的是框架的穩(wěn)定性強(qiáng)、數(shù)據(jù)量大、速度快、容易進(jìn)行數(shù)據(jù)整合等。
而對于學(xué)術(shù)界來說,學(xué)者們更希望框架容易調(diào)試、靈活性要強(qiáng)、迭代要快。因此,比照現(xiàn)有深度學(xué)習(xí)框架的特點(diǎn),Theano、Torch可能會更加適合學(xué)術(shù)界,而D4J等可能就要更適合工業(yè)界一些,至于Caffe、Tensor flow等為代表的框架則是介于二者之間。
1、使用計算圖 (computation graph)
Caffe框架在實現(xiàn)網(wǎng)絡(luò)的forward, backward, update時,是通過Solver, Net, Layer之間遞進(jìn)地逐步回調(diào)對應(yīng)的forward, backward, update來實現(xiàn)的,在加入并行化之后,為了用計算來覆蓋數(shù)據(jù)傳輸?shù)臅r間,這些回調(diào)的運(yùn)用會變得相對復(fù)雜。
因此,目前許多框架都在往computation graph的風(fēng)格上偏移。這種基于computation graph的深度學(xué)習(xí)框架不僅在網(wǎng)絡(luò)的更新方面更加直接,而且在并行方面,無論是數(shù)據(jù)并行方式還是模型并行方式,都能做到接近線性的提速。大家未來也可以在這個方向做些嘗試。
2、高效方便地輸入數(shù)據(jù)
對于Caffe用戶而言,首要問題便是如何導(dǎo)入數(shù)據(jù)。尤其是在算法比較簡單時,保證數(shù)據(jù)輸入的高效性將成為制約模型的首要因素。之前進(jìn)行的某個項目里,在8個GPU(Titan X)上訓(xùn)練AlexNet,需要達(dá)到每秒鐘處理1600張圖片(3.14GB/s)的要求。甚至對于另外一些模型而言,還需要更多的吞吐量。如果數(shù)據(jù)接口沒有做好,是絕對無法達(dá)到這樣的要求的。
3、更快的速度
網(wǎng)絡(luò)結(jié)構(gòu)實現(xiàn)需要在靈活性和速度上進(jìn)行權(quán)衡,這種權(quán)衡可以體現(xiàn)在框架設(shè)計的粗細(xì)粒度上。例如一個Inception的結(jié)構(gòu),是做成像Caffe這樣通過各個層的累積來形成,還是直接由Conv2D, BiasAdd, Relu這樣的基本計算來直接構(gòu)造一個Inception結(jié)構(gòu)。這樣不同粗細(xì)粒度的構(gòu)建方法體現(xiàn)了整個框架對速度或是靈活性的權(quán)衡。
另外,對于底層的實現(xiàn),最好用硬件供應(yīng)商提供的數(shù)值計算庫,比如CuDNN, MKL-DNN,Accelerate,Eigen,NNPack等。
4、 可移植性
要提升框架的實用價值,就必須提升其訓(xùn)練出的模型的可移植性。換句話說,也就是要讓框架訓(xùn)練出的模型具有平臺無關(guān)性,包括了系統(tǒng)層面(windows、linux、android、iOS、OS X等)及硬件層面(CPU、GPU、FPGA、ARM等)。這就必須使得設(shè)計出的模型更加輕量。
雷鋒網(wǎng)(搜索“雷鋒網(wǎng)”公眾號關(guān)注)注:本文由大牛講堂授權(quán)雷鋒網(wǎng)發(fā)布,如需轉(zhuǎn)載請聯(lián)系原作者,并注明作者和出處,不得刪減內(nèi)容。有興趣可以關(guān)注公號地平線機(jī)器人技術(shù),了解最新消息。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。