深度學(xué)習(xí)模型訓(xùn)練時損失在下降但是波動較大_一個案例掌握深度學(xué)習(xí)_第1頁
深度學(xué)習(xí)模型訓(xùn)練時損失在下降但是波動較大_一個案例掌握深度學(xué)習(xí)_第2頁
深度學(xué)習(xí)模型訓(xùn)練時損失在下降但是波動較大_一個案例掌握深度學(xué)習(xí)_第3頁
深度學(xué)習(xí)模型訓(xùn)練時損失在下降但是波動較大_一個案例掌握深度學(xué)習(xí)_第4頁
深度學(xué)習(xí)模型訓(xùn)練時損失在下降但是波動較大_一個案例掌握深度學(xué)習(xí)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、深度學(xué)習(xí)模型訓(xùn)練時損失在下降但是波動較大_一個案例掌握深度學(xué)習(xí)人工智能越來越火,甚至成了日常生活無處不在的要素。人工智能是什么?深度學(xué)習(xí)、機器學(xué)習(xí)又與人工智能有什么關(guān)系?作為開發(fā)者如何進入人工智能領(lǐng)域?近期我們將連載一個深度學(xué)習(xí)專題,由百度深度學(xué)習(xí)技術(shù)平臺部主任架構(gòu)師畢然分享,讓你快速入門深度學(xué)習(xí),參與到人工智能浪潮中。從本專題中,你將學(xué)習(xí)到:深度學(xué)習(xí)基礎(chǔ)知識Numpy實現(xiàn)神經(jīng)網(wǎng)絡(luò)構(gòu)建和梯度下降算法計算機視覺領(lǐng)域主要方向的原理、實踐自然語言處理領(lǐng)域主要方向的原理、實踐個性化推薦算法的原理、實踐這是本系列第二篇本文內(nèi)容主要包括:數(shù)據(jù)處理和異步數(shù)據(jù)讀取網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計及背后思想損失函數(shù)介紹及使用方式模

2、型優(yōu)化算法介紹和選擇分布式訓(xùn)練方法及實踐模型訓(xùn)練調(diào)試與優(yōu)化訓(xùn)練中斷后恢復(fù)訓(xùn)練涵蓋了深度學(xué)習(xí)的數(shù)據(jù)處理、模型設(shè)計、模型訓(xùn)練與模型優(yōu)化等部分,如下圖所示,另外擴展了異步數(shù)據(jù)讀取、分布式訓(xùn)練與恢復(fù)訓(xùn)練等知識點。數(shù)做理網(wǎng)絡(luò)優(yōu)化器-H-第節(jié)的mnist數(shù)據(jù)集為例,會涉及代碼實現(xiàn)以下幾個方面以本地,模型設(shè)計區(qū)數(shù)訓(xùn)壕配置采藥”。采訓(xùn)練深度學(xué)習(xí)模型則等同于“煉丹”。殊不知,在煉丹之前,重訓(xùn)練數(shù)據(jù)。官卡出的數(shù)據(jù)出如JageNet、MSCOC0與VOC等,這些數(shù)據(jù)都比較干凈,沒有標(biāo)注錯誤或者漏標(biāo)注的問題。但是如果是自己的業(yè)務(wù)數(shù)據(jù)集,數(shù)據(jù)可能存在各種問題,需要自己去實現(xiàn)數(shù)據(jù)處理的函數(shù),構(gòu)建數(shù)據(jù)讀取器。俁衲文件中讀取

