推薦系統遇上深度學習(二十一)--階段性回顧

本系列已經寫了二十篇了,但推薦系統的東西還有很多值得探索和學習的地方。不過在這之前,我們先靜下心來,一起回顧下之前學習到的東西!

由于是總結性質的文章,很多細節不會過多的涉及,有興趣的同學可以點擊文章中給出的鏈接進行學習。

本文中涉及的大多數算法是計算廣告中點擊率預估用到的模型,當然也會涉及pair-wise的模型如貝葉斯個性排序以及list-wise的如京東的強化學習推薦模型。

好了,廢話不多說,咱們開始吧。先看一下目錄:

1、推薦系統中常用評測指標

1.1精確率、召回率、F1值
1.2 AUC
1.3 Hit Ratio(HR)
1.4 Mean Average Precision(MAP)
1.5 Normalized Discounted Cummulative Gain(NDCG)
1.6 Mean Reciprocal Rank (MRR)
1.7 ILS

2、點擊率預估問題中的數據

3、傳統方法

3.1 線性模型
3.2 FM模型
3.3 FFM模型
3.4 GBDT+LR模型

4、深度學習方法

4.1 并行結構
4.1.1 Wide & Deep模型
4.1.2 DeepFM模型
4.1.3 Deep Cross Network
4.2 串行結構
4.2.1 Product-based Neural Network
4.2.2 Neural factorization machines
4.2.3 Attention-Based factorization machines

5、強化學習方法

6、推薦系統的EE問題

6.1 Bandit算法
6.2 LinUCB算法

7、推薦系統在公司中的實戰

7.1 阿里MLR算法
7.2 阿里Deep Interest Network
7.3 阿里ESSM模型
7.4 京東強化學習推薦模型

1、推薦系統中常用評測指標

評測指標并非我們的損失函數,對于CTR預估問題來說,我們可以當作回歸問題而選擇平方損失函數,也可以當作分類問題而選擇對數損失函數。
不過評測指標,是對我們推薦效果的評價,用于評估推薦效果的好壞,不用于指導我們模型的訓練。因此在一般的基于深度學習的模型中,常常面臨模型訓練和評估時指標不一致的問題。好了,我們先來回顧一下常用的評測指標。這些指標有的適用于二分類問題,有的適用于對推薦列表topk的評價。

1.1精確率、召回率、F1值

我們首先來看一下混淆矩陣,對于二分類問題,真實的樣本標簽有兩類,我們學習器預測的類別有兩類,那么根據二者的類別組合可以劃分為四組,如下表所示:

基于混淆矩陣,我們可以得到如下的評測指標:

精確率/召回率

精確率表示預測結果中,預測為正樣本的樣本中,正確預測為正樣本的概率;
召回率表示在原始樣本的正樣本中,最后被正確預測為正樣本的概率;

二者用混淆矩陣計算如下:

F1值

為了折中精確率和召回率的結果,我們又引入了F-1 Score,計算公式如下:

1.2 AUC

AUC定義為ROC曲線下方的面積:

ROC曲線的橫軸為“假正例率”(True Positive Rate,TPR),又稱為“假陽率”;縱軸為“真正例率”(False Positive Rate,FPR),又稱為“真陽率”,

下圖就是我們繪制的一張ROC曲線圖,曲線下方的面積即為AUC的值:

AUC還有另一種解釋,就是測試任意給一個正類樣本和一個負類樣本,正類樣本的score有多大的概率大于負類樣本的score

1.3 Hit Ratio(HR)

在top-K推薦中,HR是一種常用的衡量召回率的指標,其計算公式如下:

e

分母是所有的測試集合,分子式每個用戶top-K推薦列表中屬于測試集合的個數的總和。舉個簡單的例子,三個用戶在測試集中的商品個數分別是10,12,8,模型得到的top-10推薦列表中,分別有6個,5個,4個在測試集中,那么此時HR的值是 (6+5+4)/(10+12+8) = 0.5。

1.4 Mean Average Precision(MAP)

在了解MAP(Mean Average Precision)之前,先來看一下AP(Average Precision), 即為平均準確率。比如對于用戶 u, 我們給他推薦一些物品,那么 u 的平均準確率定義為:

用一個例子來解釋AP的計算過程:

因此該user的AP為(1 + 0.66 + 0.5) / 3 = 0.72

那么對于MAP(Mean Average Precision),就很容易知道即為所有用戶 u 的AP再取均值(mean)而已。那么計算公式如下:

1.5 Normalized Discounted Cummulative Gain(NDCG)

