楊文龍 肖程望
(武漢郵電科學(xué)研究院 武漢 430074)
電子商務(wù)行業(yè)的飛速發(fā)展也是大數(shù)據(jù)時(shí)代到來征兆之一,消費(fèi)者在茫茫商品海洋中很容易就被淹沒了,大數(shù)據(jù)時(shí)代也同樣遇到這樣的問題。誠(chéng)然,這也將是機(jī)遇。如何有效地利用用戶的瀏覽記錄、購買記錄和評(píng)價(jià)數(shù)據(jù)等相關(guān)信息,推薦用戶可能需要或感興趣的商品,以節(jié)省用戶的寶貴時(shí)間,是目前解決信息過載、提高電商競(jìng)爭(zhēng)能力的有效途徑。這一問題被推薦算法[1]有效地解決了,尤其是協(xié)同過濾推薦算法在這一領(lǐng)域中的卓越表現(xiàn),更是大大提高了推薦效率和精確度。因此,推薦系統(tǒng)在領(lǐng)域中發(fā)揮的重要作用將愈發(fā)明顯。
推薦系統(tǒng)在這樣的大數(shù)據(jù)時(shí)代的背景下發(fā)揮了巨大的作用,用戶面對(duì)海量的信息做到有針對(duì)性地選取自己需要的東西變得異常艱難,供應(yīng)商確切地推送用戶真正需要、真正感興趣的東西也很困難。推薦系統(tǒng)的出現(xiàn)成了這一棘手問題的救命稻草。它通過挖掘用戶的歷史行為,對(duì)用戶的興趣范圍進(jìn)行建模,并通過該模型對(duì)用戶未來的行為進(jìn)行預(yù)測(cè),從而建立了用戶和內(nèi)容的關(guān)系[2]。當(dāng)前較為熱門的推薦方法包括:基于內(nèi)容的推薦、協(xié)同過濾[3]的推薦、基于關(guān)聯(lián)規(guī)則的推薦推薦、基于效用的、基于知識(shí)的推薦方法和組合推薦等。本文研討的是關(guān)于協(xié)同過濾推薦算法的改進(jìn)。
本文主要說的是使用神經(jīng)網(wǎng)絡(luò)算法做協(xié)同過濾。協(xié)同過濾推薦算法是推薦系統(tǒng)的關(guān)鍵,它主要包括基于用戶、基于物品及基于模型的。基于用戶的協(xié)同過濾[4]主要是著眼于用戶之間的相似度,根據(jù)相似用戶喜歡的物品相互推薦,推薦給目標(biāo)用戶后形成列表供目標(biāo)用戶選擇。基于物品的協(xié)同過濾是把著眼點(diǎn)放在物品之間聯(lián)系上,根據(jù)用戶的歷史記錄,獲取歷史記錄物品的特性和評(píng)分,找到相似屬性的物品,根據(jù)用戶歷史記錄的物品屬性,形成物品推薦列表供用戶選擇[5]。基于模型的協(xié)同過濾是對(duì)以上兩種方式的結(jié)合,形成一個(gè)用戶偏好模型,根據(jù)用戶歷史記錄或者用戶個(gè)人資料建立一個(gè)模型,通過機(jī)器學(xué)習(xí)算法完成模型的構(gòu)建[6]。
BP算法的基本思想大致歸納如下:算法的學(xué)習(xí)過程分為輸入信號(hào)的正向傳導(dǎo)和誤差信號(hào)的反向傳導(dǎo)。在數(shù)據(jù)信號(hào)的正向傳導(dǎo)階段,通過各隱含層逐層加權(quán)計(jì)算,訓(xùn)練數(shù)據(jù)樣品數(shù)據(jù)從輸入層傳入傳遞到輸出層。到達(dá)輸出層后,系統(tǒng)計(jì)算結(jié)果與數(shù)據(jù)集實(shí)際數(shù)據(jù)(矯正信號(hào))相比較,結(jié)果不符,則將誤差反向沿著正向傳播階段逐層輸入。在誤差反傳這一過程,將誤差信號(hào)分解到所有神經(jīng)單元中,在將誤差信號(hào)反轉(zhuǎn)分解傳輸?shù)倪^程中,其作為依據(jù)修正各隱層神經(jīng)單元的連接權(quán)值,以期達(dá)到期望的結(jié)果。就這樣信號(hào)向前傳播,誤差被傳播回來,并且調(diào)整每個(gè)層的權(quán)重,周而復(fù)始。直到將權(quán)重調(diào)整到可接受的誤差范圍或滿足預(yù)先設(shè)定的要求。這樣周而復(fù)始的權(quán)值調(diào)整過程就是其學(xué)習(xí)的經(jīng)過[8]。如圖1所示。

