深度學習在點擊率預估方面的應用
來自專欄計算廣告演算法
背景
計算廣告要解決的問題是為用戶找到最匹配的廣告,使得廣告平台的 eCPM 期望最大。在投放廣告的過程中會對候選廣告進行排序,排序是按照候選廣告的預期收益 eCPM = bid * p_ctr
的大小排序。這裡bid
指的是廣告主的對單次點擊的出價,p_ctr
是預估點擊率。所以,點擊率預估地準不準,將直接影響到廣告平台的收益。
最廣泛使用的點擊率預估模型是Logistic Regression(LR) 模型,其假設函數為:
LR 的優勢在於其簡單、高效,以及很好的可解釋性,要學習的參數 wi
就是特徵 xi
對於最終預測值的貢獻程度。但 LR 本質上還是一個線性模型,需要大量的特徵工程才能學習到高階的交叉特徵。
最近這幾年,深度學習技術在圖像、語音以及自然語言處理領域等眾多領域大放異彩。在廣告推薦領域,許多公司開始嘗試將深度學習的技術應用到點擊率預測當中,本文也將對幾種深度模型進行簡單介紹。
在進行介紹前,說明下各個變數的定義:
n
: 特徵總數,也就是對特徵 One-hot 後的向量總長度f
: 特徵域個數,表示有多少個特徵類別e
: embedding 向量維度Hi
: 第i
層隱藏層單元個數
深度神經網路(DNN)
廣告領域對於深度學習的應用比較簡單,一般不會用到特別複雜的網路結構,層數一般 3-5 層。下圖是一個由輸入層、輸出層以及2個隱藏層構成的 4 層 DNN 網路,各層之間通過全連接相連。
其中第 l+1
層網路的輸出 a^(l+1)
為:
W^l
為 l
層係數矩陣, a^l
為 l
層輸出,b^l
為 l
層偏置項,sigma
為激活函數,一般是 sigmoid 函數。DNN 的訓練通過反向傳播演算法進行,可使用 SGD,Adagrad,Adam 等常見優化演算法進行參數更新,正則化可通過設置 dropout 或者 l2 。
整個 DNN 需要學習的參數量: n * H_1 + H_1 * H_2 + H_2 * 1
LR 模型也可以看做是一個只有輸入輸出層,沒有隱藏層的兩層神經網路,其輸入直接通過sigmoid函數激活輸出。如下圖:
在廣告領域,大部分的特徵都是類別特徵(categorical feature),例如廣告 ID,網路類型特徵。對於連續值特徵,有時候也會利用分桶的方式將其轉化成類別特徵。針對類別特徵,一般採用 One-hot 編碼,例如網路類型有三種:3G,4G,WIFI。One-hot 編碼後向量長度為3,分別為[1,0,0],[0,1,0],[0,0,1]。
直接將特徵 One-hot 編碼後放到 DNN 里,會使得輸入層變得非常稀疏,且維度變得很大,這會使得要學習的參數量會變得非常大,在現實場景中是不可接受的。深度神經網路的輸入一般是稠密的實數值向量,如何將高維稀疏向量轉化成低維稠密的實數值向量,其實CTR 預估領域經常用到的FM模型已經給出了解決方案:對每個特徵都學習一個低維的實數值隱向量,從而降低 DNN 的輸入維度。
FM 模型由 LR 部分以及特徵交叉部分組成,FM 的優勢在於求 xi
與 xj
交叉特徵的權重時,不再像以前一樣需要 xi
與 xj
同時存在於訓練樣本中,而是對每個特徵 xi
都會學習到一個長度為 e
(量級在O(1), O(10))的實數值隱向量 Vi
,交叉特徵的權重等於特徵對應隱向量的內積。
FM 模型也可以看做是如下的前向神經網路,各層之間不再是全連接。
最下面是特徵維度為 n
的離散輸入,embedding 層可以看做是 DNN 的輸入層,從而將 DNN 的輸入維度從 n
變成了 f*e
,其值要遠遠小於 n
。經過 embedding 層後,對線性部分(LR)和非線性部分(特徵交叉)累加後經過sigmoid輸出。
對於 FM,需要學習的參數:
- LR 部分:
$n+1$
- 特徵交叉部分:
$n * e$
Wide & Deep 模型
谷歌在 2016 年提出了 Wide & Deep 模型,並將其用於 Google Play App 推薦,取得了不錯的效果。
其中 Deep 部分是 DNN,原始特徵經過 Embedding 後將各個 embedding 向量拼接起來構成 DNN 的輸入 a^0=[V1, V2,...,Vf]
; Wide 部分由LR以及交叉特徵 varPhi(x)
構成,其中 varPhi(x)
表達了兩個特徵同時出現在樣本中對於最終預測值的貢獻程度,往往需要做大量特徵工程工作。最終兩者的輸出累加後經過 sigmoid 激活輸出。
至於為什麼這麼設計,谷歌在論文中提到兩個重要概念,記憶性以及泛化性。
- 記憶性:記憶性是指學習在訓練數據中高頻特徵與標籤之間關聯的能力。廣義線性模型比如 LR 的優勢在於記憶性好,對於樣本中出現的高頻低階特徵能夠用少量參數學習,缺點在於泛化能力差,對於沒見過的 ID 類特徵,模型學習能力比較差。
- 泛化性是指學習在歷史數據中低頻特徵與標籤之間關聯的能力。基於隱向量的 DNN 模型優勢在於其泛化性好,對於樣本中少量出現甚至沒出現過的樣本都能做出預測。
Wide & Deep 模型通過聯合訓練 Wide & Deep,累加 Wide & Deep 的結果,結合了廣義線性模型記憶性好以及 DNN 模型泛化性好的優點,在 Google app store 的推薦上取得了不錯的效果。該模型需要學習的參數:
- Wide:
n+1
- Deep:
f*e*H_1 + H_1*H_2+H_2*1
- Embedding:
n*e
谷歌提出的 Wide & Deep 框架基本成為了「業界標準」,在它之後的許多模型通過變換 Wide 端或者 Deep 端的組件形成新的模型。
DeepFM 模型
由於 Wide & Deep 模型中的 Wide 端 LR 還需要特徵工程去設計交叉特徵,華為以及哈工大實驗室隨後提出了DeepFM 模型。DeepFM 將 Wide 端的 LR 替換為 FM,省去了 LR 特徵工程的工作,而且由於 Wide & Deep 共享同一個 Embedding 層,訓練也會變得更加高效。
左邊是 FM 層,用來學習 order-1 以及 order-2 交叉特徵。右邊是 DNN 層,用來學習更高階的交叉特徵。
DeepFM 需要學習的參數:
- Deep:
f*e*H_1 + H_1*H_2 + H_2*1
- FM:
1+n+n*e
Neural Factorization Machine(NFM)
NFM 模型用 DNN 來改進 FM 的交叉特徵部分的學習。
f(x)
的結構如下所示:
原始特徵經過 Embedding 後拼成 Vi=xivi}, xi != 0
,經過一個 Bi-Interaction Pooling(BI) 後作為 DNN 的輸入。BI 層的操作如下:
odot
代表兩個向量對應元素進行乘積。經過 BI 操作後,DNN 輸入的維度從 n
降低到 e
(一般設置為O(10),O(100)),降低了網路複雜度,從而提高了模型訓練的效率。但與此同時,這種方式可能會帶來比較大的信息損失。
該模型需要學習的參數:
- LR:
n+1
- NFM:
n*e+e*H_1+H_1*H_2 + H_2*1
Deep&Cross Network (DCN)
DCN 模型由 Deep 端和 Cross 端構成,Deep 是一個典型的 DNN 網路,Cross 端構造地很巧妙,可以高效地學習高階的交叉特徵,公式如下:
其中 vi
是特徵 xi
對應的 embedding 向量,在 DCN 中,embedding 向量的維度是不固定的,論文中對於 criteo 數據集取值 6*(category cardinality)^(1/4)
。x
0 由 vi
拼接而成,假設 x0
維度是 d
,xl
能夠表達最高 l+1
次的特徵交叉,但是這一層需要學習的參數只有wl
和 bl
,維度與 x0
相同, 總共 2 * d
個,所以 Cross 層可以高效地學習高階交叉特徵。
模型需要學習的參數:
- Embedding: 固定 embedding 向量維度為
e
,則為n*e
- Deep:
d
*H1
+H1
*H2
+H2
* 1 - Cross: 2 *
d
*L
,L
是Cross的層數
參考:
- Wide & Deep Learning for Recommender Systems
- DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
- Neural Factorization Machines for Sparse Predictive Analytics
- Deep & Cross Network for Ad Click Predictions
推薦閱讀:
TAG:深度學習DeepLearning | 機器學習 | ctr |