對于NDCG,我們需要一步步揭開其神秘的面紗,先從CG說起:
CG
我們先從CG(Cummulative Gain)說起, 直接翻譯的話叫做“累計增益”。 在推薦系統中,CG即將每個推薦結果相關性(relevance)的分值累加后作為整個推薦列表(list)的得分。即

這里, rel-i 表示處于位置 i 的推薦結果的相關性,k 表示所要考察的推薦列表的大小。

DCG
CG的一個缺點是沒有考慮每個推薦結果處于不同位置對整個推薦效果的影響,例如我們總是希望相關性高的結果應排在前面。顯然,如果相關性低的結果排在靠前的位置會嚴重影響用戶體驗, 所以在CG的基礎上引入位置影響因素,即DCG(Discounted Cummulative Gain), “Discounted”有打折,折扣的意思,這里指的是對于排名靠后推薦結果的推薦效果進行“打折處理”:

image

從上面的式子可以得到兩個結論:
1)推薦結果的相關性越大,DCG越大。
2)相關性好的排在推薦列表的前面的話,推薦效果越好,DCG越大。

NDCG
DCG仍然有其局限之處,即不同的推薦列表之間,很難進行橫向的評估。而我們評估一個推薦系統,不可能僅使用一個用戶的推薦列表及相應結果進行評估, 而是對整個測試集中的用戶及其推薦列表結果進行評估。 那么不同用戶的推薦列表的評估分數就需要進行歸一化,也即NDCG(Normalized Discounted Cummulative Gain)。

在介紹NDCG之前,還需要了解一個概念:IDCG. IDCG, 即Ideal DCG, 指推薦系統為某一用戶返回的最好推薦結果列表, 即假設返回結果按照相關性排序, 最相關的結果放在最前面, 此序列的DCG為IDCG。因此DCG的值介于 (0,IDCG] ,故NDCG的值介于(0,1],那么用戶u的NDCG@K定義為:

因此,平均NDCG計算為:

1.6 Mean Reciprocal Rank (MRR)

MRR計算公式如下:

其中|Q|是用戶的個數,ranki是對于第i個用戶,推薦列表中第一個在ground-truth結果中的item所在的排列位置。

舉個例子,有三個用戶,推薦列表中正例的最小rank值分別為3,2,1,那么MRR=(1 + 0.5 + 0.33) / 3 = 0.61

1.7 ILS

ILS是衡量推薦列表多樣性的指標,計算公式如下:

如果S(bi,bj)計算的是i和j兩個物品的相似性,如果推薦列表中物品越不相似,ILS越小,那么推薦結果的多樣性越好。

關于推薦系統評價指標更多的知識,可以看之前總結的兩篇文章:
推薦系統遇上深度學習(九)--評價指標AUC原理及實踐:http://www.lxweimin.com/p/4dde15a56d44
推薦系統遇上深度學習(十六)--詳解推薦系統中的常用評測指標:http://www.lxweimin.com/p/665f9f168eff

相關的代碼實現在這里:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-Evaluation-metrics

2、點擊率預估問題中的數據

點擊率預估問題中的數據主要分為離散變量和連續變量,對于連續變量,直接帶入計算即可,對于離散(類別)變量,我們往往采用one-hot形式,比如對于下面的數據:

將上面的數據進行one-hot編碼以后,就變成了下面這樣:

過one-hot編碼以后,不可避免的樣本的數據就變得很稀疏。舉個非常簡單的例子,假設淘寶或者京東上的item為100萬,如果對item這個維度進行one-hot編碼,光這一個維度數據的稀疏度就是百萬分之一。由此可見,數據的稀疏性,是我們在實際應用場景中面臨的一個非常常見的挑戰與問題。

3、傳統方法

3.1 線性模型

一般的線性模型為:

從上面的式子很容易看出,一般的線性模型沒有考慮特征間的關聯。為了表述特征間的相關性,我們采用多項式模型。在多項式模型中,特征xi與xj的組合用xixj表示。為了簡單起見,我們討論二階多項式模型。具體的模型表達式如下:

上式中,n表示樣本的特征數量,xi表示第i個特征。

但是對于線性模型來說,泛化能力較弱,特別是對于同一個離散特征展開的one-hot特征來說,兩兩之間的乘積總是為0。

3.2 FM模型

FM為每一個特征引入了一個隱變量,并且用隱變量的乘積來作為特征交叉的權重:

FM的特征交叉部分可以通過化簡來簡化計算,過程如下;

有關FM的更多細節,參考文章:推薦系統遇上深度學習(一)--FM模型理論和實踐:http://www.lxweimin.com/p/152ae633fb00
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/recommendation-FM-demo

