導(dǎo)讀:
在人工智能時(shí)代,各行各業(yè)都在嘗試?yán)脵C(jī)器學(xué)習(xí)/深度學(xué)習(xí)等前沿技術(shù)來(lái)解決自身的業(yè)務(wù)需求,深度學(xué)習(xí)框架也應(yīng)運(yùn)而生。為了繼續(xù)幫助AI開(kāi)發(fā)者們?cè)谏疃葘W(xué)習(xí)的道路上快速升級(jí),百度PaddlePaddle于2019年重磅啟動(dòng)系列技術(shù)公開(kāi)課“PaddlePaddle TechDay”。
2019年1月5日,第一期活動(dòng)于北京中關(guān)村創(chuàng)業(yè)大街百度大腦創(chuàng)新體驗(yàn)中心展開(kāi),秉承著“技術(shù)為先,應(yīng)用至上”的理念,百度邀請(qǐng)深度學(xué)習(xí)技術(shù)平臺(tái)主任工程師胡曉光和高級(jí)算法工程師、百度認(rèn)證布道師胡曉曼作為此次主講嘉賓,分享PaddlePaddle框架設(shè)計(jì)原理、實(shí)現(xiàn)方式、完整實(shí)例等技術(shù)點(diǎn),并結(jié)合百度自身AI實(shí)踐的應(yīng)用發(fā)展,詳解PaddlePaddle針對(duì)深度學(xué)習(xí)模型的應(yīng)用、訓(xùn)練與優(yōu)化等具體細(xì)節(jié)。
以下為胡曉光講師的演講實(shí)錄:
2012年,百度開(kāi)始深度學(xué)習(xí)的應(yīng)用,其深度學(xué)習(xí)框架內(nèi)部版本可追溯到2013年,到2016年,為了滿(mǎn)足開(kāi)發(fā)者的使用需求,百度開(kāi)源了深度學(xué)習(xí)平臺(tái)PaddlePaddle,2018年底,百度又推出了PaddlePaddle Suit,力求框架使用成本越來(lái)越低。
如今,各大巨頭公司都在進(jìn)入深度學(xué)習(xí)領(lǐng)域,那深度學(xué)習(xí)框架為何如此重要?其實(shí)深度學(xué)習(xí)框架相當(dāng)于傳統(tǒng)的操作系統(tǒng),起到連接底層硬件和上層應(yīng)用場(chǎng)景的作用,以此支持各種AI相關(guān)的應(yīng)用,使其與業(yè)務(wù)結(jié)合,實(shí)實(shí)在在解決業(yè)務(wù)場(chǎng)景中的問(wèn)題。例如,通過(guò)該框架,可以將底層的CPU、GPU、FPGA、專(zhuān)用AI芯片、手機(jī)移動(dòng)端上的芯片等各類(lèi)硬件相關(guān)隔離并進(jìn)行管理;在中間層將數(shù)據(jù)進(jìn)行組網(wǎng)、訓(xùn)練,進(jìn)一步得到模型進(jìn)行預(yù)測(cè);在應(yīng)用層,還可以跟語(yǔ)音、NLP、視覺(jué)、推薦等實(shí)際場(chǎng)景中的業(yè)務(wù)進(jìn)行結(jié)合。
可以看到,PaddlePaddle致力于通過(guò)輸出領(lǐng)先的深度學(xué)習(xí)技術(shù),賦能各行各業(yè),全方位滿(mǎn)足企業(yè)級(jí)深度學(xué)習(xí)的應(yīng)用;同時(shí),PaddlePaddle更加注重用戶(hù)的開(kāi)發(fā)成本,以最少的時(shí)間獲得最滿(mǎn)意的功能和效果。
支持不同層級(jí)開(kāi)發(fā)者需求的PaddlePaddle全功能套件
如上圖所示,PaddlePaddle的整體架構(gòu)主要包含四個(gè)層面:核心框架、輔助工具、通用技術(shù)方案、服務(wù)平臺(tái)。
核心框架包括:PaddlePaddle訓(xùn)練框架、PaddlePaddleServing(預(yù)測(cè))、PaddlePaddle Mobile(移動(dòng)端手機(jī)上可部署),在這個(gè)基礎(chǔ)框架之上,可以做深度學(xué)習(xí)相關(guān)的工作。
再往上一層,針對(duì)深度學(xué)習(xí)應(yīng)用的輔助工具包括:Visual DL可視化工具、Auto DL網(wǎng)絡(luò)自動(dòng)設(shè)計(jì)工具、PARL強(qiáng)化學(xué)習(xí)工具。
通用技術(shù)方案上,目前PaddlePaddle主要支持包括文本處理/NLP、CV?、智能推薦相關(guān)的三個(gè)方向,這三個(gè)方向里有大量的模型。
服務(wù)平臺(tái)方面,面向用戶(hù)實(shí)際業(yè)務(wù)場(chǎng)景,Easy DL無(wú)需用戶(hù)寫(xiě)代碼,便可低成本獲取定制化服務(wù);此外,還有學(xué)習(xí)深度學(xué)習(xí)的平臺(tái)AI Studio、針對(duì)深度學(xué)習(xí)云服務(wù)的Infinity。
PaddlePaddle設(shè)計(jì)思想
具體到執(zhí)行流程,通常前端程序是用Python來(lái)寫(xiě)的,但實(shí)際代碼程序是在后端的C++語(yǔ)言環(huán)境下實(shí)現(xiàn)的,那二者是如何關(guān)聯(lián)起來(lái)的呢?
在Python前端,有一個(gè)接口可做到前后端的調(diào)度,中間還有一個(gè)程序ProgramDecs,可進(jìn)行網(wǎng)絡(luò)結(jié)構(gòu)的序列化。然后將Programdesc通過(guò)接口傳給Transpiler,對(duì)原始Program做進(jìn)一步優(yōu)化,再傳給一個(gè)新的Programdesc。而在C++后端有一個(gè)執(zhí)行器,這里面對(duì)各種各樣的Operator進(jìn)行計(jì)算和調(diào)用,相當(dāng)于在CPU上跑的各種指令在這里完成。之后,像梯度或參數(shù)等計(jì)算結(jié)果跑出來(lái)后,需要返回預(yù)測(cè)值,還是通過(guò)這個(gè)接口再傳給Python前端。也就是說(shuō),輸入數(shù)據(jù)和返回的結(jié)果都是可以在前端完成的。正因如此,整個(gè)框架后端是基于C++的,效率也十分高。
執(zhí)行過(guò)程
編譯期:定義Program
1.????編譯時(shí),用戶(hù)編寫(xiě)一段python程序,通過(guò)調(diào)用?Fluid?提供的算子,向一段?Program?中添加變量(Tensor)以及對(duì)變量的操作(Operators?或者?Layers)。用戶(hù)只需要描述核心的前向計(jì)算,不需要關(guān)心反向計(jì)算、分布式下以及異構(gòu)設(shè)備下如何計(jì)算。
2.????原始的?Program在平臺(tái)內(nèi)部轉(zhuǎn)換為中間描述語(yǔ)言:?ProgramDesc。
3.????編譯期最重要的一個(gè)功能模塊是?Transpiler。Transpiler?接受一段?ProgramDesc?,輸出一段變化后的?ProgramDesc?,作為后端?Executor?最終需要執(zhí)行的?Fluid Program
4.????后端?Executor?接受?Transpiler?輸出的這段?Program?,依次執(zhí)行其中的?Operator(可以類(lèi)比為程序語(yǔ)言中的指令),在執(zhí)行過(guò)程中會(huì)為?Operator?創(chuàng)建所需的輸入輸出并進(jìn)行管理。
執(zhí)行期:1.執(zhí)行Program
2.創(chuàng)建Executor
Fluid中使用fluid.Executor(place)創(chuàng)建Executor,place屬性由用戶(hù)定義,代表程序?qū)⒃谀睦飯?zhí)行。
下例代碼表示創(chuàng)建一個(gè)Executor,其運(yùn)行場(chǎng)所在CPU內(nèi):
3.運(yùn)行Executor
Fluid使用Executor.run來(lái)運(yùn)行程序。定義中通過(guò)Feed映射獲取數(shù)據(jù),通過(guò)fetch_list獲取結(jié)果:
官方支持最多模型庫(kù)——PaddlePaddle Fluid模型庫(kù)
目前,基于PaddlePaddle框架基礎(chǔ)上開(kāi)發(fā)了大量的模型,可以支持像CV、NLP、推薦等各類(lèi)非常前沿的技術(shù)應(yīng)用。值得一提的是,模型應(yīng)用有很多已經(jīng)放在GitHub上開(kāi)源出來(lái),如果開(kāi)發(fā)者想要進(jìn)一步嘗試PaddlePaddle,除了查看官方文檔,也可以在GitHub上快速找到PaddlePaddle最新開(kāi)源的模型。
目前來(lái)看,PaddlePaddle官方支持的模型數(shù)量超過(guò)其他主流框架,主要包括計(jì)算機(jī)視覺(jué)里的圖像分類(lèi)、目標(biāo)檢測(cè)、人臉檢測(cè)、關(guān)鍵點(diǎn)、OCR識(shí)別、語(yǔ)義分割、視頻分類(lèi),自然語(yǔ)言處理里的中文詞法分析、語(yǔ)義匹配、機(jī)器翻譯,個(gè)性化推薦模型,語(yǔ)音識(shí)別等。
1.圖像分類(lèi)
?目前網(wǎng)絡(luò)模型主要朝著兩個(gè)方向發(fā)展:一是越來(lái)越深;二是越來(lái)越復(fù)雜。如AlexNet、VGG、GoogleNet、ResNet、Inception-v4、MobileNet、Dual Path Network、SE-ResNeXt,2012年以來(lái)的經(jīng)典圖像識(shí)別網(wǎng)絡(luò)都包含在PaddlePaddle的圖像分類(lèi)模型庫(kù)里。
2.目標(biāo)檢測(cè)?SSD
Single Shot MultiBoxDetector (SSD)?是目標(biāo)檢測(cè)領(lǐng)域較新且效果較好的檢測(cè)算法之一,具有檢測(cè)速度快且檢測(cè)精度高的特點(diǎn)。
對(duì)比?Faster R-CNN和SSD在GPU上的運(yùn)行速度和準(zhǔn)確率,可以得知,F(xiàn)aster R-CNN的準(zhǔn)確率會(huì)很高,但跑得速度會(huì)慢些;而SSD會(huì)快很多,但準(zhǔn)確率會(huì)低些。
3.人臉檢測(cè)?PyramidBox
?在圖像檢測(cè)里,人臉檢測(cè)是比較特殊的,包括人臉拍照、人臉識(shí)別解鎖,其核心基礎(chǔ)都是檢測(cè)。2018年,百度最新推出的PyramidBox,可以說(shuō)是迄今最好的人臉?biāo)惴?。除了傳統(tǒng)算法之外,重點(diǎn)考慮人臉的上下文特征,可以很好地提升人臉檢測(cè)的交互率和準(zhǔn)確率。
4.語(yǔ)義分割DeepLab V3+、語(yǔ)義實(shí)時(shí)分割ICNet
目前,用于語(yǔ)義分割的DeepLab V3+模型基于PaddlePaddle得到了實(shí)現(xiàn),并取得了非常好的效果??梢钥吹?,它有一些操作并不是標(biāo)準(zhǔn)的卷積,這意味著有可以針對(duì)這些操作進(jìn)行更深入底層優(yōu)化的空間。
5.視頻分類(lèi)
?視頻分類(lèi)方法主要包含基于卷積神經(jīng)網(wǎng)絡(luò)、基于循環(huán)神經(jīng)網(wǎng)絡(luò)、或?qū)⑦@兩者結(jié)合的方法,目前包含Temporal Segment Network(TSN)模型。?
6.中文詞法分析(LAC)
?中文詞法分析(Lexical Analysis of Chinese)是一個(gè)聯(lián)合的詞法分析模型,包括中文分詞、詞性標(biāo)注、專(zhuān)有名詞識(shí)別任務(wù)。LAC基于一個(gè)堆疊的雙向GRU結(jié)構(gòu),在長(zhǎng)文本上準(zhǔn)確復(fù)刻了百度AI開(kāi)放平臺(tái)上的詞法分析算法。這三個(gè)任務(wù)可以做一個(gè)訓(xùn)練,其效果是非常顯著的。?
7.語(yǔ)義匹配?DAM
?在最新發(fā)表的“Multi-Turn Response Selection for Chatbotswith Deep Attention Matching Network”論文中指出,主要使用了全局方法的網(wǎng)絡(luò)結(jié)構(gòu),可判斷全局信息,通過(guò)上下文表示句子語(yǔ)義結(jié)構(gòu),目前已在內(nèi)部如聊天或?qū)υ?huà)系統(tǒng)中取得了非常好的效果。
8.機(jī)器翻譯?Transformer
?從2017年起提出的Transformer現(xiàn)已成為業(yè)界機(jī)器翻譯模型訓(xùn)練的標(biāo)配。Transformer是一個(gè)基于自注意力機(jī)制的機(jī)器翻譯模型,其中不再有RNN或CNN結(jié)構(gòu),而是完全利用Attention學(xué)習(xí)語(yǔ)言中的上下文依賴(lài)。?
9.個(gè)性化推薦模型
?PaddlePaddle對(duì)推薦算法的訓(xùn)練提供了完整的支持,并提供了多種模型配置供用戶(hù)選擇,包括:TagSpace、GRU4Rec、SequenceSemanticRetrieval、DeepCTR、Multiview-Simnet。
模型庫(kù):
https://github.com/PaddlePaddle/models
總結(jié)來(lái)講,PaddlePaddle是一個(gè)功能全面而又特別注重實(shí)用性的框架,百度在生產(chǎn)環(huán)境的打磨使其具備了強(qiáng)大的工業(yè)級(jí)生產(chǎn)能力,同時(shí)從框架的內(nèi)部設(shè)計(jì)和實(shí)現(xiàn)上注重接口的簡(jiǎn)潔性和穩(wěn)定性,并規(guī)避了復(fù)雜概念和設(shè)計(jì)的引入,使其降低了PaddlePaddle的開(kāi)發(fā)門(mén)檻,對(duì)開(kāi)發(fā)者也更加友好。此外,開(kāi)放出大量支持最新主流的模型庫(kù),從而全方位為企業(yè)開(kāi)發(fā)者提供幫助,使其可以順暢地進(jìn)行上層開(kāi)發(fā)。當(dāng)前仍處于深度學(xué)習(xí)研究和應(yīng)用的持續(xù)火熱期,深度學(xué)習(xí)框架及平臺(tái)在研究界和工業(yè)界的需求仍持續(xù)增長(zhǎng),百度PaddlePaddle也將隨著深度學(xué)習(xí)在各行各業(yè)的廣泛應(yīng)用,持續(xù)迭代和更新,為中國(guó)開(kāi)發(fā)者和企業(yè)提供更強(qiáng)、更貼近需求的服務(wù),我們也歡迎廣大開(kāi)發(fā)者和企業(yè)加入到百度PaddlePaddle的大家庭當(dāng)中來(lái),共建深度學(xué)習(xí)生態(tài),助力AI落地。