深度學習在推薦系統中的應用

PNN模型理論和實踐

1、原理

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

按照論文的思路,我們也從上往下來看這個網絡結構:

輸出層
輸出層很簡單,將上一層的網絡輸出通過一個全鏈接層,經過sigmoid函數轉換後映射到(0,1)的區間中,得到我們的點擊率的預測值:

l2層
根據l1層的輸出,經一個全鏈接層 ,並使用relu進行激活,得到我們l2的輸出結果:

l1層
l1層的輸出由如下的公式計算:

重點馬上就要來了,我們可以看到在得到l1層輸出時,我們輸入了三部分,分別是lz,lp 和 b1,b1是我們的偏置項,這裏可以先不管。lz和lp的計算就是PNN的精華所在了。我們慢慢道來

Product Layer

product思想來源於,在ctr預估中,認爲特徵之間的關係更多是一種and“且”的關係,而非add"加”的關係。例如,性別爲男且喜歡遊戲的人羣,比起性別男和喜歡遊戲的人羣,前者的組合比後者更能體現特徵交叉的意義。

product layer可以分成兩個部分,一部分是線性部分lz,一部分是非線性部分lp。二者的形式如下:

在這裏,我們要使用到論文中所定義的一種運算方式,其實就是矩陣的點乘啦:

我們先繼續介紹網絡結構,有關Product Layer的更詳細的介紹,我們在下一章中介紹。

Embedding Layer

Embedding Layer跟DeepFM中相同,將每一個field的特徵轉換成同樣長度的向量,這裏用f來表示。

損失函數
使用和邏輯迴歸同樣的損失函數,如下:

2、Product Layer詳細介紹

前面提到了,product layer可以分成兩個部分,一部分是線性部分lz,一部分是非線性部分lp。

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

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

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

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

接下來,我們分別來具體介紹這兩種形式的PNN模型,由於涉及到複雜度的分析,所以我們這裏先定義Embedding的大小爲M,field的大小爲N,而lz和lp的長度爲D1。

2.1 IPNN

IPNN的示意圖如下:

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

所以,pij其實是一個數,得到一個pij的時間複雜度爲M,p的大小爲N*N,因此計算得到p的時間複雜度爲N*N*M。而再由p得到lp的時間複雜度是N*N*D1。因此 對於IPNN來說,總的時間複雜度爲N*N(D1+M)。文章對這一結構進行了優化,可以看到,我們的p是一個對稱矩陣,因此我們的權重也可以是一個對稱矩陣,對稱矩陣就可以進行如下的分解:

因此:

因此:

從而得到:

可以看到,我們的權重只需要D1 * N就可以了,時間複雜度也變爲了D1*M*N。

2.2 OPNN

OPNN的示意圖如下:

OPNN中p的計算方式如下:

此時pij爲M*M的矩陣,計算一個pij的時間複雜度爲M*M,而p是N*N*M*M的矩陣,因此計算p的事件複雜度爲N*N*M*M。從而計算lp的時間複雜度變爲D1 * N*N*M*M。這個顯然代價很高的。爲了減少負責度,論文使用了疊加的思想,它重新定義了p矩陣:

這裏計算p的時間複雜度變爲了D1*M*(M+N)

 

 

 

計算廣告CTR預估系列(八)--PNN模型理論與實踐

一、介紹

    1.1 名詞解釋

    1.2 數據特點

    1.3 參數約定

二、相關工作

三、損失 & 評價函數

    3.1 損失函數

    3.2 評價函數

四、PNN詳解

    4.1 架構圖

    4.2 IPNN

    4.3 OPNN

    4.4 PNN*

五、優化

六、總結

七、代碼實戰

    IPNN

    OPNN

Reference

計算廣告CTR預估系列往期回顧

一、介紹

非常感謝PNN論文作者,上海交通大學曲彥儒同學的耐心講解,PNN細節的地方還是挺多的。作者的github大家可以關注下:
https://github.com/Atomu2014

1.1 名詞解釋

User Response Prediction:
在信息檢索領域(IR,Information Retrieval),個性化任務是一類非常重要的任務。包括:推薦系統、web search、線上廣告。
其核心就是User Respinse Predicton,是指給出用戶關於一個預先定義好的行爲的概率。這些行爲包括:clicks、purchases。預測的概率代表了用戶對特定物品感興趣的程度,物品包括:新聞、商品、廣告。而這會影響商家對於展示文檔的排序,廣告投標等。

1.2 數據特點

IR問題最大的數據特點就是multi-field categorical,舉例來說:
[Weekday=Tuesday, Gender=Male, City=London],經過one-hot之後轉換成高緯度稀疏的數據:

One-hot示例

一個類別型特徵就是一個field,比如上面的Weekday、Gender、City這是三個field。

1.3 參數約定

我們約定參數含義如下:

  • N。Field個數,也是嵌入向量的個數。

  • M。Embedding Vector的維度。

  • D1。第一個隱藏層的神經元個數。

  • lz。Product Layer中z對應的輸出,也就是lz乘以全連接權重w就得到了第一個隱層的輸入的一部分。

  • lp。Product Layer中p部分對應的輸出,再經過全連接權重W就得到第一個隱層的輸入的一部分。

二、相關工作

在PNN之前提出了Logistic Regression、GBDT、FM等模型,期待能高效的學習線性與非線性模式,減少人工特徵工程的干預。但是都不是非常理想,像LR GBDT依舊非常依賴人工特徵工程,FM則缺少對高階組合特徵的建模,僅僅對特定階的組合特徵建模。

隨着DNN在圖像處理、語音識別、自然語言處理領域大放異彩,將DNN應用於CTR預估或者推薦系統的研究逐漸多了起來。DNN的輸入往往是dense real vector 但是multi-field類別型特徵起初是高維且稀疏的。常見的做法是通過加入Embedding Layer將輸入映射到低維度的Embedding空間中。FNN使用FM初始化embedding vector,同時也受限於FM;CCPM利用CNN卷積來學習組合特徵,但是隻在相鄰的特徵間卷積,沒有考慮到非相鄰的特徵的組合;

所以有了PNN,主要的做法如下:PNN包括三層:Embedding Layer、Product Layer、Full-connect Layer

  1. 最開始的輸入太稀疏維度太高,沒法直接放到DNN中去學習,所以比較通用的做法就是通過Embedding到一個低維的稠密的實數向量中,作爲原始特徵的在Embedding空間中的表示。

  2. 然後PNN利用Product Layer來學習filed之間的交互特徵,這也就引入了非線性的組合特徵。可以採用內積、外積、內積+外積的形式。

  3. 最後利用全連接層充分的學習高階組合特徵,並得到最終CTR預測概率。

三、損失 & 評價函數

3.1 損失函數

PNN使用的是log loss,形式化如下:

PNN log loss

3.2 評價函數

論文中給出了幾種常用的評價函數,包括:AUC、log loss、RIG、RMSE。
RIG(Relative Information Gain), RIG = 1 - NE。 NE就是我們上一篇文章LR+GBDT中提到過的Normalized Cross Entropy。

四、PNN詳解

4.1 架構圖

PNN 架構圖

我們按照上圖,一層一層的來分析,看看從輸入到輸出,模型有哪些參數,參數的維度大小是多少,哪些需要訓練,哪些不用訓練:

Input
首先,一個類別型特徵就是一個Field。比如用戶信息包括:性別、職業等,這裏的性別是一個Field,職業是另一個Field。上圖中的Input是one-hot之後的,而且只給出了類別型特徵。所以每個Field i都是一個向量,向量的大小就是類別型特徵one-hot之後的維度。所以不同Field的維度是不同的。

