達觀數據周顥鈺:想寫出人見人愛的推薦系統,先了解經典矩陣分解技術

圖片描述

網絡中的信息量呈現指數式增加,隨之帶來了信息過載問題。推薦系統是大數據時代下應運而生的產物,目前已普遍應用於電商、社交、短視頻等領域。本文將針對推薦系統中基於隱語義模型的矩陣分解技術來進行討論。html

NO.1 評分矩陣、奇異值分解與Funk-SVD

對於一個推薦系統,其用戶數據能夠整理成一個user-item矩陣。矩陣中每一行表明一個用戶,而每一列則表明一個物品。若用戶對物品有過評分,則矩陣中處在用戶對應的行與物品對應的列交叉的位置表示用戶對物品的評分值。這個user-item矩陣被稱爲評分矩陣。算法

圖片描述

上圖即爲評分矩陣的一個例子。其中的?表示用戶尚未對物品作出評價,而推薦系統最終的目標就是對於任意一個用戶,預測出全部未評分物品的分值,並按分值從高到低的順序將對應的物品推薦給用戶。網絡

說到矩陣分解技術,首先想到的每每是特徵值分解(eigendecomposition)奇異值分解(Singular value decomposition,SVD)機器學習

對於特徵值分解,因爲其只能做用於方陣,所以並不適合分解評分矩陣這個場景。函數

而對於奇異值分解,其具體描述爲:假設矩陣M是一個mn的矩陣,則必定存在一個分解圖片描述,其中U是mm的正交矩陣,V是nn的正交矩陣,Σ是mn的對角陣,能夠說是完美契合分解評分矩陣這個需求。其中,對角陣Σ還有一個特殊的性質,它的全部元素都非負,且依次減少。這個減少也特別快,在不少狀況下,前10%的和就佔了所有元素之和的99%以上,這就是說咱們可使用最大的k個值和對應大小的U、V矩陣來近似描述原始的評分矩陣。學習

因而咱們立刻能獲得一個解決方案:對原始評分矩陣M作奇異值分解,獲得U、V及Σ,取Σ中較大的k類做爲隱含特徵,則此時M(mn)被分解成U(mk) Σ(kk)V(kn),接下來就能夠直接使用矩陣乘法來完成對原始評分矩陣的填充。可是實際上,這種方法存在一個致命的缺陷——奇異值分解要求矩陣是稠密的。也就是說SVD不容許待分解矩陣中存在空白的部分,這一開始就與咱們的問題所衝突了。大數據

固然,也能夠想辦法對缺失值先進行簡單的填充,例如使用全局平均值。然而,即便有了補全策略,在實際應用場景下,user和item的數目每每是成千上萬的,面對這樣的規模傳統SVD算法O(n^3)的時間複雜度顯然是吃不消的。所以,直接使用傳統SVD算法並非一個好的選擇。(達觀數據周顥鈺)優化

既然傳統SVD在實際應用場景中面臨着稀疏性問題和效率問題,那麼有沒有辦法避開稀疏問題,同時提升運算效率呢?

實際上早在06年,Simon Funk就提出了Funk-SVD算法,其主要思路是將原始評分矩陣M(mn)分解成兩個矩陣P(mk)和Q(k*n),同時僅考察原始評分矩陣中有評分的項分解結果是否準確,而判別標準則是均方差。spa

即對於矩陣M(mn),咱們想辦法將其分解爲P(mk)、Q(k*n),此時對於原始矩陣中有評分的位置MUI來講,其在分解後矩陣中對應的值就是
圖片描述3d

那麼對於整個評分矩陣而言,總的損失就是
圖片描述

只要咱們能想辦法最小化上面的損失SSE,就能以最小的擾動完成對原始評分矩陣的分解,在這以後只須要用計算M’ 的方式來完成對原始評分矩陣的填充便可。(達觀數據 周顥鈺)

這種方法被稱之爲隱語義模型(Latent factor model,LFM),其算法意義層面的解釋爲經過隱含特徵(latent factor)將user興趣與item特徵聯繫起來。

圖片描述

對於原始評分矩陣R,咱們假定一共有三類隱含特徵,因而將矩陣R(34)分解成用戶特徵矩陣P(33)與物品特徵矩陣Q(3*4)。考察user1對item1的評分,能夠認爲user1對三類隱含特徵class一、class二、class3的感興趣程度分別爲P十一、P十二、P13,而這三類隱含特徵與item1相關程度則分別爲Q十一、Q2一、Q31。

