論文爲:Product-based Neural Networks for User Response Prediction 算法
1、原理網絡
給你們舉例一個直觀的場景:好比如今有一個鳳凰網站,網站上面有一個迪斯尼廣告,那咱們如今想知道用戶進入這個網站以後會不會有興趣點擊這個廣告,相似這種用戶點擊率預測在信息檢索領域就是一個很是核心的問題。廣泛的作法就是經過不一樣的域來描述這個事件而後預測用戶的點擊行爲,而這個域能夠有不少。那麼什麼樣的用戶會點擊這個廣告呢?咱們可能猜測:目前在上海的年輕的用戶可能會有需求,若是今天是週五,看到這個廣告,可能會點擊這個廣告爲週末作活動參考。那可能的特徵會是:[Weekday=Friday, occupation=Student, City=Shanghai],當這些特徵同時出現時,咱們認爲這個用戶點擊這個迪斯尼廣告的機率會比較大。函數
傳統的作法是應用One-Hot Binary的編碼方式去處理這類數據,例如如今有三個域的數據X=[Weekday=Wednesday, Gender=Male, City=Shanghai],其中 Weekday有7個取值,咱們就把它編譯爲7維的二進制向量,其中只有Wednesday是1,其餘都是0,由於它只有一個特徵值;Gender有兩維,其中一維是1;若是有一萬個城市的話,那City就有一萬維,只有上海這個取值是1,其餘是0。學習
那最終就會獲得一個高維稀疏向量。可是這個數據集不能直接用神經網絡訓練:若是直接用One-Hot Binary進行編碼,那輸入特徵至少有一百萬,第一層至少須要500個節點,那麼第一層咱們就須要訓練5億個參數,那就須要20億或是50億的數據集,而要得到如此大的數據集基本上是很困難的事情。優化
FM、FNN以及PNN模型網站
由於上述緣由,咱們須要將很是大的特徵向量嵌入到低維向量空間中來減少模型複雜度,而FM(Factorisation machine)——最有效的embedding model:編碼
第一部分仍然爲Logistic Regression,第二部分是經過兩兩向量之間的點積來判斷特徵向量之間和目標變量之間的關係。好比上述的迪斯尼廣告,occupation=Student和City=Shanghai這兩個向量之間的角度應該小於90,它們之間的點積應該大於0,說明和迪斯尼廣告的點擊率是正相關的。這種算法在推薦系統領域應用比較普遍。.net
那咱們就基於這個模型來考慮神經網絡模型,其實這個模型本質上就是一個三層網絡:3d
它在第二層對向量作了乘積處理(好比上圖藍色節點直接爲兩個向量乘積,其鏈接邊上沒有參數須要學習),每一個field都只會被映射到一個low-dimensional vector,field和field之間沒有相互影響,那麼第一層就被大量降維,以後就能夠在此基礎上應用神經網絡模型。blog
咱們用FM算法對底層field進行embeddding,在此基礎上面建模就是FNN(Factorisation-machinesupported Neural Networks)模型:
咱們進一步考慮FNN與通常的神經網絡的區別是什麼?大部分的神經網絡模型對向量之間的處理都是採用加法操做,而FM 則是經過向量之間的乘法來衡量二者之間的關係。咱們知道乘法關係其實至關於邏輯「且」的關係,拿上述例子來講,只有特徵是學生並且在上海的人才有更大的機率去點擊迪斯尼廣告。可是加法僅至關於邏輯中「或」的關係,顯然「且」比「或」更能嚴格區分目標變量。
因此咱們接下來的工做就是對乘法關係建模。能夠對兩個向量作內積和外積的乘法操做:
能夠看出對外積操做獲得矩陣而言,若是該矩陣只有對角線上有值,就變成了內積操做的結果,因此內積操做能夠看做是外積操做的一種特殊狀況。經過這種方式,咱們就能夠衡量兩個不一樣域之間的關係。
在此基礎之上咱們搭建的神經網絡PNN:
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中p的計算方式以下,即便用內積來表明pij:
因此,pij實際上是一個數,獲得一個pij的時間複雜度爲M,p的大小爲N*N,所以計算獲得p的時間複雜度爲N*N*M。而再由p獲得lp的時間複雜度是N*N*D1。所以 對於IPNN來講,總的時間複雜度爲N*N(D1+M)。文章對這一結構進行了優化,能夠看到,咱們的p是一個對稱矩陣,所以咱們的權重也能夠是一個對稱矩陣,對稱矩陣就能夠進行以下的分解:
所以:
所以:
2.2 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矩陣:
經過元素相乘的疊加,也就是先疊加N個field的Embedding向量,而後作乘法,能夠大幅減小時間複雜度,定義p爲:
這裏計算p的時間複雜度變爲了D1*M*(M+N)
和FNN相比,PNN多了一個product層,和FM相比,PNN多了隱層,而且輸出不是簡單的疊加;在訓練部分,能夠單獨訓練FNN或者FM部分做爲初始化,而後BP算法應用整個網絡,那麼至少效果不會差於FNN和FM;
3、EXPERIMENTS
使用Criteo和iPinYou的數據集,並用SGD算法比較了7種模型:LR、FM、FNN、CCPM、IPNN、OPNN、PNN(拼接內積和外積層),正則化部分(L2和Dropout);
實驗結果以下圖所示:
結果代表PNN提高仍是蠻大的;這裏介紹一下關於激活函數的選擇問題,做者進行了對好比下:
從圖中看出,好像tanh在某些方面要優於relu,但做者採用的是relu,relu的做用: 一、稀疏的激活函數(負數會被丟失);二、有效的梯度傳播(緩解梯度消失和梯度爆炸);三、有效的計算(僅有加法、乘法、比較操做);
參考:
1.https://www.jianshu.com/p/be784ab4abc2
2.https://blog.csdn.net/buwei0239/article/details/86755998
3.https://blog.csdn.net/fredinators/article/details/79757629