Embedding Layer
上圖說的非常清楚,Embedding是Field-wisely Connected。什麼意思那?就是每個Field只管自己的嵌入,Field之間網絡的權重毫無關係,自己學習自己的。而且只有權重,沒有bias。一個Field經過嵌入後,得到一個Feature,也就是對應的Embedding Vector嵌入向量。其維度一般是預先設定好的定值,論文中採用的是10. 也就說是不同Feature的維度都是一樣的。

Product Layer
重點來了,上圖有個地方困擾我很久,最終跟論文作者討論了下終於看懂了。先給出結論:

  • Product Layer中z中每個圈都是一個向量,向量大小爲Embedding Vector大小向量個數 = Field個數 = Embedding向量的個數

  • Product Layer中如果是內積,p中每個圈都是一個值;如果是外積,p中每個圓圈都是一個二維矩陣

一個是向量,一個是值(也可能是矩陣),全給畫成圈了(吐槽下……)
解釋下怎麼回事,這裏對於Embedding Vector有兩種處理策略:

  1. 直接和內積或外積結果拼接,輸入到神經網絡

  2. 先進行一次線性變換,再和內積或外積結果拼接,輸入到神經網絡

Embedding Layer中的那個1,其實就是直接把Embedding Vector拿來用並沒有進行線性變換。這樣做處理起來很簡單,但是也有個缺點。Embedding Vector和內積項或外積項的數值分佈差異交大,沒有進行線性變換,導致分佈不穩定不利於訓練。不過,聽作者說,在新論文中這個問題已經被很好的解決了,大家拭目以待吧~

在數據流中,假設Field個數爲N,那麼經過Embedding後的Field得到了N個Feature,或者說是N個嵌入向量。這N個嵌入向量直接拿過來並排放到z中就是z。這部分代表的是對低維度特徵,或者說原始特徵的建模。作者的說法是,不加入這一部分訓練會非常不穩定,加入之後穩定了很多。

然後,針對這N個嵌入向量,兩兩組合進行Product operation,把結果放到一起就得到了p。首先,N個向量兩兩組合,會產生N(N-1)/2對組合,這就是p中圓圈的個數,或者說神經元的個數。如果是內積運算,那麼每個神經元就是一個實數值;如果進行外積運算,那麼每個神經元就是一個二維矩陣。後面我們詳細討論。

Hidden Layer
把z和p直接拼接起來,就得到了第一個隱層的輸入。經過多個隱藏層最後給出CTR預測值。

根據Product Layer的操作不同,PNN有三種變體:IPNN、OPNN、PNN*

4.2 IPNN

如果Product Layer使用內積運算,那麼就是IPNN。p中每個神經元都是一個實數值,和z中的嵌入向量拼接起來,餵給神經網絡就行了。

4.3 OPNN

如果Product Layer使用外積運算,就得到OPNN。外積得到的是一個矩陣,所以p中的每個神經元都是一個矩陣。針對兩個M維的嵌入向量e1和e2. 它們外積得到的是M*M的二維矩陣。一共有N個嵌入向量,那麼矩陣就有N(N-1)/2個。那麼一個二維矩陣怎麼輸入到神經網絡中去那?

針對外積產生的每一個二維矩陣,我們都通過另外一個矩陣W,大小爲M*M。這兩個矩陣對應位置相乘,再相加,就得到了最終的結果。

也就是說,最終外積產生的二維矩陣,通過和另外一個需要學習的參數矩陣,對應位置相乘,再相加,得到了一個標量,一個實數值。

邏輯上如下圖所示:

PNN_Product_Layer邏輯理解

上圖是最樸素的邏輯,實際寫代碼的時候利用下面的公式來稍微降低下複雜度:
假設兩個嵌入向量,列向量U,V。⊙表示對應位置相乘,然後再相加的操作。UV的外積結果爲二維矩陣。那麼有公式:

等式右邊比左邊的複雜度要低一些。寫代碼的時候,就是按照公式右邊來計算的。公式可以這樣理解:外積與參數矩陣相乘,相當於對u經過w矩陣投影,在投影空間中與v計算內積。是一個非常有用的trick。這裏的參數矩陣並不是神經網絡的參數矩陣,而是用來把外積的結果矩陣,轉變爲一個實數值的矩陣,對應代碼中的kernel矩陣。

4.4 PNN*

如果Product Layer同時使用內積+外積,把內積和外積的結果拼接起來,就得到PNN*。

五、優化

PNN中針對內積和外積的運算都進行了優化。但是其實並不是必須的,只要計算資源足夠,兩個優化直接忽略即可。

PNN原始的論文中,針對外積部分每兩個嵌入向量組合,一共有N(N-1)/2這麼多對組合。這個複雜度是O(NN)的,論文中通過下面的公式進行了化簡:

論文中針對外積的優化,已經去掉

其中的fi就是嵌入向量。也就是說先把所有的嵌入向量相加求和,然後再和自己進行外積。得到一個(N,N)的外積矩陣。然後再和D1個不同的W進行對應位置相乘相加的操作,就得到了最後隱藏層輸入的D1個值。

這裏的優化主要是把嵌入向量的N(N-1)/2個組合對,優化成了一個。把平方的複雜度降低到線性的。

但是,經過作者溝通瞭解到,這一部分的優化其實沒必要,在新的PNN中已經去掉了!
爲什麼那?因爲即使是N平方的複雜度,但是每兩個嵌入向量進行外積的計算完全可以並行化!其實是可以接受的,所以現在已經去掉了。
我們後面給出的代碼也是沒有進行優化的,因爲嵌入向量的pair仍然是N^2的。

六、總結

PNN從FM何FNN的角度出發,提出利用內積或者外積來學習高階的非線性特徵,還是挺有創新的。
基本上使用DNN的模型,最開始都是經過Embedding把原始高緯度稀疏的輸入轉換爲低維度稠密的向量,PNN也不例外。對於FM來說,這就是隱向量,FNN也是利用FM來進行Embedding Vector的初始化的。

  • PNN中如果採用內積操作,那麼嵌入向量兩兩組合每對組合都得到一個實數值。如果後面隱藏層的權重矩陣W全是1的話,那麼PNN就變成了FM。

  • PNN使用外積操作稍微麻煩,因爲嵌入向量兩兩組合後,每對組合就是一個二維矩陣。那麼怎麼把這些二維矩陣輸入到神經網絡中那?通過和一個矩陣對應位置相乘在相加,就把這些二維外積矩陣轉換成了一個實數值。

  • OPNN的實現代碼中利用了公式進行了轉換,稍微降低了複雜度。公式如下:

  • 另外,PNN論文中針對外積部分的優化,跟作者溝通得知在新的論文中已經去掉了,大家就不用糾結了

 

 

 

 

 

 

NFM模型理論和實踐

1、引言

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

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

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

今天介紹的NFM模型(Neural Factorization Machine),便是串行結構中一種較爲簡單的網絡模型。

2、NFM模型介紹

我們首先來回顧一下FM模型,FM模型用n個隱變量來刻畫特徵之間的交互關係。這裏要強調的一點是,n是特徵的總數,是one-hot展開之後的,比如有三組特徵,兩個連續特徵,一個離散特徵有5個取值,那麼n=7而不是n=3.

順便回顧一下化簡過程:

可以看到,不考慮最外層的求和,我們可以得到一個K維的向量。