回到上面的式子
圖片描述

能夠發現用戶U對物品I最終的評分就是由各個隱含特徵維度下U對I感興趣程度的和,這裏U對I的感興趣程度則是由U對當前隱含特徵的感興趣程度乘上I與當前隱含特徵相關程度來表示的。

因而,如今的問題就變成了如何求出使得SSE最小的矩陣P和Q

NO.2 隨機梯度降低法

在求解上文中提到的這類無約束最優化問題時,梯度降低法(Gradient Descent)是最常採用的方法之一,其核心思想很是簡單,沿梯度降低的方向逐步迭代。梯度是一個向量,表示的是一個函數在該點處沿梯度的方向變化最快,變化率最大,而梯度降低的方向就是指的負梯度方向。

根據梯度降低法的定義,其迭代最終必然會終止於一階導數(對於多元函數來講則是一階偏導數)爲零的點,即駐點。對於可導函數來講,其極值點必定是駐點,而駐點並不必定是極值點,還多是鞍點。另外一方面,極值點也不必定是最值點。下面舉幾個簡單的例子。

圖片描述

上圖爲函數圖片描述。從圖中能夠看出,函數惟一的駐點 (0,0)爲其最小值點。

圖片描述

上圖爲函數圖片描述。其一階導數爲圖片描述,從而可知其一樣有惟一駐點(0,0)。從圖中能夠看出,函數並無極值點。

圖片描述

上圖爲函數圖片描述。從圖像中能夠看出,函數一共有三個駐點,包括兩個極小值點和一個極大值點,其中位於最左邊的極小值點是函數的最小值點。

圖片描述

上圖爲函數圖片描述。其中點 (0,0,0)爲其若干個鞍點中的一個。

從上面幾幅函數圖像中能夠看出梯度降低法在求解最小值時具備必定的侷限性,用一句話歸納就是,目標函數必須是凸函數。關於凸函數的斷定,對於一元函數來講,通常是求二階導數,若其二階導數非負,就稱之爲凸函數。對於多元函數來講斷定方法相似,只是從判斷一元函數的單個二階導數是否非負,變成了判斷全部變量的二階偏導數構成的黑塞矩陣(Hessian Matrix)是否爲半正定矩陣。判斷一個矩陣是否半正定能夠判斷全部特徵值是否非負,或者判斷全部主子式是否非負。

回到上面funk-svd的最優化問題上來。通過一番緊張刺激的計算以後,能夠很遺憾地發現,咱們最終的目標函數是非凸的。這就意味着單純使用梯度降低法可能會找到極大值、極小值或者鞍點。這三類點的穩定性按從小到大排列依次是極大值、鞍點、極小值,考慮實際運算中,浮點數運算都會有必定的偏差,所以最終結果很大概率會落入極小值點,同時也有落入鞍點的機率。而對於極大值點,除非初始值就是極大值,否在幾乎不可能到達極大值點。

爲了從鞍點和極小值點中脫出,在梯度降低法的基礎上衍生出了各式各樣的改進算法,例如動態調整步長(即學習率),利用上一次結果的動量法,以及隨機梯度降低法(Stochastic Gradient Descent, SGD)等等。實際上,這些優化算法在當前最火熱的深度學習中也佔據着一席之地,例如adagrad、RMSprop,Adam等等。而本文則將主要介紹一下隨機梯度降低法。(達觀數據 周顥鈺)

隨機梯度降低法主要是用來解決求和形式的優化問題,與上面須要優化的目標函數一致。其思想也很簡單,既然對於求和式中每一項求梯度很麻煩,那麼幹脆就隨機選其中一項計算梯度看成總的梯度來使用好了。

具體應用到上文中的目標函數
圖片描述

SSE是關於P和Q的多元函數,當隨機選定U和I以後,須要枚舉全部的k,而且對圖片描述,以及圖片描述求偏導數。整個式子中僅有圖片描述這一項與之相關,經過鏈式法則可知
圖片描述

在實際的運算中,爲了P和Q中全部的值都能獲得更新,通常是按照在線學習的方式選擇評分矩陣中有分數的點對應的U、I來進行迭代。