圖1 BP神經(jīng)網(wǎng)絡(luò)基本結(jié)構(gòu)
標(biāo)準(zhǔn)BP算法雖在諸多方面很有優(yōu)勢(shì),但是在實(shí)際應(yīng)用中仍然存在不足。BP神經(jīng)網(wǎng)絡(luò)的非線性優(yōu)化容易產(chǎn)生部分極小點(diǎn)問題,對(duì)網(wǎng)絡(luò)造成負(fù)面影響[9~10]。另外,在調(diào)整權(quán)重時(shí),由于它沒有考慮到時(shí)間t前的梯度方向,只是按t梯度誤差的時(shí)間降方向進(jìn)行調(diào)整,從而使訓(xùn)練過程中的權(quán)值調(diào)整發(fā)生振蕩,收斂速度較慢。為解決該問題引入了動(dòng)量因子改進(jìn)算法,該方法有效地緩解了權(quán)值調(diào)整時(shí)導(dǎo)致的收斂震蕩問題。


但是,當(dāng)誤差平面出現(xiàn)陡峭下降緊跟著陡峭上升的深坑時(shí),網(wǎng)絡(luò)訓(xùn)練可能會(huì)跳過或者停留在底部,不能實(shí)時(shí)根據(jù)當(dāng)前的誤差數(shù)據(jù)適應(yīng)走勢(shì)。動(dòng)量因子如果取值過小,那么加入動(dòng)量項(xiàng)的作用就大打折扣;若動(dòng)量項(xiàng)的值太過靠近1,會(huì)導(dǎo)致算法不穩(wěn)定。故選擇合適的動(dòng)量因子很重要[11]。
r表示輸出節(jié)點(diǎn)數(shù),含動(dòng)量因子的BP算法的權(quán)值更新表示式(2)為

其中η表示學(xué)習(xí)率;α為動(dòng)量因子。
自適應(yīng)動(dòng)量因子BP算法的權(quán)值更新公式(3)為

其中,?E(k)為E關(guān)于w在w=w(k)處的梯度,第k次訓(xùn)練網(wǎng)絡(luò)得到的網(wǎng)絡(luò)權(quán)值向量是w(k),k=1,2,…E為誤差。λ為自適應(yīng)動(dòng)量項(xiàng)的初始值,本實(shí)驗(yàn)中選擇λ=0.01。
以上是動(dòng)量因子改進(jìn)算法的數(shù)學(xué)表達(dá)式。在傳統(tǒng)的權(quán)值更新中,動(dòng)量項(xiàng)都是一個(gè)常量,這樣在算法誤差曲面平坦的時(shí)候不能快速通過,在誤差曲面陡峭的部分會(huì)出現(xiàn)算法的不穩(wěn)定。誤差曲面的陡峭程度可以用誤差關(guān)于權(quán)值向量的梯度來表示。當(dāng)梯度值較大時(shí),誤差變化較快,誤差梯度陡;當(dāng)梯度值較小時(shí),誤差變化較慢,誤差梯度平緩。基于上面的問題,自適應(yīng)動(dòng)量因子可以輕松解決,?E(k)為E關(guān)于w在w=w(k)處的梯度,這樣動(dòng)量因子e-λ-||?E(k)||就會(huì)實(shí)時(shí)更新,根據(jù)當(dāng)前需要靈活改變。此時(shí),在誤差平面的平坦部分,動(dòng)量因子增大,使權(quán)值更新向量增大,較快地通過平坦區(qū);在誤差陡峭部分,動(dòng)量因子減小,權(quán)值更新向量減小,避免出現(xiàn)算法不穩(wěn)定現(xiàn)象。綜上可知,自適應(yīng)動(dòng)量因子法可以使網(wǎng)絡(luò)訓(xùn)練加速收斂。圖2是改進(jìn)算法的代碼實(shí)現(xiàn)。

圖2 改進(jìn)算法的代碼實(shí)現(xiàn)
本算法的大致組成是根據(jù)相似性計(jì)算目標(biāo)用戶的TOP-N相似用戶;選擇前N個(gè)用戶的項(xiàng)目評(píng)分?jǐn)?shù)據(jù)組成項(xiàng)目-評(píng)分矩陣,建立用戶評(píng)分預(yù)測(cè)模型;根據(jù)項(xiàng)目-評(píng)分矩陣訓(xùn)練網(wǎng)絡(luò);輸入待評(píng)分項(xiàng)目預(yù)測(cè)評(píng)分;最后比對(duì)預(yù)測(cè)分與實(shí)際評(píng)分通過MAE值評(píng)測(cè)算法性能。用改進(jìn)的BP神經(jīng)網(wǎng)絡(luò)對(duì)協(xié)同推薦算法進(jìn)行改進(jìn)[12],其詳細(xì)算法流程如圖3。
具體的BP算法的編程實(shí)現(xiàn)步驟如下:
1)網(wǎng)絡(luò)初始化;
網(wǎng)絡(luò)初始化的內(nèi)容包括:權(quán)值矩陣W、V,誤差E,學(xué)習(xí)率η及網(wǎng)絡(luò)訓(xùn)練后的精度Emin;
2)輸出訓(xùn)練樣本對(duì),計(jì)算各層輸出;
3)計(jì)算網(wǎng)絡(luò)輸出誤差;
4)計(jì)算各層誤差信號(hào);
5)調(diào)整各層權(quán)值;
6)檢查網(wǎng)絡(luò)總誤差是否達(dá)到精度要求;
若網(wǎng)絡(luò)總誤差達(dá)到精度要求,則訓(xùn)練結(jié)束;否則跳轉(zhuǎn)2)。
本文的數(shù)據(jù)是采用的Movielens數(shù)據(jù)集,它主要用于將協(xié)作、過濾和關(guān)聯(lián)規(guī)則結(jié)合起來向它們的用戶推薦電影[13]。所使用的數(shù)據(jù)有100000條評(píng)價(jià)數(shù)據(jù)是1682部電影由943個(gè)用戶評(píng)價(jià)所得。該數(shù)據(jù)集的五分之四用于訓(xùn)練網(wǎng)絡(luò),剩下的五分之一用于做測(cè)試。電影中有18個(gè)屬性,所以BP網(wǎng)絡(luò)的輸入層和隱藏層是18個(gè)節(jié)點(diǎn),輸出層是1個(gè)節(jié)點(diǎn)。其中輸入層的18個(gè)節(jié)點(diǎn)分別代表評(píng)分項(xiàng)目的18個(gè)屬性值,隱含層節(jié)點(diǎn)數(shù)與輸入層節(jié)點(diǎn)數(shù)對(duì)應(yīng);輸出層的節(jié)點(diǎn)代表目標(biāo)項(xiàng)目的預(yù)測(cè)評(píng)分值。
使用工具箱newff()實(shí)驗(yàn)生成網(wǎng)絡(luò)、train()訓(xùn)練網(wǎng)絡(luò)及sim()方法模擬。基于改進(jìn)的BP網(wǎng)絡(luò)算法模型的訓(xùn)練結(jié)果[14]如圖4。

