孫書寧
(鹽城市實(shí)驗(yàn)高級中學(xué),江蘇鹽城,224000)
目前,在物聯(lián)網(wǎng)、互聯(lián)網(wǎng)背景下形成的移動互聯(lián)網(wǎng)上,通過幾行代碼就可以很容易獲得海量的樣本數(shù)據(jù)集。為了進(jìn)一步提高各種實(shí)際應(yīng)用中所需的分類和識別任務(wù)的精度和準(zhǔn)確率,基于這些積累的海量數(shù)據(jù)集的各種深度學(xué)習(xí)算法被提出來。同時(shí),近些年來的競賽結(jié)果表明,這些算法也確實(shí)較好地提升了分類和識別任務(wù)的性能。
然而,一些在線和實(shí)時(shí)監(jiān)測等深度學(xué)習(xí)應(yīng)用需求的涌現(xiàn)和發(fā)展,例如,為取得戰(zhàn)場主動權(quán)的全天候、實(shí)時(shí)和動態(tài)的合成孔雷達(dá)等相關(guān)的在線深度學(xué)習(xí)應(yīng)用??紤]到新的類別識別需求不斷增加和新類別的數(shù)據(jù)量在短期內(nèi)嚴(yán)重缺乏,使得這些深度學(xué)習(xí)算法在這種場景下分類和識別的性能嚴(yán)重下降。另外,隨著深度學(xué)習(xí)的發(fā)展,基于移動互聯(lián)網(wǎng)的海量數(shù)據(jù)集的訓(xùn)練模型不斷地公開。為此,我們研究樣本嚴(yán)重缺乏的遷移深度學(xué)習(xí)算法,也就是我們可以遷移這些訓(xùn)練模型到上面的實(shí)際深度學(xué)習(xí)任務(wù)中,從而有效地解決了實(shí)際場景中樣本數(shù)據(jù)量不足和非實(shí)時(shí)性帶來的識別性能下降的問題。
近些年來,深度學(xué)習(xí)算法在圖像識別、視覺對象分類、語音和視頻識別等領(lǐng)域得到了較好的發(fā)展, 深度遷移學(xué)習(xí)作為一種有效的方式將會被廣泛使用。本質(zhì)上,深度學(xué)習(xí)是一種包含多個(gè)隱藏層的多層人工神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法。它是將一系列低層通用型特征通過非線性變換,從而形成高層的語義表示。目前,比較流行的網(wǎng)絡(luò)模型有:AlexNet、GoogLeNet、VGG 和 ResNet。AlexNet描述了一個(gè)由三個(gè)全連接層和5個(gè)卷積神經(jīng)網(wǎng)絡(luò)層組成的網(wǎng)絡(luò)訓(xùn)練模型。重疊的池層使用使得該網(wǎng)絡(luò)模型較好地避免了樣本數(shù)據(jù)訓(xùn)練過程中而導(dǎo)致的過度擬合。VGG模型可以理解為一種純深度層次擴(kuò)展網(wǎng)絡(luò)模型,作者利用3x3卷積過濾較好地實(shí)現(xiàn)了深度層次的擴(kuò)展。在GoogLeNet網(wǎng)絡(luò)模型中,作者不僅從深度層次,而且從網(wǎng)絡(luò)模型的寬度層次對現(xiàn)有模型進(jìn)行了擴(kuò)展。ResNet是一種可以比前面幾種網(wǎng)絡(luò)模型訓(xùn)練層次更多的殘差網(wǎng)絡(luò)模型。
遷移學(xué)習(xí)是一種將已經(jīng)學(xué)習(xí)到的一般知識遷移到當(dāng)前的網(wǎng)絡(luò)學(xué)習(xí)中,從而得到一個(gè)具有更高層的語義表達(dá)的新網(wǎng)絡(luò)模型。在深度學(xué)習(xí)中,遷移學(xué)習(xí)主要是指將基于海量數(shù)據(jù)集訓(xùn)練得到的具有通用特征網(wǎng)絡(luò)模型遷移到新的具有特定的全局的網(wǎng)絡(luò)訓(xùn)練模型中,由此較好地體現(xiàn)了類間區(qū)分性和類內(nèi)不變形。
本文采用深度學(xué)習(xí)模型的是上面提到的VGG網(wǎng)絡(luò)訓(xùn)練模型。VGG模型是牛津大學(xué)于2014年提出的計(jì)算機(jī)視覺領(lǐng)域ILSVRC競賽獲勝的算法。類似于具有層次數(shù)為8的AlexNet模型,VGG也主要關(guān)注于通過提高網(wǎng)絡(luò)訓(xùn)練層次的深度來提升性能的深度學(xué)習(xí)算法,但它做了兩個(gè)方面的改進(jìn):一是使用最小的過濾器和最小步長;二是對整張圖片進(jìn)行多尺度測試和訓(xùn)練。由此,使得它的訓(xùn)練層次深度達(dá)到或超過AlexNet模型的兩倍,例如具有深度層次分別為16和19的VGG16模型和VGG19模型。它在圖像識別和視覺分類等應(yīng)用中可以達(dá)到較高的準(zhǔn)確率。VGG卷積采用的是核大小為3*3的小卷積核,跨度為stride為1,填充參數(shù)padding為1,網(wǎng)絡(luò)是分區(qū)塊卷積網(wǎng)絡(luò),每個(gè)區(qū)塊通過池大小為2x2的最大池(max-pooling)方式進(jìn)行池化操作來達(dá)到無縫連接,從而達(dá)到逐層訓(xùn)練的更深的網(wǎng)絡(luò)層次?;具^程可概括為如下幾步:
(1)裁剪圖片為大小224x224x3的圖片,并以此大小作為VGG16的輸入,分別經(jīng)過64個(gè)卷積核大小為3*3*3和3*3*64的兩次卷積后,進(jìn)行池化操作max-pooling。卷積核大小為3*3*3每次卷積后,VGG16將增加(3x3x3)個(gè)權(quán)訓(xùn)練參數(shù),而卷積核大小為3*3*64每次卷積后,VGG16將增加(3x3x64)個(gè)權(quán)訓(xùn)練參數(shù)。
(2)分別經(jīng)過 128 個(gè)卷積核大小為 3*3*64 和 3*3*128的兩次卷積后,進(jìn)行池化操作max-pooling。
(3)分別經(jīng)過 256 個(gè)卷積核大小為 3*3*128、3*3*256和3*3*256的三次卷積后,進(jìn)行池化操作max-pooling。
(4)對下面過程重復(fù)兩次:分別經(jīng)過512個(gè)卷積核大小為 3*3*256、3*3*512 和 3*3*512 的三次卷積后,進(jìn)行池化操作max-pooling。
(5)最后執(zhí)行三次全連接FC過程。
整個(gè)過程只有13個(gè)卷積層和3個(gè)全連接層(即16個(gè)隱藏層的激活單元使用了ReLU)。經(jīng)過13個(gè)卷積層的堆疊和三個(gè)全連接層后,最后將得到的特征映射單元輸入softmax層。VGG通過感受野來將一個(gè)較大的卷積核替換為多個(gè)較少的3*3的小卷積核的堆疊,由此減少了需要訓(xùn)練的參數(shù)和通過增加了較多的非線性映射而達(dá)到增加網(wǎng)絡(luò)的快速擬合能力。
深度遷移學(xué)習(xí)是指通過使用一個(gè)已訓(xùn)練好的適用于不同但是相關(guān)的深度學(xué)習(xí)任務(wù)模型,從而有利于縮小深度學(xué)習(xí)可能模型的搜索范圍。它主要有凍結(jié)(Frozen)和微調(diào)(Finetuning)兩種實(shí)現(xiàn)方式。在本文,我們主要考慮只有少量源數(shù)據(jù)情況下的深度學(xué)習(xí),為了達(dá)到更好的性能,因此我們使用上面的兩種實(shí)現(xiàn)方式來進(jìn)行遷移訓(xùn)練出具有更高性能的網(wǎng)絡(luò)模型,并對它們進(jìn)行了比較。
這部分將使用VGG16來對圖像進(jìn)行分成分五個(gè)類別,使用的數(shù)據(jù)集見如下鏈接http://download.tensor fl ow.org/example_images/ fl ower_photos.tgz。 本文實(shí)驗(yàn)是基于deeplearning4j開發(fā)環(huán)境的。
本文訓(xùn)練數(shù)據(jù)采用的是和VGG相似的數(shù)據(jù)生成方式,如果要使用224×224的數(shù)據(jù)生成方式,當(dāng)圖片的最小邊為224時(shí),直接將另一邊多余的部分裁剪為224即可。當(dāng)最短邊大于224時(shí),可以將這個(gè)圖片裁剪為包含所要訓(xùn)練數(shù)據(jù)的對象即可。在具體操作時(shí),本文使用的是多尺度訓(xùn)練,即把原始圖縮放到最短邊大于224,進(jìn)而在整張圖上裁剪出包含訓(xùn)練對象的224×224的圖片片斷。有兩種方式選取最短邊,一是最短邊分別為256和384來進(jìn)行訓(xùn)練,我們這兩個(gè)訓(xùn)練結(jié)果的平均值作為訓(xùn)練值;當(dāng)最短邊在一個(gè)上下界都大于224的區(qū)間上隨即選取一個(gè)值,基于這個(gè)隨機(jī)選取的圖片,我們裁剪出224×224的圖片片斷來進(jìn)行訓(xùn)練,并將這個(gè)隨機(jī)裁剪的圖片作為訓(xùn)練值。概括地說,在這個(gè)生成過程中,也就是首先準(zhǔn)備好下面實(shí)驗(yàn)所需的訓(xùn)練數(shù)據(jù)和相應(yīng)的測試數(shù)據(jù);其次是考慮打到特定領(lǐng)域圖像的均值文件可能與在某個(gè)數(shù)據(jù)集(ImageNet)上具有更一般的數(shù)據(jù)均值不同,因此需要重新計(jì)算實(shí)驗(yàn)所需的數(shù)據(jù)集均值文件;然后再對數(shù)據(jù)集進(jìn)行預(yù)處理。因此,下面介紹的兩種遷移方法的實(shí)驗(yàn)是基于上面裁剪和預(yù)處理后數(shù)據(jù)集的。
(1)凍結(jié)(Frozen):首先,為了和設(shè)置的分類目標(biāo)任務(wù)一致,我們讓除了指定block5_pool所在的層和該層以下的所有各層處于被凍結(jié)(Frozen)狀態(tài),即保持被凍結(jié)的層的參數(shù)是遷移過來的常量,我們考慮了指定的層分別block5_pool和fc2。當(dāng)指定層為block5_pool時(shí),則block5_pool和它以下的個(gè)層被凍結(jié)并block5_pool-> fl atten->fc1->fc2->predictions(1000 classes)更 改 為block5_pool-> fl atten->fc1->fc2->fc3->newpredictions(5 classes)后訓(xùn)練得到的模型。
(2)微調(diào)(Finetuning):首先,基于預(yù)訓(xùn)練和上面的凍結(jié)方法產(chǎn)生一個(gè)供微調(diào)使用的已保存狀態(tài)存在的基于微調(diào)的訓(xùn)練模型。此處重載那些未被凍結(jié)的層參數(shù)設(shè)置,例如學(xué)習(xí)速率等,但采用的優(yōu)化算法仍然不變。然后,調(diào)用上面訓(xùn)練并保存好的模型,設(shè)置好微調(diào)參數(shù)進(jìn)行仔細(xì)訓(xùn)練,以期達(dá)到更好性能。概括地說,就是先修改最后一層網(wǎng)絡(luò)的輸出類別為實(shí)驗(yàn)要求的類別后,在這一層設(shè)置較快的學(xué)習(xí)速率;然后微調(diào)總的學(xué)習(xí)速率、步長和迭代次數(shù)(稍微減少)等參數(shù);為了提高速度,訓(xùn)練中盡量裝載已保存的預(yù)訓(xùn)練的模型參數(shù)。
(1)正確率(accuracy) 對于二分類來說,正確率=(TP+TN)/(P+N),其中TP是指正例樣本中被劃分為正例的樣本實(shí)例數(shù),即第一個(gè)字母是類別劃分是正確(T)還是錯誤的(F),第二個(gè)字母是分類器分類為的類別。P是指正例的樣本數(shù),TN和N的定義與TP和P正好相反。 因此,正確率是所有的樣本實(shí)例數(shù)除被正確分類的樣本數(shù)。
(2)精度(precision)精度=TP/(TP+FP),即被分類為正例的樣本示例中實(shí)際的類別為正例的比率。
(3)召回率(recall)召回率=TP/(TP+FN)=TP/P(實(shí)際為正例總數(shù))=靈敏度(sensitive)。
(4)F1 Score它是精度(precision)和召回率(recall)的調(diào)和平均,它是根據(jù)表達(dá)式F1=[2*P*R]/(P+R)計(jì)算得到的,其中P和R分別指的是精度和召回率。
在下面的表1~3中,我們分別測試了迭代次數(shù)為80、120和160是的性能比較,其中當(dāng)?shù)螖?shù)為160時(shí)基于Frozen的模型訓(xùn)練結(jié)束。結(jié)果表明,當(dāng)凍結(jié)為block5_pool及以下層時(shí)且微調(diào)的學(xué)習(xí)速率是1e-5時(shí)微調(diào)的性能要比凍結(jié)(學(xué)習(xí)速率是5e-5)的性能更好,如表1~3所示。
表1 迭代次數(shù)為80時(shí)凍結(jié)和微調(diào)方法的性能比較
表2 迭代次數(shù)為120時(shí)凍結(jié)和微調(diào)方法的性能比較
表3 迭代次數(shù)為160時(shí)凍結(jié)和微調(diào)方法的性能比較
本文主要介紹了深度遷移學(xué)習(xí)的研究背景、意義和現(xiàn)狀,以及深度遷移學(xué)習(xí)的一般方法和步驟,重點(diǎn)介紹了一種學(xué)術(shù)界最新的深度遷移學(xué)習(xí)的預(yù)處理、分析評價(jià)等方法?;诠_的最新數(shù)據(jù)集,對凍結(jié)和微調(diào)兩種深度學(xué)習(xí)方法進(jìn)行了比較。這兩種方法都可以適用于樣本數(shù)據(jù)缺少的條件下的視覺對象分類等深度學(xué)習(xí)應(yīng)用。