3、到數(shù)據(jù);封駆數(shù)異步激活醐CNN均方誤差CrossEntropy+SoftmaxSGD多機多卡GPU恢復(fù)訓(xùn)隊場景2.劃分數(shù)據(jù)集為訓(xùn)練集,驗證集;學(xué)習(xí)率LJSMomentam/AdaGrad/AdamuJLI-J3.構(gòu)建數(shù)據(jù)讀取器(data_loader)圖:mnist數(shù)據(jù)處理不同datainput32x32culput的數(shù)據(jù)保存的文件格式和存儲形式不盡相同,正確讀到數(shù)據(jù)往往是開始訓(xùn)練的第一步。第二節(jié):神經(jīng)網(wǎng)絡(luò)模型設(shè)計了解一下深度神經(jīng)網(wǎng)絡(luò)的設(shè)計原理。深度神經(jīng)網(wǎng)絡(luò)相比較淺層深度神經(jīng)網(wǎng)絡(luò)的區(qū)別是:網(wǎng)絡(luò)足夠深,足夠復(fù)雜,非線性程度更高。復(fù)雜的模型可以擬合更復(fù)雜的函數(shù),對現(xiàn)實世界的表征能力也會增強。非線性

4、程度的增加通過模型的深度和非線性函數(shù)來實現(xiàn),如果沒有非線性函數(shù),即使最深的神經(jīng)網(wǎng)絡(luò)也只不過是一種線性函數(shù)表達。組建網(wǎng)絡(luò)時,一般考慮到訓(xùn)練數(shù)據(jù)的數(shù)量,決定設(shè)計模型的復(fù)雜度,如果訓(xùn)練數(shù)據(jù)不足,很難把一個參數(shù)眾多的模型訓(xùn)練好。如何設(shè)計深度神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)的基本層不外乎全連接層FC,卷積層CNN,循環(huán)神經(jīng)網(wǎng)絡(luò)RNN。不同的網(wǎng)絡(luò)層有不同的適應(yīng)任務(wù),比如,CNN適合處理2D圖像數(shù)據(jù),CNN能更好的捕捉到空間位置信息,這是FC和LSTM顧及不到的,但是LSTM和FC也有其應(yīng)用的場景。C|5;CjS;Hifeaturemapsfeaturemapsfeaturemapsfeaturemaps.2乜/_10

5、x105x5SxS、圖:卷積網(wǎng)絡(luò)模型示意圖第三節(jié):損失函函數(shù)介紹通過演示在mnist分類任務(wù)subsaorplirgwnvdution回歸任務(wù)的損失函數(shù)難以在分類任務(wù)上取得較好精度。loss值較大,訓(xùn)練過程中l(wèi)oss波動明顯。所以,這里引出一個疑問?為什么分類任務(wù)用均方誤差為何不合適?答案是:1.物理含義不合理:實數(shù)輸出和標(biāo)簽相減2.分類任務(wù)本質(zhì)規(guī)律是“在某種特征組合下的分類概率”甲乙圖:抽取黑白球到最大似然體會最大似然的思想:兩個外形相同的盒子,概率甲盒中有99只白球,1只黑球;乙盒中有99個黑球個白球。一次試驗取出了一?黑球.分類任務(wù)背后是概率的思想,可以從黑盒中取黑白球的概率為例為了解最

