深度學(xué)習(xí)(Deep Learning)的概念由加拿大多倫多大學(xué)教授Geoffrey Hinton等人于2006年提出,它本質(zhì)上是一種神經(jīng)網(wǎng)絡(luò)算法,其原理是通過模擬人腦進行分析學(xué)習(xí),算法訓(xùn)練時可以不用人工干預(yù),因此它也屬于一種無監(jiān)督式機器學(xué)習(xí)算法。從深度學(xué)習(xí)的概念提出到今天,已歷經(jīng)十年時間,在這十年當中,無論是國際互聯(lián)網(wǎng)巨頭Google、微軟、百度,還是全世界各大學(xué)術(shù)研究機構(gòu),都投入了巨大的人力、財力用于理論和工業(yè)級應(yīng)用的探索,并在字符識別(OCR)、圖像分類、語音識別、無人自動駕馭、自然語言處理等眾多領(lǐng)域內(nèi)取得了突破性的進展,極大地推動了人工智能(AI)的發(fā)展。 圖1:深度學(xué)習(xí)的典型應(yīng)用場景示例 2012年斯坦福大學(xué)的Andrew Ng和Jeff Dean教授共同主導(dǎo)的Google Brain項目通過使用深度學(xué)習(xí)讓系統(tǒng)能夠自動學(xué)習(xí)并識別貓,這項目研究引起了學(xué)術(shù)界和工業(yè)界極大的轟動,激起了全世界范圍研究深度學(xué)習(xí)的熱潮,《紐約時報》披露了Google Brain項目,讓普通大眾對深度學(xué)習(xí)有了最初的認知。2016年3月,Google旗下DeepMind公司開發(fā)的AlphaGo以4:1的總比分戰(zhàn)勝了世界圍棋冠軍、職業(yè)九段選手李世石,這讓人們對人工智能(AI)的認知跨越到一個新的階段。 深度學(xué)習(xí)在眾多領(lǐng)域的成功應(yīng)用,離不開學(xué)術(shù)界及工業(yè)界對該技術(shù)的開放態(tài)度,在深度學(xué)習(xí)發(fā)展初始,相關(guān)代碼就被開源,使得深度學(xué)習(xí)“飛入尋常百姓家”,大大降低了學(xué)術(shù)界研究及工業(yè)界使用的門檻。本文并不打算對深度學(xué)習(xí)算法的發(fā)展趨勢進行分析,而是跳出算法層面,對當前主流的開源深度學(xué)習(xí)框架的發(fā)展趨勢進行分析。 在計算機視覺領(lǐng)域內(nèi),神經(jīng)網(wǎng)絡(luò)算法一直被用來解決圖像分類識別等問題,學(xué)術(shù)界采用的算法研究工具通常是Matlab、Python,有很多深度學(xué)習(xí)工具包都是基于Matlab、Python語言,在使用海量圖像訓(xùn)練深度學(xué)習(xí)算法模型時,由于單臺機器CPU的計算能力非常有限,通常會使用專門的圖形處理器(Graphics Processing Unit,GPU)來提高算法模型速度。 但在工業(yè)級應(yīng)用當中,由于Matlab、Python、R語言的性能問題,大部分算法都會使用C++語言實現(xiàn),而且隨著深度學(xué)習(xí)在自然語言處理、語音識別等領(lǐng)域的廣泛應(yīng)用,專用的GPU也慢慢演變?yōu)橥ㄓ脠D像處理器(General Purpose GPU,GPGPU),處理器不僅僅被用于渲染處理圖像,還可以用于需要處理大數(shù)據(jù)量的科學(xué)計算的場景,這種提高單臺機器的處理能力的方式屬于縱向擴展(Scale Up)。 隨著大數(shù)據(jù)時代的來臨,大數(shù)據(jù)處理技術(shù)的日趨成熟為解決深度學(xué)習(xí)模型訓(xùn)練耗時問題提供了重要發(fā)展方向,因此如何通過大數(shù)據(jù)訓(xùn)練深度學(xué)習(xí)模型在當前引起了廣泛關(guān)注,大量的研究表明:增加訓(xùn)練樣本數(shù)或模型參數(shù)的數(shù)量,或同時增加訓(xùn)練樣本數(shù)和模型參數(shù)的數(shù)量,都能夠極大地提升最終分類的準確性。由于Hadoop已經(jīng)成為構(gòu)建企業(yè)級大數(shù)據(jù)基礎(chǔ)設(shè)施的事實標準,有許多的分布式深度學(xué)習(xí)算法框架被構(gòu)建在Hadoop生態(tài)體系內(nèi),這種通過分布式集群提高處理能力的擴展方式被稱為橫向擴展(Scale Out)。 雖然利用Spark等平臺訓(xùn)練深度學(xué)習(xí)算法可以極大地提高訓(xùn)練速度,但近年來,存儲設(shè)備和網(wǎng)絡(luò)在性能方面的提升遠超CPU,如圖2所示。 圖2:存儲系統(tǒng)、網(wǎng)絡(luò)及CPU的性能變化比較 CPU性能瓶頸極大地限制了分布式環(huán)境下,單臺節(jié)點的處理速度。為解決這一問題,許多優(yōu)秀的開源深度學(xué)習(xí)框架都在嘗試將開源大數(shù)據(jù)處理技術(shù)框架如Spark和GPGPU結(jié)合起來,通過提高集群中每臺機器的處理性能來加速深度學(xué)習(xí)算法模型的訓(xùn)練,圖3給出的是SparkNet的架構(gòu)原理圖。這種通過結(jié)合橫向擴展及縱向擴展提高處理能力的方式被稱為融合擴展。圖4對深度學(xué)習(xí)提升性能的方式進行了總結(jié),圖中分別給出了橫向擴展、縱向擴展及融合擴展的典型開源深度學(xué)習(xí)框架。 圖3.SparkNet中的Scale Up和Scale Out 圖4.深度學(xué)習(xí)提升性能的方式 下面將對目前一些優(yōu)秀的開源深度學(xué)習(xí)框架進行介紹,包括基于GPU的單機開源深度學(xué)習(xí)框架和融合了GPU的開源分布式深度學(xué)習(xí)框架。讓大家熟悉目前開源深度學(xué)習(xí)主流框架的同時,又能夠進一步窺探開源分布式深度學(xué)習(xí)框架的發(fā)展方向。 目前擁有眾多的學(xué)術(shù)機構(gòu)如國際頂級名校加州大學(xué)伯克利分校,以及互聯(lián)網(wǎng)巨頭如Google、微軟等開源的深度學(xué)習(xí)工具,比較成熟的基于GPU的單機開源深度學(xué)習(xí)框架有:
DeepLearning4J官網(wǎng)有篇文章《DL4J vs. Torch vs. Theano vs. Caffe vs. TensorFlow》,對這些主流的深度學(xué)習(xí)框架的優(yōu)劣勢進行了詳細的分析比較,感興趣的讀者可以點擊查看。 Google研究員Jeffy Dean在2012發(fā)表了一篇《Large Scale Distributed Deep Networks》對分布式環(huán)境下的深度學(xué)習(xí)算法設(shè)計原理進行了闡述,給出了深度學(xué)習(xí)在分布式環(huán)境下的兩種不同的實現(xiàn)思路:模型并行化(Model parallelism)和數(shù)據(jù)并行化(Model Parallelism)。模型并行化將訓(xùn)練的模型分割并發(fā)送到各Worker節(jié)點上;數(shù)據(jù)并行化將數(shù)據(jù)進行切分,然后將模型復(fù)本發(fā)送到各Worker節(jié)點,通過參數(shù)服務(wù)器(Parameter Server)對訓(xùn)練的參數(shù)進行更新。具體原理如圖5所示。 圖5.深度學(xué)習(xí)并行化的兩種方式:模型并行化(左)和數(shù)據(jù)并行化(右) 目前開源分布式深度學(xué)習(xí)框架大多數(shù)采用的是數(shù)據(jù)并行化的方式進行設(shè)計。目前有兩大類:框架自身具備分布式模型訓(xùn)練能力;構(gòu)建在Hadoop生態(tài)體系內(nèi),通過分布式文件系統(tǒng)(HDFS)、資源調(diào)度系統(tǒng)(Yarn)及Spark計算平臺進行深度學(xué)習(xí)模型訓(xùn)練。其中框架自身具備分布式模型訓(xùn)練能力的開源深度學(xué)習(xí)框架有:
由于Hadoop生態(tài)體系已經(jīng)占據(jù)了企業(yè)級大數(shù)據(jù)市場的大部分份額,因此目前許多開源分布式都在往Hadoop生態(tài)體系遷移,這其中有Caffe、TensorFlow,也有百度的Paddle。構(gòu)建在Hadoop/Spark生態(tài)體系下的深度學(xué)習(xí)框架實現(xiàn)原理圖如下: 圖6 .Hadoop生態(tài)體系分布式深度學(xué)習(xí)算法實現(xiàn)原理 目前比較有影響力的基于Hadoop/Spark的開源分布式深度學(xué)習(xí)框架有:
SparkNet、Deeplearning4J及Caffe On Spark等構(gòu)建在Spark平臺上的深度學(xué)習(xí)框架在性能、易用性、功能等方面的詳細比較,參見《Which Is Deeper Comparison of Deep Learning Frameworks Atop Spark》、《inferno-scalable-deep-learning-on-spark》。 由于近幾年在大數(shù)據(jù)技術(shù)的日趨成熟和流行,特別是基于JVM的語言(主要是Java和Scala)構(gòu)建的大數(shù)據(jù)處理框架如Hadoop、Spark、Kafka及Hive等幾乎引領(lǐng)著大數(shù)據(jù)技術(shù)的發(fā)展方向,相信以后將會有越來越多的開源深度學(xué)習(xí)框架構(gòu)建在Hadoop生態(tài)體系內(nèi),并且基于Java或Scala語言實現(xiàn)。 本文首先介紹了深度學(xué)習(xí)提升性能的三種方式:縱向擴展(給機器加GPU)、橫向擴展(通過集群訓(xùn)練模型)及融合擴展(在分布式的基礎(chǔ)上,給每個集群中的Worker節(jié)點加GPU),然后對主流的開源深度學(xué)習(xí)框架進行了介紹。通過對這些開源深度學(xué)習(xí)框架的了解,可以看到當前開源深度學(xué)習(xí)框架的發(fā)展有以下幾個趨勢:
深度學(xué)習(xí)作為AI領(lǐng)域的一個重要分支,儼然已經(jīng)成為AI的代名詞,人們提起AI必定會想到深度學(xué)習(xí),相信隨著以后大數(shù)據(jù)和深度學(xué)習(xí)技術(shù)的不斷發(fā)展,更多現(xiàn)象級的應(yīng)用將不斷刷新人們對AI的認知,讓我們盡情期待“奇點”臨近。 |
|