圖4 BP算法改進(jìn)前后訓(xùn)練比較圖
從圖4可以看出兩點(diǎn):一方面是網(wǎng)絡(luò)模型的穩(wěn)定性有了大幅的提高,看訓(xùn)練結(jié)果的走勢(shì)圖,改進(jìn)前的抖動(dòng)幅度很大,而改進(jìn)后的基本都一直在平滑的下降;另一方面,在穩(wěn)定性的基礎(chǔ)上大大減少了網(wǎng)絡(luò)訓(xùn)練的時(shí)間,改進(jìn)后的訓(xùn)練大概在700次的時(shí)候就趨于穩(wěn)定不變了,而改進(jìn)前的到達(dá)設(shè)定的1400次還沒有趨于穩(wěn)定。同時(shí),也在一定的情況下提升了預(yù)測(cè)結(jié)果的準(zhǔn)確率。整體看來,自適應(yīng)動(dòng)量因子方法很好地解決了網(wǎng)絡(luò)模型的穩(wěn)定性問題,并且大大減少了模型的訓(xùn)練時(shí)間以及提高了結(jié)果的有效性。
推薦系統(tǒng)的評(píng)價(jià)標(biāo)準(zhǔn)可分為三類:預(yù)測(cè)精度測(cè)量、分類精度測(cè)量和等級(jí)精度測(cè)量。平均絕對(duì)偏差MAE(Mean Absolute Error)是預(yù)測(cè)精度度量方法中比較常用的,我們采用它作為度量的標(biāo)準(zhǔn)[15]。預(yù)測(cè)的用戶評(píng)分和實(shí)際的用戶評(píng)分之間的絕對(duì)偏差是通過MAE計(jì)算得到的,伴隨著MAE的減小推薦質(zhì)量變高。式(4)如下:

(p1,p2,…,pN)表示由網(wǎng)絡(luò)預(yù)測(cè)的用戶評(píng)分集合,(q1,q2,…,qN)表示對(duì)應(yīng)的實(shí)際的用戶評(píng)分,N表示參與測(cè)評(píng)的用戶的個(gè)數(shù)。實(shí)驗(yàn)結(jié)果如圖5所示。

圖5 不同算法的推薦結(jié)果比較
由圖5統(tǒng)計(jì)結(jié)果比較可以看出,基于傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的推薦系統(tǒng)比直接使用協(xié)同推薦算法的MAE值小,但是相對(duì)于使用自適應(yīng)動(dòng)量因子的BP神經(jīng)網(wǎng)絡(luò)的推薦算法,改進(jìn)后的算法在推薦質(zhì)量上得到了明顯的改善。因此改進(jìn)算法的有效性得到證明。
隨著近幾年互聯(lián)網(wǎng)的爆炸式發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)也是海量出現(xiàn),這使得我們?cè)诿鎸?duì)這種海量數(shù)據(jù)時(shí)感覺到無從下手。因此,各種推薦系統(tǒng)的應(yīng)用就應(yīng)運(yùn)而生了。本文提出了一種新的確定BP算法動(dòng)量因子的方法。這種方法是一種自適應(yīng)的,它能夠在每次迭代的過程中根據(jù)權(quán)值空間中的誤差曲面的陡緩自動(dòng)的改變動(dòng)量因子的大小。經(jīng)過實(shí)驗(yàn)仿真可以看出,自適應(yīng)動(dòng)量因子比常動(dòng)量因子在穩(wěn)定性及訓(xùn)練時(shí)間方面都有大幅的提升,同時(shí)也在一定情況下提升了網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確性。