本發(fā)明涉及深度學(xué)習(xí)和知識(shí)遷移的算法領(lǐng)域,尤其涉及一種在不同神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)間進(jìn)行知識(shí)遷移的方法。
背景技術(shù):
深度學(xué)習(xí)正在蓬勃發(fā)展,在識(shí)別、檢測(cè)、追蹤等多個(gè)領(lǐng)域都取得了非常矚目的進(jìn)展,學(xué)術(shù)界的研究成果的工業(yè)化、產(chǎn)品化也在有條不紊地進(jìn)行著。然而,面對(duì)不同的產(chǎn)品需求,其對(duì)網(wǎng)絡(luò)精度、運(yùn)行速度、存儲(chǔ)量的要求都不一樣。在處理同一個(gè)問(wèn)題上,對(duì)于精度要求高的平臺(tái)往往要用到比較大的模型,而對(duì)于運(yùn)行在移動(dòng)端等運(yùn)行速度優(yōu)先的任務(wù)往往要用到較為精簡(jiǎn)的網(wǎng)絡(luò)。在已有一個(gè)訓(xùn)練好的模型的情況下,根據(jù)不同的精度、運(yùn)行速度需求再重新訓(xùn)練一個(gè)模型是十分費(fèi)時(shí)耗力的。于是,如何將訓(xùn)練好的網(wǎng)絡(luò)中的知識(shí)快速遷移到另外一個(gè)結(jié)構(gòu)不同、復(fù)雜度不同的網(wǎng)絡(luò)上變得尤為重要。
目前,學(xué)術(shù)界的研究人員也有對(duì)此展開(kāi)研究的,以net2net、networkmorphism、deepcompression這些論文為代表,前兩者講的就是如何將一個(gè)小網(wǎng)絡(luò)的參數(shù)無(wú)損地拓展到另一個(gè)大網(wǎng)絡(luò)中,對(duì)網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計(jì)存在一定限制,而后者講的是一套網(wǎng)絡(luò)壓縮的方法,工程量比較大。在同樣的背景下,hinton提出了“老師-學(xué)生”訓(xùn)練方法,但其僅僅通過(guò)已訓(xùn)練好的網(wǎng)絡(luò)生成軟標(biāo)簽用于訓(xùn)練小網(wǎng)絡(luò)而已,并未過(guò)多涉及網(wǎng)絡(luò)的內(nèi)部結(jié)構(gòu),其遷移收斂速度不夠快速。
技術(shù)實(shí)現(xiàn)要素:
為了滿(mǎn)足不同的工業(yè)化、產(chǎn)品化需求,將已訓(xùn)練完畢的神經(jīng)網(wǎng)絡(luò)中的知識(shí)快速遷移到另一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)不同、復(fù)雜度不同的模型上,本發(fā)明提出一種在不同神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)間進(jìn)行知識(shí)遷移的方法。
本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
一種在不同神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)間進(jìn)行知識(shí)遷移的方法,包括步驟
s1:將已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)縱向劃分為多個(gè)子網(wǎng)絡(luò),并且使得每個(gè)子網(wǎng)絡(luò)的輸入和輸出為所述已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)不同尺度大小下的特征信息;
s2:根據(jù)不同的需求設(shè)計(jì)需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò),并使得所述需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)能劃分為與所述已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)具有相同數(shù)量的子網(wǎng)絡(luò),然后,需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)重新學(xué)習(xí)已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)中各個(gè)子網(wǎng)絡(luò)的輸入和輸出之間的映射關(guān)系;
s3:將目標(biāo)設(shè)定為:已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)與需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)輸入相同的情況下,最小化相對(duì)應(yīng)的子網(wǎng)絡(luò)的輸出特征圖之間的距離,對(duì)所述需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)進(jìn)行優(yōu)化;
s4:提取所述需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò),以低于已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)率,對(duì)所述需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)進(jìn)一步優(yōu)化。
進(jìn)一步地,步驟s1中,已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)縱向劃分為多個(gè)子網(wǎng)絡(luò)的方法包括但不限于:將一個(gè)卷積層或全連接層級(jí)聯(lián)上一個(gè)池化層和激活層劃為一個(gè)子網(wǎng)絡(luò),或,以池化層為分界線(xiàn)劃分子網(wǎng)絡(luò),或,殘差網(wǎng)絡(luò)則以步長(zhǎng)為2的層為分界線(xiàn)劃為子網(wǎng)絡(luò)。
進(jìn)一步地,步驟s2中,設(shè)計(jì)需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)時(shí),還要使得需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)的輸出特征圖的通道數(shù)、高和寬都和所述已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)中對(duì)應(yīng)的子網(wǎng)絡(luò)相同,且確保已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)和需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)的輸出特征圖之間的誤差能夠被計(jì)算。
進(jìn)一步地,步驟s3中,對(duì)所述需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)進(jìn)行優(yōu)化包括步驟:在所述需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)的對(duì)應(yīng)的子網(wǎng)絡(luò)后連接一個(gè)損失層,且在誤差回傳更新參數(shù)時(shí),每個(gè)損失層得到的梯度只用于更新當(dāng)前子網(wǎng)絡(luò)的參數(shù),不向上一個(gè)子網(wǎng)絡(luò)繼續(xù)回傳。
進(jìn)一步地,步驟s4中,對(duì)所述需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)進(jìn)一步優(yōu)化是在原數(shù)據(jù)集上進(jìn)行的,如果用戶(hù)目標(biāo)是擴(kuò)展網(wǎng)絡(luò),即希望得到比已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)精度更高或者泛化性更高的需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò),則在擴(kuò)大數(shù)據(jù)集或進(jìn)行數(shù)據(jù)增強(qiáng)后進(jìn)一步調(diào)優(yōu)。
本發(fā)明的有益效果在于,與現(xiàn)有技術(shù)相比,本發(fā)明進(jìn)一步地拓展了知識(shí)遷移模式,在精度上、遷移收斂速度上、靈活性上都具有顯著的優(yōu)勢(shì);而且實(shí)現(xiàn)簡(jiǎn)單方便,用戶(hù)只需簡(jiǎn)單改寫(xiě)一下網(wǎng)絡(luò)定義文件,就可以實(shí)現(xiàn)大部分的功能,因此具有一定的工程意義。
附圖說(shuō)明
圖1是本發(fā)明一種在不同神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)間進(jìn)行知識(shí)遷移的方法流程圖;
圖2是本發(fā)明中vgg網(wǎng)絡(luò)結(jié)構(gòu)及其子網(wǎng)絡(luò)劃分示意圖;
圖3是本發(fā)明中殘差網(wǎng)絡(luò)結(jié)構(gòu)及其子網(wǎng)絡(luò)劃分示意圖;
圖4是殘差網(wǎng)絡(luò)中的“瓶頸”結(jié)構(gòu)示意圖;
圖5a和圖5b是兩種感受野大小為3的子網(wǎng)絡(luò)選用模塊;
圖6是一種感受野大小為5的子網(wǎng)絡(luò)選用模塊;
圖7是一種感受野大小為7的子網(wǎng)絡(luò)選用模塊;
圖8是本發(fā)明中擴(kuò)展子網(wǎng)絡(luò)的一種方案示意圖;
圖9是本發(fā)明中“老師-學(xué)生”訓(xùn)練模式。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
面對(duì)不同的產(chǎn)品化需求,本發(fā)明提出一種更為靈活,實(shí)現(xiàn)更為簡(jiǎn)單而又高效的通用方法。本發(fā)明在“老師-學(xué)生”訓(xùn)練方法的啟發(fā)下,提出一種更為高效的“老師-學(xué)生”訓(xùn)練方法,以用于不同神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)間的知識(shí)快速遷移,其中“老師”網(wǎng)絡(luò)代表了已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò),“學(xué)生”網(wǎng)絡(luò)代表了需要進(jìn)行知識(shí)轉(zhuǎn)移的目標(biāo)網(wǎng)絡(luò)。
請(qǐng)參見(jiàn)圖1,本發(fā)明一種在不同神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)間進(jìn)行知識(shí)遷移的方法,包括步驟
s1::將“老師”網(wǎng)絡(luò)縱向劃分為幾個(gè)子網(wǎng)絡(luò)。
根據(jù)“老師”網(wǎng)絡(luò)的結(jié)構(gòu)不同有多種劃分模式,對(duì)于一般的網(wǎng)絡(luò)可以將一個(gè)卷積層(或全連接層)級(jí)聯(lián)上一個(gè)池化層、激活層劃為一個(gè)子網(wǎng)絡(luò)。
對(duì)于一些特殊的網(wǎng)絡(luò)也可以有特殊的劃分方式,例如論文verydeepconvolutionalnetworksforlarge-scaleimagerecognition提出的vgg網(wǎng)絡(luò)可以以池化層為分界線(xiàn)劃分子網(wǎng)絡(luò),圖2示例了vgg網(wǎng)絡(luò)的劃分方式:以池化層為分界線(xiàn)劃分子網(wǎng)絡(luò);論文deepresiduallearningforimagerecognition提出的殘差網(wǎng)絡(luò)則可以以步長(zhǎng)為2的層為分界線(xiàn)劃為子網(wǎng)絡(luò)?!袄蠋煛本W(wǎng)絡(luò)的劃分,跟后面“學(xué)生”網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計(jì)息息相關(guān),圖3示例了殘差網(wǎng)絡(luò)的劃分方式:以步長(zhǎng)為2的層為分界線(xiàn)劃分子網(wǎng)絡(luò)。這樣的劃分是有它的意義的,例如圖2中以池化層為分界線(xiàn)劃分子網(wǎng)絡(luò),是為了在“學(xué)生”網(wǎng)絡(luò)中將池化層與上面級(jí)聯(lián)的卷積層合成一個(gè)帶步長(zhǎng)的卷積層,可減少了池化層這一層,同時(shí)也降低了卷積運(yùn)算量;圖3中以步長(zhǎng)為2的卷積層位分界線(xiàn)是為了方便增加或者減少子網(wǎng)絡(luò)中的殘差單元。所以,“老師”網(wǎng)絡(luò)的劃分是跟用戶(hù)目標(biāo)相關(guān)的。
s2:根據(jù)不同的需求設(shè)計(jì)“學(xué)生”網(wǎng)絡(luò)。
這里唯一的限制就是,“學(xué)生”網(wǎng)絡(luò)可劃分為與“老師”網(wǎng)絡(luò)相同數(shù)量的子網(wǎng)絡(luò),同時(shí)各個(gè)子網(wǎng)絡(luò)的輸出大小與“老師”網(wǎng)絡(luò)中對(duì)應(yīng)的子網(wǎng)絡(luò)相同,具體指相同通道數(shù)、高、寬。這里設(shè)計(jì)“學(xué)生“網(wǎng)絡(luò)中的子網(wǎng)絡(luò)的思路與用戶(hù)需求密切相關(guān),一般需求可分為兩大類(lèi):1)壓縮網(wǎng)絡(luò);2)拓展網(wǎng)絡(luò)。
用于壓縮網(wǎng)絡(luò)可使用一些較為精簡(jiǎn)的模塊,目前學(xué)術(shù)界、工業(yè)界使用得比較多的是goingdeeperwithconvolutions這篇論文提到的inception模塊(該模塊特點(diǎn)是有多個(gè)分支,每個(gè)分支有不同核大小的卷積操作負(fù)責(zé))及其變形,因此本發(fā)明以多種該模塊的變形為例進(jìn)行闡述。
這里設(shè)計(jì)了三種感受野大小不同的inception模塊,如圖5a、圖6、圖7所示?!皩W(xué)生”子網(wǎng)絡(luò)可用圖5a模塊來(lái)學(xué)習(xí)逼近“老師”子網(wǎng)絡(luò)中3x3大小的卷積層;可用圖6模塊或者兩層圖5a模塊來(lái)學(xué)習(xí)逼近5*5大小的卷積層;可用圖7模塊或三層圖5a模塊來(lái)學(xué)習(xí)逼近7x7大小的卷積層。當(dāng)然還有更多的變形,例如圖6和圖7中的5x5以及7x7核大小的卷積層可以用多個(gè)3x3核大小的卷積層級(jí)聯(lián)替代。
當(dāng)然,設(shè)計(jì)方案是多樣的:1)例如圖5b所示的感受野大小為3x3的扁平化的“瓶頸”結(jié)構(gòu)可用于學(xué)習(xí)逼近“老師”網(wǎng)絡(luò)中3x3核大小的卷積層,設(shè)計(jì)思路是將3x3核大小的卷積層分解為3x1和1x3兩層“扁平”的卷積層級(jí)聯(lián),另外可在上、下各級(jí)聯(lián)一層1x1核大小的卷積層,主要用于降低中間卷積層的通道數(shù),進(jìn)而減少網(wǎng)絡(luò)存儲(chǔ)大小及運(yùn)算復(fù)雜度,其他卷積核大小的以此類(lèi)推;2)例如用殘差單元比較少的“學(xué)生”網(wǎng)絡(luò)去學(xué)習(xí)逼近殘差單元比較多的“老師”網(wǎng)絡(luò)??傊皩W(xué)生”子網(wǎng)絡(luò)的設(shè)計(jì)思路為設(shè)計(jì)盡可能精簡(jiǎn)但又足夠容納或者逼近“老師”子網(wǎng)絡(luò)中的“知識(shí)”。
同時(shí),從參數(shù)量化這個(gè)角度看,目前很多網(wǎng)絡(luò)都是用32位寬的浮點(diǎn)數(shù)來(lái)表示一個(gè)參數(shù)的,但事實(shí)是,對(duì)于很多任務(wù),4位寬或6位寬等低位寬的數(shù)據(jù)類(lèi)型已經(jīng)足夠表示一個(gè)參數(shù),后者相對(duì)前者可以降低網(wǎng)絡(luò)存儲(chǔ)量數(shù)倍之多。本發(fā)明提出的方法,也可以用于快速將高位寬的“老師”網(wǎng)絡(luò)轉(zhuǎn)化為低位寬的“學(xué)生”網(wǎng)絡(luò)。
上述提到的多種操作都可以融合到同一個(gè)網(wǎng)絡(luò)之中。
第二個(gè)用途用于拓展網(wǎng)絡(luò),主要是為了增加“學(xué)生”網(wǎng)絡(luò)的容納能力,將“老師”網(wǎng)絡(luò)中知識(shí)快速遷移到“學(xué)生”網(wǎng)絡(luò)之后,在此基礎(chǔ)上繼續(xù)調(diào)優(yōu),使得“學(xué)生”網(wǎng)絡(luò)的精度或者泛化性比“老師”網(wǎng)絡(luò)更優(yōu)。
拓展網(wǎng)絡(luò)可以從網(wǎng)絡(luò)深度、網(wǎng)絡(luò)寬度、卷積核的大小三個(gè)方面去進(jìn)行:
1)拓展網(wǎng)絡(luò)的深度的例子可參見(jiàn)圖8,“學(xué)生”子網(wǎng)絡(luò)可以在“老師”網(wǎng)絡(luò)的基礎(chǔ)上疊加多個(gè)殘差單元,加深網(wǎng)絡(luò)深度提高網(wǎng)絡(luò)的表征能力,為后面的進(jìn)一步調(diào)優(yōu)做準(zhǔn)備。
2)拓展網(wǎng)絡(luò)寬度由于限制于輸出特征圖的通道數(shù)必須與“老師”網(wǎng)絡(luò)相同,在擴(kuò)展寬度之后要在后面接一層1x1核大小的卷積層用于維持輸出通道數(shù)的不變。
3)拓展卷積核的大小可直接加大,例如“老師”子網(wǎng)絡(luò)3x3核大小的卷積層可通過(guò)設(shè)計(jì)5x5核大小的卷積層作為“學(xué)生”子網(wǎng)絡(luò)進(jìn)行擬合逼近。多出的參數(shù)可用于后續(xù)的調(diào)優(yōu)以及性能提升。
s3:優(yōu)化目標(biāo)為,在“老師”網(wǎng)絡(luò)與“學(xué)生”網(wǎng)絡(luò)輸入相同的情況下,各個(gè)子網(wǎng)絡(luò)的輸出特征圖盡可能相近。
這一步是本發(fā)明較為關(guān)鍵的一步,主要的思想是將原來(lái)端到端的任務(wù)切分為多個(gè)小任務(wù),每個(gè)小任務(wù)由一個(gè)損失層負(fù)責(zé),主要為學(xué)習(xí)不同尺度下特征信息的映射關(guān)系。切分為多個(gè)小任務(wù)的好處在于降低網(wǎng)絡(luò)的尋優(yōu)空間、加快“學(xué)生”網(wǎng)絡(luò)的收斂。
以圖9為例,左側(cè)的虛線(xiàn)框?yàn)椤袄蠋煛本W(wǎng)絡(luò),右側(cè)的虛線(xiàn)框?yàn)椤皩W(xué)生”網(wǎng)絡(luò),根據(jù)上述提及的原則劃分好子網(wǎng)絡(luò)。在各個(gè)相對(duì)應(yīng)的子網(wǎng)絡(luò)間連接損失層,通過(guò)誤差回傳訓(xùn)練當(dāng)前的“學(xué)生”子網(wǎng)絡(luò)。需要注意的是,這里的誤差只回傳到當(dāng)前子網(wǎng)絡(luò),不往上面的子網(wǎng)絡(luò)回傳。損失層可選擇l1誤差或歐式距離誤差,一般選擇l1誤差效果會(huì)更好些。同時(shí),每個(gè)子網(wǎng)絡(luò)的輸入為上一子網(wǎng)絡(luò)的輸出,這樣的好處在于可彌補(bǔ)上一子網(wǎng)絡(luò)學(xué)習(xí)產(chǎn)生的誤差。
在訓(xùn)練完圖9整個(gè)過(guò)程之后,可單獨(dú)提取“學(xué)生”網(wǎng)絡(luò),在較低的學(xué)習(xí)率下進(jìn)一步調(diào)優(yōu)。訓(xùn)練的時(shí)候可以采用無(wú)標(biāo)簽數(shù)據(jù)集,因?yàn)椤袄蠋煛本W(wǎng)絡(luò)潛在里已經(jīng)給出了數(shù)據(jù)標(biāo)簽。當(dāng)然,在后續(xù)調(diào)優(yōu)時(shí)還是要用上帶標(biāo)簽數(shù)據(jù),因?yàn)檎{(diào)優(yōu)過(guò)程已經(jīng)脫離了“老師”網(wǎng)絡(luò)。調(diào)優(yōu)這一步根據(jù)精度要求可選擇性地進(jìn)行。當(dāng)然,如果為了得到比“老師”網(wǎng)絡(luò)精度和泛化性更好的“學(xué)生”網(wǎng)絡(luò)(即拓展網(wǎng)絡(luò)),則需要擴(kuò)大訓(xùn)練集或者進(jìn)行數(shù)據(jù)增強(qiáng)等操作。
本發(fā)明提供的一種在不同神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)間進(jìn)行知識(shí)遷移的方法,能快速地將原網(wǎng)絡(luò)的“知識(shí)”遷移到新的網(wǎng)絡(luò),主要可用于拓展網(wǎng)絡(luò)以及壓縮加速原網(wǎng)絡(luò),在大部分的樣例中,其訓(xùn)練速度和精度都要優(yōu)于直接從零重新訓(xùn)練一個(gè)新的網(wǎng)絡(luò)。本發(fā)明提供了一種新的“老師-學(xué)生”學(xué)習(xí)方法。在“老師”網(wǎng)絡(luò)(即已訓(xùn)練完畢的神經(jīng)網(wǎng)絡(luò))的幫助下,將原本一個(gè)端到端的學(xué)習(xí)任務(wù)(輸入到輸出的映射關(guān)系)分解為多個(gè)較為簡(jiǎn)單的子任務(wù)(由“老師”網(wǎng)絡(luò)給出的多個(gè)中間特征信息間的映射關(guān)系),大大降低了“學(xué)生”網(wǎng)絡(luò)(即將要進(jìn)行知識(shí)遷移的目標(biāo)網(wǎng)絡(luò))的參數(shù)尋優(yōu)空間,使得“老師”模型的知識(shí)能快速遷移到“學(xué)生”模型上。這種方法可同時(shí)用于模型拓展以及模型壓縮加速,相對(duì)于直接從零開(kāi)始重新訓(xùn)練一個(gè)網(wǎng)絡(luò),在精度以及訓(xùn)練速度上都具有一定的優(yōu)勢(shì)。
以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也視為本發(fā)明的保護(hù)范圍。