沈?qū)W利,馬玉營,梁振興
(遼寧工程技術(shù)大學(xué) 軟件學(xué)院,遼寧 葫蘆島 125105)
隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)量呈指數(shù)級(jí)增長,用戶面臨信息過載問題[1]。由于面對(duì)海量信息用戶很難快速獲取感興趣信息,信息生產(chǎn)者也很難將信息推薦給需要的用戶,因此推薦系統(tǒng)應(yīng)運(yùn)而生。推薦系統(tǒng)是基于對(duì)用戶和物品的分析,推薦給用戶最有可能感興趣的物品[2]。在推薦系統(tǒng)中協(xié)同過濾算法是使用較廣泛的算法,其利用用戶和項(xiàng)目的相似模式來提供個(gè)性化推薦[3]。但是協(xié)同過濾算法過多依賴用戶對(duì)項(xiàng)目的顯式反饋或隱式反饋,存在數(shù)據(jù)稀疏的問題。然而深度神經(jīng)網(wǎng)絡(luò)的應(yīng)用在很大程度上緩解了數(shù)據(jù)稀疏問題,推薦系統(tǒng)的準(zhǔn)確度也得到較大提升[4]。近些年,變分自動(dòng)編碼器(Variational Auto-Encoder,VAE)[5]受到研究人員的廣泛關(guān)注,也產(chǎn)生了很多的變體模型。文獻(xiàn)[6]將VAE 應(yīng)用在協(xié)同過濾算法中,構(gòu)建多項(xiàng)變分自動(dòng)編碼 器(Multinomial Variational Auto-Encoder,Multi-VAE)模型,使用多項(xiàng)似然函數(shù)替代高斯似然函數(shù),同時(shí)在損失函數(shù)中加入正則化項(xiàng)以增強(qiáng)模型的解耦能力和提高模型的推薦效果??紤]模型限制條件,文獻(xiàn)[7]設(shè)計(jì)基于條件的變分自動(dòng)編碼器(Conditioned Variational Auto-Encoder,C-VAE)模型,該模型將標(biāo)簽條件加入到VAE 中,同時(shí)對(duì)損失函數(shù)做出了改進(jìn),增加了模型的可解釋性。文獻(xiàn)[8]提出宏觀和微觀雙層結(jié)構(gòu)變分自動(dòng)編碼器(Macro-Micro Disentangled Variational Auto-Encoder,Macrid-VAE)模型,該模型使用多層神經(jīng)網(wǎng)絡(luò)獲取高層次概念,再與用戶行為進(jìn)行結(jié)合,然后通過VAE 獲取微觀表現(xiàn),提高了模型精確度,同樣也增加了模型可解釋性。
上述研究成果提高了模型的可解釋性和精確度,但卻忽略了VAE 模型本身的局限性。傳統(tǒng)的VAE 模型除了會(huì)導(dǎo)致模型過度正則化外,還會(huì)造成只有少量隱向量被激活,該情況會(huì)隨著網(wǎng)絡(luò)深度的加深變得更加嚴(yán)重[7]。為此,本文提出融合復(fù)雜隱向量先驗(yàn)和注意力機(jī)制的變分自動(dòng)編碼器模型,簡稱為CCPAM-VAE。使用復(fù)雜隱向量先驗(yàn)分布替代標(biāo)準(zhǔn)正態(tài)分布,利用神經(jīng)網(wǎng)絡(luò)訓(xùn)練生成的偽輸入作為假數(shù)據(jù)替代原數(shù)據(jù),提高模型執(zhí)行效率。通過添加輔助隱向量,增加隱向量的低維表現(xiàn)能力和解耦性。基于注意力機(jī)制強(qiáng)化具有較高權(quán)重值的重要信息,弱化具有較低權(quán)重值的不重要信息。
變分自動(dòng)編碼器由KINGMA 等[9]于2013 年 提出,是一個(gè)深度生成模型,結(jié)合了變分貝葉斯方法和神經(jīng)網(wǎng)絡(luò),將求和問題轉(zhuǎn)化為優(yōu)化問題,大大增加了模型適用范圍,廣泛應(yīng)用于自然語言處理、計(jì)算機(jī)視覺、推薦系統(tǒng)等領(lǐng)域[10-12]。變分自動(dòng)編碼器的整體框架由編碼器和解碼器組成,因?yàn)榫幋a器和解碼器具有很大的靈活性,所以可以選擇不同的神經(jīng)網(wǎng)絡(luò)作為組成部分。用戶-物品的評(píng)分矩陣(見圖1)作為輸入數(shù)據(jù)輸入模型,解碼器最終輸出得到重構(gòu)后的數(shù)據(jù),通過最小化與輸入數(shù)據(jù)的誤差來優(yōu)化模型參數(shù)。同時(shí),重構(gòu)后的數(shù)據(jù)包含了之前評(píng)分矩陣的未評(píng)分?jǐn)?shù)據(jù)[13-15]。VAE 模型分為變分推理過程和生成過程,對(duì)于每個(gè)用戶u的生成部分過程表示如下:
圖1 用戶-物品評(píng)分矩陣Fig.1 User-item rating matrix
其中:zu表示用戶u的隱向量;pθ(zu)~N(0,I)表示隱向量zu的先驗(yàn)分布服從標(biāo)準(zhǔn)正態(tài)分布。
本文設(shè)計(jì)的CCPAM-VAE 模型整體采用編碼器-解碼器結(jié)構(gòu),如圖2 所示。在編碼器階段,輸入數(shù)據(jù)經(jīng)過密集塊(Dense Block,DB)生成輔助隱向量z1,將z1與上一層DB 塊的輸出聯(lián)合,作為下一個(gè)DB塊的輸入,生成隱向量z2。在解碼器階段,將輔助隱向量z1和隱向量z2經(jīng)過注意力機(jī)制模塊的輸出聯(lián)合,輸入到DB 塊,得到的結(jié)果輸入到Softmax 函數(shù)中獲得重構(gòu)數(shù)據(jù)。在模型的編碼器和解碼器階段,使用跳躍連接,加快模型優(yōu)化速度,緩解深層網(wǎng)絡(luò)的退化現(xiàn)象。
圖2 CCPAM-VAE 模型結(jié)構(gòu)Fig.2 CCPAM-VAE model structure
DB 模塊結(jié)構(gòu)如圖3 所示。首先對(duì)輸入數(shù)據(jù)x進(jìn)行Dropout[16]操作,可以暫時(shí)屏蔽部分神經(jīng)元,由于每次訓(xùn)練所屏蔽的神經(jīng)元不一定相同,因此在一定程度上增加了模型的泛化能力;然后經(jīng)過一個(gè)帶有Tanh 激活函數(shù)的全連接層進(jìn)行特征提??;最后使用批量標(biāo)準(zhǔn)化(Batch Normalization,BN)進(jìn)行歸一化處理,加快模型收斂速度。DB 模塊的表達(dá)式如式(4)所示:
圖3 DB 模塊結(jié)構(gòu)Fig.3 DB module structure
其中:w0是全連接層的權(quán)重值;b0是偏置;x0是模塊輸入;x1是模塊輸出。
2.2.1 偽輸入計(jì)算
通過最大化下界lgpθ(xu) 來優(yōu)化參數(shù)θ、φ,lgpθ(xu)的下界如下:
式(5)也被稱為證據(jù)下界(Evidence Lower Bound,ELBO),其中,qφ(zu|xu)表示后驗(yàn)分布,KL(*)表示Kullback-Leibler 散度,用來衡量兩個(gè)概率分布之間的差距。
對(duì)KL 散度部分進(jìn)行分解可得到:
其中,θ、φ、λ分別代表不同的分布參數(shù)。
式(6)右邊的第一部分是重構(gòu)誤差,第二部分是變分后驗(yàn)分布的熵,第三部分是變分后驗(yàn)和先驗(yàn)的交叉熵。使用拉格朗日乘子對(duì)第三部分求最大值,如式(7)所示:
后驗(yàn)分布如式(8)所示:
其中:N是數(shù)據(jù)集的大小。
由于求解先驗(yàn)分布需要使用整個(gè)數(shù)據(jù)集,這樣做不僅浪費(fèi)計(jì)算資源,還會(huì)導(dǎo)致模型過擬合,因此使用可學(xué)習(xí)數(shù)據(jù)替代原數(shù)據(jù),可以很好地解決該問題,如式(9)所示:
2.2.2 偽輸入模塊
如圖4 所示,在偽輸入模塊中,首先將輸入數(shù)據(jù)輸入a個(gè)DB1塊中,所得的結(jié)果再輸入到DB1塊,輸出μ1和σ1(如式(10)所示),然后使用隱向量模塊中的重參數(shù)化技術(shù),如圖5 所示,其中σ2表示方差,μ表示均值,o表示重采樣,將數(shù)據(jù)采樣問題轉(zhuǎn)化為標(biāo)準(zhǔn)正態(tài)分布采樣問題,最后由式(10)得到z1。
圖4 偽輸入模塊結(jié)構(gòu)Fig.4 Pseudo input module structure
圖5 隱向量模塊Fig.5 Hidden vector module
接著將z1與式(10)上一層的輸出聯(lián)合,輸入到DB2塊中得到μ2和σ2。使用重參數(shù)化技術(shù)得到z2。該過程不僅能夠使得采樣過程獨(dú)立,而且可以通過反向傳播更新參數(shù)。
在訓(xùn)練過程中,傳統(tǒng)的變分自動(dòng)編碼器模型經(jīng)常出現(xiàn)隱向量非激活情況,這種情況會(huì)隨著網(wǎng)絡(luò)深度的加深變得更加嚴(yán)重。為解決該問題,在模型中添加輔助隱向量,雙隱向量結(jié)構(gòu)如圖6 所示,包含x作為輸入數(shù)據(jù)的變分過程和x作為生成數(shù)據(jù)的生成過程。
圖6 雙隱向量結(jié)構(gòu)Fig.6 Double implicit vector structure
變分過程如式(14)所示:
生成過程如式(15)所示:
最終得到帶有輔助隱向量的損失函數(shù),如式(16)所示:
隨著近些年深度學(xué)習(xí)的快速發(fā)展,注意力機(jī)制已成為計(jì)算機(jī)視覺、自然語言處理、語音識(shí)別等領(lǐng)域的重要技術(shù)[17-19]。Transformer[20]等神經(jīng)網(wǎng)絡(luò)模型與注意力機(jī)制相結(jié)合后,性能得到大幅提升。
隱向量作為用戶-物品評(píng)分?jǐn)?shù)據(jù)的高維表示,對(duì)于重構(gòu)數(shù)據(jù)起著至關(guān)重要的作用。因?yàn)殡[向量非激活問題也同樣影響著重構(gòu)數(shù)據(jù)的質(zhì)量,所以本文通過融合注意力機(jī)制,對(duì)隱向量中含有重要信息的節(jié)點(diǎn)賦予更大的權(quán)重值,增強(qiáng)重要信息在重構(gòu)數(shù)據(jù)中的作用;對(duì)于不重要的信息賦予更小的權(quán)重值,弱化其在重構(gòu)數(shù)據(jù)中的影響,同時(shí)也減少了噪聲。
在注意力模塊中,首先將隱向量輸入函數(shù)Z生成注意力得分,然后經(jīng)過Softmax 函數(shù),對(duì)注意力得分進(jìn)行0-1 范圍映射,將其轉(zhuǎn)化為和為1 的概率值,最后將概率值與隱向量做乘積,如式(17)~式(19)所示,注意力模塊結(jié)構(gòu)如圖7 所示。函數(shù)Z的選擇很多,本文僅使用帶有激活函數(shù)的全連接層作為函數(shù)Z。
圖7 注意力模塊Fig.7 Attention module
其中:w是全連接層權(quán)重;Z是注意力評(píng)分;a是經(jīng)過0-1 范圍映射的評(píng)分值;oout是該模塊的輸出。
采用4 個(gè)公開的數(shù)據(jù)集Movielens-1M(ML-1M)、Movielens-Latest-Small(ML-LS)、Movielens-20M(ML-20M)、Netflix 測(cè)試模型性能,數(shù)據(jù)集包含用戶對(duì)物品的評(píng)分,評(píng)分范圍為[1,5]。數(shù)據(jù)集介紹具體如下:
1)ML-1M 數(shù)據(jù)集是Movielens 數(shù)據(jù)集之一,包括6×103個(gè)用戶、4×103部電影和1×108個(gè)電影評(píng)分。
2)ML-LS 數(shù)據(jù)集來源于Movielens 電影網(wǎng)站,能夠進(jìn)行自動(dòng)采集更新,包含6×102個(gè)用戶、9×103部電影和1×105個(gè)電影評(píng)分。
3)ML-20M 數(shù)據(jù)集來源于Movielens 電影網(wǎng)站2015 年4 月提供的數(shù)據(jù),包括1.38×105個(gè)用戶、2.7×104部電影和2×107個(gè)電影評(píng)分。
4)Netflix 數(shù)據(jù)集來源于電影租賃網(wǎng)站Netflix 2005 年公布的數(shù)據(jù),包含4.8×105個(gè)用戶、1.7×104部電影和1×108個(gè)電影評(píng)分。
數(shù)據(jù)集詳細(xì)信息如表1 所示。
表1 數(shù)據(jù)集詳細(xì)信息Table 1 Dataset details
為測(cè)試模型在強(qiáng)泛化下的性能,對(duì)數(shù)據(jù)集進(jìn)行如下處理[20]:
1)將數(shù)據(jù)集劃分為訓(xùn)練集(80%)、驗(yàn)證集(10%)、測(cè)試集(10%)3 個(gè)部分,使用訓(xùn)練集的用戶歷史點(diǎn)擊記錄訓(xùn)練模型。首先從驗(yàn)證集和測(cè)試集的用戶中獲取一部分歷史點(diǎn)擊記錄了解模型性能表現(xiàn),然后通過查看模型對(duì)其他未顯示的歷史點(diǎn)擊記錄的排名來計(jì)算性能指標(biāo)。
2)對(duì)數(shù)據(jù)集進(jìn)行預(yù)處理。首先將用戶-項(xiàng)目評(píng)分表轉(zhuǎn)化為值為0 或1 的二值化矩陣,將其作為隱式反饋表,具體方式是將評(píng)分大于3.5 的值設(shè)為1,評(píng)分小于或者等于3.5 的值設(shè)為0;然后移除評(píng)分次數(shù)少于5 的用戶。
CCPAM-VAE 模型算法由Python 語言實(shí)現(xiàn)。實(shí)驗(yàn)硬件設(shè)備為Intel?CoreTMi7-8700 @3.2 GHz 處 理器,GeForce RTX 2080Ti 11 GB 顯卡,32 GB 運(yùn)行內(nèi)存。為了使模型達(dá)到較好的效果,使用網(wǎng)格搜索法進(jìn)行超參數(shù)搜索。超參數(shù)搜索范圍如表2 所示。使用Adam 優(yōu)化器[21]訓(xùn)練模型,使用ReLU 作為層與層之間的激活函數(shù)。采用Xavier 隨機(jī)初始化[22]對(duì)模型參數(shù)進(jìn)行初始化,保證了每層輸出的方差不受該層輸入個(gè)數(shù)影響,且每層梯度的方差也不受該層輸出個(gè)數(shù)影響。
表2 超參數(shù)取值范圍Table 2 Super-parameter value ranges
Multi-DAE[5]將DAE 應(yīng)用于協(xié)同過濾算法,并使用多項(xiàng)式邏輯似然函數(shù)替代經(jīng)典高斯似然函數(shù),實(shí)驗(yàn)結(jié)果證明其取得了不錯(cuò)的效果。
Multi-VAE[5]將VAE 應(yīng)用于協(xié)同過濾算法,并使用β-VAE[4]損失函數(shù),其中超參數(shù)β作為重建損失和KL 損失之間的權(quán)衡參數(shù)添加到損失函數(shù)中。
Macrid-VAE[7]在Multi-VAE 的基礎(chǔ)上,將神經(jīng)網(wǎng)絡(luò)擬合生成的類別向量矩陣與輸入相乘,對(duì)輸入數(shù)據(jù)高維度和低維度解耦,增強(qiáng)了模型的可解釋性。
CDAE[7]將用戶潛在因素作為額外輸入,添加到標(biāo)準(zhǔn)去噪自動(dòng)編碼器模型中。與標(biāo)準(zhǔn)去噪自動(dòng)編碼器模型一樣,使用Dropout 方式對(duì)輸入數(shù)據(jù)添加噪聲。
NCF[23]構(gòu)建用于協(xié)同過濾的神經(jīng)網(wǎng)絡(luò)特征學(xué)習(xí)框架,并將用戶和物品潛在特征輸入到該框架中。
在測(cè)試集上,CCPAM-VAE 模型使用NDCG@K和Recall@K兩個(gè)評(píng)估指標(biāo)為每個(gè)用戶預(yù)測(cè)項(xiàng)目排名,并將其與真實(shí)項(xiàng)目排名進(jìn)行比較。
DCG@K為折損累計(jì)增益,是一種對(duì)排序結(jié)果的評(píng)價(jià)指標(biāo),用戶u的DCG@K如式(20)所示,其中,I[·]是指示函數(shù),r(i)是排名為i的物品,Tu是用戶u點(diǎn)擊過的物品集合。NDCG@K是DCG@K經(jīng)過歸一化后的值,取值范圍為[0,1]。
Recall@K為召回率,是一種衡量推薦效果的指標(biāo),用戶u的Recall@K如式(21)所示,其中分母是K和用戶點(diǎn)擊的物品數(shù)的最小值。
3.6.1 模型性能對(duì)比
表3 從Recall@20、Recall@50、NDCG@100 3 個(gè)指標(biāo)對(duì)CCPAM-VAE 模型進(jìn)行評(píng)估,在數(shù)據(jù)集ML-1M 上,指標(biāo)平均提升了10.79%、5.12%、8.74%;在數(shù)據(jù)集ML-LS 上,指標(biāo)平均提升了26.20%、22.26%、17.42%;在數(shù)據(jù)集ML-20M 上,指標(biāo)平均提升了7.47%、6.97%、6.97%;在數(shù)據(jù)集Netflix 上,指標(biāo)平均提升了7.34%、8.86%、8.82%。上述結(jié)果表明,相較于基線模型,本文模型不僅在大數(shù)據(jù)集ML-1M、ML-20M、Netflix 上有較好的表現(xiàn),在小數(shù)據(jù)集ML-LS 上也有不錯(cuò)的效果。這表明復(fù)雜先驗(yàn)?zāi)軌驇椭P蛯W(xué)習(xí)更加復(fù)雜的數(shù)據(jù)關(guān)系,減少模型出現(xiàn)過擬合的情況。同時(shí),基線模型Macrid-VAE 在這4 個(gè)數(shù)據(jù)集上的表現(xiàn)要優(yōu)于其他基線模型,這表明高維度解耦能夠顯著提升性能。
表3 CCPAM-VAE 模型與基線模型的性能對(duì)比Table 3 Performance comparison among CCPAM-VAE model and baseline models
3.6.2 不同隱藏層維度和K值對(duì)模型性能的影響
圖8 給出了當(dāng)隱藏層維度d取100、200、300、400、500 而其他參數(shù)不變的情況下,CCPAM-VAE 模型在4 個(gè)數(shù)據(jù)集上的NDCG@100 值。從圖8 可以看出,隱藏層維度的增加不一定能帶來模型性能的提升,過高維度或者過低維度會(huì)導(dǎo)致模型過擬合或者欠擬合的現(xiàn)象,使模型表現(xiàn)不佳。對(duì)于數(shù)據(jù)集MLLS,在隱藏層維度d=200 時(shí),模型性能達(dá)到最佳。對(duì)于數(shù)據(jù)集ML-1M、ML-20M、Netflix,隱藏層維度d=300 時(shí),模型性能達(dá)到最佳。這說明對(duì)于不同規(guī)模的數(shù)據(jù)集,模型達(dá)到最佳性能所需的隱藏層維度不一定是相同的。
圖8 隱藏層維度對(duì)NDCG@100 的影響Fig.8 Impact of hidden layer dimensions on NDCG@100
圖9給出了當(dāng)K取5、10、15、20時(shí),CCPAM-VAE 模型和基線模型在4 個(gè)數(shù)據(jù)集上的NDCG@K值。在數(shù)據(jù) 集ML-20M、Netflix、ML-1M 上,當(dāng)K取5 時(shí),NDCG@K的值幾乎最大,這表明在數(shù)據(jù)量比較大的情況下,CCPAM-VAE 模型和基線模型不僅適合對(duì)物品進(jìn)行Top-K推薦,而且適合應(yīng)用于推薦數(shù)量有限的場(chǎng)景。在數(shù)據(jù)量較小的數(shù)據(jù)集ML-LS 中,隨著K值的增大,NDCG@K的值也不斷增大,這表明在數(shù)據(jù)量比較小的情況下,CCPAM-VAE 模型和基線模型不適合進(jìn)行Top-K推薦。由此可見,CCPAM-VAE 模型在4 個(gè)數(shù)據(jù)集上的表現(xiàn)均優(yōu)于基線模型。
圖9 CCPAM-VAE 模型與基線模型在4 個(gè)數(shù)據(jù)集上的NDCG@K 對(duì)比Fig.9 NDCG@K comparison among CCPAM-VAE model and baseline models on four datasets
3.6.3 消融實(shí)驗(yàn)分析
在數(shù)據(jù)集ML-1M、ML-LS、ML-20M 和Netflix上對(duì)CCPAM-VAE 模型的復(fù)雜先驗(yàn)和注意力模塊進(jìn)行有效性驗(yàn)證,結(jié)果如表4 所示。其中,#-表示不使用復(fù)雜先驗(yàn)和注意力模塊,#a 表示使用復(fù)雜先驗(yàn),#b 表示添加注意力模塊,#ab 表示使用復(fù)雜先驗(yàn)和注意力模塊。從表4 可以看出,獨(dú)立使用復(fù)雜先驗(yàn)和添加注意力模塊均能提升模型精確度,將兩者同時(shí)加入CCPAM-VAE 模型,可使模型精確度達(dá)到最佳。
表4 CCPAM-VAE 模型消融實(shí)驗(yàn)的Recall@50 對(duì)比Table 4 Recall@50 comparison of ablation experiment of CCPAM-VAE model
本文提出融合復(fù)雜隱向量先驗(yàn)與注意力機(jī)制的變分自動(dòng)編碼器模型,使用復(fù)雜隱向量先驗(yàn)分布使模型獲得更多的潛在表征,通過添加輔助隱向量增加隱向量的低維表現(xiàn)能力和解耦性。在公開的數(shù)據(jù)集Movielens-1M、Movielens-Latest-Small、Movielens-20M 和Netflix 上,基 于Recall@20、Recall@50 和NDCG@100 指標(biāo)進(jìn)行性能評(píng)估,驗(yàn)證了該模型相較于基線模型能夠有效提高推薦精確度。但由于本文僅將評(píng)分矩陣作為模型輸入,在后續(xù)研究中還將在變分自動(dòng)編碼器中融入知識(shí)圖譜、圖神經(jīng)網(wǎng)絡(luò)[24-25]等更復(fù)雜的數(shù)據(jù)形式和數(shù)據(jù)關(guān)系,進(jìn)一步研究其對(duì)推薦效果的影響。