3.3 FFM模型

FFM模型在FM的基礎上,中引入了類別的概念,即field。還是拿上一講中的數據來講,先看下圖:

在上面的廣告點擊案例中,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”這三個特征都是代表日期的,可以放到同一個field中。同理,Country也可以放到一個field中。簡單來說,同一個categorical特征經過One-Hot編碼生成的數值特征都可以放到同一個field,包括用戶國籍,廣告類型,日期等等。

在FFM中,每一維特征 xi,針對其它特征的每一種field fj,都會學習一個隱向量 v_i,fj。因此,隱向量不僅與特征相關,也與field相關。也就是說,“Day=26/11/15”這個特征與“Country”特征和“Ad_type"特征進行關聯的時候使用不同的隱向量,這與“Country”和“Ad_type”的內在差異相符,也是FFM中“field-aware”的由來。

假設樣本的 n個特征屬于 f個field,那么FFM的二次項有 nf個隱向量。而在FM模型中,每一維特征的隱向量只有一個。FM可以看作FFM的特例,是把所有特征都歸屬到一個field時的FFM模型。根據FFM的field敏感特性,可以導出其模型方程。

可以看到,如果隱向量的長度為 k,那么FFM的二次參數有 nfk 個,遠多于FM模型的 nk個。此外,由于隱向量與field相關,FFM二次項并不能夠化簡,其預測復雜度是 O(kn^2)。

有關FFM的更多細節,參考文章:推薦系統遇上深度學習(二)--FFM模型理論和實踐:http://www.lxweimin.com/p/781cde3d5f3d
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/recommendation-FFM-Demo

3.4 GBDT+LR模型

Facebook 2014年的文章介紹了通過GBDT解決LR的特征組合問題,隨后Kaggle競賽也有實踐此思路,GBDT與LR融合開始引起了業界關注。

GBDT和LR的融合方案,FaceBook的paper中有個例子:

圖中共有兩棵樹,x為一條輸入樣本,遍歷兩棵樹后,x樣本分別落到兩顆樹的葉子節點上,每個葉子節點對應LR一維特征,那么通過遍歷樹,就得到了該樣本對應的所有LR特征。構造的新特征向量是取值0/1的。舉例來說:上圖有兩棵樹,左樹有三個葉子節點,右樹有兩個葉子節點,最終的特征即為五維的向量。對于輸入x,假設他落在左樹第一個節點,編碼[1,0,0],落在右樹第二個節點則編碼[0,1],所以整體的編碼為[1,0,0,0,1],這類編碼作為特征,輸入到LR中進行分類。

有關GBDT+LR的更多細節,參考文章:推薦系統遇上深度學習(十)--GBDT+LR融合方案實戰:http://www.lxweimin.com/p/96173f2c2fb4
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/GBDT%2BLR-Demo

4、深度學習方法

在CTR預估中,為了解決稀疏特征的問題,學者們提出了FM模型來建模特征之間的交互關系。但是FM模型只能表達特征之間兩兩組合之間的關系,無法建模兩個特征之間深層次的關系或者說多個特征之間的交互關系,因此學者們通過Deep Network來建模更高階的特征之間的關系。

因此 FM和深度網絡DNN的結合也就成為了CTR預估問題中主流的方法。有關FM和DNN的結合有兩種主流的方法,并行結構和串行結構。兩種結構的理解以及實現如下表所示:

結構 描述 常見模型
并行結構 FM部分和DNN部分分開計算,只在輸出層進行一次融合得到結果 DeepFM,DCN,Wide&Deep
串行結構 將FM的一次項和二次項結果(或其中之一)作為DNN部分的輸入,經DNN得到最終結果 PNN,NFM,AFM

兩類結構的典型網絡模型如下圖:

下面,我們回顧一下這兩類結構的典型模型。

4.1 并行結構

4.1.1 Wide & Deep模型

Wide & Deep模型本系列還沒有整理,不過可以簡單介紹一下。Wide & Deep模型結構如下:

Wide部分
wide部分就是一個廣義線性模型,輸入主要由兩部分,一部分是原始特征,另一部分是交互特征,我們可以通過cross-product transformation的形式來構造K組交互特征:

Deep部分
Deep部分就是一個DNN的模型,每一層計算如下:

聯合訓練

Wide & Deep模型采用的是聯合訓練的形式,而非集成。二者的區別就是聯合訓練公用一個損失函數,然后同時更新各個部分的參數,而集成方法是獨立訓練N個模型,然后進行融合。因此,模型的輸出為:

有關Wide&Deep模型更多的細節,大家可以閱讀原論文,或者關注本系列后續的文章。

