本文調研了推薦系統裡的經典推薦演演算法,結合論文及應用進行分析、歸納並總結成文,既是自己的思考過程,也可當做以後的翻閱手冊。
個性化推薦,是指通過分析、挖掘使用者行為,發現使用者的個性化需求與興趣特點,將使用者可能感興趣的資訊或商品推薦給使用者。本文調研了推薦系統裡的經典推薦演演算法,結合論文及應用進行分析、歸納並總結成文,既是自己的思考過程,也可當做以後的翻閱手冊。俗話說學而時習之,人的認識過程是呈螺旋式上升的,特別是理論應用到實踐的過程,理論是實踐的基礎,實踐能反過來指導人對理論的認識,我相信在將下文所述的演演算法應用到業務中的實踐過程也將重新整理我在總結此文時的認識。
個性化推薦系統是一項系統工程,為便於聚焦描述,本文不涉及模型的訓練及部署等工程問題,僅對推薦演演算法原理進行分析和其解決的問題進行總結。
為方便分析,本文取大家購物時常遇到的商品推薦模型的某些特徵進行舉例:
|
|
| |||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
特徵可簡單分為兩類:
連續特徵。如商品價格/銷量時長
類別特徵。如性別/天貓會員等級
對於連續的數值特徵,可直接在模型中作為數值參與計算(大部分情況下需要進行歸一化等處理)。而對於類別特徵,一般是不能直接作為數值參與計算的,通常將其進行Hash雜湊編碼或者one-hot編碼。
以one-hot編碼為例,將以上訓練資料進行預處理。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
預處理之後,可以看到所有的資料已經進行的數值化,可以進行數學運算了。
接下來將介紹各演演算法模型是如何利用這些資料進行學習的。
LR
▐ 演演算法原理
邏輯迴歸LR(Logistic Regression)模型作為經典的機器學習分類模型,以其可解釋性強、實現簡單、線上高效等優點線上上應用中被大量使用。邏輯迴歸模型主要有兩部分構成:
線性迴歸
邏輯函數
在機器學習中,線性迴歸模型可記為:
而邏輯函數使用的為sigmoid函數:
由(1)和(2)可推出LR模型的數學表示式為
線上性迴歸模型(1)中,是具體的某一個特徵值,是該特徵值的權重,是模型的輸出。該公式可以直白的解釋為模型的輸出結果是由輸入進行線性加權求和得到的。而邏輯函數(2)的作用是將線性迴歸模型的輸出對映到[0,1],輸出一個概率值。商品推薦的場景中如使用者對某個item進行點選記為1,未點選記為0。
▐ 解決的問題
LR是一個基本的迴歸模型,可以對輸入進行一些線性運算得到一個預測的輸出值。預測值可以是使用者點選某個商品的概率,也可以是使用者下單的概率,其含義具體業務具體分析。
FM
▐ 演演算法原理
FM(Factorization Machine)。LR作為一個基礎的迴歸模型,主要原理是通過對各個特徵進行線性加權得到預測值,但是其並沒有考慮組合特徵對模型的影響,比如一名單身女性在晚上觀看李佳琦直播概率顯然是大於一名媽媽的,這裡麵包含的組合特徵單身女性-晚上在LR中就體現不到。因此相比LR僅對一階特徵進行建模,FM引入了二階特徵,增強了模型的學習能力和表達能力。
FM的數學表示式如下:
如果FM僅僅是在模型的表示式上加入了二階特徵,它的應用絕不會這麼廣泛,只從式(4)中就可以看出表示式上其實相對於LR的改進是很簡單的:在模型中引入輸入特徵兩兩組合進行乘積就行了。但是這樣會引入一個很大的問題:引數的數目直接從個爆炸增長為個,這對於特徵維度動輒上千上萬數量級的推薦系統來說是斷然不能接受的。
面對這麼大的引數矩陣很容易想到將其進行矩陣分解,我們首先觀察一下引數矩陣
可以看到引數矩陣是實對稱矩陣,可以想到正定矩陣是可以很優雅的進行分解的:
特別地,在稀疏矩陣中的情況下,便可滿足式(6)的近似相等。
設,則式(4)中的模型引數可表示為。
因此限定引數矩陣為正定矩陣的情況下,FM的二階特徵的表示式可推導如下:
對比式(6)和式(7)可知,FM的計算複雜度由降至,而k的值又是一個可根據業務情況寫死的值,式(7)的推導使得FM的時間複雜度降至線性複雜度,無論是對於模型的離線訓練還是線上推理均使得二階特徵組合成為可能。
▐ 解決的問題
FM通過引入二階特徵實現了模型學習能力及表達能力的提升,並且利用正定矩陣和稀疏矩陣的性質將二階特徵的計算降低至線性複雜度,也因此成為工業界常用的特徵工程演演算法。
FFM
▐ 演演算法原理
FFM(Field-aware Factorization Machine)。從名字上看,相較於FM, FFM多了一個F,在實現上也是如此。
FFM的數學表示式如下:
從式(8)可以看出FFM相比於FM的不同點在於二階特徵組合的係數上,FFM的權重矩陣比FM多了一維。其演演算法思想是這樣的:以前言中的商品推薦的訓練資料舉例,在進行one-hot編碼時,我們將不同的欄位的特徵進行編碼然後拉平送進模型進行訓來,比如欄位天貓會員等級T1和天貓會員等級T3這倆欄位被獨立為兩個獨立的特徵。然而實際情況卻是這倆欄位其實是對同一個欄位天貓會員等級的不同描述。因此在FFM中引入了field的概念:每一維的特徵都有對應的field,在進行二階特徵組合時某一維特徵對於不同field的特徵其所對應的隱向量是不同的。假設所有特徵共包含f個filed,則FFM權重矩陣,相比於FM的權重矩陣,多出的[外連圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-MXZGX1kP-1640853994264)(https://mmbiz.qpic.cn/mmbiz_svg/gQQO820rz5VFZsY0q5oeqEibPoeKGvmwJQXODxFOQSJIDFGHJrM99rNeXto5Fyjgh8o6qFxAcLvGFjK48iawTkOI8efBpeibHED/640?wx_fmt=svg)]維便對應著FFM中引入的field的數目。
需要說明的是,FM可以看做是FFM的特例:所有特徵屬於同一個field。
▐ 解決的問題
引入field更精準刻畫了各維特徵之間的關係,通過增大隱向量的數目增強了模型的表達能力。但是由於其隱向量與field有關,其相關計算無法像FM那樣化簡,在面對特徵維度n比較大的情況下,其計算效能容易成為系統瓶頸。
WDL
▐ 演演算法原理
WDL(Wide & Deep Learning)。其核心思想是結合線性模型(如上文的LR)的記憶能力和DNN模型的泛化能力來提升模型的整體能力。
其網路結構圖如下:
其中包括
wide部分:wide部分是普通的線性模型,其表示式可參見式(1)
deep部分:deep部分由一個3層的神經網路組成。其輸入是對原始的稀疏特徵(如ID類特徵)進行一次embedding後的結果。每一層的公式如下:
輸出:輸出部分將線性模型(Wide)和DNN(Deep)模型的輸出結果進行加和作為整個模型的loss進行反向傳播來完成聯合訓練。[外連圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-YAZsqGw6-1640853994265)(https://mmbiz.qpic.cn/mmbiz_svg/gQQO820rz5VFZsY0q5oeqEibPoeKGvmwJo2vVpuicZia02MY5fJDIrCXpicIr4BacEygzT8If6XJJ5PIic9C5Iu8llwR4do3AdLdf/640?wx_fmt=svg)]
▐ 解決的問題
結合了線性模型對一階特徵和和深度模型對高階特徵的學習能力來整體提高模型的表達能力。
DeepFM
▐ 演演算法原理
WDL可以看做是LR+DNN,那麼DeepFM就可以看做是FM+DNN。相比於WDL做出的改進,DeepFM主要是將WDL中Wide模組由LR替換為了FM。
其網路結構如圖所示:
可以看到相對於WDL其做了以下改進:
引入FM結構代替LR。完成對一階二階特徵的學習 避免了WDL中人工特徵工程過程。見式(4)。
FM和DNN共用Embedding層。減少了額外的計算開銷。
▐ 解決的問題
在減去人工特徵工程的前提下,通過Wide部分和Deep部分共用Embedding,可以提高模型的訓練速度和模型的特徵學習能力。
DcN
▐ 演演算法原理
DCN(Deep & Cross Network)如其名字中cross所示,其主要完成了完全去手工特徵交叉的工作。
其中代替DeepFM中FM模組的核心Cross Network網路結構如下:
其中:
進而可推出
可以看出Cross Network中每一層的輸出都是由與某一標量進行相乘的結果。因此:
每層的輸出和同維
由於標量和是相關的,因此第k層的輸出包含了的1到k+1階特徵。
▐ 解決的問題
完全捨棄了人工特徵工程過程,並且可以顯示指定特徵交叉階數。
xDeepFM
▐ 演演算法原理
xDeepFM(eXtreme Deep Factorization Machine)。從名字上可以看出,xDeepFM是是對於DeepFM的改進,但是實際上xDeepFM是對DCN的改進。DCN 的Cross層在Embedding層後,可以自動構造任意階高階特徵,但是它是bit-wise的,與bit-wise對應的是vector-wise。現舉例分析如下:例如,性別對應嵌入向量<a1,a2,a3>,天貓會員等級對應嵌入向量<b1,b2,b3>,在DCN的Cross網路中,向量<a1,a2,a3>,<b1,b2,b3>會拼接為<a1,a2,a3,b1,b2,b3>作為輸入,在進行cross的時候a1可能事實上屬於同一個field的a2進行cross。因此稱DCN以嵌入向量中的單個bit為最細粒度,即bit-wise。而在FM中,特徵的交叉是以該維特徵對應的向量為最細粒度進行交叉來學習相關性的,即vector-wise。而xDeepFM的動機,正是將FM的vector-wise的思想引入Cross部分。這一點其實特別像one-hot編碼的情況下FM到FFM的演進。
xDeepFM中,進行vector-wise特徵交叉的結構如下:
對於每一層的輸出
其中
代表了第層的輸出
代表了第k層輸出的vector個數
表示兩向量對應元素兩兩相乘,如
表示第層第個向量的向量的權重矩陣
至此,xDeepFM便實現了vector-wise的特徵交叉過程。相比於DCN,其第[外連圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-sfkghLmf-1640853994273)(https://mmbiz.qpic.cn/mmbiz_svg/gQQO820rz5VFZsY0q5oeqEibPoeKGvmwJqNPwzG8yHeibdibetsXYapbLFlZH5E16XRyJLpsDPxwFqhgibPkbx63jbDh2Lm4iaECo/640?wx_fmt=svg)]的輸出僅包含了k+1階特徵。因此,其需要將每層的輸出進行sum-pooling後DNN的輸出加和到一起作為loss進行反向傳播來完成聯合訓練。
▐ 解決的問題
提出了一種vector-wise的高階特徵交叉方式。
小結
本文以解決問題的思路介紹了推薦系統裡的經典演演算法演進過程,可以看到每種演演算法的出現都是為了解決某種特定的問題。學術上評價一個演演算法的好壞大都在於其精度,而在工業界中,更看重的是一個演演算法精度與效能的trade-off。比如2013年微軟在NLP領域提出的雙塔模型,被應用到推薦系統後經久不衰,到現在仍然在各大公司推薦系統裡發光光熱,究其原因:雙塔模型上線有多方便/跑的有多快,誰用誰知道…
個性化推薦系統演演算法的演進相比於CV(計算機視覺)和NLP(自然語言處理)來說並沒那麼快,這一點從頂會論文數目上可窺一斑。究其原因我個人認為是其所應用的場景所限,個性化推薦本質上是一個人與物的匹配過程,所以使用這套系統的前提是應用場景下要有大量的人和大量的物,場景強繫結的特性提高了其研究門檻。而CV和NLP更像是一個個的基礎元件,幾十人甚至幾人的團隊就可在CV或者NLP的某個子任務上做出開創性工作然後將其推廣至各個不同的應用場景下。比如CV裡鼎鼎大名的YOLO系列,其作者憑一人之力一次次幫助各相關廠商主動升級各家的應用SDK…
資源整理
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|