值得一提的是,上面所說的各類優化都沒法保證必定能找到最優解。有論文指出,單純判斷駐點是不是局部最優解就是一個NPC問題,可是也有論文指出SGD的解能大機率接近局部最優甚至全局最優。

另外,相比於利用了黑塞矩陣的牛頓迭代法,梯度降低法在方向上的選擇也不是最優的。牛頓法至關於考慮了梯度的梯度,因此相對更快。而因爲其線性逼近的特性,梯度降低法在極值點附近可能出現震盪,相比之下牛頓法就沒有這個問題。

可是在實際應用中,計算黑塞矩陣的代價是很是大的,在這裏梯度降低法的優點就凸顯出來了。所以,牛頓法每每應用於一些較爲簡單的模型,如邏輯迴歸。而對於稍微複雜一些的模型,梯度降低法及其各類進化版本則更受青睞。(達觀數據 周顥鈺)

NO.3 基於Funk-SVD的改進算法

到這一步爲止,咱們已經能經過SGD找到一組分解方案了,然而對於填充矩陣的FunkSVD算法自己而言,目前這個形式是否過於簡單了一些呢?

實際上,在Funk-SVD被提出以後,出現了一大批改進算法。本文將介紹其中某些經典的改進思路。

1 正則化

對於全部機器學習算法而言,過擬合一直是須要重視的一個問題,而加入正則化項則是防止過擬合的經典處理方法。對於上面的Funk-SVD算法而言,具體作法就是在損失函數後面加入一個L2正則項,即
圖片描述

其中,λ爲正則化係數,而整個求解過程依然可使用隨機梯度降低來完成。

2 偏置

考察式子
圖片描述

能夠發現這個式子代表用戶U對物品 I 的評分所有是由U和I之間的聯繫帶來的。然而實際上,有不少性質是用戶或者物品所獨有的。好比某個用戶很是嚴苛,不論對什麼物品給出的分數都很低,這僅僅與用戶自身有關。

又好比某個物品很是精美,全部用戶都會給出較高的分數,這也僅僅與物品自身有關。所以,只經過用戶與物品之間的聯繫來預測評分是不合理的,同時也須要考慮到用戶和物品自身的屬性。因而,評分預測的公式也須要進行修正。不妨設整個評分矩陣的平均分爲σ,用戶U和物品I的偏置分別爲圖片描述圖片描述,那麼此時的評分計算方法就變成了
圖片描述

同時,偏差E除了因爲M‘計算方式帶來的變化以外,也一樣須要加入U和I偏置的正則項,所以最終的偏差函數變成了
圖片描述

3 隱式反饋

對於實際的應用場景中,常常有這樣一種狀況:用戶點擊查看了某一個物品,可是最終沒有給出評分。

實際上,對於用戶點擊查看物品這個行爲,排除誤操做的狀況,在其他的狀況下能夠認爲用戶被物品的描述,例如貼圖或者文字描述等所吸引。這些信息咱們稱之爲隱式反饋。事實上,一個推薦系統中有明確評分的數據是不多的,這類隱式數據才佔了大頭。

能夠發現,在咱們上面的算法當中,並無運用到這部分數據。因而對於評分的方法,咱們能夠在顯式興趣+偏置的基礎上再添加隱式興趣,即
圖片描述

其中N(U)表示爲用戶U提供了隱式反饋的物品的集合。這就是svd++算法。
此時的損失函數也一樣須要加上隱式興趣的正則項,即
圖片描述

4 對偶算法

在上面的svd++中,咱們是基於用戶角度來考慮問題的,很明顯咱們一樣能夠基於物品的角度來考慮問題。具體來講就是
圖片描述

其中 N(I)表示爲物品I提供了隱式反饋的用戶的集合。相似地,在損失函數中也須要加上隱式興趣的正則項。

在實際運用中,能夠將原始的svd++獲得的結果與對偶算法獲得的結果進行融合,使得預測更加準確。然而相比起物品的數目,用戶的數目每每是要高出幾個量級的,所以對偶算法在儲存空間和運算時間的開銷上都將遠高於原始的svd++,如何在效率和準確度之間找到平衡也是一個須要思考的問題。(達觀數據 周顥鈺)

NO.4 請因子分解機