對於NFM模型,目標值的預測公式變爲:

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

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

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

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

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

是不是很簡單呢,哈哈。

AFM模型理論和實踐

1、引言

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

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

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

今天介紹的AFM模型(Attentional Factorization Machine),便是串行結構中一種網絡模型。

2、AFM模型介紹

我們首先來回顧一下FM模型,FM模型用n個隱變量來刻畫特徵之間的交互關係。這裏要強調的一點是,n是特徵的總數,是one-hot展開之後的,比如有三組特徵,兩個連續特徵,一個離散特徵有5個取值,那麼n=7而不是n=3.

順便回顧一下化簡過程:

可以看到,不考慮最外層的求和,我們可以得到一個K維的向量。

不難發現,在進行預測時,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可以達到更好的結果。

 

 

一、引言

二、Model Feature Interaction

    2.1 介紹

    2.2 FM

        2.2.1 優點

        2.2.2 缺點

    2.3 Deep Neural Network

        2.3.1 DNN優化困難

三、Neural Factorization Machine(NFM)

    3.1 NFM模型

        3.1.1 Embedding Layer

        3.1.2 Bi-Interaction Layer

        3.1.3 Hidden Layer

        3.3.4 Prediction Layer

    3.2 NFM vs Wide&Deep、DeepCross

    3.3 複雜度分析

    3.4 訓練

        3.4.1 目標函數

        3.4.2 參數估計

        3.4.3 Dropout

        3.4.4 Batch Normalization

四、實驗結果分析

    4.1 數據集

    4.2 實驗結果

五、總結

六、代碼實戰

Reference

計算廣告CTR預估系列往期回顧

 

一、引言

NFM全稱Neural Factorization Machine,它用來解決的問題是Sparse Prediction。也就是說,當模型輸入特別稀疏而且特徵組合對於預測結果非常重要的時候,就可以考慮是用NFM模型。像CTR預估、推薦系統都屬於這類問題。另外,公衆號整個系列裏介紹的模型都是用來處理這樣的輸入數據的,所以大家要時刻注意各個模型的適用場景、側重點以及優缺點,活學活用。

一直關注公衆號的同學可能已經聽煩了,每篇文章開頭都是在介紹模型輸入特徵。針對Sparse Prediction最開始有了FM來對低階的二階特徵組合建模,後來又引入了DNN來對高階的非線性組合特徵建模,比如Wide&Deep(Google)、DeepCross(微軟)、DeepFM(華爲+哈工大)、DIN(阿里)、PNN(上交)。當然,還有通過不是DNN的其他方法來對非線性高階組合特徵建模的,比如LR+GBDT(Facebook)、MLR(阿里)。

NFM也是用FM+DNN來對問題建模的,相比於上面提到的這些DNN模型,NFM的特別之處在哪那?

NFM相比於上面提到的DNN模型,模型結構更淺、更簡單(shallower structure),但是性能更好,訓練和調整參數更加容易。

上面提到的所有模型,都可以在公衆號的歷史文章中找到!主頁君傾盡心血針對模型使用場景、提出背景、側重問題特點、模型優缺點以及代碼實踐進行了總結整理。特別有料!

二、Model Feature Interaction

2.1 介紹

這麼多類別特徵,特徵組合也是非常多的。傳統的做法是通過人工特徵工程或者利用決策樹來進行特徵選擇,選擇出比較重要的特徵。但是這樣的做法都有一個缺點,就是:無法學習訓練集中沒有出現的特徵組合

最近幾年,Embedding-based方法開始成爲主流,通過把高維稀疏的輸入embed到低維度的稠密的隱向量空間中,模型可以學習到訓練集中沒有出現過的特徵組合。

Embedding-based大致可以分爲兩類:

  1. factorization machine-based linear models

  2. neural network-based non-linear models

下面分別簡單介紹下

2.2 FM

FM全稱Factorization Machine通過隱向量內積來對每一對特徵組合進行建模。形式化爲:

FM公式

w0是全局偏置;wi是單特徵的權重;vi vj代表特徵xi xj的隱向量。xi表示一個小特徵,原始的類別型特徵經過one-hot得到二值特徵。比如gender經過one-hot之後,gender=male是一個xi, gender=female是另一個xi。

2.2.1 優點

FM很好的解決了高緯度高稀疏輸入特徵組合的問題。通過隱向量內積來建模權重,針對在訓練集中沒有出現過的特徵組合或者出現次數很好的特徵組合,也能有效的學習。

2.2.2 缺點

FM的缺點就是它畢竟還是屬於線性模型,它的表達能力受限,而且它只能對二階組合特徵進行建模。

解釋下什麼是線性模型
待預測的target是輸入參數的線性組合。

形式化如下:
假設輸入參數爲,待預測target爲y,那麼有,其中g h是theta無關的表達式。

NFM針對FM的缺點,在二階特徵組合的隱向量空間中,引入了非線性變換來提升模型非線性表達能力;同時,也可以學習到高階的組合特徵。

2.3 Deep Neural Network

DNN模型已經在計算機視覺、自然語言處理、語音識別領域取得成功。但是DNN在IR(信息檢索)領域的應用並不是很多。原因是IR中的輸入太稀疏了。而(1)DNN如果處理稀疏數據研究的並不多;(2)稀疏數據如何在DNN中處理特徵組合也不是很清楚。

但是,最近業內也開始了各種嘗試。比如Google的Wide&Deep,微軟的DeepCross,以及FNN、PNN等。Wide&Deep的Deep部分是一個MLP,輸入是把特徵Embedding vector拼接起來得到的;DeepCross的區別在於NN部分不是MLP,而是使用了state-of-the-art residual network

2.3.1 DNN優化困難

雖然多層神經網絡已經被證明可以有效的學習高階特徵組合。但是DNN的缺點也很明顯:網絡優化或者說網絡學習比較困難。
業內大部分DNN的架構都是:把特徵的嵌入向量簡單拼接起來,輸入到神經網絡中學習。這樣簡單的拼接嵌入向量,因爲缺失了很多組合特徵的信息(carry too little information about feature interactions in low level)效果並不好,那麼只能寄希望於後面的MLP可以彌補不足。但是爲了提高NN的學習能力就需要增加網絡層數,複雜的網絡結構會收到諸如梯度消失/爆炸、過擬合、degradation等問題的困擾,網絡的學習或者優化會非常困難。

解釋下degradation problem。概念是Resident Neural Network中作者通過觀察提出的,簡單說就是:隨着網絡層數的增加,訓練準確率不升反降,非常反常。

爲了證明這一點,作者進行了實驗:

DNN訓練具有挑戰


如果不對嵌入層預訓練,Wide&Deep和DeepCross的性能比FM還差,而且DeepCross嚴重過擬合,Wide&Deep遇到了degradation問題。
如果使用FM預訓練初始化嵌入層,Wide&Deep和DeepCross性能都提升了,甚至超過了FM。Wide&Deep的degradation問題也解決了,因爲訓練集的性能得到了提升。但是兩者依舊都有過擬合的問題。實驗說明DNN的訓練學習真的存在困難。

NFM摒棄了直接把嵌入向量拼接輸入到神經網絡的做法,在嵌入層之後增加了Bi-Interaction操作來對二階組合特徵進行建模。這使得low level的輸入表達的信息更加的豐富,極大的提高了後面隱藏層學習高階非線性組合特徵的能力。

三、NFM

3.1 NFM模型

架構圖如下:

NFM架構圖


NFM可以形式化如下:

NFM公式


