王 艷,李 昂,2,王晟全
(1.南京理工大學紫金學院 電子工程與光電技術學院, 南京 210023;2.南京郵電大學通信學院, 南京 210003)
大數據時代,網絡上的數據呈現了爆炸性的增長,推薦算法能夠幫助用戶在海量數據中快速、有效、準確地獲取感興趣及有用的信息。用戶的個性化需求不斷增長,各種個性化推薦系統借助大數據得以實現,各個公司也致力于開發各種推薦算法系統,這樣可以讓用戶對產品著迷,有效提升用戶對產品的粘性,增加用戶的忠誠度。
傳統的推薦算法主要可以分為3種:基于內容的推薦算法(content-based recommendation)、協同過濾推薦算法(collaborative filtering recommendation)和基于知識的推薦算法(knowledge-base recommendation)[1]。近些年來,深度學習在計算機視覺、人臉識別、自動語音識別、自然語言處理、自動駕駛等領域取得了突破性的進展。基于深度學習的推薦算法可以在各個領域中都被采用,比如在電子商務中推薦用戶可能喜愛的商品;在最近極其火爆的短視頻中推薦用戶喜愛的視頻;在線上著裝購物中為用戶推薦穿著搭配方案等[2]。基于深度學習的推薦算法本質是圖片分類,通過不同圖片的標簽,對深度學習的神經網絡進行訓練,根據標簽對圖片進行分類[3]。
本文提出了一種基于深度學習的細粒度圖像推薦算法。細粒度圖像算法能夠較好地感知圖片的細節,如形狀、材質、紋理等特性。因此,細粒度相對于對粗粒度的大類別,可以進行更加細致的子類推薦。本算法首先使用數據集分類模型對雜亂無章的數據集進行分類,然后使用改進KNN聚類算法對數據集進行初選,再通過深度學習VGG-16網絡進行訓練,并在經典數據集中對算法進行了驗證。實驗結果表明,和其他經典推薦算法相比,該算法的正確率有明顯提高。
本文所提出的圖像推薦算法包括3個步驟:數據集分類、數據集初選和數據集訓練,其中數據集訓練是推薦算法的核心。
數據集分類采用三元組模型實現,作用是將訓練集的圖片生成三元組為單位的訓練集。如何有效地生成三元組訓練集,會很大程度影響最終結果。此外,可以通過不同的組合形成不同的三元組,變相增加了整個數據集的大小,使得數據量相對較小的數據集也能用深度學習網絡訓練出不錯的效果。在生成三元組過程中使用了隨機選取圖片的方法,不可避免地會出現損失特別小、很難處理的三元組,從而阻礙了網絡的訓練,因此需要對三元組數據集進行初選。
數據集初選采用改進KNN算法實現,能夠在數據集中選取更加有效的圖像。KNN算法(k-nearest neighbors,KNN)又稱K最近鄰算法,是一種基于機器學習的分類算法,工作原理是利用訓練數據對特征向量空間進行劃分,并將劃分結果作為最終算法模型[4-6]。本文采用一種新的數據預處理機制來改進算法,即將特征參數類相關度概念引入KNN分類,能夠提高算法的準確性和效率。
數據集采用深度學習進行訓練。這部分作用是將圖片映射成特征向量,即通過大量數據集訓練優化參數得到,是本文推薦算法的核心。深度學習(deep learning)是基于學習數據特征內容的算法,使用多層非線性處理單元進行特征提取和轉換[7-8],每個連續層使用前一層的輸出作為輸入。深度學習選用VGG網絡,它是較為優秀的圖像分類方法,在各種場合都有使用[9-10]。VGG有2個版本VGG-16和VGG-19分別是16層網絡和19層網絡,本文選用的是VGG-16,與VGG-19相比有幾乎完全相同的準確度,但是由于VGG-16網絡結構層數少,運算速度更快一些[11]。
在分類之前,引入一個概念,即如何定義2張圖片的相似度。這里用到了歐幾里得距離,是在m維空間中2個點之間的真實距離。在此模型中的公式為:

(1)
式(1)中:p1、p2是圖片;f是映射函數,將圖片映射成特征向量。當D(f(p1),(p2))值越小時,2張圖片越相似。
數據集分類采用經典三元組模型,該模型訓練學習的基本單元,包含3個圖像:查詢圖像(anchor image),正面圖像(positive image)和負面圖像(negative image)。其中正面圖像是與查詢圖像相近的圖像,或者可以說是通過查詢圖像要推薦的圖片;負面圖像是與查詢圖像不相近的圖片,或者是不希望通過查詢圖像推薦的圖像。三元組模型的目標如圖1所示,擴大查詢圖像與負面圖像之間的距離,并減少與正面圖像之間的距離。

圖1 三元組模型的學習目標示意圖
KNN改進算法是對三元組模型分類后的數據集進行初選,即在KNN中引入特征參數類相關度差異優化距離機制。
2.2.1特征參數類相關度差異優化距離機制
特征參數ti相關度Corr(ti)的定義:設是訓練樣本集,它包含了n個不同類別的樣本,這些類別分別用C1,C2,…,Cr,…,Cn表示,樣本記為Xi(i=1,2,…,m)[12-14]。設Xi具有q個特征屬性Ap(p=1,2,…,q),Ap具有v個特征參數ti(i=1,2,…,v),|ti|記為具有特征參數ti樣本的個數,|tir|記為特征參數ti在Cr類樣本中出現的次數,則特征參數ti的類相關度(期望信息)為:
(2)
樣本間的距離d(X,Y)的定義為:

(3)
2.2.2特征參數類相關度優化距離的KNN改進算法
針對經典KNN算法,采用新的數據預處理機制改進算法,將特征參數類相關度概念引入KNN分類。大量的研究表明,訓練數據的類別如果不再細分的話,類別數不是很多,特征參數的重復率也較高,尤其對于一些常用的數據更是如此。如果使用降維方法對數據進行相似度計算,會因為數據向量維數偏低或維數不適中而丟失過多、甚至重要的特征信息,從而影響分類效果。基于此因素考量,改進算法仍采用傳統KNN算法中將訓練集樣本與待分樣本的所有特征屬性值均作為相似度計算參數的模式,主要通過優化距離機制,從根本上保證KNN分類的準確性及效率。
采用類相關度優化距離的KNN改進算法的實現:
輸入:訓練集與測試集合表示為(X1,Y1),(X2,Y2),…,(Xm,Ym),Xi∈Rm,Yi∈Zm。輸出:測試集的類別標簽 class(T)。
1) 根據式(2)計算訓練集中每個樣本及待分樣本的所有特征參數對分類的相關度Diff,由Diff值向量化數據特征集,對樣本參數進行相關度計算預處理,實現基于類相關度的樣本特征提取,其中X=[X1,X2,…,Xm]2,Y=[Diff(t1),Diff(t2),…,Diff(tq)]T。
2) 使用式(3)計算待分樣本與訓練集各樣本的距離。
3) 判斷樣本的類別歸屬。
按照x和xi的距離遠近排序,得到最近的k個樣本,根據這k個樣本的類別得到x的類別。
數據集采用深度學習VGG-16網絡進行訓練,將圖片映射成特征向量,通過大量數據集訓練優化參數得到。VGG-16的深度學習網絡原理如圖2所示。

圖2 VGG-16原理框圖
VGG-16網絡主要由圖2中的ConvNet和2個較淺的卷積網絡組成,這三者為平行結構[15-16]。ConvNet有多層卷積網絡,其作用是捕獲圖片語義,而其他2個網絡架構是捕獲圖片的視覺信息,最后將這三部分結果線性合,然后進行歸一化,最終得到結果為4 096維的向量。其中Normalization是一種提高神經網絡性能和穩定性的技術,這個想法是以一種方式來標準化輸入,使得它們的平均輸出激活為零,標準偏差為1,創建統計學的移位和縮放版本。這個操作可以使得網絡訓練速度更快,使權重更容易初始化,可以允許更高的學習率,使更多激活函數可行,使得訓練更深的網絡成為可能,防止過擬合[17-18]。
在這網絡結構中,卷積層起到了局部特征檢測器的作用,最大池化層則是增加神經網絡的魯棒性,歸一化增加了網絡的魯棒性以及加快了模型的收斂。
在本文中使用的VGG-16網絡,其結構如圖3所示,共13個卷積層(convolution+ReLU)、3個全連接層(fully conneted+ReLU)、5個池化層(max pooling)。