矩陣分解的思想除了直接應用在分解評分矩陣上以外,其思想也能用在其餘地方,接下來介紹的因子分解機(Factorization Machine,FM)就是一個例子。

對於經典的邏輯迴歸算法,其sigmoid函數中的項其實是一個線性迴歸
圖片描述

在這裏咱們認爲各個特徵之間是相互獨立的,而事實上每每有些特徵之間是相互關聯、相互影響的。所以,就有必要想辦法捕捉這些特徵之間的相互影響。簡單起見,先只捕捉二階的關係,即特徵之間兩兩之間的相互影響。具體反映到迴歸公式上,即爲
圖片描述

具體來講就是使用圖片描述來描述圖片描述,對於w而言,其中可學習的項就對應了評分矩陣中有分值的項,而其餘因爲數據稀疏致使難以學習的項就至關於評分矩陣中的未評分項。這樣一來,不只解決了數據稀疏性帶來的二階權重學習問題,同時對於參數規模,也從圖片描述級別降到了O(kn)級別。

NO.5 與DNN的結合

深度學習無疑是近幾年來最熱門的機器學習技術。注意到隱語義模型中,隱含特徵與深度學習中的embedding其實是一回事,那麼是否有可能借助DNN來幫助咱們完成矩陣分解的工做呢?

實際上,在YouTube的文章《Deep neural networks for YouTube recommendations》中,就已經有了相關技術的應用。

圖片描述

上圖是YouTube初排模型的圖示。具體的流程爲:首先經過nlp技術,如word2vec,預訓練出全部物品的向量I表示;而後對於每一條用戶對物品的點擊,將用戶的歷史點擊、歷史搜索、地理位置信息等信息通過各自的embedding操做,拼接起來做爲輸入,通過MLP訓練後獲得用戶的向量表示U;而最終則是經過 softmax 函數來校驗U*I的結果是否準確。

相比於傳統的矩陣分解算法,使用DNN能爲模型帶來非線性的部分,提升擬合能力。另外一方面,還能夠很方便地加入各式各樣的特徵,提升模型的準確度。(達觀數據 周顥鈺)

NO.6 矩陣分解的優缺點

矩陣分解有以下優勢:

1.能將高維的矩陣映射成兩個低維矩陣的乘積,很好地解決了數據稀疏的問題; 具體實現和求解都很簡潔,預測的精度也比較好;
2.模型的可擴展性也很是優秀,其基本思想也能普遍運用於各類場景中。

相對的,矩陣分解的缺點則有:

1.可解釋性不好,其隱空間中的維度沒法與現實中的概念對應起來; 訓練速度慢,不過能夠經過離線訓練來彌補這個缺點;
2.實際推薦場景中每每只關心topn結果的準確性,此時考察全局的均方差顯然是不許確的。

NO.7 總結

矩陣分解做爲推薦系統中的經典模型,已經通過了十幾年的發展,時至今日依然被普遍應用於推薦系統當中,其基本思想更是在各式各樣的模型中發揮出重要做用。可是對於推薦系統來講,僅僅有一個好的模型是遠遠不夠的。影響推薦系統效果的因素很是之多。想要打造一個一流的推薦系統,除了一個強大的算法模型以外,更須要千方百計結合起具體業務,不斷進行各類嘗試、升級,方能取得最終的勝利。

參考文獻

【1】Simon Funk, http://sifter.org/~simon/jour...
【2】Koren, Yehuda, Robert Bell, and Chris Volinsky. "Matrix factorization techniques for recommender systems." Computer42.8 (2009).
【3】Jahrer, Michael, and Andreas Töscher. "Collaborative filtering ensemble." Proceedings of the 2011 International Conference on KDD Cup 2011-Volume 18. JMLR. org, 2011.
【4】Rendle, Steffen. "Factorization machines." Data Mining (ICDM), 2010 IEEE 10th International Conference on. IEEE, 2010.
【5】Covington, Paul, Jay Adams, and Emre Sargin. "Deep neural networks for youtube recommendations." Proceedings of the 10th ACM Conference on Recommender Systems. ACM, 2016.

Author 關於做者 周顥鈺,達觀數據算法工程師,負責達觀數據個性化推薦系統的研發與優優化,研究推薦系統中的機器學習算法及其具體應用,對各類機器學習算法有濃厚興趣。
相關文章
相關標籤/搜索