4.1.2 DeepFM模型

我們先來看一下DeepFM的模型結構:

DeepFM包含兩部分:神經網絡部分與因子分解機部分,分別負責低階特征的提取和高階特征的提取。這兩部分共享同樣的輸入。DeepFM的預測結果可以寫為:

FM部分

FM部分的詳細結構如下:

FM部分是一個因子分解機。這里我們不再過多介紹。FM的輸出公式為:

深度部分

深度部分是一個前饋神經網絡。與圖像或者語音這類輸入不同,圖像語音的輸入一般是連續而且密集的,然而用于CTR的輸入一般是及其稀疏的。因此需要重新設計網絡結構。具體實現中為,在第一層隱含層之前,引入一個嵌入層來完成將輸入向量壓縮到低維稠密向量。

嵌入層(embedding layer)的結構如上圖所示。當前網絡結構有兩個有趣的特性,1)盡管不同field的輸入長度不同,但是embedding之后向量的長度均為K。2)對同一個特征來說,FM的隱變量和Embedding之后的向量是相同的,這兩部分共享同樣的輸入

有關DeepFM的更多細節,參考文章:推薦系統遇上深度學習(三)--DeepFM模型理論和實踐:http://www.lxweimin.com/p/6f1c2643d31b
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-DeepFM-model

4.1.3 Deep Cross Network

一個DCN模型從嵌入和堆積層開始,接著是一個交叉網絡和一個與之平行的深度網絡,之后是最后的組合層,它結合了兩個網絡的輸出。完整的網絡模型如圖:

image

嵌入和堆疊層
我們考慮具有離散和連續特征的輸入數據。在網絡規模推薦系統中,如CTR預測,輸入主要是分類特征,如“country=usa”。這些特征通常是編碼為獨熱向量如“[ 0,1,0 ]”;然而,這往往導致過度的高維特征空間大的詞匯。

為了減少維數,我們采用嵌入過程將這些離散特征轉換成實數值的稠密向量(通常稱為嵌入向量):

然后,我們將嵌入向量與連續特征向量疊加起來形成一個向量:

拼接起來的向量X0將作為我們Cross Network和Deep Network的輸入

Cross Network

交叉網絡的核心思想是以有效的方式應用顯式特征交叉。交叉網絡由交叉層組成,每個層具有以下公式:

一個交叉層的可視化如圖所示:

可以看到,交叉網絡的特殊結構使交叉特征的程度隨著層深度的增加而增大。多項式的最高程度(就輸入X0而言)為L層交叉網絡L + 1。如果用Lc表示交叉層數,d表示輸入維度。然后,參數的數量參與跨網絡參數為:d * Lc * 2 (w和b)

交叉網絡的少數參數限制了模型容量。為了捕捉高度非線性的相互作用,模型并行地引入了一個深度網絡。

Deep Network

深度網絡就是一個全連接的前饋神經網絡,每個深度層具有如下公式:

Combination Layer

鏈接層將兩個并行網絡的輸出連接起來,經過一層全鏈接層得到輸出:

如果采用的是對數損失函數,那么損失函數形式如下:

有關DCN的更多細節,參考文章:推薦系統遇上深度學習(五)--Deep&Cross Network模型理論和實踐:http://www.lxweimin.com/p/77719fc252fa
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-DCN-Demo

4.2 串行結構

4.2.1 Product-based Neural Network

PNN,全稱為Product-based Neural Network,認為在embedding輸入到MLP之后學習的交叉特征表達并不充分,提出了一種product layer的思想,既基于乘法的運算來體現體征交叉的DNN網絡結構,如下圖:

我們這里主要來關注一下Product-Layer,product layer可以分成兩個部分,一部分是線性部分lz,一部分是非線性部分lp。

看上面的公式,我們首先需要知道z和p,這都是由我們的embedding層得到的,其中z是線性信號向量,因此我們直接用embedding層得到:

論文中使用的等號加一個三角形,其實就是相等的意思,你可以認為z就是embedding層的復制。

對于p來說,這里需要一個公式進行映射:

不同的g的選擇使得我們有了兩種PNN的計算方法,一種叫做Inner PNN,簡稱IPNN,一種叫做Outer PNN,簡稱OPNN。

IPNN

IPNN的示意圖如下:

IPNN中p的計算方式如下,即使用內積來代表pij:

OPNN

OPNN的示意圖如下:

OPNN中p的計算方式如下:

有關PNN的更多細節,參考文章:推薦系統遇上深度學習(六)--PNN模型理論和實踐:http://www.lxweimin.com/p/be784ab4abc2
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-PNN-Demo

