論文原文:https://arxiv.org/pdf/1611.00144.pdf
前言
現在推薦系統,網路搜尋和線上廣告的資料大多是分類的,幷包含多個欄位,有一個典型的方法將他們轉化成高維稀疏二進位制特徵表示就是透過one-hot編碼。對於這些高維稀疏的特徵,傳統模型可能會限制它們從資料中挖掘淺層模式的能力,即低階組合特徵,另一方面,像深度神經網路這樣的深度模型由於巨大的特徵空間而不能直接應用於高維輸入 所以本文提出了PNN這個模型,其中的embedding層學習種類特徵的分散式表示,product層捕獲種類特徵之間的互動特徵(學習filed之間的互動特徵),全連線層捕獲高階互動特徵。
本文提到的相關論文:
- Deep learning over multi-field categorical data: A case study on user response prediction(FNN)
- A convolutional click prediction model(CCPM)
- Sequential click prediction for sponsored search with recurrent neural networks
Introduction
資訊檢索領域(IR,Information Retrieval)包括:推薦系統、web search、線上廣告。其核心是User Response Prediction,是指給出使用者關於一個預先定義好的行為的機率。這些行為包括:clicks、purchases。預測的機率代表了使用者對特定物品感興趣的程度,物品包括:新聞、商品、廣告。而這會影響商家對於展示文件的排序,廣告投標等。IR問題最大的資料特點就是multi-field categorical,舉例來說:對於[Weekday=Tuesday, Gender=Male, City=London],透過one-hot編碼轉化高緯度稀疏的資料:
在傳統的機器學習模型中,例如像LR,GBDT依舊非常依賴人工特徵工程,FM則缺少對高階組合特徵的建模,僅僅對特定階的組合特徵建模。
隨著DNN在影像處理、語音識別、自然語言處理領域大放異彩,將DNN應用於CTR預估或者推薦系統的研究逐漸多了起來。DNN的輸入往往是dense real vector 但是multi-field類別型特徵起初是高維且稀疏的。常見的做法是透過加入Embedding Layer將輸入對映到低維度的Embedding空間中。FNN使用FM初始化embedding vector,同時也受限於FM;CCPM利用CNN卷積來學習組合特徵,但是隻在相鄰的特徵間卷積,沒有考慮到非相鄰的特徵的組合。
在神經網路的各神經元中,加法操作無法發現種類特徵之間的互動特徵,所以採用乘法操作,來發現不同field的互動特徵。這也是PNN的由來。
PNN模型介紹
網路結構圖:
Input:
一個類別型特徵就是一個Field。比如使用者資訊包括:性別、職業等,這裡的性別是一個Field,職業是另一個Field。上圖中的Input是one-hot之後的,而且只給出了類別型特徵。所以每個Field i都是一個向量,向量的大小就是類別型特徵one-hot之後的維度。所以不同Field的維度是不同的。
Embedding Layer:
Embedding是Field-wisely Connected,就是每個Field只管自己的嵌入,Field之間網路的權重毫無關係,自己學習自己的。而且只有權重,沒有bias。不同的Field之間沒有關係。一個Field經過嵌入後,得到一個Feature,也就是對應的Embedding Vector嵌入向量。其維度一般是預先設定好的定值,論文中採用的是10。也就說是不同Feature的維度經過embedding後都是一樣的。
Product Layer:
Product Layer中z中每個圈都是一個向量,向量大小為Embedding Vector大小,向量個數 = Field個數 = Embedding向量的個數。
Product Layer中如果是內積,p中每個圈都是一個值;如果是外積,p中每個圓圈都是一個二維矩陣。
對於Embedding Vector有兩種處理策略:
直接和內積或外積結果拼接,輸入到神經網路。(未經過線性變換的Z和P拼接)
先進行一次線性變換,再和內積或外積結果拼接,輸入到神經網路。(經過線性變換的Z和P拼接)
圖上Embedding Layer中的那個1,其實就是直接把Embedding Vector拿來用並沒有進行線性變換。這樣做處理起來很簡單,但是也有個缺點。Embedding Vector和內積項或外積項的數值分佈差異交大,沒有進行線性變換,導致分佈不穩定不利於訓練。
圖中Product層包括Z和P兩部分:
Z:在資料流中,假設Field個數為N,那麼經過Embedding後的Field得到了N個Feature,將這N個Feature拿過來並排,沒有經過線性變換,就得到Z(參考Embedding Vector有兩種處理策略)。這部分代表的是對低維度特徵,或者說原始特徵的建模。加入這一部分訓練會變得穩定。
P:經過Embedding後得到的N個Feature兩兩組合進行Product操作,把結果放到一起就得到了p。N個向量兩兩組合,會產生N(N-1)/2對組合。其中Product操作包括內積運算和外積運算,內積運算:每個神經元就是一個實數值,外積運算:每個神經元就是一個二維矩陣。
其中fi是field i經過Embedding後得到的Feature。
Pi,j = g(fi, fj)定義為Feature之間兩兩組合,PNN中操作方式的不同,g函式會不同。
Hidden Layer:
把z和p直接拼接起來,就得到了第一個隱層的輸入。經過多個隱藏層最後給出CTR預測值。圖中包括兩個隱藏層L1和L2。
Wzn與 Wpn為Product層的權重。
輸出:
\hat y = \sigma (W_3L_2 + b_3)
根據Product Layer的操作不同,PNN有三種變體:IPNN、OPNN、PNN*
Inner Product-based Neural Network(IPNN)
P中每個神經元都是一個實數值,和Z中的嵌入向量拼接起來,餵給神經網路就行了。
l^n_z = w^n_z \bigodot z = \sum^n_{i=1} \sum^n_{j=1} (W^n_z)_i,jz_i,j
W^n_p\bigodot p=\sum^n_{i=1}\sum^n_{j=1}\theta^n_i\theta^n_j \left \langle f_i,f_j \right \rangle = \left \langle \sum^N_{i=1} \delta ^n_i, \sum^N_{i=1}\delta^n_i \right \rangle
Outer Product-based Neural Network(OPNN)
外積得到的是一個矩陣,所以p中的每個神經元都是一個矩陣。針對兩個M維的嵌入向量e1和e2. 它們外積得到的是M M 的二維矩陣。一共有N個嵌入向量,那麼矩陣就有N(N-1)/2個。那麼一個二維矩陣怎麼輸入到神經網路中去?針對外積產生的每一個二維矩陣,我們都透過另外一個矩陣W,大小為M M。這兩個矩陣對應位置相乘,再相加,就得到了最終的結果。 也就是說,最終外積產生的二維矩陣,透過和另外一個需要學習的引數矩陣,對應位置相乘,再相加,得到了一個標量,一個實數值。
PNN
如果Product Layer同時使用內積+外積,把內積和外積的結果拼接起來,就得到PNN*。
總結
PNN從FM和FNN的角度出發,提出利用內積或者外積來學習高階的非線性特徵
PNN中如果採用內積操作,那麼嵌入向量兩兩組合每對組合都得到一個實數值。如果後面隱藏層的權重矩陣W全是1的話,那麼PNN就變成了FM。
PNN使用外積操作得到的是一個二維矩陣,需要學得一個與之對應的二維矩陣,透過和一個矩陣對應位置相乘在相加,就把這些二維外積矩陣轉換成了一個實數值。
OPNN的實現程式碼中利用了公式進行了轉換,稍微降低了複雜度。
UV^T \bigodot W = U^TWV
假設兩個嵌入向量,列向量U,V。UV的外積結果為二維矩陣。外積與引數矩陣W相乘,相當於對u經過w矩陣投影,在投影空間中與v計算內積。
https://zhuanlan.zhihu.com/p/38416582
本作品採用《CC 協議》,轉載必須註明作者和本文連結