推荐系统(Recommender System)笔记 01:推荐系统的演化
推薦系統(Recommender System)01
- 推薦系統的架構
- 數據部分
- 模型部分
- 傳統推薦模型
- 協同推薦(Collaborative Filtering)
- 矩陣分解(Matrix Factorization)
- 邏輯回歸(Logistic Regression)
- 自動特征交叉的解決方案
- POLY2 模型 - 特征交叉的開始
- FM 模型 - 隱向量特征交叉
- FFM 模型 - 引入特征域
- * 從 POLY2 到 FFM 的演化過程
- GBDT + LR - 特征工程模型化
- GBDT 模型
- LS-PLM - 阿里曾經的主流推薦模型
- 深度學習推薦模型
- AutoRec - 單隱層神經網絡推薦模型
- Deep Crossing - 深度學習架構
- NerualCF 模型 - CF 與深度學習相結合
- PNN 模型 - 加強特征交叉能力
- Wide&Deep 模型 - 記憶能力與泛化能力的綜合
- *Deep&Cross 模型
- FM 模型族和深度學習模型的結合
- FNN 模型 - 使用 FM 的隱向量完成 Embedding 層的初始化
- DeepFM - 用 FM 替代 Wide 部分
- NFM - FM 的神經網絡化
- 注意力機制(Attention Policy)
- AFM - 引入注意力機制的 FM 模型
- DIN - 引入注意力機制的深度網絡
- DIEN - 序列模型與推薦模型的結合
- 興趣抽取層
- 興趣進化層
- 強化學習與推薦系統
- 總結
推薦系統的架構
推薦系統 (RS) 的核心思想:
在獲知 “用戶信息”,“物品信息”,“場景信息” 的基礎上,推薦系統要處理的問題可以較形式化地定義為:對于用戶 U (user),在特定場景 C (context) 下,針對海量的 “物品” 信息,構建一個函數 f(U,I,C) ,預測用戶對特定候選物品 I (item) 的喜好程度,再根據喜好程度對所有候選物品進行排序,生成推薦列表的問題。
根據上述思想,可以得到推薦系統的邏輯框架,如下圖所示:
對于實際的推薦系統,需要著重解決的問題有 2 個:
針對這兩個部分的問題 ,我們可以得到推薦系統的技術架構:
數據部分
主要負責"用戶" “物品” "場景"的信息收集與處理。處理之后的數據主要有三個用途:
模型部分
該部分是推薦系統的主體,模型的結構由 “召回層” “排序層” "補充策略與算法層"組成:
- 召回層:使用相對簡單高效的召回算法從海量候選集中召回用戶可能感興趣的對象(第一次縮小范圍)
- 排序層:利用排序模型對初篩的候選集進行精排序
- 補充策略與算法層:“再排序層”,對于排序層的結果,綜合額外的因素,補充算法進行進一步的篩選和排序
傳統推薦模型
根據演化關系圖,我們可以看到,傳統的推薦模型主要分為下面幾類:
協同推薦(Collaborative Filtering)
矩陣分解(Matrix Factorization)
該部分的內容已經在之前做過筆記,參考:Big Data Management筆記06:Recommender Systems
這里只做一些總結。
邏輯回歸(Logistic Regression)
邏輯回歸 (Logistic Regression) 和前面兩種推薦模型有很大不同。協同推薦(Collaborative Filtering)主要僅利用用戶 (User) 和對象 (Item) 的相互行為信息作為推薦的依據,而邏輯回歸 (Logistic Model) 模型能夠綜合利用對象、用戶、上下文等多種特征進行全面推薦。 另外,邏輯回歸可以作為基本的感知機來充當神經網絡的基本神經元。
邏輯回歸本質作為一個分類器 (Classifier),在推薦系統中,也扮演相同的角色。協同推薦 (CF) 和矩陣分解 (MF) 主要利用用戶之間或者對象之間的相似度 (Similarity) 進行推薦,而邏輯回歸 (LR) 則把問題轉換為其本職的分類問題 (Classification)。通過預測對象為 “正樣本 (Positive)” 的概率,來對對象進行排序。這里的 “正樣本” 可以根據用戶是否點擊、購買、標記等行為進行標簽。
具體的推薦流程和分類任務的過程基本一致:
具體的數學過程如下所示,激活函數選擇 Sigmoid 將結果映射到 [0, 1] 之間。
邏輯回歸模型 (LR) 的整個推斷過程如下式所示:
邏輯回歸 (LR) 的優勢:
邏輯回歸 (LR) 的局限性:
表達能力不強,無法進行特征交叉、特征篩選等一系列較為"高級"的操作,因此不可避免地造成信息的損失
自動特征交叉的解決方案
邏輯回歸模型 (LR) 的表達能力不夠強,不可避免地會造成信息損失。這是因為邏輯回歸 (LR) 只對單一特征做簡單加權,不具備進行高維組合特征的能力,甚至可能會得出 “辛普森悖論” 那樣的錯誤結論。因此需要對邏輯回歸模型 (LR) 進行改造,使其具備特征交叉的能力。
“辛普森悖論”:在對樣本集合進行研究時,在分組中占據優勢的一方,在總體評價中反而會失勢的現象。
比如:
在上面這個分組樣本中,視頻 B 的點擊率都更高,因此應當推薦視頻 B。但是如果將數據匯總
此時會發現,視頻 A 的點擊率反而更高。這是因為我們一開始使用了 “視頻 ID + 用戶性別” 的組合特征計算點擊率,而在匯總數據中,我們使用 “視頻 ID” 這一單一特征
POLY2 模型 - 特征交叉的開始
POLY2 模型會對特征進行 “暴力” 組合。它會將兩個特征 (xj1, xj2) 兩兩組合,窮舉出所有可能的組合,并且為每一個特征組合賦一個權值 wh(j1,j2) 。POLY2 模型本質上還是線性模型。
FM 模型 - 隱向量特征交叉
依舊是窮舉組合,不同在于這里所賦的權值是兩個向量的內積 (wj1 · wj2)。可以說 FM (因子分解) 是將 矩陣分解 (MF) 的隱向量思想更進一步,從單純的對象 (Item) 和用戶 (User) 隱向量推廣到所有特征上。FM 模型將 POLY2 中 n2 級別的權重參數數量減少到 nk (k 為隱向量維度)
相比于 POLY2,FM 會丟失對某些具體特征組合的精確記憶能力,但是有著更好的泛化能力
我們考慮一種特征組合 <channel, brand>,某個訓練樣本的特征組合為 <ESPN, Adidas>
在 POLY2 中,只有當 ESPN 和 Adidas 同時出現在一個訓練樣本中時,模型才能學到這個特征組合的權重;
在 FM 中,ESPN 的隱向量可以通過 (ESPN, Gucci) 樣本進行更新,Adidas 的隱向量也可以用通過 (NBC, Adidas) 樣本進行更新,如此一來大幅降低了模型對數據稀疏性的要求
對于一個從未出現的特征組合 (NBC, Gucci) 由于模型在此之前已經學習了 NBC 和 Gucci 的隱向量,因此也能計算該特征組合的權重
FFM 模型 - 引入特征域
FFM 基于 FM 引入了特征域感知 (field-aware) 這一概念,使得模型的表達能力更強。我們可以很清楚地從公式中看到,此時特征 xj1 的隱向量由 FM 中的 wj1 變為 wj1,f2,這就表示每一個特征的隱向量不唯一,而是有一組隱向量。
仍然以公式為例,當特征 xj1 與 xj2 進行交叉時,xj1 特征會從它的一組隱向量中,挑選與特征 xj2 的域 f2 對應的隱向量 wj1,f2 進行叉積計算
這里需要對域 (field) 進行介紹。這里的域就是所謂的特征域 (feature field),域內的特征一般都是 one-hot 形式的特征向量。比如對于 ”性別“ 這個特征來說,表征為 ”女“ 的 one-hot 特征向量為 [0, 1, 0],此時的 ”性別“ 特征域中,全都是類似的 one-hot 向量。
在了解了特征域的概念之后,我們再整體看一個 FFM 模型的例子:
根據訓練樣本,我們可以知道,共有 3 個特征域 Publisher, Advertiser, Gender。
在 FM 模型中,我們針對該樣本得到的權值應為:wESPN · wNIKE 和 wESPN · wMale。在前后兩次特征交叉過程中,wESPN 的值是一樣的;
在 FFM 模型中,ESPN 和 NIKE,ESPN 和 Male 交叉特殊的權重為:wESPN,A · wNIKE,P 和 wESPN,G · wMale,P。我們注意到 ESPN 在與 NIKE 和 Male 交叉時分別使用了不同的隱向量,這是因為 NIKE 和 Male 分別處于不同的特征域中
在 FFM 模型中,需要學習 n 個特征在 f 個特征域中的 k 維隱向量,因此參數數量為 n · f · k。訓練過程中,不能像 FM 那樣簡化,因此復雜度為 f · n2
* 從 POLY2 到 FFM 的演化過程
理論上來說,FM 模型族可以將交叉特征的方法推及 3 階甚至是更高維的向量組合。但是由于組合爆炸問題的限制,從三階起,FM 模型的權重數量以及訓練復雜度都會很高,因此很難適用于實際問題。
GBDT + LR - 特征工程模型化
我們前面已經說過 FM 模型族只能用來處理二階的特征交叉,在涉及三階以及三階以上的高維特征交叉時,會不可避免地面對組合爆炸以及復雜度過高地問題。為了能更有效地進行高維特征組合,GBDT + LR 的組合模型應運而生。
該模型的整體思想:使用 GBDT 自動進行特征篩選和組合,生成新的離散特征向量,再把這個特征向量輸入給 LR 模型,最終預估 CTR 的一種組合模型。
作為組合模型的兩個部分,GBDT 和 LR 模型是分開獨立訓練的,因此我們不需要關心如何將 LR 的梯度回傳給 GBDT 模型。
GBDT 模型
GBDT 的基本結構是決策樹 (Decision Tree) 組成的森林,學習的方式為梯度提升。
GBDT 會逐一生成決策樹以生成整片森林,生成新子樹的過程是利用樣本標簽值與當前森林 (current forest) 預測值之間的殘差。
比如當前森林一共有 3 棵樹,那么,其預測值為:
D(x) = dtree1(x) + dtree2(x) + dtree3(x)
此時生成第四棵子樹,目標是讓當前預測結果加上第四棵子樹的預測結果更加接近擬合函數 f(x) :
D(x) + dtree4(x) = f(x)
所以第四棵子樹的生成過程,是以目標擬合函數和當前預測值的殘差 R(x) 為目標的:
R(x) = f(x) - D(x)
每棵樹的生成過程是一棵標準的回歸樹生成的過程,每個節點的分裂都是自然的特征選擇過程。
接下來看 GBDT 如何進行特征組合。GBDT 可以將原始的特征向量轉換為新的離散型特征向量。一個樣本在被輸入某個子樹后,最終會根據節點的規則,落入某個葉節點,此時該葉節點值為 1,其余葉節點值為 0,所有葉節點組成的向量就是該樹的特征向量。而把森林中所有子樹的特征向量連接起來就是最后要輸入 LR 模型的離散型特征向量
子樹 1 的特征向量為 [0, 0, 1, 0];
子樹 2 的特征向量為 [1, 0, 0, 0];
子樹 3 的特征向量為 [0, 0, 0, 1];
最終的離散型特征向量為 [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1]
決策樹的深度 (Depth) 就決定了特征交叉的階數。如果深度為 4,那么有 3 層節點分裂,最終的葉節點換言之是 3 階特征組合之后的結果。 而這正是 FM 模型族最欠缺的能力 - 高階的特征組合能力。
但是 GBDT 也存在缺點,那就是容易過擬合 (overfitting),且它的特征轉換方式實際導致許多特征的數值信息丟失。 所以我們不能單純因為特征組合能力強就說 GBDT 的效果比 FFM 更好,還是需要結合實際情況來選擇模型。
GBDT + LR 的組合模型,其最大的意義在于開啟了特征工程模型化,特征工程完全交予一個獨立的模型完成,模型的輸入可以是原始的特征向量,讓程序員無需花費過多的時間在特征工程上,實現了完全的端到端 (End to End) 訓練。
LS-PLM - 阿里曾經的主流推薦模型
大規模分段線性模型 (Large Scale Piece-Wise Linear Model, LS-PLM) 是前深度學習時代最后一個主流推薦模型。LS-PLM 也可成為混合邏輯回歸模型 (Mixed Logistic Model)。它屬于 LR 的衍生模型,基于 LR 提出了 ”分而治之“ 的思想,即先對樣本進行切片,在不同的切片中應用 LR 進行 CTR 預估。
一種比較直覺的切片方法就是聚類 (Clustering)。為了讓 CTR 模型對不同的用戶群體和應用場景更具針對性,采用的方法就是先對全部的樣本進行聚類,再對不同的簇 (Cluster) 運用 LR 模型進行 CTR 預估。
具體的公式如上所示,其中 π(x) 就是聚類函數 (Clustering Function),該函數采用 softmax 函數對樣本進行多分類,再用 η(x) 表示的邏輯模型計算樣本在分片中具體的 CTR ,然后將兩者相乘之后求和。值得注意的是參數 m,這是一個超參數,表示聚類中簇 (Cluster) 的數量(”分片數“),當 m=1 時,模型會退化為基本的 LR 模型;m 越大,模型的擬合能力越強,同時模型的參數量也會越來越大,擬合所需的樣本數量就越多。
為了便于理解,我們可以直觀比較 LR 和 LS-PLM 模型的分類效果。通過下面的樣本分類結果可以看到,LR 很難找到非線性的決策邊界/平面,但是 MLR 可以通過 4 分片完美處理這個問題:
LS-PLM 主要有 2 個優點:
從深度學習的角度來看,可以把 LS-PLM 模型看作是一個加入了注意力機制 (Attention) 的三層神經網絡。 第一層是輸入層,輸入樣本的特征向量;中間層是 m 個神經元組成的隱藏層,這里的 m 就是切片的數量;對于一個 CTR 預估問題,LS-PLM 最后一層就是單一神經元組成的全連接層/輸出層。
注意力機制應用于隱藏層和輸出層之間,神經元之間的權重是由分片函數得出的注意力得分 (attention score) 來確定的。換言之,樣本屬于哪個切片的概率就是其注意力得分。
深度學習推薦模型
上面這張演化圖展現了以多層感知機 (MLP) 為核心演化而出的一系列深度學習模型,主要的演化方向有以下幾種:
AutoRec - 單隱層神經網絡推薦模型
該模型是將自編碼器 (AutoEncoder) 和CF 相結合的一種單隱藏層神經網絡推薦模型。AutoRec 是一個標準的自編碼器 (AutoEncoder),它的核心思想在于利用 CF 中的共現矩陣,完成 User 向量和 Item 向量的自編碼,使用自編碼的結果來獲取 User 對 Item 的預估評分,以此作為推薦的依據。
自編碼器 (AutoEncoder)
無論是視頻、音頻還是其他形式的數據都可以表示為向量的形式。假設這個向量為 r,自編碼器的意義在于將該向量作為輸入,使輸出的向量盡可能接近 r 本身。
假設自編碼的重構函數為 h(r, θ),那么自編碼器的損失函數/目標函數為:
這里的 S 就是所有數據向量的集合。完成訓練之后的自編碼器,相當于在重構函數 h(r, θ) 中保留了所有數據向量的精華。重構函數的參數量遠遠小于輸入數據向量的維度量,因此,自編碼器實質上完成了數據的壓縮和降維。
在 AutoRec 中,我們再一次考慮 User 和 Item 組成的貢獻矩陣,我們可以從這個矩陣中提取出 “對 Item i,所有 m 個 User 對它的評分可以組成一個 m 維的評分向量”。 AutoRec 的主要任務就是構建一個重構函數 h(r, θ),使得該重構函數生成的所有評分向量與原向量的平方殘差和最小。 在得到這個重構函數之后,經過評分預估和排序,就能得到最終的推薦列表。
我們之前已經說過,AutoRec 使用的是單隱藏層的神經網絡模型,其結構如下圖所示:
藍色部分就是構成隱藏層的神經元。該模型的輸入層是評分向量 r,輸出層是一個多分類層,藍色神經元表示 k 維隱藏層(k << m)。V 和 W 分別表示輸入層-隱藏層和隱藏層-輸出層的參數矩陣。該模型表示的重構函數如下所示:
其中 f(·) 和 g(·) 分別是輸出層神經元和隱藏層神經元的激活函數。為防止重構函數過擬合,在加入 L2 正則化之后,目標函數/損失函數變為:
作為一個只有三層的神經網絡,只需要利用梯度反向傳播(鏈式法則)即可完成對網絡的訓練。
在了解了 AutoRec 的結構之后,對于該模型的推薦方式就會感到十分直覺。輸入一個 Item 的評分向量 r(i),模型的輸出向量 h(r(i), θ) 就是預測的所有 User 對于當前 Item 的評分匯總,那么只需要找到第 u 維,即可得知 User u 對該 Item 的預估評分,使用這樣的方法可以得到 User u 對所有 Item 的預估評分,對這些評分進行排序即可得到最后的推薦列表。
根據是針對 Item 評分向量還是 User 的評分向量搭建模型,AutoRec 可以分為 I-AutoRec 和 U-AutoRec。相比于 I-AutoRec,U-AutoRec 的優勢在于只需要輸入一次目標用戶的評分向量就能得到推薦列表,劣勢在于用戶的評分向量一般會比較稀疏,這回影響模型效果。
AutoRec 使用了一個但隱藏層的神經網絡模型,因此具有一定的泛化和表達能力,但是因為結構較為簡單,因此表達能力會有些薄弱。
Deep Crossing - 深度學習架構
是微軟 Bing 首先應用的模型。目標在于提高搜索廣告的點擊率。將特征分為 3 種類型,可用 one-hot/multi-hot 表示的類別型特征;數值型特征和需要深入處理的特征。在生成了所有輸入特征的特征向量之后,Deep Crossing 利用該特征向量預估 CTR。
在這個深度模型中,需要考慮以下三個問題:
該模型一共有 4 層網絡,以應對以上提出的問題。從下至上分別為:Embedding 層、Stacking 層、Multiple Residual Units 層、Scoring 層:
- Embedding 層:將輸入的稀疏的類別特征向量轉換為稠密的 Embedding 向量。 該層以經典的全連接層 (Fully Connected) 結構為主。Embedding 向量的維度會遠遠低于原始的稀疏特征向量
- Stacking 層:將 Embedding 特征和數值型特征結合起來,形成新的向量。 因此這層也被稱為拼接層 (Concatenate Layer)
- Multiple Residual Units 層:該層的主要結構是多層感知機。一般的神經網絡以感知機作為基本單元,組成神經網絡。Deep Crossing 使用多層殘差網絡 (Multi-Layer Residual Networks) 作為 MLP (Multi Layer Perceptron) 的具體實現。多層殘差網絡可以對特征向量的各個維度進行充分的交叉組合,使模型學習到更多非線性特征以及組合特征
- Scoring 層:作為輸出層,是為擬合優化目標而存在的。對于 CTR 預估這種二分類,可采用邏輯回歸;對多分類,可使用 Softmax
基于這樣的結構,使用反向傳播算法進行訓練。
NerualCF 模型 - CF 與深度學習相結合
先從 DL 的角度回顧一下矩陣分解 (MF)。簡單回顧一下矩陣分解的思想:將 CF 中的 User-Item 共現矩陣分解為 User 向量矩陣和 Item 向量矩陣。User u 的隱向量和 Item i 的隱向量內積就是 u 對 i 的預估評分。
類比上面提到的 Deep Crossing,矩陣分解 (MF) 的 User 隱向量和 Item 隱向量就是一種 Embedding 方法。最后通過 User 隱向量和 Item 隱向量內積得到 User 對 Item 的預估得分就類比最終的 Scoring 層,因此可以得到如下所示的矩陣分解的網絡化表示圖:
但在實際使用中,會發現矩陣分解常常無法對優化目標有效擬合,這是因為矩陣分解的結構相對簡單,特別是 Scoring 層,因此出現了欠擬合。
NerualCF 使用 “多層神經網絡 + 輸出層” 替代了矩陣分解中的內積操作:
這樣的操作有 2 個好處。首先,讓特征能夠更充分地交叉組合,得到更多有價值地特征組合;其次,引入了更多非線性特征,讓模型有了更強的表達能力。
實際上 User 向量和 Item 向量之間的互操作可以用很多方式代替,這被成為 “廣義矩陣分解”。原本在矩陣分解中,使用的是內積作為互操作方式。實際上可以選擇使用 “元素積 (Element Product)”,該計算的結果仍是一個向量,每個元素為兩個輸入向量對應元素的乘積。然后再通過邏輯回歸等輸出層擬合最終的目標。
再進一步,可以將通過不同互操作網絡得到的特征向量拼接起來,然后交給輸出層進行目標擬合。這就可以構成一個 NerualCF 混合模型:
上圖中的混合模型結合了一般的 NerualCF 和使用元素積的冠以矩陣分解。
NerualCF 可以利用神經網絡的優勢,擬合任意函數,靈活地組合特征,按需求增減模型地復雜度。但由于是基于 CF 構造的,所以沒有引入更多其他類型地特征,浪費了其他的有價值信息。
PNN 模型 - 加強特征交叉能力
剛剛說過,NeuralCF 因為時基于 CF 構造的,因此值使用了 User 和 Item 兩組特征向量,所以浪費了其他信息。為了強化多組特征的交互能力,PNN 誕生了。
與 Deep Crossing 模型相比,PNN 最主要的區別體現在使用乘積層 (Product Layer) 替代了 Stacking 層。換言之,不再簡單地拼接 Embedding 向量,而是用 Product 操作進行兩兩交互,更有針對性地獲取特征之間的交叉信息。
再把目光放到輸入層上,我們可以看到,PNN 模型的輸入并不是只有 User 和 Item 兩種向量,而是有多種不同來源的特征向量,這些向量在通過 Embedding 層之后,都會變為長度相同的稠密向量 (Dense Vector),這也是后續乘積操作的必要條件。PNN 模型在乘積層 (Product Layer) 提供了更多的特征交叉方式。
根據模型結構圖,我們可以清晰地看到成績層 (Product Layer) 由 2 部分組成:z 和 p
- z 部分:線性操作部分。將各特征向量進行線性拼接
- p 部分:乘積操作部分。該部分又分為內積操作和外積操作
- 使用內積操作的 PNN 被稱為 IPNN (Inner Product-based Neural Network)
- 使用外積操作的 PNN 被稱為 OPNN (Outer Product-based Neural Network)
內積 (Inner Product) = 點積 (Dot Product):
兩個向量的內積是一個標量:a = (1, 2, 3), b = (4, 5, 6), a · b = 1*4 + 2 * 5 + 3 * 6 = 32
外積 (Outer Product) = 叉積 (Cross Product):
兩個向量的外積是一個向量,該向量是向量 a 和 b 組成的平面的法向量
由于外積會讓兩個 M 維的向量得到一個 M x M 的矩陣,因此參數量直接從 M 變為 M2。對此 PNN 提出了一個降維的方法。將所有特征 Embedding 向量兩兩互操作得到的外積結果 (矩陣) 進行累加,形成一個疊加外積互操作矩陣 p:
矩陣 p 的最終結果等同于讓所有特征的 Embedding 向量通過一個 Average Pooling 再進行外積互操作。
這里的平均池化實際上需要斟酌,因為把不同特征向量的同一維度進行平均有一個前提,那就是默認不同特征在對應維度有類似的含義。但是很明顯這是很難遵守的,比如 “年齡” 和 “地域” 特征向量根本無關聯,那就更不可能在某個維度上有類似的含義。所以,平均池化一般發生在同類的特征向量之間
PNN 考慮到了多種特征的交叉組合,內積和外積的操作更具針對性地強調了不同特征之間的交互,讓模型更容易捕捉特征的交叉信息。但是在實際應用中,為了提升外積操作的效率,會進行簡化操作,另外這樣的無差別交叉會丟失蘊含在原始數據中更有價值的信息。
Wide&Deep 模型 - 記憶能力與泛化能力的綜合
Google 提出的模型,是由單層的 Wide 和多層的 Deep 部分組成的混合模型。其中:
記憶能力 (Memorization):模型直接學習和利用歷史數據中物品或者特征的 “共現頻率 (co-occurrence frequency)” 的能力。 CF, LR 等模型有很強的記憶能力,因為結構相對簡單,原始的數據可以直接影響最后的推薦結果,實質上達成 “因為用過 A,所以推薦 B” 的效果。相當于模型記住了歷史數據的分布特點,并用這段記憶進行推薦。(可以看作是表征對強特征的記憶能力)
泛化能力 (Generalization):模型傳遞特征的相關性,以及發掘稀疏甚至是從未出現過的稀疏特征與最終標簽相關性的能力。 矩陣分解 (MF) 和神經網絡有著更強的泛化能力,因為它們即使接收到的是比較稀疏的特征向量,也能給出相對穩定的推薦概率
wide&deep 模型將 “記憶能力” 強的簡單模型和 “泛化能力” 強的深度模型結合在一起。根據上面的模型結構圖可以看到,單輸入層的 wide 部分和由 Embedding 層與多隱層組成的 deep 部分連接起來,一起輸入到最后的輸出層。 wide 部分處理大量稀疏類的 ID 特征;deep 部分使用神經網路,進行特征交叉,挖掘深層次的數據規律。最后,使用邏輯回歸模型 (LR) 將 wide 和 deep 部分結合,形成統一的模型。
*Deep&Cross 模型
Deep&Cross 模型是 Wide&Deep 的進階版。主要的區別在于用 Cross 網絡替代原本的 wide 部分。
Cross 網絡會進一步增強特征之間的交叉力度。若第 l 層的輸出向量為 xl,那么第 l +1 層的輸出向量為:
這個交叉層的操作和 PNN 模型中的外積操作非常相似,不過現在增加了外積操作的權重向量 W 以及輸入向量 xl 和偏置向量 bl 具體的操作如下圖所示:
Corss 層對于參數增加顯得非常謹慎。每一次操作僅增加了一個 n 維的權重 w 向量,且都保留了原始的輸出向量,因此輸出和輸入之間的變化不會十分明顯。與 Wide&Deep 模型中的 Wide 部分相比,Cross 增加了特征自動交叉,避免了更多的人工特征工程。但是,論及對于特征的理解以及對于非線性特征的學習,Deep 部分還是獨占鰲頭。
FM 模型族和深度學習模型的結合
FNN 模型 - 使用 FM 的隱向量完成 Embedding 層的初始化
FNN 模型最大的特點在于對 Embedding 層的改進。在神經網絡中,參數初始化往往會采用隨機初始化,因此不會包含任何先驗信息。同時,因為 Embedding 層的輸入是稀疏向量,因此收斂速度會非常慢,進而拖慢整個模型的收斂速度。
FNN 模型選擇使用 FM 模型訓練好的各特征隱向量初始化 Embedding 層的參數,也就是在這個時候,已經為網絡引入了先驗信息。FM 的數學表達式中各參數與 Embedding 層參數對應關系如下:
具體來看如何初始化 Embedding 層神經元與輸入層神經元的連接權值。如果 FM 模型的隱向量是 m 維的,第 i 個特征域 (Field) 的第 k 維特征的隱向量為 vi,k = (vi,k1, vi,k2, vi,k3, …, vi,km)。那么隱向量第 l 維就會成為輸入層神經元 k 與 Embedding 層神經元 l 的連接權值的初始值。
在 FM 模型的訓練中,我們沒有對特征域進行區分,但在 FNN 模型中,特征被劃分為不同的特征域,每個特征域有對應的 Embedding 層,且每個特征域的 Embedding 層的神經元數量與 FM 隱向量維度相同。
DeepFM - 用 FM 替代 Wide 部分
這是 FM 模型與 Wide&Deep 模型的結合:
DeepFM 相比原有的 Wide&Deep 模型,最大的改動在于使用 FM 替換了 Wide 部分,加強了淺層網絡部分特征組合的能力。 根據上面的模型結構圖,我們可以知道:
- 左邊的 FM 與右邊的深度神經網絡共享同一個 Embedding 層
- 左邊的 FM 將不同特征域的 Embedding 兩兩交叉(以 Embedding 作為特征隱向量)
- 左邊的 FM 輸出與右邊 Deep 部分輸出一同輸出給輸出層,參與最后的目標擬合
這一模型的改進動機與 Deep&Cross 一致,皆為解決 Wide 部分不具備特征組合的缺陷。因此,我們可以類比 Deep&Cross 和 DeepFM 兩個模型,都是對 Wide 部分進行替換
NFM - FM 的神經網絡化
我們在之前介紹 FM 模型族時已經說過,這一系列模型最大的缺點在于只能對二階特征進行組合,難以擴展到多階特征組合。NFM 模型的思想是使用一個表達能力更強的函數去替代 FM 中的二階隱向量內積部分:
這里對于這個新函數 f(x) 的構造,可以交由某個深度神經網絡來完成。
NFM 網絡架構的特點在于它在 Embedding 層和多層神經網絡之間添加了特征交叉池化層 (Bi-interaction Pooling Layer)。 我們用 Vx 表示所有特征域的 Embedding 向量的集合,特征交叉池化層進行的工作可由下式表示:
這里的 ⊙ 表示向量對應維度數值相乘,最后的結果應為維度相同的一個新向量。在對 Embedding 向量兩兩進行了元素積的操作之后,對結果向量進行求和,其結果即為特征交叉池化層的輸出,將它輸入之后的多層全連接神經網絡,進行進一步交叉。
上述的這三種模型都是在深度神經網絡的基礎上,加入由針對性的特征交叉操作,讓模型具備更強的非線性表達能力。但到此為止,特征工程在推薦模型上的探究已經到達了一個幾乎窮盡的地步。因此,后續對于模型的改良更偏重于 “結構” 上的改進。
注意力機制(Attention Policy)
注意力機制的直觀體現就是注意力熱度圖,可以顯式表達用戶對不同區域注意力的分布情況。
AFM - 引入注意力機制的 FM 模型
由浙江大學提出的 AFM 是引入了注意力機制的 FM 模型,可以說是 NFM 的延續。回顧一下 NFM 的核心思想:
在對 Embedding 向量兩兩進行了元素積的操作之后,對結果向量進行求和,其結果即為特征交叉池化層的輸出,將它輸入之后的多層全連接神經網絡,進行進一步交叉
問題就出現在求和池化 (Sum Pooling) 上,單純的求和忽略了不同特征對最后結果的影響程度。因此需要引入 “注意力機制” 來彌補這個問題,注意力機制的基本思想:不同的交叉特征對于最終結果的影響程度不同,因此模型會將更多的注意力投入給更重要的交叉特征。
根據上面的結構圖,我們能夠知道,AFM 模型是通過在特征交叉層和輸出層之間添加了注意力網絡 (Attention Net) 實現的,這個網絡會為每一組交叉特征賦予一個權重。 特征交叉的過程與 NFM 一致,仍使用元素積的方式,但通過引入注意力網絡,我們有了一個新的變量,注意力得分 a:
這個注意力得分 ai,j 就是注意力網絡為交叉特征 xixj 賦予的權重。注意力網絡本身的結構并不復雜,是單層全連接網絡加上 softmax 層
需要學習的模型參數就是:
- W:特征交叉網絡到注意力網絡的權重矩陣
- b:偏置 (bias) 向量
- h:注意力網絡全連接層到 softmax 層的
這個模型會整體進行訓練,得到最后的參數
DIN - 引入注意力機制的深度網絡
這是由阿里開發的商業模型,應用場景為電商廣告推薦。在這個場景下,模型輸入特征自然而然地分為兩個部分:
它們都包含有 2 個重要特征:商品 ID 和商鋪 ID。用戶特征組中的商品 ID 和商鋪 ID 都是該用戶的歷史點擊記錄序列;而廣告特征組則簡單的對應廣告內容中的商品及其對應商鋪。
在這個模型中,注意力機制主要用于體現不同用戶特征的重要程度。同時,用戶特征的注意力得分應該與廣告特征相互關聯。
從模型的角度來看,需要利用候選商品與用戶的歷史點擊商品之間的相關性計算出權值,這個權值就是 “注意力得分”。引入了這個注意力得分的 DNN 就是 DIN:
在這個式子中:
- Vu:用戶的 Embedding 向量
- Va:候選廣告商品的 Embedding 向量
- Vi:用戶 u 在第 i 次瀏覽的商品/商鋪的 Embedding 向量
- wi:g(Vi, Va),“注意力得分”,即 Vi 和 Va 之間的相關性
g(Vi, Va) 函數就是一個注意力激活神經元 (activation unit),位于結構圖的右上角。即輸入兩個 Embedding 向量,做差運算,結果與原有的兩個 Embedding 向量連接,通過單神經元輸出層得到注意力得分。
從數學角度來看,“注意力機制” 實際上就是將原本的直接求和操作變為加權求和,但是因此更加符合人類天生的 “注意力機制”,從而提升了對于特征的學習能力,進而優化了推薦結果。
DIEN - 序列模型與推薦模型的結合
這是阿里基于 DIN 模型不斷研究得出的升級版模型,其最大的特點在于==引入了 “時間” 這一不可忽視的變量,模擬了用戶興趣的變化==。之前已經說過,用戶的特征組記錄著歷史行為,這樣的序列信息具有時間維度的價值,將這樣的時間信息納入考慮是必要的,因為在互聯網時代,一個用戶的興趣變化速度是極快的,因此,擁有了一個用戶的序列信息(歷史行為)就能夠:
比如一個男生一周前瀏覽的所有商品全為球鞋,這周變成了機械鍵盤。那么序列模型應該能夠建立一個從 “球鞋” 到 “機械鍵盤” 的轉移概率。如果這個概率的意義足夠強,那么在該用戶購買球鞋時,推薦機械鍵盤也是個不錯的選擇
DIEN 的關鍵在于,如何構建圖中彩色部分的 “興趣進化網絡”。該網絡是一種用戶興趣的 Embedding 方法,最終的輸出是 h’(T) 這個用戶興趣向量。 興趣進化網絡的層級從下至上為:
- 行為序列層 (Behaviour Layer):將原始的 ID 行為序列轉換為 Embedding 行為序列。與一般的 Embedding 層一致
- 興趣抽取層 (Interest Extractor Layer):通過模擬用戶興趣遷移過程,抽取用戶的興趣
- 興趣進化層 (Interest Evolving Layer):在興趣抽取層上加入 “注意力機制”,模擬與當前廣告相關的興趣進化過程
興趣抽取層
興趣抽取層是一個 GRU (Gated Recurrent Unit) 網絡。
這是一個典型的時序網絡 - 循環神經網絡的強化版。 GRU 單元中用一個門 (Gate) 來決定是記住還是遺忘當前的信息。簡單來說 ut = 1 時,決定遺忘過去,記住現在; ut = 0 時,決定保留過去,不記住現在。
GRU 的好處在于它解決了傳統 RNN 的梯度消失(遺忘)問題,但是參數量沒有 LSTM 那么多。
在上面的式子中,σ 時 Sigmoid 函數,? 表示元素積操作。Wu, Wr, Wh, Uu, Ur, Uh 是六組需要學習的參數矩陣,it 是輸入狀態向量,即行為序列層的各行為 Embedding 向量 b(t),ht 是GRU 網絡中的第 t 個隱狀態向量。
可以看到,在這一層,用戶的行為向量 b(t) 被進一步抽象為興趣狀態向量 h(t),因為 GRU 本身就能用來進行時序預測,理論上我們已經能夠預測用戶的下一個興趣狀態向量
興趣進化層
興趣進化層最大的特征在于引入了 “注意力機制”。這里的注意力得分生成機制與 DIN 完全一致,都是用當前狀態向量與目標廣告向量進行相互作用。換句話說,興趣進化層在模擬興趣變遷的過程中需要考慮與目標廣告的相關性。因此,在興趣抽取層上增加興趣進化層,是為了更具針對性地模擬與目標廣告相關的興趣路徑
用戶非常有可能同時購買多品類商品,例如在購買"機械鍵盤"的同時 還在查看"衣服"品類下的商品,那么這時注意力機制就顯得格外重要了 。 當目標廣告是某個電子產品時,用戶購買"機械鍵盤"相關的興趣演化路徑顯然比購買"衣服"的演化路徑重要
具體的做法是引入 AUGRU (GRU with Attention Update Gate)。即在原有 GRU 的更新門上加入注意力得分:
強化學習與推薦系統
強化學習的主要組成有 2 個:Agent 與 Enviroment。Agent 通過 Action 改變 Environment 的狀態,并通過 Environment 反饋的 Reward 來不斷優化自身。我們可以把推薦系統也看作一個 Agent,DRN 就是一個基于此思想得到的強化學習推薦模型框架
在這個架構中:
- Agent:推薦系統。包括基于 DL 的推薦模型、探索策略、數據存儲
- Environment:由網站、APP、用戶組成的整體推薦環境。用戶接收推薦結果并給出反饋
- Action:推薦系統將推薦結果排序推送給用戶
- Reward:用戶收到推薦之后做出的反饋。(曝光但未點擊是典型的負反饋,點擊就是正反饋)
- State:對 Environment 以及推薦系統自身所處情況的刻畫
根據這樣一個框架,具體的學習步驟為:
因此,應用了強化學習的推薦系統,其最大的特點就在于支持 “在線學習”
在 DRN 中,Agent 就是 DQN (Deep Q-Network) 模型:
此時,把和具體 Action 無關的用戶特征 (User Feature) 和環境特征 (Context Feature) 作為狀態向量 (State Vector);把和推薦對象相關的用戶-對象交叉特征和對象特征作為行為向量 (Action Vector)。這里的 DQN 模型在強化學習領域實際上非常有名,作為一個 Q-Learning 模型,它的核心任務在于學習得到一個理想的 Q-Funtion。此處的 Q-Funtion 就是用戶特征和環境特征經過左側多層神經網絡的擬合生成價值( value )得分 V(s) , 利用狀態向量和行動向量生成優勢( advantage )得分 A(s) 的結合。
這個模型的學習過程依舊遵循強化學習的基本邏輯:
這里主要關注步驟 3 中如何進行模型調整,我們主要借助競爭梯度下降法 (Dueling Gradient Descent Algorithm)
該算法主要步驟如下:
這里的隨機調整 ΔW = α * rand(-1, 1) W。α 就是探索因子,決定了探索力度的大小
所以 DRN 就是通過不斷 “探索”,通過海量嘗試試圖達到最優點。強化學習將模型的 “實時性” 變得極為重要。
總結
總結
以上是生活随笔為你收集整理的推荐系统(Recommender System)笔记 01:推荐系统的演化的全部內容,希望文章能夠幫你解決所遇到的問題。