4.2.2 Neural factorization machines

對于NFM模型,目標值的預測公式變為:

其中,f(x)是用來建模特征之間交互關系的多層前饋神經網絡模塊,架構圖如下所示:

Embedding Layer和我們之間幾個網絡是一樣的,embedding 得到的vector其實就是我們在FM中要學習的隱變量v。

Bi-Interaction Layer名字挺高大上的,其實它就是計算FM中的二次項的過程,因此得到的向量維度就是我們的Embedding的維度。最終的結果是:

Hidden Layers就是我們的DNN部分,將Bi-Interaction Layer得到的結果接入多層的神經網絡進行訓練,從而捕捉到特征之間復雜的非線性關系。

在進行多層訓練之后,將最后一層的輸出求和同時加上一次項和偏置項,就得到了我們的預測輸出:

有關NFM的更多細節,參考文章:推薦系統遇上深度學習(七)--NFM模型理論和實踐:http://www.lxweimin.com/p/4e65723ee632
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-NFM-Demo

4.2.3 Attention-Based factorization machines

在進行預測時,FM會讓一個特征固定一個特定的向量,當這個特征與其他特征做交叉時,都是用同樣的向量去做計算。這個是很不合理的,因為不同的特征之間的交叉,重要程度是不一樣的。如何體現這種重要程度,之前介紹的FFM模型是一個方案。另外,結合了attention機制的AFM模型,也是一種解決方案。

關于什么是attention model?本文不打算詳細贅述,我們這里只需要知道的是,attention機制相當于一個加權平均,attention的值就是其中權重,判斷不同特征之間交互的重要性。

剛才提到了,attention相等于加權的過程,因此我們的預測公式變為:

圓圈中有個點的符號代表的含義是element-wise product,即:

因此,我們在求和之后得到的是一個K維的向量,還需要跟一個向量p相乘,得到一個具體的數值。

可以看到,AFM的前兩部分和FM相同,后面的一項經由如下的網絡得到:

圖中的前三部分:sparse iput,embedding layer,pair-wise interaction layer,都和FM是一樣的。而后面的兩部分,則是AFM的創新所在,也就是我們的Attention net。Attention背后的數學公式如下:

總結一下,不難看出AFM只是在FM的基礎上添加了attention的機制,但是實際上,由于最后的加權累加,二次項并沒有進行更深的網絡去學習非線性交叉特征,所以AFM并沒有發揮出DNN的優勢,也許結合DNN可以達到更好的結果。

有關AFM的更多細節,參考文章:推薦系統遇上深度學習(八)--AFM模型理論和實踐:http://www.lxweimin.com/p/83d3b2a1e55d
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-AFM-Demo

5、強化學習方法

在《DRN:A Deep Reinforcement Learning Framework for News Recommendation》提出了一種基于強化學習的新聞推薦模型,一起來回顧一下:

問題及解決方案
本文提出的方法主要針對三個問題:
1、使用DQN來建模用戶興趣的動態變化性
2、推薦算法通常只考慮用戶的點擊/未點擊 或者 用戶的評分作為反饋,本文將用戶活躍度作為一種反饋信息。
3、目前的推薦系統傾向于推薦用戶重復或相似內容的東西,本文使用Dueling Bandit Gradient Descent方法來進行有效的探索。

因此本文的框架如下:

模型整體框架
模型整體框架如下圖所示:

有幾個關鍵的環節:
PUSH:在每一個時刻,用戶發送請求時,agent根據當前的state產生k篇新聞推薦給用戶,這個推薦結果是exploitation和exploration的結合

FEEDBACK:通過用戶對推薦新聞的點擊行為得到反饋結果。

MINOR UPDATE:在每個時間點過后,根據用戶的信息(state)和推薦的新聞(action)及得到的反饋(reward),agent會評估exploitation network Q 和 exploration network Q ? 的表現,如果exploitation network Q效果更好,則模型保持不動,如果 exploration network Q ? 的表現更好,exploitation network Q的參數將會向exploration network Q ?變化。

MAJOR UPDATE:在一段時間過后,根據DQN的經驗池中存放的歷史經驗,對exploitation network Q 模型參數進行更新。

強化學習模型
本文的探索模型使用的是Double-Dueling結構,狀態由用戶特征和上下文特征組成,動作由新聞特征,用戶-新聞交互特征組成:

探索模型

本文的探索采取的是Dueling Bandit Gradient Descent 算法,算法的結構如下:

