推薦系統遇上深度學習(二十一)--階段性回顧
本系列已經寫了二十篇了,但推薦系統的東西還有很多值得探索和學習的地方。不過在這之前,我們先靜下心來,一起回顧下之前學習到的東西!
由於是總結性質的文章,很多細節不會過多的涉及,有興趣的同學可以點選文章中給出的連結進行學習。
本文中涉及的大多數演算法是計算廣告中點選率預估用到的模型,當然也會涉及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原理及實踐:https://www.jianshu.com/p/4dde15a56d44
推薦系統遇上深度學習(十六)--詳解推薦系統中的常用評測指標:https://www.jianshu.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模型理論和實踐:https://www.jianshu.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模型理論和實踐:https://www.jianshu.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融合方案實戰:https://www.jianshu.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模型理論和實踐:https://www.jianshu.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模型理論和實踐:https://www.jianshu.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模型理論和實踐:https://www.jianshu.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模型理論和實踐:https://www.jianshu.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模型理論和實踐:https://www.jianshu.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》:https://www.jianshu.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演算法:https://www.jianshu.com/p/95b2de50ce44
6.2 LinUCB演算法
上面提到的MAB都是context-free,即沒有考慮到使用者的個性化問題,因此實際中很少應用。現實中我們大都採用考慮上下文的Contextual Bandit演算法。LinUCB便是其中之一。
既然是UCB演算法的擴充套件,那我們還是根據p' + ∆來選擇合適的老虎機。p'的計算基於有監督的學習方法。我們為每個老虎機維護一個特徵向量D,同時上下文特徵我們寫作θ,然後通過收集的反饋進行有監督學習:
而置信上界基於下面的公式進行計算:
因此LinUCB演算法的流程如下:
有關LinUCB的更多細節,參考文章:推薦系統遇上深度學習(十三)--linUCB方法淺析及實現:https://www.jianshu.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演算法淺析及實現:https://www.jianshu.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)淺析及實現:https://www.jianshu.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:https://www.jianshu.com/p/35f00299c059
7.4 京東強化學習推薦模型
京東通過強化學習來進行 List-wise 的推薦。
構建線上環境模擬器
在推薦系統上線之前,需要進行線下的訓練和評估,訓練和評估主要基於使用者的歷史行為資料,但是,我們只有ground-truth的資料和相應的反饋。因此,對於整個動作空間來說(也就是所有物品的可能組合),這是非常稀疏的。這會造成兩個問題,首先只能拿到部分的state-action對進行訓練,無法對所有的情況進行建模(可能造成過擬合),其次會造成線上線下環境的不一致性。因此,需要一個模擬器來模擬沒有出現過的state-action的reward值,用於訓練和評估線下模型。
模擬器的構建主要基於使用者的歷史資料,其基本思想是給定一個相似的state和action,不同的使用者也會作出相似的feedback。來建模state-action的reward值。
模型結構
該模型通過Actor-Critic方法,結合剛才建立的模擬器,進行訓練:
有關該方法的具體細節,參考文章:推薦系統遇上深度學習(十五)--強化學習在京東推薦中的探索:https://www.jianshu.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
作者:石曉文的學習日記
連結:https://www.jianshu.com/p/99e8f24ec7df
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。
相關文章
- 推薦系統遇上深度學習(十七)--探祕阿里之MLR演算法淺析及實現深度學習阿里演算法
- 讀懂深度學習,走進“深度學習+”階段深度學習
- 用深度學習打造自己的音樂推薦系統深度學習
- 《推薦系統學習》之推薦系統那點事
- 回顧·機器學習/深度學習工程實戰機器學習深度學習
- 乾貨 | 個性化推薦系統五大研究熱點之深度學習(一)深度學習
- 深度學習在推薦系統中的應用綜述(最全)深度學習
- 深度學習在推斷階段的硬體實現方法概述深度學習
- 我的推薦系統學習之路
- RecSys提前看 | 深度學習在推薦系統中的最新應用深度學習
- YouTube深度學習推薦系統的十大工程問題深度學習
- 彈性分散式深度學習系統分散式深度學習
- 機器學習/深度學習書單推薦及學習方法機器學習深度學習
- 推薦系統實踐學習系列(三)推薦系統冷啟動問題
- 0基礎大資料學習路線及各階段學習書籍推薦大資料
- 階段性總結_學習筆記筆記
- 一文綜述用於推薦系統的所有深度學習方法深度學習
- 淺談個性化推薦系統中的非取樣學習
- 系統學習NLP(二十一)--SWEM
- 「推薦系統的廣泛和深度學習」- 論文閱讀和翻譯深度學習
- 問題解決:構建基於深度學習架構的推薦系統!深度學習架構
- 基於深度學習的圖書管理推薦系統(附python程式碼)深度學習Python
- 19期推薦系統實踐學習(二)
- 推薦系統應該如何保障推薦的多樣性?
- 個性化推薦系統來了
- 智慧教育深度學習推薦系統---1.2.合成推薦演算法CKE解讀和演算法實現1深度學習演算法
- 回顧·深度學習的可解釋性與低頻事件學習在金融領域的研究與應用深度學習事件
- JavaScript 回顧學習:變數JavaScript變數
- java學習知識回顧Java
- redis - 學習筆記回顧Redis筆記
- 深度學習實驗資料集網站推薦深度學習網站
- Flink + 強化學習 搭建實時推薦系統強化學習
- 大資料的系統學習:大資料學習的三個階段概述大資料
- 推薦系統
- swift4.1 系統學習二十一 泛型Swift泛型
- jeesite學習(二)----回顧SpringMVCSpringMVC
- JavaScript回顧學習:目錄篇JavaScript
- 【推薦系統篇】--推薦系統之訓練模型模型