王日彤
(東北大學理學院 遼寧省沈陽市 110819)
圖像分類是計算機視覺領域最重要的任務之一,其主要過程包括數(shù)據(jù)預處理,圖像特征提取和分類決策。近年來隨著深度學習的發(fā)展,卷積神經(jīng)網(wǎng)絡(CNN)模型替代傳統(tǒng)圖像分類模型成為圖像分類任務的主流模型,有很好的圖像分類效果。常用的模型有VGG、ResNet、DenseNet 等等。
在卷積神經(jīng)網(wǎng)絡(CNN)模型中,首先定義損失函數(shù)用于計算模型預測值與真實值之間的誤差,然后計算損失函數(shù)對模型各參數(shù)的梯度值,最后利用優(yōu)化算法對模型參數(shù)進行迭代更新。當前深度學習的主流優(yōu)化算法為梯度下降法及其變種形式,標準梯度下降算法在每一步迭代的過程中需要使用全部訓練樣本,雖然參數(shù)更新方向最穩(wěn)定,但時間與空間的消耗巨大。因此在實際問題中通常使用隨機梯度下降算法(SGD),每一步只使用隨機抽樣的一個樣本更新參數(shù)方向[1],這減少了迭代的計算量。后來研究人員主要在方向和學習率兩方面進行了改進,2015年Diederik 等人綜合了前人算法的優(yōu)勢并提出了Adam 算法,在后續(xù)發(fā)展中Adam 算法成為最常用的算法之一。
考慮到深度學習關于優(yōu)化算法的研究主要依據(jù)梯度下降法,本文基于共軛梯度法,在CIFAR-10 圖像分類數(shù)據(jù)集上設計實驗,構建卷積神經(jīng)網(wǎng)絡(CNN)模型并采用修正的三項PRP 共軛梯度法(M-PRPCG)與Adam 算法分別訓練模型,比較實驗結果。
共軛梯度法是介于梯度下降法與牛頓法之間的一個方法,它僅需要利用一階導數(shù)信息,不但克服了梯度下降法收斂慢的特點,又避免了牛頓法需要儲存和計算海塞矩陣并求逆的缺點。共軛梯度法不僅是解大型線性方程組最有用的方法之一,也是解大型非線性最優(yōu)化問題最有效的方法之一[2]。其主要思想是結合梯度下降方向與共軛性,構建一組共軛方向,并沿該方向進行參數(shù)更新。參數(shù)更新公式為:
表1:修正的三項共軛梯度算法
表2:實驗結果
其中gt為模型參數(shù)的梯度,βt為一個參數(shù),根據(jù)選取的不同有PRP、FR、DY 等共軛梯度法。在工程數(shù)值優(yōu)化領域中,PRP 共軛梯度法在實際問題中的數(shù)值效果很好[3],其βt的選取為:
2017年Bakhtawar Baluch 等人在文獻[4]中結合了PRP 共軛梯度法與三項共軛梯度算法的優(yōu)點,提出了新的三項PRP 共軛梯度算法,具有不依賴于任何線搜索的充分下降性質,同時證明了在Wolfe 線搜索準則下對非凸問題的全局收斂性。新的三項PRP 共軛梯度算法參數(shù)更新方向dt公式為:
其中,
線搜索的目的是讓目標函數(shù)有足夠的下降量。
本文設計的用于訓練卷積神經(jīng)網(wǎng)絡模型的修正的三項PRP 共軛梯度算法(M-PRPCG)描述見表1。
算法利用了公式(4)的參數(shù)更新方向dt。由于實際圖像分類任務中整個模型的參數(shù)量達到千萬級別,若每次更新一個參數(shù)都進行線搜索計算會造成計算與存儲成本過高,因此在線搜索部分進行調整。首先考慮到線搜索的目的是讓目標函數(shù)即損失函數(shù)有充分的下降量以及在每輪更新過程只能利用本輪和上輪的數(shù)據(jù),因此在計算當前步的學習率過程中添加超參數(shù)γ 對項進行近似,其中 為公式(8)不等式兩邊的差值估計,即為損失函數(shù)的下降量。然后近似計算學習率圖像數(shù)據(jù)集中存在大量離群樣本會導致部分參數(shù)梯度過大,這造成在某個方向上的學習率變大,進而導致模型不收斂。因此設定一個限制項α 對學習率大小進行控制,當學習率αt≥α 時,令αt=α,這樣就使得模型可以正常收斂。
修正的三項PRP 共軛梯度法(M-PRPCG)在迭代點處利用梯度構造了一組共軛的下降方向,使得參數(shù)在各方向上的更新均不沖突。算法利用一階梯度信息并配合線搜索確定學習率,計算方便的同時又解決了梯度下降法收斂精度不高的問題,因此可以應用到深度學習圖像分類任務中來。
圖1:模型收斂曲線
實驗采用深度學習框架Pytorch,所用數(shù)據(jù)集為CIFAR-10 圖像分類數(shù)據(jù)集,包含60000 張32*32 的彩色圖像,有10 類物體圖片,每類6000 張,分為訓練集和測試集。其中,訓練集為5000 張圖片,測試集為1000 張圖片。
實驗平臺選擇為windows10 系統(tǒng),CPU 為Intel(R)Core(TM)i5-7300HQ CPU@2.50GHz,GPU 型號為GTX-1050TI,顯存為4g,使用NVIDIA CUDA 對GPU 進行加速。
采用的卷積神經(jīng)網(wǎng)絡(CNN)模型為ResNet18 和VGG16,為當前深度學習領域主流的圖像分類模型。
實驗以測試集分類準確率為評價指標,即分類正確的樣本數(shù)量占總樣本數(shù)量的比重。設分類正確的樣本數(shù)為b,總樣本數(shù)為a,則分類準確率(Accuracy)為:
實驗是在CIFAR-10 圖像分類數(shù)據(jù)集上進行,使用ResNet18和VGG16 作為卷積神經(jīng)網(wǎng)絡模型,再利用修正的三項PRP 共軛梯度法(M-PRPCG)與當前主流的Adam 算法對模型進行訓練,其中迭代輪數(shù)epochs 設為100,批樣本數(shù)batch_size 設為256,學習率learning rate 設為0.01,M-PRPCG 算法中的參數(shù)設置為
采用M-PRPCG 算法和Adam 算法訓練的模型在訓練集與測試集上的圖像分類準確率見表2。
圖1 為ResNet18 模型和VGG16 模型在測試集上的分類準確率收斂曲線。
從圖1 的收斂曲線可以看出,雖然在訓練初期修正的三項PRP共軛梯度算法(M-PRPCG)準確率有較大幅度的振動,但仍可以快速收斂到一個較高的值。從表2 的實驗結果可以看出,在相同的CNN圖像分類模型上,采用修正的三項PRP共軛梯度法(M-PRPCG)訓練出的模型在測試集上的準確率均高于使用Adam 算法訓練出的模型的準確率。
實驗結果表明,使用修正的三項PRP 共軛梯度法(M-PRPCG)訓練出CNN 圖像分類模型的分類準確率更高,實驗效果更好。
對于深度學習的CNN 圖像分類模型的優(yōu)化算法部分,本文應用的修正的三項PRP 共軛梯度算法(M-PRPCG)具有不依賴于任何線搜索的充分下降性質,能夠保證在每次參數(shù)更新后損失函數(shù)有足夠的下降量。本文在CIFAR-10 圖像分類數(shù)據(jù)集上使用修正的三項PRP 共軛梯度算法(M-PRPCG)分別對ResNet18 和VGG16 模型進行訓練。實驗結果表明,本文所設計的修正的三項PRP 共軛梯度算法(M-PRPCG)相比于Adam 算法有更好的圖像分類效果,可以應用到圖像分類任務中去。