在DQN網絡的基礎上又多出來一個exploration network Q ? ,這個網絡的參數是由當前的Q網絡參數基礎上加入一定的噪聲產生的。當一個用戶請求到來時,由兩個網絡同時產生top-K的新聞列表,然后將二者產生的新聞進行一定程度的混合,然后得到用戶的反饋。如果exploration network Q ?的效果好的話,那么當前Q網絡的參數向著exploration network Q ?的參數方向進行更新。

有關本論文的更多細節,參考文章:推薦系統遇上深度學習(十四)--《DRN:A Deep Reinforcement Learning Framework for News Recommendation》:http://www.lxweimin.com/p/c0384b213320

6、推薦系統的EE問題

Exploration and Exploitation(EE問題,探索與開發)是計算廣告和推薦系統里常見的一個問題,為什么會有EE問題?簡單來說,是為了平衡推薦系統的準確性和多樣性。

EE問題中的Exploitation就是:對用戶比較確定的興趣,當然要利用開采迎合,好比說已經掙到的錢,當然要花;而exploration就是:光對著用戶已知的興趣使用,用戶很快會膩,所以要不斷探索用戶新的興趣才行,這就好比雖然有一點錢可以花了,但是還得繼續搬磚掙錢,不然花完了就得喝西北風。

6.1 Bandit算法

Bandit算法是解決EE問題的一種有效算法,Bandit算法來源于歷史悠久的賭博學,它要解決的問題是這樣的:一個賭徒,要去搖老虎機,走進賭場一看,一排老虎機,外表一模一樣,但是每個老虎機吐錢的概率可不一樣,他不知道每個老虎機吐錢的概率分布是什么,那么每次該選擇哪個老虎機可以做到最大化收益呢?這就是多臂賭博機問題(Multi-armed bandit problem, K-armed bandit problem, MAB)。

Bandit算法如何同推薦系統中的EE問題聯系起來呢?假設我們已經經過一些試驗,得到了當前每個老虎機的吐錢的概率,如果想要獲得最大的收益,我們會一直搖哪個吐錢概率最高的老虎機,這就是Exploitation。但是,當前獲得的信息并不是老虎機吐錢的真實概率,可能還有更好的老虎機吐錢概率更高,因此還需要進一步探索,這就是Exploration問題。

下面介紹幾種經典的Bandit算法:

樸素Bandit算法:先隨機試若干次,計算每個臂的平均收益,一直選均值最大那個臂。

Epsilon-Greedy算法:選一個(0,1)之間較小的數epsilon,每次以epsilon的概率在所有臂中隨機選一個。以1-epsilon的概率選擇截止當前,平均收益最大的那個臂。根據選擇臂的回報值來對回報期望進行更新。

Thompson sampling算法:Thompson sampling算法用到了Beta分布,該方法假設每個老虎機都有一個吐錢的概率p,同時該概率p的概率分布符合beta(wins, lose)分布,每個臂都維護一個beta分布的參數,即wins, lose。每次試驗后,選中一個臂,搖一下,有收益則該臂的wins增加1,否則該臂的lose增加1。每次選擇臂的方式是:用每個臂現有的beta分布產生一個隨機數b,選擇所有臂產生的隨機數中最大的那個臂去搖。

UCB算法:該算法在每次推薦時,總是樂觀的認為每個老虎機能夠得到的收益是p' + ?。p' + ?的計算公式如下:

其中加號前面是第j個老虎機到目前的收益均值,后面的叫做bonus,本質上是均值的標準差,T是目前的試驗次數,n是該老虎機被試次數。

有關EE問題的更多細節,參考文章:推薦系統遇上深度學習(十二)--推薦系統中的EE問題及基本Bandit算法:http://www.lxweimin.com/p/95b2de50ce44

6.2 LinUCB算法

上面提到的MAB都是context-free,即沒有考慮到用戶的個性化問題,因此實際中很少應用。現實中我們大都采用考慮上下文的Contextual Bandit算法。LinUCB便是其中之一。

既然是UCB算法的擴展,那我們還是根據p' + ?來選擇合適的老虎機。p'的計算基于有監督的學習方法。我們為每個老虎機維護一個特征向量D,同時上下文特征我們寫作θ,然后通過收集的反饋進行有監督學習:

而置信上界基于下面的公式進行計算:

因此LinUCB算法的流程如下:

有關LinUCB的更多細節,參考文章:推薦系統遇上深度學習(十三)--linUCB方法淺析及實現:http://www.lxweimin.com/p/e0e843d78e3c
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-Bandit-Demo

7、推薦系統在公司中的實戰

7.1 阿里MLR算法