f(x)是NFM的核心,用來學習二階組合特徵和高階的組合特徵模式。

 

3.1.1 Embedding Layer

和其他的DNN模型處理稀疏輸入一樣,Embedding將輸入轉換到低維度的稠密的嵌入空間中進行處理。作者稍微不同的處理是,使用原始的特徵值乘以Embedding vector,使得模型也可以處理real valued feature。

3.1.2 Bi-Interaction Layer

Bi是Bi-linear的縮寫,這一層其實是一個pooling層操作,它把很多個向量轉換成一個向量,形式化如下:

Bi-linear Interaction


fBI的輸入是整個的嵌入向量,xi xj是特徵取值,vi vj是特徵對應的嵌入向量。中間的操作表示對應位置相乘。所以原始的嵌入向量任意兩個都進行組合,對應位置相乘結果得到一個新向量;然後把這些新向量相加,就得到了Bi-Interaction的輸出。這個輸出只有一個向量。

需要說明的是:Bi-Interaction並沒有引入額外的參數,而且它的計算複雜度也是線性的,和max/min pooling以及原來的拼接操作複雜度都是相同的。因爲上式可以參考FM的優化方法,化簡如下(想想一個矩陣):

BI化簡公式


它的計算複雜度是O(NK)。其中k是嵌入向量的維度,N是輸入x中非零特徵的個數。這個公式大家要搞懂是怎麼回事哦,代碼裏面就是按照這個來寫的。

總結,Bi-Interaction Layer實現了對二階組合特徵的建模,但是又沒有引入額外的開銷,包括參數數量和計算複雜度。

3.1.3 Hidden Layer

這個跟其他的模型基本一樣,堆積隱藏層以期待來學習高階組合特徵。模型結構可以參考Wide&Deep論文的結論,一般選用constant的效果要好一些。

3.3.4 Prediction Layer

最後一層隱藏層zL到輸出層最後預測結果形式化如下:

DNN最後的輸出


其中h是中間的網絡參數。考慮到前面的各層隱藏層權重矩陣,f(x)形式化如下:

NFM形式化公式


這裏的參數爲,相比於FM其實多出的參數就是隱藏層的參數,所以說FM也可以看做是一個神經網絡架構,就是去掉隱藏層的NFM。我們把去掉隱藏層的NFM稱爲NFM-0,形式化如下:

0-Hidden Layer NFM


如果h爲全1向量,那麼此時NFM就是FM。

這是第一次把FM看做是神經網絡來處理,這樣的觀點對於優化FM提供了一些新的思路。同時,像NN中常用的技巧也可以應用到這裏面來,比如Dropout,實驗發現在正則化FM的時候,使用Dropout比傳統的L2正則化還要有效。

3.2 NFM vs Wide&Deep、DeepCross

如果要求簡明扼要說明NFM到底做了什麼,就是這一段!

最重要的區別就在於Bi-Interaction Layer。Wide&Deep和DeepCross都是用拼接操作(concatenation)替換了Bi-Interaction。
Concatenation操作的最大缺點就是它並沒有考慮任何的特徵組合信息,所以就全部依賴後面的MLP去學習特徵組合,但是很不幸,MLP的學習優化非常困難
使用Bi-Interaction考慮到了二階特徵組合,使得輸入的表示包含更多的信息,減輕了後面MLP部分的學習壓力,所以可以用更簡單的模型,取得更好的成績。

3.3 複雜度分析

上面提到過,NFM相比於FM,複雜度增加在MLP部分。所以NFM的複雜度和Wide&Deep、DeepCross是相同的,形式化如如下:

NFM複雜度

3.4 訓練

3.4.1 目標函數

NFM可以用於分類、迴歸、ranking問題,對應着不同的目標函數。

  • 迴歸。square loss

  • 分類。Hinge Loss 或 log loss

  • ranking。Contrastive max-margin loss

論文中以迴歸問題爲例,使用square loss,形式化如下。這裏並沒有正則化項,因爲作者發現在NFM中使用Dropout能夠得到更好的效果。

L2正則化

3.4.2 參數估計

使用mini-batch Adagrad來進行參數估計,Adagrad是SGD的變體,特點是每個參數都有自己的學習速率。然後讓參數沿着目標函數負梯度的方向進行更新,是下降最快的方向,形式化如下:

參數學習

這裏唯一需要指出的是Bi-Interaction在求梯度時是怎麼做的:

Bi-Interaction導數

所以,NFM的訓練依舊可以是端到端的訓練,只需要把Bi-Interaction插入到網絡中即可。

3.4.3 Dropout

Dropout在訓練過程中隨機丟掉一些神經元,那麼再一次參數更新中也就只會更新部分參數。可以理解成是相當於很多個小的NN取平均值。增加了模型的抗過擬合能力。在NFM中,Bi-Interaction的輸出後就增加了Dropout操作,隨機的丟棄了一部分的輸出。隨後的MLP同樣應用了Dropout。
需要注意的是,在測試階段,Dropout是不使用的,所有的神經元都會激活。

3.4.4 Batch Normalization

DNN的訓練面臨很多問題。其中一個就是協方差偏移(covariance shift),意思就是:由於參數的更新,隱藏層的輸入分佈不斷的在變化,那麼模型參數就需要去學習這些變化,這減慢了模型的收斂速度。
Batch Normalization就是爲了解決這個問題的,形式化如下:

Batch Normalization

對於隱藏層的輸入,BN在mini-batch數據上,把輸入轉換成均值爲0,方差爲1的高斯分佈。其中的gamma、beta是兩個超參數,爲了擴大模型的表達能力,如果模型發現不應用BN操作更好,那麼就可以通過學習這兩個參數來消除BN的影響。NFM中Bi-Interaction Layer的輸出就是MLP的第一個輸出,包括後面所有隱藏層的輸入都需要進行Batch Normalization。
注意,在測試預測的時候,BN操作同樣有效,這時的均值和方差在整個測試集上來進行計算。

四、實驗結果分析

4.1 數據集

使用了兩份公開的數據集:

  • Frappe。http://baltrunas.info/research-menu/frappe

  • MovieLens。https://grouplens.org/datasets/movielens/latest/

隨機的取70%數據作訓練集,20%數據作驗證集,10%數據作測試集。

4.2 實驗結果

FM相當於是去掉DNN的NFM,論文中給出的數據是隻用了一個隱藏層的NFM,相比於FM性能提升了7.3%;NFM只用了一個隱藏層,相比於3個隱藏層的Wide&Deep,和10個隱藏層的DeepCross,NFM用更簡單的模型,更少的參數得到了性能的提升。

論文中對比了FM、Wide&Deep模型,效果不用說肯定是NFM最好,這裏就不貼圖了,感興趣的小夥伴可以去原論文中查看。此處,只給出一些重要的結論:

  1. Dropout在NFM中可以有效的抑制過擬合

  2. Batch Normalization在NFM中可以加快訓練速度

  3. NFM使用一個隱藏層得到了最好的效果

  4. 如果用FM來pre-train嵌入層,NFM會收斂的非常快,但是NFM最終的效果並沒有變好。說明NFM對參數有很好的魯棒性。

  5. 模型性能基本上隨着Factor的增加而提升。Factor指Embedding向量的維度。

五、總結

NFM主要的特點如下:

  1. NFM核心就是在NN中引入了Bilinear Interaction(Bi-Interaction) pooling操作。基於此,NN可以在low level就學習到包含更多信息的組合特徵。

  2. 通過deepen FM來學校高階的非線性的組合特徵

