《推薦系統》-PNN模型

演算法手記發表於2020-10-21

1、原理

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

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

輸出層

輸出層很簡單,將上一層的網路輸出通過一個全連結層,經過sigmoid函式轉換後對映到(0,1)的區間中,得到我們的點選率的預測值:
y ^ = σ ( W 3 l 2 + b 3 ) \hat{y} = \sigma (W_{3} l_{2} + b_{3} ) y^=σ(W3l2+b3)

l2層

根據l1層的輸出,經一個全連結層 ,並使用relu進行啟用,得到我們l2的輸出結果:
l 2 = r e l u ( W 2 l 1 + b 2 ) l_{2} = relu(W_{2} l_{1} + b_{2} ) l2=relu(W2l1+b2)

l1層

l1層的輸出由如下的公式計算:
l 1 = r e l u ( l z + l p + b 1 ) l_{1} = relu(l_{z} +l_{p} + b_{1} ) l1=relu(lz+lp+b1)

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

Product Layer

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

product layer可以分成兩個部分,一部分是線性部分lz,一部分是非線性部分lp。二者的形式如下:
l z = ( l z 1 , l z 2 . . . l z n . . . l z D 1 ) , l z n = W z n ⊙ z l_{z} = (l_{z}^1 ,l_{z}^2 ...l_{z}^n ...l_{z}^{D1} ) , l_{z}^n = W_{z}^n \odot z lz=(lz1,lz2...lzn...lzD1),lzn=Wznz

l p = ( l p 1 , l p 2 . . . l p n . . . l p D 1 ) , l p n = W p n ⊙ z l_{p} = (l_{p}^1 ,l_{p}^2 ...l_{p}^n ...l_{p}^{D1} ) , l_{p}^n = W_{p}^n \odot z lp=(lp1,lp2...lpn...lpD1),lpn=Wpnz

在這裡,我們要使用到論文中所定義的一種運算方式,其實就是矩陣的點乘啦:
A ⊙ B = ∑ A i , j B i , j A\odot B = \sum\nolimits A_{i,j} B_{i,j} AB=Ai,jBi,j

Embedding Layer

Embedding Layer跟DeepFM中相同,將每一個field的特徵轉換成同樣長度的向量,這裡用f來表示。
( f 1 , f 1 . . . f N ) (f_{1} ,f_{1} ...f_{N} ) (f1,f1...fN)

損失函式

使用和邏輯迴歸同樣的損失函式,如下:
L ( y , y ^ ) = − y l o g y ^ − ( 1 − y ) l o g ( 1 − y ^ ) L(y,\hat{y} )=-y log \hat{y} -(1-y)log(1-\hat{y} ) L(y,y^)=ylogy^(1y)log(1y^)

2、Product Layer詳細介紹

前面提到了,product layer可以分成兩個部分,一部分是線性部分lz,一部分是非線性部分lp。看product layer的公式,我們首先需要知道z和p,這都是由我們的embedding層得到的,其中z是線性訊號向量,因此我們直接用embedding層得到:
z = ( z 1 , z 2 . . . z N ) ≐ ( f 1 , f 2 . . . f N ) z = (z_{1} ,z_{2} ...z_{N} )\doteq (f_{1} ,f_{2} ...f_{N} ) z=(z1,z2...zN)(f1,f2...fN)

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

對於p來說,這裡需要一個公式進行對映:
p = p i , j , i = 1... N , j = 1... N p={p_{i,j} } , i =1...N,j=1...N p=pi,j,i=1...N,j=1...N

p i , j = g ( f i , f j ) p_{i,j} = g(f_{i} ,f_{j} ) pi,j=g(fi,fj)

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

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

2.1 IPNN

IPNN的示意圖如下:
在這裡插入圖片描述圖2、IPNN

IPNN中p的計算方式如下,即使用內積來代表p_{i,j} :
g ( f i , f j ) = < f i , f j > g(f_{i} ,f_{j} ) = <f_{i} ,f_{j} > g(fi,fj)=<fi,fj>

所以,p_{i,j} 其實是一個數,得到一個p_{i,j} 的時間複雜度為M,p的大小為NN,因此計算得到p的時間複雜度為NNM。而再由p得到lp的時間複雜度是NND1。因此 對於IPNN來說,總的時間複雜度為NN(D1+M)。文章對這一結構進行了優化,可以看到,我們的p是一個對稱矩陣,因此我們的權重也可以是一個對稱矩陣,對稱矩陣就可以進行如下的分解:
W p n = θ n θ n T W_{p}^n = \theta ^n \theta ^{nT} Wpn=θnθnT

因此:
l p n = W p n ⊙ p = ∑ i = 1 n ∑ j = 1 n < f i , f j > = < ∑ i = 1 n δ i n , ∑ i = 1 n δ i n > l_{p}^n =W_{p}^n \odot p = \sum_{i=1}^n \sum_{j=1}^n <f_{i} ,f_{j} > = <\sum_{i=1}^n \delta_i^n, \sum_{i=1}^n \delta_i^n> lpn=Wpnp=i=1nj=1n<fi,fj>=<i=1nδin,i=1nδin>

δ i n = θ i n f i \delta _{i}^n = \theta _{i}^n f_{i} δin=θinfi

因此:
δ n = ( δ 1 n , δ 2 n . . . δ i n . . . δ N n ) ∈ R N × M \delta _{n} = (\delta _{1}^n, \delta _{2}^n...\delta _{i}^n...\delta _{N}^n ) \in R^{N\times M} δn=(δ1n,δ2n...δin...δNn)RN×M

從而得到:
l p = ( ∣ ∣ ∑ i δ i 1 ∣ ∣ . . . ∣ ∣ ∑ i δ i n ∣ ∣ . . . ∣ ∣ ∑ i δ i D 1 ∣ ∣ ) l_{p} = (||\sum_{i} \delta_{i}^1 ||...||\sum_{i} \delta_{i}^n ||...||\sum_{i} \delta_{i}^{D1} ||) lp=(iδi1...iδin...iδiD1)

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

2.2OPNN

OPNN的示意圖如下:
在這裡插入圖片描述
圖3、OPNN

OPNN中p的計算方式如下:
p i , j = g ( f i , f j ) = f i f j T p_{i,j} =g(f_{i} ,f_{j} ) =f_{i}f_{j}^T pi,j=g(fi,fj)=fifjT

此時 p i , j p_{i,j} pi,j 為MM的矩陣,計算一個 p i , j p_{i,j} pi,j 的時間複雜度為MM,而p是NNMM的矩陣,因此計算p的事件複雜度為NNMM。從而計算lp的時間複雜度變為D1 * NNM*M。這個顯然代價很高的。為了減少負責度,論文使用了疊加的思想,它重新定義了p矩陣:
p = ∑ i = 1 N ∑ j = 1 N f i f j T = f ∑ ( f ∑ ) T , f ∑ = ∑ i = 1 N f i p = \sum_{i=1}^N \sum_{j=1}^N f_{i} f_{j}^T = f_{\sum\nolimits} (f_{\sum\nolimits} )^T,f_{\sum\nolimits} =\sum_{i=1}^N f_{i} p=i=1Nj=1NfifjT=f(f)T,f=i=1Nfi

這裡計算p的時間複雜度變為了D1M(M+N)

參考文獻:
論文:Product-based Neural Networks for User Response Prediction

推薦系統中使用ctr排序的f(x)的設計-dnn篇之PNN模型

推薦系統遇上深度學習(六)–PNN模型理論和實踐

推薦好文: 深度學習在CTR預估中的應用

相關文章