MLR可以看做是對LR的一個自然推廣,它采用分而治之的思路,用分片線性的模式來擬合高維空間的非線性分類面,其形式化表達如下:

其中u是聚類參數,決定了空間的劃分,w是分類參數,決定空間內的預測。這里面超參數分片數m可以較好地平衡模型的擬合與推廣能力。當m=1時MLR就退化為普通的LR,m越大模型的擬合能力越強,但是模型參數規模隨m線性增長,相應所需的訓練樣本也隨之增長。因此實際應用中m需要根據實際情況進行選擇。例如,在阿里的場景中,m一般選擇為12。下圖中MLR模型用4個分片可以完美地擬合出數據中的菱形分類面。

在實際中,MLR算法常用的形式如下,使用softmax作為分片函數:

在這種情況下,MLR模型可以看作是一個FOE model:

關于損失函數的設計,阿里采用了 neg-likelihood loss function以及L1,L2正則,形式如下:

由于加入了正則項,MLR算法變的不再是平滑的凸函數,梯度下降法不再適用,因此模型參數的更新使用LBFGS和OWLQN的結合,具體的優化細節大家可以參考論文https://arxiv.org/pdf/1704.05194.pdf.

有關MLR的更多細節,參考文章:推薦系統遇上深度學習(十七)--探秘阿里之MLR算法淺析及實現:http://www.lxweimin.com/p/627fc0d755b2
代碼地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-MLR-Demo

7.2 阿里Deep Interest Network

阿里的研究者們通過觀察收集到的線上數據,發現了用戶行為數據中有兩個很重要的特性:
Diversity:用戶在瀏覽電商網站的過程中顯示出的興趣是十分多樣性的。
Local activation: 由于用戶興趣的多樣性,只有部分歷史數據會影響到當次推薦的物品是否被點擊,而不是所有的歷史記錄。

針對上面的兩種特性,阿里在推薦網絡中增加了一個Attention機制,對用戶的歷史行為進行加權:

還有兩個值得注意的細節:

評價指標GAUC

模型使用的評價指標是GAUC,我們先來看一下GAUC的計算公式:

GAUC的計算,不僅將每個用戶的AUC分開計算,同時根據用戶的展示數或者點擊數來對每個用戶的AUC進行加權處理。進一步消除了用戶偏差對模型的影響。通過實驗證明,GAUC確實是一個更加合理的評價指標。

Dice激活函數

使用PRelu作為激活函數時,存在一個問題,即我們認為分割點都是0,但實際上,分割點應該由數據決定,因此文中提出了Dice激活函數。

Dice激活函數的全稱是Data Dependent Activation Function,形式如下:

其中,期望和方差的計算如下:

可也看到,每一個yi對應了一個概率值pi。pi的計算主要分為兩步:將yi進行標準化和進行sigmoid變換。

自適應正則 Adaptive Regularization

針對用戶數據中的長尾情況,阿里提出了自適應正則的做法,即:
1.針對feature id出現的頻率,來自適應的調整他們正則化的強度;
2.對于出現頻率高的,給與較小的正則化強度;
3.對于出現頻率低的,給予較大的正則化強度。

計算公式如下:

有關DIN的更多細節,參考文章:推薦系統遇上深度學習(十八)--探秘阿里之深度興趣網絡(DIN)淺析及實現:http://www.lxweimin.com/p/73b6f5d00f46

7.3 阿里ESSM模型

該模型主要解決的是CVR預估中的兩個主要問題:樣本選擇偏差稀疏數據
樣本選擇偏差:大多數CVR預估問題是在用戶點擊過的樣本空間上進行訓練的,而預測的時候卻要對整個樣本空間的樣本進行預測。這種訓練樣本從整體樣本空間的一個較小子集中提取,而訓練得到的模型卻需要對整個樣本空間中的樣本做推斷預測的現象稱之為樣本選擇偏差。

數據稀疏:用戶點擊過的物品只占整個樣本空間的很小一部分,使得模型訓練十分困難。

阿里媽媽的算法同學提出的ESMM模型借鑒了多任務學習的思路,引入了兩個輔助的學習任務,分別用來擬合pCTR和pCTCVR,從而同時消除了上文提到的兩個挑戰。ESMM模型能夠充分利用用戶行為的順序性模式,其模型架構下圖所示:

可以看到,ESSM模型由兩個子網絡組成,左邊的子網絡用來擬合pCVR,右邊的子網絡用來擬合pCTR,同時,兩個子網絡的輸出相乘之后可以得到pCTCVR。因此,該網絡結構共有三個子任務,分別用于輸出pCTR、pCVR和pCTCVR。