6、大似然的思想:潔問垃個戎應(yīng)莎臭從嘟個箔辛由朋中的?foriinin.dex_list:數(shù)據(jù)處理intg-np.reshape(intgs.i.1,IMG_R0WS,IMG_C0LS).aslypeCfloat31)labelnp.reshape(labelsiFl).astypeCint64)labels_list.append(label)iflen(ifligs_list)-BATCHSIZE:yipIdnp.array1imgs_listknp*array(labels_lisritngs_lisi:=labels_list=def_mit_(self,name_5匚opm):網(wǎng)絡(luò)定義s

7、upr(MN1ST,self),_inir_(name_sccpe)num_fi.Iters-20,fiIt?r_size-.5,stride-1,padding-2)pool_size=2tpool_stride=2pool_type=max)num-filtersO,filter_size=3.stride-i.p誼pool_size2,pool_stride2pcol_typer,max)name_scope-self,full_nameOslf.convl=Conv2Dlname_scopehself,poo11=Poo12Dnane_scopehf.conv2=ConvZD(nait

8、ie_scope,self,poo!2Pod12D(name_scopeFcolt,fc-FCnaW-SCOpe,sip-10,act-sofTmax15損失函癡t計雋攝牯取一個批撫樣點損先的平均值loss=fluid,layers*cross_eiiTropy(predict+label)圖:損失函數(shù)代碼實現(xiàn)第四節(jié):優(yōu)化算法與學(xué)習(xí)率神經(jīng)網(wǎng)絡(luò)所擬合的函數(shù)是高度非凸函數(shù),理想的訓(xùn)練目標(biāo)是,優(yōu)化這類函數(shù),達到函數(shù)最小值點或接近最小值的極小值點。本部分課程中,畢老師帶代價討論優(yōu)化器和學(xué)習(xí)率對訓(xùn)練神經(jīng)網(wǎng)絡(luò)的影響,并教大家如何選取最優(yōu)的學(xué)習(xí)率和優(yōu)化器。學(xué)習(xí)率的選擇在深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)模型中,學(xué)習(xí)率代表參數(shù)

9、更新幅度的大小。當(dāng)學(xué)習(xí)率最優(yōu)時,模型的有效容量最大。學(xué)習(xí)率設(shè)置和當(dāng)前深度學(xué)習(xí)任務(wù)有關(guān),合適的學(xué)習(xí)率往往需要調(diào)參經(jīng)驗和大量的實驗,總結(jié)來說,學(xué)習(xí)率選取需要注意以下兩點:學(xué)習(xí)率不是越小越好。學(xué)習(xí)率越小,損失函數(shù)的變化速度越慢,意味著我們需要花費更長的時間進行收斂。學(xué)習(xí)率不是越大越好。因為只根據(jù)總樣本集中的一個批次計算梯度,抽樣誤差會導(dǎo)致計算出的梯度不是全局最優(yōu)的方向,且存在波動。同時,在接近最優(yōu)解時,過大的學(xué)習(xí)率會導(dǎo)致參數(shù)在最優(yōu)解附近震蕩,導(dǎo)致?lián)p失難以收斂。降1、加入“動量”,參數(shù)更新的方向更穩(wěn)定,比如Momentum優(yōu)化器。每個批次的數(shù)據(jù)含有抽樣誤差,導(dǎo)致梯度更新的方向波動較大。如果我們引入物理

10、動量的概念,給梯度下降的過程加入一定的“慣性”累積,就可以減少更新路徑上的震蕩!即每次更新的梯度由“歷史多次梯度的累積方向”和“當(dāng)次梯度”加權(quán)相加得到。歷史多次梯度的累積方向往往是從全局視角更正確的方向,這與“慣性”的物理概念很像,也是為何其起名為“Momentum”的原因。類似不同品牌和材質(zhì)的籃球有一定的重量差別,街頭籃球隊中的投手(擅長中遠距離投籃)喜歡稍重籃球的比例較高。一個很重要的原因是,重的籃球慣性大,更不容易受到手勢的小幅變形或風(fēng)吹的影響。2、根據(jù)不同參數(shù)距離最優(yōu)解的遠近,動態(tài)調(diào)整學(xué)習(xí)率,比如AdaGrad優(yōu)化器。通過調(diào)整學(xué)習(xí)率的實驗可以發(fā)現(xiàn):當(dāng)某個參數(shù)的現(xiàn)值距離最優(yōu)解較遠時(表現(xiàn)

11、為梯度的絕對值較大),我們期望參數(shù)更新的步長大一些,以便更快收斂到最優(yōu)解。當(dāng)某個參數(shù)的現(xiàn)值距離最優(yōu)解較近時(表現(xiàn)為梯度的絕對值較小),我們期望參數(shù)的更新步長小一些,以便更精細的逼近最優(yōu)解。類似于打高爾夫球,專業(yè)運動員第一桿開球時,通常會大力打一個遠球,讓球盡量落在洞口附近。當(dāng)?shù)诙U面對離洞口較近的球時,他會更輕柔而細致的推桿,避免將球打飛。與此類似,參數(shù)更新的步長應(yīng)該隨著優(yōu)化過程逐漸減少,減少的程度與當(dāng)前梯度的大小有關(guān)。根據(jù)這個思想編寫的優(yōu)化算法稱為“AdaGrad”,Ada是Adaptive的縮寫,表示“適應(yīng)環(huán)境而變化”的意思。3、因為上述兩個優(yōu)化思路是正交的,所以可以將兩個思路結(jié)合起來,這

