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

表1 迭代次數為80時凍結和微調方法的性能比較

表2 迭代次數為120時凍結和微調方法的性能比較

表3 迭代次數為160時凍結和微調方法的性能比較
本文主要介紹了深度遷移學習的研究背景、意義和現狀,以及深度遷移學習的一般方法和步驟,重點介紹了一種學術界最新的深度遷移學習的預處理、分析評價等方法。基于公開的最新數據集,對凍結和微調兩種深度學習方法進行了比較。這兩種方法都可以適用于樣本數據缺少的條件下的視覺對象分類等深度學習應用。