假設我們用x表示feature(即impression),y表示點擊,z表示轉化,那么根據pCTCVR = pCTR * pCVR,可以得到:

將乘法轉化為除法,我們可以得到pCVR的計算:

我們將有點擊行為的曝光事件作為正樣本,沒有點擊行為的曝光事件作為負樣本,來做CTR預估的任務。將同時有點擊行為和購買行為的曝光事件作為正樣本,其他作為負樣本來訓練CTCVR的預估部分。

模型具體是怎么做的呢?可以看到,用來訓練兩個任務的輸入x其實是相同的,但是label是不同的。CTR任務預估的是點擊y,CTCVR預估的是轉化z。因此,我們將(x,y)輸入到CTR任務中,得到CTR的預估值,將(x,z)輸入到CVR任務中,得到CVR的預估值,CTR和CVR的預估值相乘,便得到了CTCVR的預估值。因此,模型的損失函數可以定義為:

其中,θctr和θcvr分別是CTR網絡和CVR網絡的參數,l(?)是交叉熵損失函數。

同時,還需要提醒的一點是,兩個子網絡的embedding層共享embedding向量。

有關ESSM模型的更多細節,參考文章:推薦系統遇上深度學習(十九)--探秘阿里之完整空間多任務模型ESSM:http://www.lxweimin.com/p/35f00299c059

7.4 京東強化學習推薦模型

京東通過強化學習來進行 List-wise 的推薦。

構建線上環境仿真器
在推薦系統上線之前,需要進行線下的訓練和評估,訓練和評估主要基于用戶的歷史行為數據,但是,我們只有ground-truth的數據和相應的反饋。因此,對于整個動作空間來說(也就是所有物品的可能組合),這是非常稀疏的。這會造成兩個問題,首先只能拿到部分的state-action對進行訓練,無法對所有的情況進行建模(可能造成過擬合),其次會造成線上線下環境的不一致性。因此,需要一個仿真器來仿真沒有出現過的state-action的reward值,用于訓練和評估線下模型。

仿真器的構建主要基于用戶的歷史數據,其基本思想是給定一個相似的state和action,不同的用戶也會作出相似的feedback。來建模state-action的reward值。

模型結構
該模型通過Actor-Critic方法,結合剛才建立的仿真器,進行訓練:

有關該方法的具體細節,參考文章:推薦系統遇上深度學習(十五)--強化學習在京東推薦中的探索:http://www.lxweimin.com/p/b9113332e33e

9、論文整理

1、GBDT+LR:http://quinonero.net/Publications/predicting-clicks-facebook.pdf
2、DeepFM:https://arxiv.org/abs/1703.04247
3、Wide&Deep:https://dl.acm.org/citation.cfm?id=2988454
4、DCN:https://arxiv.org/pdf/1708.05123
5、PNN:https://arxiv.org/pdf/1611.00144
6、AFM:https://www.comp.nus.edu.sg/~xiangnan/papers/ijcai17-afm.pdf
7、NFM:https://arxiv.org/abs/1708.05027
8、LinUCB:https://arxiv.org/pdf/1003.0146.pdf
9、MLR:https://arxiv.org/pdf/1704.05194.pdf
10、DIN:https://arxiv.org/abs/1706.06978
11、ESSM:https://arxiv.org/abs/1804.07931
12、京東:https://arxiv.org/abs/1801.00209

歡迎關注個人公眾號:小小挖掘機

添加微信sxw2251,可以拉你進入小小挖掘機技術交流群喲!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 概述及標簽體系搭建 1 概述 隨著信息技術的迅速發展和信息內容的日益增長,“信息過載”問題愈來愈嚴重,愈發帶來很大...
    JinkeyAI閱讀 22,941評論 10 241
  • 13. 經典模型融合辦法:線性模型和樹模型的組合拳 推薦系統在技術實現上一般劃分為三個階段:挖掘、召回、排序。挖掘...
    andyham閱讀 1,018評論 0 9
  • -- 原創,未經授權,禁止轉載 2017.11.15 -- 對于推薦系統,本文總結內容,如下圖所示: 文章很長,你...
    rui_liu閱讀 43,034評論 14 256
  • “思考時靜若處子,行動時動若脫兔” 不要放棄思考,當下就要行動,練好剎車轉彎。工作中碰到的任何事,要當日事當日畢,...
    耿婷婷GTT閱讀 202評論 0 0
  • 最近心里感覺好累,好累。壓力太大,。感覺力不從心,好想離開,卻又不得不留在這里。面對這些冷淡的人們。沒有一點感恩的...
    芒果baby閱讀 278評論 0 1