所以,依舊是FM+DNN的組合套路,不同之處在於如何處理Embedding向量,這也是各個模型重點關注的地方。現在來看,如何用DNN來處理高維稀疏的數據並沒有一個統一普適的方法,業內依舊在摸索中。

 

 

一、簡介

二、FM

三、AFM

    3.1 模型

    3.2 模型訓練

    3.3 過擬合

四、總結

五、代碼實踐

Reference

計算廣告CTR預估系列往期回顧

一、簡介

AFM全稱是Attentional Factorization Machine,和NFM是同一個作者。AFM是在FM上的改進,它最大的特點就是使用一個attention network來學習不同組合特徵的重要性。
推薦系統或者CTR預估中輸入中類別型特徵比較多,因爲這些類別型特徵不是獨立的,所以他們的組合特徵就顯得非常重要。
一個簡單的辦法就是給每一個組合特徵(cross feature)一個權重。但是這種cross feature-based方法的通病就在於訓練集中很多組合特徵並沒有出現,導致無法有效學習。
FM通過爲每一個特徵學習一個嵌入向量,也叫做隱向量,通過兩個隱向量的內積來表示這個組合特徵的權重。但是同樣有個問題就是,在預測中有一部分特徵是不重要甚至是沒用的,它們會引入噪聲並對預測造成干擾。對於這樣的特徵,在預測的時候應該賦予一個比較小的權重,但是FM並沒有考慮到這一點。對於不同的特徵組合,FM並沒有區分它們的權重(可以認爲內積之後看成一個組合特徵,它們的權重都是1)。

本文通過引入Attention機制,創新新的提出了AFM,用來賦予不同的特徵組合不同的重要程度。權重可以在網絡中自動學習,不需要引入額外的領域知識。更重要的是,AFM可以

二、FM

FM全稱是Factorization Machine,形式化公式如下:

Factorization Machine


其中w是兩個特徵隱向量v的內積。FM有下面兩個問題:

 

  1. 一個特徵針對其他不同特徵都使用同一個隱向量。所以有了FFM用來解決這個問題。

  2. 所有組合特徵的權重w都有着相同的權重1。AFM就是用來解決這個問題的。

在一次預測中,並不是所有的特徵都有用的,但是FM對於所有的組合特徵都使用相同的權重。AFM就是從這個角度進行優化的,針對不同的特徵組合使用不同的權重。這也使得模型更加可解釋性,方便後續針對重要的特徵組合進行深入研究。

三、AFM

AFM全稱是Attentional Factorization Machine。

3.1 模型

AFM的模型結構如下:

AFM模型架構

注意,這裏面省去了線性部分,只考慮特徵組合部分。

Sparse InputEmbedding Layer和FM中的是相同的,Embedding Layer把輸入特徵中非零部分特徵embed成一個dense vector。下面着重說說剩下的三層。

Pair-wise Interaction Layer:
這一層主要是對組合特徵進行建模,原來的m個嵌入向量,通過element-wise product操作得到了m(m-1)/2個組合向量,這些向量的維度都是嵌入向量的維度k。形式化如下:

Pair-wise Interaction Layer


也就是Pair-wise Interaction Layer的輸入是所有嵌入向量,輸出也是一組向量。輸出是任意兩個嵌入向量的element-wise product。任意兩個嵌入向量都組合得到一個Interacted vector,所以m個嵌入向量得到m(m-1)/2個向量。

如果不考慮Attention機制,在Pair-wise Interaction Layer之後直接得到最終輸出,我們可以形式化如下:

Generalize FM


其中p和b分別是權重矩陣和偏置。當p全爲1的時候,我們發現這就是FM。這個只是說明AFM的表達能力是在FM之上的,實際的情況中我們還使用了Attention機制。NFM中的Bilinear Interaction Layer也是把任意兩個嵌入向量做element-wise product,然後進行sum pooling操作。

Attention-based Pooling Layer:

Attention機制的核心思想在於:當把不同的部分壓縮在一起的時候,讓不同的部分的貢獻程度不一樣。AFM通過在Interacted vector後增加一個weighted sum來實現Attention機制。形式化如下:

Attention-based Pooling Layer


aij是Attention score,表示不同的組合特徵對於最終的預測的貢獻程度。可以看到:

 

  1. Attention-based Pooling Layer的輸入是Pair-wise Interaction Layer的輸出。它包含m(m-1)/2個向量,每個向量的維度是k。(k是嵌入向量的維度,m是Embedding Layer中嵌入向量的個數)

  2. Attention-based Pooling Layer的輸出是一個k維向量。它對Interacted vector使用Attention score進行了weighted sum pooling操作。

Attention score的學習是一個問題。一個常規的想法就是隨着最小化loss來學習,但是這樣做對於訓練集中從來沒有一起出現過的特徵組合的Attention score無法學習。

AFM用一個Attention Network來學習。

Attention network實際上是一個one layer MLP,激活函數使用ReLU,網絡大小用attention factor表示,就是神經元的個數

Attention network的輸入是兩個嵌入向量element-wise product之後的結果(interacted vector,用來在嵌入空間中對組合特徵進行編碼);它的輸出是組合特徵對應的Attention score。最後,使用softmax對得到的Attention score進行規範化,Attention Network形式化如下:

Attention Network

總結,AFM模型總形式化如下:

AFM模型總形式化


前面一部分是線性部分;後面一部分對每兩個嵌入向量進行element-wise product得到Interacted vector;然後使用Attention機制得到每個組合特徵的Attention score,並用這個score來進行weighted sum pooling;最後將這個k維的向量通過權重矩陣p得到最終的預測結果。

3.2 模型訓練

AFM針對不同的任務有不同的損失函數。

  1. 迴歸問題。square loss。

  2. 分類問題。log loss。

論文中針對迴歸問題來討論,所以使用的是square loss,形式化如下:

AFM square loss

模型參數估計使用的是SGD。

3.3 過擬合

防止過擬合常用的方法是Dropout或者L2 L1正則化。AFM的做法是:

  1. 在Pair-wise Interaction Layer的輸出使用Dropout

  2. 在Attention Network中使用L2正則化

Attention Network是一個one layer MLP。不給他使用Dropout是因爲,作者發現如果同時在interaction layer和Attention Network中使用Dropout會使得訓練不穩定,並且降低性能。

所以,AFM的loss函數更新爲:

AFM Loss Function

其中W是Attention Network的參數矩陣。

四、總結

AFM是在FM的基礎上改進的。相比於其他的DNN模型,比如Wide&Deep,DeepCross都是通過MLP來隱式學習組合特徵。這些Deep Methods都缺乏解釋性,因爲並不知道各個組合特徵的情況。相比之下,FM通過兩個隱向量內積來學習組合特徵,解釋性就比較好。

通過直接擴展FM,AFM引入Attention機制來學習不同組合特徵的權重,即保證了模型的可解釋性又提高了模型性能。但是,DNN的另一個作用是提取高階組合特徵,AFM依舊只考慮了二階組合特徵,這應該算是AFM的一個缺點吧。

 

 

 

 

 

DeepFM升級版XDeepFM模型強勢來襲!

1、引言

對於預測性的系統來說,特徵工程起到了至關重要的作用。特徵工程中,挖掘交叉特徵是至關重要的。交叉特徵指的是兩個或多個原始特徵之間的交叉組合。例如,在新聞推薦場景中,一個三階交叉特徵爲AND(user_organization=msra,item_category=deeplearning,time=monday_morning),它表示當前用戶的工作單位爲微軟亞洲研究院,當前文章的類別是與深度學習相關的,並且推送時間是週一上午。