圖3 VGG-16結構示意圖
模型中除了歸一化處理,還采用Dropout防止過擬合。Dropout是指在每一步訓練過程中,按一定概率隨機忽略某些神經元[19]。這里“忽略”是指這些神經元在向前傳播和反向傳播中不被考慮。在每個訓練階段,單個節點或者以概率1-p從網絡中被拋棄,或者以概率p保持,從而留下減少的網絡。其步驟可分為:① 按概率隨機刪除網絡層中的一些隱藏的人工神經元,但保持輸入輸出神經元數量不變;② 將輸入經過修改后的網絡進行前向傳播,然后將誤差通過修改后的網絡進行反向傳播;③ 對于另外一批的訓練樣本,重復上述操作①。由于計算的神經元減少,可以在一定程度上加速學習,Dropout工作示意圖如圖4所示。
本實驗使用了MSTAR官方數據集,該數據集是經典的公開軍事目標訓練集,來自美國國防高級研究計劃署,包括 60 000 個樣本,測試數據集有10 000個樣本。每個MSTAR官方數據集的圖片是28*28像素的灰度軍事圖片,記錄了前蘇聯的T72坦克、A64坦克等武器裝備的雷達圖像。MSTAR官方數據集截圖如圖5所示。

圖5 MSTAR官方數據數據集截圖
訓練時候使用了4 200組分類模型做訓練,525組分類模型做驗證集,考慮到該數據集圖片種類繁多、訓練數據太少,可能會導致收斂速度慢、驗證集損失居高不下的結果,因此把推薦算法的目標范圍縮小,目的是用少量數據即可得到較好的推薦結果。這樣可以有效地規避上述問題,也不會導致欠擬合現象發生。
由于計算能力的限制,GPU顯存為4G,批大小(batch size)最多只能設為7組分類模型,即21張圖,epoch為5。在實驗中分別訓練了T72坦克和A64坦克兩種型號的圖片,推薦圖片分別見圖6和圖7所示。

圖6 假想的T72坦克推薦圖片

圖7 假想的A64坦克推薦圖片
從圖6、圖7推薦結果可見,該算法能夠較好地提取兩種坦克細致的特征,根據細粒度的內容進行T72和A64坦克推薦。
該算法在測試集上的正確率如表1所示,正確率計算方法是:給定一組三元組 各種網絡結構算法在公開數據集ILSVRC上的表現如表2所示,具體為驗證集和測試集的錯誤率統計。其中最后一行為本文算法在數據集中的性能表現:top-1 val錯誤率為23.2%,top-5 val錯誤率為6.2%,top-5 test錯誤率為6.5%。可見,和其他經典推薦算法相比,錯誤率有所下降,性能得到有效提高。 表1 測試集正確率 表2 驗證集和測試集的錯誤率 本文提出了一種基于深度學習的細粒度圖像推薦算法,使用分類模型對雜亂無章的數據集進行分類,然后采用改進KNN聚類算法實施初選,再通過VGG-16網絡進行訓練,并在經典軍事目標訓練集數據集MSTAR對所提算法進行驗證。該算法淡化了標簽的作用,使得網絡具有較好的擴展性,可以對沒有訓練過的類別進行預測;能對更細節的圖像進行推薦;可以將圖片映射的向量存儲,有效節約計算資源,提升算法的運行速度。和其他經典推薦算法相比,提出的算法在公開數據集ILSVRC中的錯誤率下降,性能得到有效提高。,若D(q,p)


4 結論