史加榮,李金紅
(西安建筑科技大學 理學院,陜西 西安 710055)
近年來,計算機系統結構(例如硬盤、CPU)的快速發展,使網絡數據呈現爆炸式增長,用戶難以從眾多信息中找到感興趣的內容。為快速檢索和提供用戶所需信息,幫助用戶過濾無效的內容,HANANI等提出了信息過濾技術[1],故而產生了推薦系統(Recommendation System,RS)[2]。推薦系統主要解決信息過載問題,即從億萬信息中提取針對不同用戶感興趣的項目和商品等,并推薦給用戶。對于商家,運用推薦系統能夠將自己的產品高效快速地推薦到用戶面前,并被用戶了解和知曉,帶來實際可觀的收益。當前,網絡APP大都包含推薦系統,例如:購物軟件(淘寶、京東)、視頻軟件(騰訊、愛奇藝、優酷)、音樂軟件(網易云音樂、QQ音樂)和搜索引擎(谷歌、百度)等都包括“猜你喜歡”“為你推薦”等板塊。個性化推薦系統已成為互聯網產品的標配[3],也是人工智能領域得以實現的基礎[4]。
由于機器學習可以挖掘海量數據所蘊含的規律,因此,研究者將機器學習算法融入到推薦系統,初步取得了良好的效果[5-6]。但隨著大數據時代的到來,推薦系統中數據的稀疏性[7]、冷啟動[8]和可解釋性[9]等問題越來越嚴重,且有的推薦系統根據用戶的一次搜索和查閱便大規模地推薦類似信息,導致用戶的不良體驗。故而,當前推薦算法的用戶滿意度低,越來越多的用戶希望擁有更智能化的推薦,以符合他們的需求[10]。為此,不斷有學者致力于研究和改進各種推薦算法,希望能夠緩解推薦系統所面臨的問題,提高用戶滿意度。
作為當前推薦系統的主流算法,協同過濾(Collaborative Filtering,CF)[11]主要分為基于內存、模型和深度學習3類[12],其中第2類主要包含矩陣分解模型。下面介紹與文中相關的矩陣分解和深度矩陣分解方法。
在2006年的Netflix大賽中,基于模型的矩陣分解以優良的推薦性能贏得了大賽第一名[13]。之后,該類方法受到了學術界的廣泛歡迎。文獻[14]總結并提出了最常見的幾種矩陣分解的推薦方法,包括基本矩陣分解(MF)、加入偏置的奇異值分解(Bias-SVD)、引入時間因子的奇異值分解(SVD++)。這里,用m×n維矩陣R=(rij)m×n表示m個用戶對n個項目的評分矩陣,基本矩陣分解形式為
R≈PQT,
(1)
其中,P∈Rm×K1為用戶隱特征矩陣,Q∈Rn×K1為項目隱特征矩陣,K1 對于評分值rij,其預測公式為 (2) 其中,pi∈R1×K1表示P的第i行對應的向量;qj∈R1×K1表示Q的第j行對應的向量。 為了得到最優的隱特征矩陣,建立如下的正則化損失函數: (3) 其中,Ω?{1,2,…,m}×{1,2,…,n}表示所有已知評分指標集合,η>0為正則化系數,‖·‖是向量的L2范數。 由于隨機梯度下降法(Stochastic Gradient Descent,SGD)易于實現且運行時間較快[15],因此可采用SGD來最小化式(3)。該方法循環遍歷訓練集中的所有評分。對于給定的隱特征向量對(pi,qj),系統都會預測其評分值,并將預測誤差定義為 (4) 對損失函數求一階梯度,在梯度的反方向上按與學習率λ成正比來更新變量: (5) 傳統矩陣分解在面對高維稀疏且規模較大的數據時,存在很大的缺陷,且對非線性結構的數據無效,最終,導致推薦精度不高。近年來,深度學習在圖像處理等領域取得了突破性的進展[16-17],并通過實驗分析驗證其更適用于大型數據。因此,一些學者便將神經網絡技術融入推薦系統,利用非線性映射打破傳統矩陣分解對非線性數據無效的瓶頸,提出深度矩陣分解(Deep Matrix Factorization,DMF)。文獻[18]利用廣義矩陣分解的線性核來對潛在特征交互進行建模,根據多層感知器的非線性核學習交互功能,通過共享相同的嵌入層進行融合,提出了神經協同過濾技術。該方法將數據矩陣中已知元素用“1”代替,未知評分用“0”代替,即 (6) 將矩陣的第i行Xi·,第j列X·j同時輸入到多層神經網絡,得到一種深度矩陣分解模型[18]。文中將此模型記為DMF1。文獻[19]在DMF1的基礎上,充分利用原始評分信息反映已知評分值,用“0”代替矩陣中的未知元素,即 (7) 該模型將Xi·和X·j作為多層神經網絡的輸入,其記為DMF2。文獻[20]利用數據中的隱式信息,開發了隱式反饋嵌入,將高維稀疏的隱式信息轉換為保留主要特征的低維向量,提高了訓練效率。文獻[21]利用深度矩陣分解進行矩陣補全(Matrix Completion,MC),同時優化了多層神經網絡的輸入和參數,將隱特征變量傳遞到輸出層來恢復缺失值,并記為MC-by-DMF。 基本矩陣分解采用雙線性映射,導致推薦性能較差,而且不適用于大規模且具有非線性結構的數據。現有的深度矩陣分解雖然利用非線性映射,但其輸入向量稀疏、維數高或求解復雜,從而影響推薦性能。為克服現有深度矩陣分解的缺陷,提出一種新型深度矩陣分解模型,并設計了一種求解算法(LMaFit+DMF):先使用低秩矩陣擬合(Low-rank Matrix Fitting,LMaFit)確定神經網絡的輸入隱特征,再通過深度神經網絡求解模型參數。 對于已知元素rij,若直接對兩個隱特征向量pi和qj采用內積運算,則無法突破rij與pi、qj之間的雙線性關系。為此,分別對隱特征向量pi和qj建立兩個多層感知器。對用戶隱特征向量pi,采用含有N1個隱層的多層感知器建立非線性映射: (8) 類似地,對項目隱特征向量qj,構建含有N2個隱層的多層感知器: (9) 為了預測評分rij,進一步要求UN1=VN2=K2。引入K2維列向量h,建立如下預測模型: (10) (11) (12) 在上述模型中,兩個多層感知器的輸入均為變量,故同時關于變量θ1和θ2來最小化目標函數是比較復雜的。 采用兩階段法來簡化新型深度矩陣分解模型的求解,即先確定θ1,再求解θ2。 (13) (14) 其中,Λ∈Rm×n為拉格朗日乘子矩陣,〈·,·〉表示兩矩陣的內積。對該函數的各個矩陣變量求梯度,得一階最優條件: (15) 其中,ΩC為集合Ω的補集。通過非線性的連續超松弛算法求解方程組(15),得到迭代公式: (16) 其中,權重參數ω≥1。 一旦θ1確定,所建立的深度矩陣分解模型就變成了傳統的多層神經網絡。求解深度神經網絡最常用的優化方式是隨機梯度下降法,它包括多種具體實現方式[15]。在第二階段,將通過比較不同優化器,采取最適合的優化器求解如下多層神經網絡: (17) (18) 其中,λ為學習率,λ>0。 1.3 麻醉方法 腰硬聯合麻醉8例,其中3例第1次腰穿失敗后立即改全身麻醉,其余121例患者均為全身麻醉。 依據最終得到的深度矩陣分解,聯合使用用戶嵌入特征f1(pi)和項目嵌入特征f2(qj)對未知評分rij進行預測,參見式(10)。圖1展示了低秩矩陣擬合與深度矩陣分解的聯合框架。 圖1 低秩矩陣擬合和深度矩陣分解的聯合框架 為驗證LMaFit+DMF的可行性和有效性,選取4個公開的數據集:sushi[24]、jester(http://eigentaste.berkeley.edu/dataset/)、ml-100k和ml-1m(https://grouplens.org/datasets/movielens/)進行實驗。Sushi根據用戶的口味和喜好等對壽司給出-1至4之間的整數評分;jester反映了用戶對不同類笑話的偏好程度,將評分值控制在-10到10之間;ml-100k和ml-1m均為公開電影評分數據集,其值在1到5之間。表1總結了這4個數據集的基本信息。 表1 數據集的基本信息 實驗在Windows 10 64位操作系統、Core i5-6300HQ處理器和12 GB內存下運行。LMaFit和MC-by-DMF均由Matlab編程實現,其他方法使用Python語言。對于所有深度矩陣分解方法,設置迭代次數為 1 000,批大小為12 500,正則化參數置為0.5,學習率為0.000 1。對于LMaFit+DMF,令N1=N2=N。在傳統矩陣分解、LMaFit和MC-by-DMF中,將數據集按7∶3隨機劃分為訓練集和測試集;在其他方法中,將數據集按7∶1∶2隨機劃分為訓練集、驗證集和測試集。采用均方根誤差(RMSE)和平均絕對誤差(MAE)作為推薦效果的評價指標: (19) (20) 其中,|Ω|為已知的用戶-項目交互數目。它們的值越小,推薦系統的準確度就越高。 首先以數據集ml-100k為例,將所提出的LMaFit +DMF與傳統的矩陣分解(MF、PMF、Bias-SVD、SVD++、LMaFit)和現有的深度矩陣分解(MC-by-DMF、DMF1、DMF2)進行比較,其中PMF(ProbabilisticMatrix Factorization)采用極大后驗估計推測用戶與項目特征。設置迭代次數均為1 000,學習率和正則化參數分別為0.000 1和0.5。在傳統的矩陣分解和LMaFit +DMF中,設置隱向量的維數K1均為100。對于MC-by-DMF,按照文獻[21]設置含有兩個隱層的網絡,節點數目分別為10、100,激活函數分別為Tanh和Linear。在DMF1、DMF2和LMaFit +DMF中,設置神經網絡隱層層數均為1,使用Relu激活函數,優化器為Adam,且隱特征向量的輸出維數K2為 50。前述9種推薦算法在訓練集和測試集上的誤差比較如表2所示。 表2 不同推薦方法在ml-100k上的性能比較 從表2可以看出:雖然LMaFit和MC-by-DMF在訓練集的評價指標上取得了較小的誤差,但其在測試集上卻非常大,這意味著LMaFit和MC-by-DMF具有較差的泛化性能。與MF、PMF、Bias-SVD和SVD++相比,DMF1和DMF2的訓練集RMSE至少下降了0.144 8,MAE至少下降了0.130 1;測試集RMSE至少下降了0.064 4,MAE至少下降了0.066 7,故這兩種深度矩陣分解優于傳統的矩陣分解。與DMF1和DMF2相比,LMaFit +DMF訓練集的RMSE至少下降了0.413 9,MAE至少下降了0.315 5;測試集的RMSE至少下降了0.497 7,MAE至少下降了0.365 0。因此,在上述9種推薦算法中,LMaFit +DMF取得了最佳的推薦性能,且改善結果顯著。 其次,在sushi、jester和ml-1m數據集上比較不同深度矩陣分解方法的性能。由于MC-by-DMF不適用于較大規模的數據集,故在jester和ml-1m的實驗中未考慮該方法。在LMaFit+DMF中,設置K1分別為80、80、500,K2分別為 50、100、50。對于sushi,MC-by-DMF的節點數目分別為10、100。實驗結果見表3至表5。 表5 不同深度矩陣分解方法在ml-1m上的性能比較 從表3可以得出如下結果:MC-by-DMF的訓練誤差非常小,測試誤差非常大;與DMF1和DMF2相比, LMaFit+DMF在訓練集上RMSE下降范圍在0.110 3~0.572 9,MAE的范圍在0.139 8~0.538 4;在測試集上的RMSE下降范圍在0.656 2~1.909 2,MAE的范圍在0.514 7~1.628 9。 表3 不同深度矩陣分解方法在sushi上的性能比較 從表4可以看出:與DMF1相比,數據集jester的LMaFit+DMF在訓練集上的評價指標至少下降了0.427 3,在測試集上的評價指標至少下降了0.517 6;雖然DMF2訓練集的各評價指標都非常低,但測試集評價指標卻非常大,因此該模型對于jester的推薦性能較差。 表4 不同深度矩陣分解方法在jester上的性能比較 比較表5得出如下結論:與DMF1和DMF2相比,數據集ml-1m的LMaFit+DMF在訓練集上RMSE下降范圍在0.219 4~0.225 3,MAE的范圍在0.229 1~0.232 6;在測試集上的RMSE下降范圍在0.313 2~0.319 5,MAE的范圍在0.286 5~0.321 1。因此,在sushi、jester和ml-1m數據集上,LMaFit+DMF明顯優于其他的深度矩陣分解算法。 在LMaFit+DMF中,將LMaFit方法得到的隱特征向量作為多層神經網絡的輸入,顯著地降低了輸入特征的維數。最后在sushi、jester、ml-100k和ml-1m這4個數據集下,比較DMF1、DMF2和LMaFit+DMF運行時間。對于數據集sushi、jester、ml-100k和ml-1m,DMF1每次迭代(epoch)的平均運行時間分別為1.607 9 s、56.512 0 s、1.893 5 s和35.263 4 s,DMF2的平均運行時間分別為1.614 6 s、56.878 1 s、1.922 1 s和38.511 9 s,而LMaFit+DMF下的平均運行時間分別為0.039 1 s、0.388 6 s、0.020 0 s和0.059 6 s。由于DMF1和DMF2的網絡輸入特征維數接近,故它們的運行時間非常接近。由于較低的隱特征維數,LMaFit+DMF的運行時間短,每次迭代的時間至少降低了97.5%。綜上,筆者提出的深度矩陣分解算法不僅顯著地改善了推薦性能,而且降低了算法的運行時間。 為了選擇最適合筆者所提方法的梯度更新策略,對4種常用的優化器Adadelta、Adagrad、Adam和RMSProp進行對比[15]。在sushi、jester、ml-100k和ml-1m數據集上進行實驗,K1分別設置為80、80、100、500,K2分別設置為50、100、50、50,激活函數均取為Relu,神經網絡的層數均為1。實驗結果如表6至表9所示。 表6 數據集sushi下不同優化器的實驗結果 表7 數據集jester下不同優化器的實驗結果 表8 數據集ml-100k下不同優化器的實驗結果 表9 數據集ml-1m下不同優化器的實驗結果 從表6至表9可以看出:優化器RMSProp的損失函數值均達到最小;對于訓練集, Adam的RMSE和MAE均取得最小值;在測試集中,Adam和RMSProp的誤差較小。因此,在后面的實驗中選取性能較優的Adam作為優化器。 9 ml-1m在不同隱層下訓練集的RMSE 先考慮用戶或項目對應的多層感知器的輸入特征維數K1和輸出特征維數K2對LMaFit+DMF的影響。根據4個數據集的維數大小來設置K1,在sushi和jester中取K1∈{30,50,80};在ml-100k中取K1∈{50,100,300};在ml-1m中取K1∈{100,300,500}。對于4個數據集,均設置輸出特征的維數K2∈{30,50,100},神經網絡隱層層數為1,激活函數為Relu。在K1與K2的不同組合下,表10至表13分別列出了數據集sushi、jester、ml-100k和ml-1m在LMaFit+DMF經過1 000次迭代之后的實驗結果。 從表10至13可以看出:在給定K1時,不同的K2對應的損失函數值以及評價指標值相差較小。當K2固定且K1增加時,表10、表12和表13的損失函數值有明顯的下降趨勢,而表11的損失函數值先增加再降低;表11的所有評價指標均先遞增再遞減;表10、表12和表13的訓練誤差呈遞減趨勢;表10的測試誤差先減后增,表12的測試誤差單調遞增,表13中測試集的RMSE單調遞減而MAE先減后增。綜上,K1的選取對LMaFit+DMF的實驗結果更加敏感,故選取合適的K1是非常重要的。此外,對某些數據集而言,較小或較大的K2對測試誤差不利。 表10 數據集sushi下不同特征維數的實驗結果 表11 數據集jester下不同特征維數的實驗結果 表12 數據集ml-100k下不同特征維數的實驗結果 表13 數據集ml-1m下不同特征維數的實驗結果 接下來考慮4個數據集分別在激活函數Sigmoid、Tanh、Relu和Softplus下的誤差。通過比較表10至表13,取數據集sushi、jester、ml-100k和ml-1m的K1值分別為80、80、100、500,K2值分別為50、100、50、50。圖2至圖5繪出了4個數據集在不同激活函數下經過1 000次迭代的訓練集的RMSE曲線。 觀察圖2至圖5,可以得出如下結論。當迭代次數較小(epoch<200)時,4種激活函數對應的訓練集的RMSE有較大的區別,Softplus均取得最小誤差,而Relu卻表現出較差的性能。對于較大的迭代次數(epoch>800),圖2中的4條曲線比較接近,Tanh、Relu和Softplus對應的3條曲線幾乎重合,且優于Sigmoid;圖4中Relu的誤差最小,且明顯優于其他3個激活函數;圖5中Relu也取得最佳性能。這些結論表明Relu是4個數據集中最適合的激活函數,且該函數運算簡單,計算速度較快。 圖2 sushi在不同激活函數下訓練集的RMSE 圖3 jester在不同激活函數下訓練集的RMSE 圖4 ml-100k在不同激活函數下訓練集的RMSE 圖5 ml-1m在不同激活函數下訓練集的RMSE 最后,在激活函數Relu下比較神經網絡隱層層數N對推薦性能的影響。當N比較大時,算法的計算復雜度和存儲復雜度均比較大,故文中只考慮了較小的層數,即N∈{1,2,3,4}。在sushi等4個數據集上進行實驗,圖6至圖9繪出了訓練集的RMSE曲線。類似地,對于較小的迭代次數,N=1與其它隱層數的訓練誤差有顯著區別。當迭代次數較大時,圖7、圖8中的4條曲線幾乎重合,圖6、圖9中的4條曲線比較接近。由于隱層層數為1的神經網絡模型的計算復雜度最低,所以在文中給定的實驗設置下,隱層層數N=1是最佳的選擇。 圖6 sushi在不同隱層下訓練集的RMSE 圖7 jester在不同隱層下訓練集的RMSE 圖8 ml-100k在不同隱層下訓練集的RMSE 針對傳統矩陣分解中兩個隱特征向量,使用兩個多層感知器和雙線性池化算子來替代雙線性映射,通過最小化正則化的損失函數來獲得隱特征向量和網絡參數。為了便于求解所建立的深度矩陣分解模型,基于兩階段法設計了求解算法:先使用LMaFit確定隱特征向量,再使用神經網絡技術求解網絡參數。在真實數據集上的實驗結果表明,筆者提出的深度矩陣分解具有最小的測試誤差,比其他的深度分解方法在運行時間上更具有優勢。 在今后的研究中,聯合優化或交替優化深度矩陣分解的模型變量將是值得研究的方向。1.2 深度矩陣分解
2 新型深度矩陣分解模型




3 模型求解
3.1 θ1的確定

3.2 θ2的更新


4 實驗結果與分析
4.1 實驗描述與實驗設置

4.2 與其他推薦方法的對比




4.3 優化器的選擇





4.4 參數對LMaFit+DMF的影響











5 結束語