傳統的推薦系統中,挖掘交叉特徵主要依靠人工提取,這種做法主要有以下三種缺點:

1)重要的特徵都是與應用場景息息相關的,針對每一種應用場景,工程師們都需要首先花費大量時間和精力深入瞭解數據的規律之後才能設計、提取出高效的高階交叉特徵,因此人力成本高昂;
2)原始數據中往往包含大量稀疏的特徵,例如用戶和物品的ID,交叉特徵的維度空間是原始特徵維度的乘積,因此很容易帶來維度災難的問題;
3)人工提取的交叉特徵無法泛化到未曾在訓練樣本中出現過的模式中。

因此自動學習特徵間的交互關係是十分有意義的。目前大部分相關的研究工作是基於因子分解機的框架,利用多層全連接神經網絡去自動學習特徵間的高階交互關係,例如FNN、PNN和DeepFM等。其缺點是模型學習出的是隱式的交互特徵,其形式是未知的、不可控的;同時它們的特徵交互是發生在元素級(bit-wise)而不是特徵向量之間(vector-wise),這一點違背了因子分解機的初衷。來自Google的團隊在KDD 2017 AdKDD&TargetAD研討會上提出了DCN模型,旨在顯式(explicitly)地學習高階特徵交互,其優點是模型非常輕巧高效,但缺點是最終模型的表現形式是一種很特殊的向量擴張,同時特徵交互依舊是發生在元素級上。

我們用下圖來回顧一下DCN的實現:

下面是我對文中提到的兩個重要概念的理解:

bit-wise VS vector-wise
假設隱向量的維度爲3維,如果兩個特徵(對應的向量分別爲(a1,b1,c1)和(a2,b2,c2)的話)在進行交互時,交互的形式類似於f(w1 * a1 * a2,w2 * b1 * b2 ,w3 * c1 * c2)的話,此時我們認爲特徵交互是發生在元素級(bit-wise)上。如果特徵交互形式類似於 f(w * (a1 * a2 ,b1 * b2,c1 * c2))的話,那麼我們認爲特徵交互是發生在特徵向量級(vector-wise)

explicitly VS implicitly
顯式的特徵交互和隱式的特徵交互。以兩個特徵爲例xi和xj,在經過一系列變換後,我們可以表示成 wij * (xi * xj)的形式,就可以認爲是顯式特徵交互,否則的話,是隱式的特徵交互。

微軟亞洲研究院社會計算組提出了一種極深因子分解機模型(xDeepFM),不僅能同時以顯式和隱式的方式自動學習高階的特徵交互,使特徵交互發生在向量級,還兼具記憶與泛化的學習能力。

我們接下來就來看看xDeepFM這個模型是怎麼做的吧!

2、xDeepFM模型介紹

2.1 Compressed Interaction Network

爲了實現自動學習顯式的高階特徵交互,同時使得交互發生在向量級上,文中首先提出了一種新的名爲壓縮交互網絡(Compressed Interaction Network,簡稱CIN)的神經模型。在CIN中,隱向量是一個單元對象,因此我們將輸入的原特徵和神經網絡中的隱層都分別組織成一個矩陣,記爲X0和Xk。CIN中每一層的神經元都是根據前一層的隱層以及原特徵向量推算而來,其計算公式如下:

其中點乘的部分計算如下:

我們來解釋一下上面的過程,第k層隱層含有H_k條神經元向量。隱層的計算可以分成兩個步驟:(1)根據前一層隱層的狀態Xk和原特徵矩陣X0,計算出一箇中間結果Z^k+1,它是一個三維的張量,如下圖所示:

在這個中間結果上,我們用Hk+1個尺寸爲m*Hk的卷積核生成下一層隱層的狀態,該過程如圖2所示。這一操作與計算機視覺中最流行的卷積神經網絡大體是一致的,唯一的區別在於卷積核的設計。CIN中一個神經元相關的接受域是垂直於特徵維度D的整個平面,而CNN中的接受域是當前神經元周圍的局部小範圍區域,因此CIN中經過卷積操作得到的特徵圖(Feature Map)是一個向量,而不是一個矩陣。

如果你覺得原文中的圖不夠清楚的話,希望下圖可以幫助你理解整個過程:

CIN的宏觀框架可以總結爲下圖:

可以看出,它的特點是,最終學習出的特徵交互的階數是由網絡的層數決定的,每一層隱層都通過一個池化操作連接到輸出層,從而保證了輸出單元可以見到不同階數的特徵交互模式。同時不難看出,CIN的結構與循環神經網絡RNN是很類似的,即每一層的狀態是由前一層隱層的值與一個額外的輸入數據計算所得。不同的是,CIN中不同層的參數是不一樣的,而在RNN中是相同的;RNN中每次額外的輸入數據是不一樣的,而CIN中額外的輸入數據是固定的,始終是X^0。

可以看到,CIN是通過(vector-wise)來學習特徵之間的交互的,還有一個問題,就是它爲什麼是顯式的進行學習?我們先從X1來開始看,X1的第h個神經元向量可以表示成:

進一步,X^2的第h個神經元向量可以表示成:

最後,第k層的第h個神經元向量可以表示成:

因此,我們能夠通過上面的式子對特徵交互的形式進行一個很好的表示,它是顯式的學習特徵交叉。

2.2 xDeepFM

將CIN與線性迴歸單元、全連接神經網絡單元組合在一起,得到最終的模型並命名爲極深因子分解機xDeepFM,其結構如下圖:

集成的CIN和DNN兩個模塊能夠幫助模型同時以顯式和隱式的方式學習高階的特徵交互,而集成的線性模塊和深度神經模塊也讓模型兼具記憶與泛化的學習能力。值得一提的是,爲了提高模型的通用性,xDeepFM中不同的模塊共享相同的輸入數據。而在具體的應用場景下,不同的模塊也可以接入各自不同的輸入數據,例如,線性模塊中依舊可以接入很多根據先驗知識提取的交叉特徵來提高記憶能力,而在CIN或者DNN中,爲了減少模型的計算複雜度,可以只導入一部分稀疏的特徵子集。

 


YouTube深度學習推薦系統

1、引言

youtube的視頻推薦面臨三方面的挑戰:
1)Scale:視頻和用戶數量巨大,很多現有的推薦算法能夠在小的數據集上表現得很好,但是在這裏效果不佳。需要構建高度專業化的分佈式學習算法和高效的服務系統來處理youtube龐大的用戶和視頻數量。
2)Freshness:體現在視頻和用戶行爲更新頻繁。
3)Noise:相較於龐大的視頻庫,用戶的行爲是十分稀疏的,同時,我們基本上能獲得的都是用戶的隱式反饋信號。構造一個強健的系統是十分困難的。

2、Youtube推薦系統整體架構

由於網站視頻數量太多,視頻候選集太大,不宜用複雜網絡直接進行推薦,這會造成響應時間的增加。因此,整個架構走粗排 + 精排兩階段的路子:召回階段從成百上千萬的視頻中選擇百量級的候選視頻;排序階段完成對幾百個候選視頻的精排。

3、候選集生成Candidate Generation

候選集生成階段從巨大的視頻庫中挑選幾百個用戶可能感興趣的候選集。模型的結構如下圖所示:

關於該架構,我們從以下幾個方面進行討論:

3.1 輸入特徵

模型的輸入包括用戶觀看過視頻的embedding,用戶搜索過token的embedding,用戶地理信息embedding,用戶的年齡和性別信息。