12、就是當(dāng)前廣泛應(yīng)用的Adam算法。第五節(jié):模型訓(xùn)練及分布式訓(xùn)練此前或多或少介紹了如何訓(xùn)練神經(jīng)網(wǎng)絡(luò),但沒有涉及分布式訓(xùn)練的內(nèi)容,這里介紹一下分布式訓(xùn)練的思想,尤其是數(shù)據(jù)并行的思想,并介紹如何增加三行代碼使用飛槳實現(xiàn)多GPU訓(xùn)練。分布式訓(xùn)練有兩種實現(xiàn)模式:模型并行和數(shù)據(jù)并行。模型并行模型并行是將一個網(wǎng)絡(luò)模型拆分為多份,拆分后的模型分到多個設(shè)備上(GPU)訓(xùn)練,每個設(shè)備的訓(xùn)練數(shù)據(jù)是相同的。模型并行的方式一般適用于:模型架構(gòu)過大,完整的模型無法放入單個GPU。2012年ImageNet大賽的冠軍模型AlexNet是模型并行的典型案例。由于當(dāng)時GPU內(nèi)存較小,單個GPU不足以承擔(dān)AlexNet。研究者將A

13、lexNet拆分為兩部分放到兩個GPU上并行訓(xùn)練。網(wǎng)絡(luò)模型的設(shè)計結(jié)構(gòu)可以并行化時,采用模型并行的方式。例如在計算機視覺目標(biāo)檢測任務(wù)中,一些模型(YOLO9000)的邊界框回歸和類別預(yù)測是獨立的,可以將獨立的部分分在不同的設(shè)備節(jié)點上完成分布式訓(xùn)練。說明:當(dāng)前GPU硬件技術(shù)快速發(fā)展,深度學(xué)習(xí)使用的主流GPU的內(nèi)存已經(jīng)足以滿足大多數(shù)的網(wǎng)絡(luò)模型需求,所以大多數(shù)情況下使用數(shù)據(jù)并行的方式。數(shù)據(jù)并行數(shù)據(jù)并行與模型并行不同,數(shù)據(jù)并行每次讀取多份數(shù)據(jù),讀取到的數(shù)據(jù)輸入給多個設(shè)備(GPU)上的模型,每個設(shè)備上的模型是完全相同的。數(shù)據(jù)并行的方式與眾人拾柴火焰高的道理類似,如果把訓(xùn)練數(shù)據(jù)比喻為磚頭,把一個設(shè)備(GPU

14、)比喻為一個人,那單GPU訓(xùn)練就是一個人在搬磚,多GPU訓(xùn)練就是多個人同時搬磚,每次搬磚的數(shù)量倍數(shù)增加,效率呈倍數(shù)提升。但是注意到,每個設(shè)備的模型是完全相同的,但是輸入數(shù)據(jù)不同,每個設(shè)備的模型計算出的梯度是不同的,如果每個設(shè)備的梯度更新當(dāng)前設(shè)備的模型就會導(dǎo)致下次訓(xùn)練時,每個模型的參數(shù)都不同了,所以我們還需要一個梯度同步機制,保證每個設(shè)備的梯度是完全相同的。數(shù)據(jù)并行中有一個參數(shù)管理服務(wù)器(parameterserver)收集來自每個設(shè)備的梯度更新信息,并計算出一個全局的梯度更新。當(dāng)參數(shù)管理服務(wù)器收到來自訓(xùn)練設(shè)備的梯度更新請求時,統(tǒng)一更新模型的梯度。用戶只需要對程序進行簡單修改,即可實現(xiàn)在多GPU