這裏有一個很有意思並且值得我們深思的特徵,被稱爲"Example Age"。我們知道,每一秒中,YouTube都有大量視頻被上傳,推薦這些最新視頻對於YouTube來說是極其重要的。同時,通過觀察歷史數據發現,用戶更傾向於推薦那些儘管相關度不高但是是最新(fresh)的視頻。看論文的圖片,我們可能認爲該特徵表示視頻被上傳之後距現在的時間。但文章其實沒有定義這個特徵是如何獲取到的,應該是訓練時間-Sample Log的產生時間。而在線上服務階段,該特徵被賦予0值甚至是一個比較小的負數。這樣的做法類似於在廣告排序中消除position bias。

假設這樣一個視頻十天前發佈的,許多用戶在當前觀看了該視頻,那麼在當天會產生許多Sample Log,而在後面的九天裏,觀看記錄不多,Sample Log也很少。如果我們沒有加入Example Age這個特徵的話,無論何時訓練模型,這個視頻對應的分類概率都是差不多的,但是如果我們加入這個特徵,模型就會知道,如果這條記錄是十天前產生的話,該視頻會有很高的分類概率,如果是最近幾天產生的話,分類概率應該低一些,這樣可以更加逼近實際的數據。實驗結果也證明了這一點,參見下圖:

對於給定的視頻,以example age作爲一個特徵訓練的模型能夠準確表示數據中觀察到的上傳時間和隨時間變化的流行度。如果沒有該特徵,該模型將近似地預測訓練窗口的平均可能性。

3.2 樣本和上下文選擇

在這裏,正樣本是用戶所有完整觀看過的視頻,其餘可以視作負樣本。

訓練樣本是從Youtube所有的用戶觀看記錄裏產生的,而並非只是通過推薦系統產生的。同時,針對每一個用戶的觀看記錄,都生成了固定數量的訓練樣本,這樣,每個用戶在損失函數中的地位都是相等的,防止一小部分超級活躍用戶主導損失函數。

在對待用戶的搜索歷史或者觀看歷史時,可以看到Youtube並沒有選擇時序模型,而是完全摒棄了序列關係,採用求平均的方式對歷史記錄進行了處理。這是因爲考慮時序關係,用戶的推薦結果將過多受最近觀看或搜索的一個視頻的影響。文章中給出一個例子,如果用戶剛搜索過“tayer swift”,你就把用戶主頁的推薦結果大部分變成tayer swift有關的視頻,這其實是非常差的體驗。爲了綜合考慮之前多次搜索和觀看的信息,YouTube丟掉了時序信息,將用戶近期的歷史紀錄等同看待。但是上述僅是經驗之談,也許類似阿里深度學習演化網絡中RNN + Attention的方法,能夠取得更好的推薦效果。

最後,在處理測試集的時候,YouTube沒有采用經典的隨機留一法(random holdout),而是把用戶最近的一次觀看行爲作爲測試集,主要是爲了避免引入future information,產生與事實不符的數據穿越(避免引入超越特徵。)。如下圖:

3.3 離線訓練

從模型結構可以看出,在離線訓練階段,將其視爲了一個分類問題。使用隱式反饋來進行學習,用戶完整觀看過一個視頻,便視作一個正例。如果將視頻庫中的每一個視頻當作一個類別,那麼在時刻t,對於用戶U和上下文C,用戶會觀看視頻i的概率爲:

其中,u是用戶的embedding,這個embedding,是網絡最後一個Relu激活函數的輸出,vi是視頻i的embedding。那麼問題來了,輸入時,每一個視頻也有一個對應的embedding,這個embedding是不是計算softmax的embedding呢?這裏文章也沒有說清楚?也許一個視頻對應一個embedding,也許一個視頻對應兩組不同的embedding。

使用多分類問題的一個弊端是,我們有百萬級別的classes,模型是非常難以訓練的,因此在實際中,Youtube並使用負樣本採樣(negative sampling)的方法,將class的數量減小。還有一種可以替換的方法,成爲hierarchical softmax,但經過嘗試,這種方法並沒有取得很好的效果。關於上面的兩種方法,大家是不是想起了word2vec中訓練詞向量的兩種方式?但是這裏的負採樣和word2vec中的負採樣方法是不同的,這裏採樣之後還是一個多分類問題,而word2vec中的負採樣方法是將問題轉爲了一個二分類問題。

下圖是離線訓練的結果,使用的評價指標是MAP(Mean Average Precision),主要考察的兩個點是輸入特徵以及網絡層數對於實驗效果的影響:

3.4 在線服務

對於在線服務來說,有嚴格的性能要求,必須在幾十毫秒內返回結果。因此,youtube沒有重新跑一遍模型,而是通過保存用戶的embedding和視頻的embedding,通過最近鄰搜索的方法得到top N的結果。

從圖中可以看到,最終的結果是approx topN的結果,所以並不是直接計算用戶embedding和每個視頻embedding的內積。如果這樣做的話,N個視頻的內積計算 + 排序,時間複雜度大概是NlogN,這樣很難滿足時間複雜度要求。如果使用局部敏感哈希(Locality-Sensitive Hashing, LSH)等近似最近鄰快速查找技術,時間複雜度是可以大大降低的。

但文中只是提到說使用hash的方法來得到近似的topN,所以也許不是局部敏感哈希方法,不過如果想要了解一下該方法的原理,可以參考博客:https://www.cnblogs.com/wt869054461/p/8148940.html

4、排序Ranking

排序過程是對生成的候選集做進一步細粒度的排序。模型的結構圖如下所示:

4.1 輸入特徵

在排序階段,輸入的特徵主要有:

impression video ID embedding: 當前要計算的video的embedding
watched video IDs average embedding: 用戶觀看過的最後N個視頻embedding的average pooling
language embedding: 用戶語言的embedding和當前視頻語言的embedding
time since last watch: 用戶上次觀看同頻道時間距現在的時間間隔
previous impressions: 該視頻已經被曝光給該用戶的次數

第4個特徵有一點attention的意思,加入我們剛看了一場NBA比賽的集錦,我們很可能繼續觀看NBA頻道的其他視頻,那麼這個特徵就很好地捕捉到了這一行爲。第5個特徵一定程度上引入了exploration的思想,避免同一個視頻持續對同一用戶進行無效曝光。儘量增加用戶沒看過的新視頻的曝光可能性。

4.2 特徵處理

特徵處理主要包含對於離散變量的處理和連續變量的處理。

對於離散變量,這裏主要是視頻ID,Youtube這裏的做法是有兩點:
1、只保留用戶最常點擊的N個視頻的embedding,剩餘的長尾視頻的embedding被賦予全0值。可能的解釋主要有兩點,一是出現次數較少視頻的embedding沒法被充分訓練。二是也可以節省線上服務寶貴的內存資源。
2、對於相同域的特徵可以共享embedding,比如用戶點擊過的視頻ID,用戶觀看過的視頻ID,用戶收藏過的視頻ID等等,這些公用一套embedding可以使其更充分的學習,同時減少模型的大小,加速模型的訓練。

對於連續特徵,主要進行歸一化處理,神經網絡對於輸入的分佈及特徵的尺度是十分敏感。因此作者設計了一種積分函數將連續特徵映射爲一個服從[0,1]分佈的變量。該積分函數爲:

個人理解就是將概率密度分佈轉換成了累計密度分佈。

爲了引入特徵的非線性,除了加入歸一化後的特徵外,還加入了該特徵的平方和開方值。