15、上并行訓(xùn)練。飛槳采用數(shù)據(jù)并行的實現(xiàn)方式,在訓(xùn)練前,需要配置如下參數(shù):1從環(huán)境變量獲取設(shè)備的ID,并指定給CUDAPlacedevice_id=fluid.dygraph.parallel.Env().dev_idplace=fluid.CUDAPlace(device_id)2對定義的網(wǎng)絡(luò)做預(yù)處理,設(shè)置為并行模式strategy=fluid.dygraph.parallel.prepare_context()#新增model=MNIST(mnist)model=fluid.dygraph.parallel.DataParallel(model,strategy)#新增3定義多GPU訓(xùn)練的rea

16、der,將每批次的數(shù)據(jù)平分到每個GPU上validoader=paddle.batch(paddle.dataset.mnist.test(),batch_size=16,drop_last=true)valid_loader=fluid.contrib.reader.distributed_batch_reader(valid_loader)4收集每批次訓(xùn)練數(shù)據(jù)的loss,并聚合參數(shù)的梯度avg_loss=mnist.scale_loss(avg_loss)#新增avg_loss.backward()mnist.apply_collective_grads()#新增第六節(jié):訓(xùn)練調(diào)試與優(yōu)化在模

17、型訓(xùn)練部分,為了保證模型的真實效果,需要對模型進行一些調(diào)試和優(yōu)化:計算分類準(zhǔn)確率,觀測模型訓(xùn)練效果。交叉熵損失函數(shù)只能作為優(yōu)化目標(biāo),無法直接準(zhǔn)確衡量模型的訓(xùn)練效果。準(zhǔn)確率可以直接衡量訓(xùn)練效果,但由于其離散性質(zhì),不適合做為損失函數(shù)優(yōu)化神經(jīng)網(wǎng)絡(luò)。檢查模型訓(xùn)練過程,識別潛在問題。如果模型的損失或者評估指標(biāo)表現(xiàn)異常,我們通常需要打印模型每一層的輸入和輸出來定位問題,分析每一層的內(nèi)容來獲取錯誤的原因。加入校驗或測試,更好評價模型效果。理想的模型訓(xùn)練結(jié)果是在訓(xùn)練集和驗證集上均有較高的準(zhǔn)確率,如果訓(xùn)練集上的準(zhǔn)確率高于驗證集,說明網(wǎng)絡(luò)訓(xùn)練程度不夠;如果驗證集的準(zhǔn)確率高于訓(xùn)練集,可能是發(fā)生了過擬合現(xiàn)象。通過在優(yōu)

18、化目標(biāo)中加入正則化項的辦法,可以解決過擬合的問題。加入正則化項,避免模型過擬合??梢暬治?。用戶不僅可以通過打印或使用matplotlib庫作圖,飛槳還集成了更專業(yè)的第三方繪圖庫tb-paddle,提供便捷的可視化分析。第七節(jié):恢復(fù)訓(xùn)練此前已經(jīng)介紹了將訓(xùn)練好的模型保存到磁盤文件的方法。應(yīng)用程序可以隨時加載模型,完成預(yù)測任務(wù)。但是在日常訓(xùn)練工作中我們會遇到一些突發(fā)情況,導(dǎo)致訓(xùn)練過程主動或被動的中斷。如果訓(xùn)練一個模型需要花費幾天的訓(xùn)練時間,中斷后從初始狀態(tài)重新訓(xùn)練是不可接受的。不過飛槳等工具支持從上一次保存狀態(tài)繼續(xù)訓(xùn)練,只要我們隨時保存訓(xùn)練過程中的模型狀態(tài),就不用從初始狀態(tài)重新訓(xùn)練。飛槳保存模型的代碼如下:#保存模型參數(shù)和優(yōu)化器的參數(shù)fluid.save_dygraph(model.state_dict(),./checkpoint/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論