4.3 建模期望觀看時間

在訓練階段,Youtube沒有把問題當作一個CTR預估問題,而是通過weighted logistic 建模了用戶的期望觀看時間。

在這種情況下,對於正樣本,權重是觀看時間,而對於負樣本,權重是單位權重(可以認爲是1),那麼,此時,觀看時長的機率(odds,在原邏輯迴歸中,指正例發生的概率與負例發生概率的比值)爲:

上式中,Ti指樣本中第i條正樣本的觀看時長,N是所有的訓練樣本,k是正樣本的個數。在k特別小的情況下,上式近似爲ET,P是點擊率,E[T]是視頻的期望觀看時長,因爲P非常小,那麼乘積近似於E[T]。

同時,對於邏輯迴歸,我們知道機率的計算公式其實就是exp(wx + b),同時機率可以近似於期望觀看時長E[T],那麼我們在測試階段,就可以直接輸出exp(wx + b),作爲期望觀看時長。

離線訓練的效果如下圖:

5、總結

簡單講,YouTube的同學們構建了兩級推薦結構從百萬級別的視頻候選集中進行視頻推薦,第一級candidate generation model負責“初篩”,從百萬量級的視頻庫中篩選出幾百個候選視頻,第二級ranking model負責“精排”,引入更多的feature對幾百個候選視頻進行排序。

1、文中把推薦問題轉換成多分類問題,在next watch的場景下,每一個備選video都會是一個分類,因此總共的分類有數百萬之巨,這在使用softmax訓練時無疑是低效的,這個問題Youtube是如何解決的?

這個問題原文的回答是這樣的

We rely on a technique to sample negative classes from the background distribution ("candidate sampling") and then correct for this sampling via importance weighting.

簡單說就是進行了負採樣(negative sampling)並用importance weighting的方法對採樣進行calibration。文中同樣介紹了一種替代方法,hierarchical softmax,但並沒有取得更好的效果。

2、在candidate generation model的serving過程中,Youtube爲什麼不直接採用訓練時的model進行預測,而採用一種最近鄰搜索的方法?

這個問題的答案是一個經典的工程和學術做trade-off的結果,在model serving過程中對幾百萬個候選集逐一跑一遍模型的時間開銷顯然太大了,因此在通過candidate generation model得到user 和 video的embedding之後,通過最近鄰搜索的方法的效率高很多。我們甚至不用把任何model inference的過程搬上服務器,只需要把user embedding和video embedding存到redis或者內存中就好了。

3、Youtube的用戶對新視頻有偏好,那麼在模型構建的過程中如何引入這個feature?

爲了擬合用戶對fresh content的bias,模型引入了“Example Age”這個feature,文中其實並沒有精確的定義什麼是example age。按照文章的說法猜測的話,會直接把sample log距離當前的時間作爲example age。比如24小時前的日誌,這個example age就是24。在做模型serving的時候,不管使用那個video,會直接把這個feature設成0。大家可以仔細想一下這個做法的細節和動機,非常有意思。

當然我最初的理解是訓練中會把Days since Upload作爲這個example age,比如雖然是24小時前的log,但是這個video已經上傳了90小時了,那這個feature value就是90。那麼在做inference的時候,這個feature就不會是0,而是當前時間每個video的上傳時間了。

我不能100%確定文章中描述的是那種做法,大概率是第一種。還請大家踊躍討論。

文章也驗證了,example age這個feature能夠很好的把視頻的freshness的程度對popularity的影響引入模型中。

在引入“Example Age”這個feature後,模型的預測效力更接近經驗分佈;而不引入Example Age的藍線,模型在所有時間節點上的預測趨近於平均,這顯然是不符合客觀實際的。

4、在對訓練集的預處理過程中,Youtube沒有采用原始的用戶日誌,而是對每個用戶提取等數量的訓練樣本,這是爲什麼?

爲了減少高度活躍用戶對於loss的過度影響。
5、Youtube爲什麼不採取類似RNN的Sequence model,而是完全摒棄了用戶觀看歷史的時序特徵,把用戶最近的瀏覽歷史等同看待,這不會損失有效信息嗎?

這個原因應該是YouTube工程師的“經驗之談”,如果過多考慮時序的影響,用戶的推薦結果將過多受最近觀看或搜索的一個視頻的影響。YouTube給出一個例子,如果用戶剛搜索過“tayer swift”,你就把用戶主頁的推薦結果大部分變成tayer swift有關的視頻,這其實是非常差的體驗。爲了綜合考慮之前多次搜索和觀看的信息,YouTube丟掉了時序信息,講用戶近期的歷史紀錄等同看待。

但RNN到底適不適合next watch這一場景,其實還有待商榷,@嚴林 大神在上篇文章的評論中已經提到,youtube已經上線了以RNN爲基礎的推薦模型, 參考論文如下:

https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46488.pdf

看來時隔兩年,YouTube對於時序信息以及RNN模型有了更多的掌握和利用。

6、在處理測試集的時候,Youtube爲什麼不採用經典的隨機留一法(random holdout),而是一定要把用戶最近的一次觀看行爲作爲測試集?

只留最後一次觀看行爲做測試集主要是爲了避免引入future information,產生與事實不符的數據穿越。
7、在確定優化目標的時候,Youtube爲什麼不採用經典的CTR,或者播放率(Play Rate),而是採用了每次曝光預期播放時間(expected watch time per impression)作爲優化目標?

這個問題從模型角度出發,是因爲 watch time更能反應用戶的真實興趣,從商業模型角度出發,因爲watch time越長,YouTube獲得的廣告收益越多。而且增加用戶的watch time也更符合一個視頻網站的長期利益和用戶粘性。

這個問題看似很小,實則非常重要,objective的設定應該是一個算法模型的根本性問題,而且是算法模型部門跟其他部門接口性的工作,從這個角度說,YouTube的推薦模型符合其根本的商業模型,非常好的經驗。

我之前在領導一個算法小組的時候,是要花大量時間與Business部門溝通Objective的設定問題的,這是路線方針的問題,方向錯了是要讓組員們很多努力打水漂的,一定要慎之又慎。

8、在進行video embedding的時候,爲什麼要直接把大量長尾的video直接用0向量代替?

這又是一次工程和算法的trade-off,把大量長尾的video截斷掉,主要還是爲了節省online serving中寶貴的內存資源。當然從模型角度講,低頻video的embedding的準確性不佳是另一個“截斷掉也不那麼可惜”的理由。

當然,之前很多同學在評論中也提到簡單用0向量代替並不是一個非常好的選擇,那麼有什麼其他方法,大家可以思考一下。

9、針對某些特徵,比如#previous impressions,爲什麼要進行開方和平方處理後,當作三個特徵輸入模型?

這是很簡單有效的工程經驗,引入了特徵的非線性。從YouTube這篇文章的效果反饋來看,提升了其模型的離線準確度。
10、爲什麼ranking model不採用經典的logistic regression當作輸出層,而是採用了weighted logistic regression?

因爲在第7問中,我們已經知道模型採用了expected watch time per impression作爲優化目標,所以如果簡單使用LR就無法引入正樣本的watch time信息。因此採用weighted LR,將watch time作爲正樣本的weight,在線上serving中使用e(Wx+b)做預測可以直接得到expected watch time的近似,完美。

推薦閱讀

1、https://blog.csdn.net/xiongjiezk/article/details/73445835
2、https://zhuanlan.zhihu.com/p/52169807
3、https://zhuanlan.zhihu.com/p/52504407

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章