《推薦系統》-PNN模型
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=Wzn⊙z
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=Wpn⊙z
在這裡,我們要使用到論文中所定義的一種運算方式,其實就是矩陣的點乘啦:
A
⊙
B
=
∑
A
i
,
j
B
i
,
j
A\odot B = \sum\nolimits A_{i,j} B_{i,j}
A⊙B=∑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^−(1−y)log(1−y^)
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=Wpn⊙p=∑i=1n∑j=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=1N∑j=1NfifjT=f∑(f∑)T,f∑=∑i=1Nfi
這裡計算p的時間複雜度變為了D1M(M+N)
參考文獻:
論文:Product-based Neural Networks for User Response Prediction
推薦系統中使用ctr排序的f(x)的設計-dnn篇之PNN模型
推薦好文: 深度學習在CTR預估中的應用
相關文章
- 【推薦系統篇】--推薦系統之訓練模型模型
- 《推薦系統》-DIN模型模型
- 推薦系統召回四模型之全能的FM模型模型
- 推薦系統FM系列文章(三)-- NFM模型模型
- 探索將大語言模型用作推薦系統模型
- 聊聊推薦系統,FM模型效果好在哪裡?模型
- 零基礎入門推薦系統-【排序模型+模型融合】排序模型
- 【推薦系統篇】--推薦系統之測試資料
- 搜狐:新聞推薦系統的CTR預估模型模型
- python 推薦系統Python
- 推薦系統概述
- 《推薦系統實踐》筆記 01 推薦系統簡介筆記
- 推薦系統論文之序列推薦:KERL
- 推薦系統一——深入理解YouTube推薦系統演算法演算法
- 【推薦系統篇】--推薦系統介紹和基本架構流程架構
- 推薦系統概念篇
- 雲音樂推薦系統(二):推薦系統的核心演算法演算法
- 【推薦演算法】推薦系統的評估演算法
- Mahout的taste推薦系統引擎(影片推薦案例)AST
- (讀論文)推薦系統之ctr預估-DeepFM模型解析模型
- 巨經典論文!推薦系統經典模型Wide & Deep模型IDE
- 推薦系統工程架構架構
- 《推薦系統》-Wide&DeepIDE
- 推薦系統 task 1 @datawhale
- 【推薦系統】GBDT+LR
- 如何構建推薦系統
- Spark推薦系統實踐Spark
- 推薦系統實踐 0x09 基於圖的模型模型
- 推薦系統實踐學習系列(三)推薦系統冷啟動問題
- Netflix推薦系統(Part two)-系統架構架構
- 推薦系統應該如何保障推薦的多樣性?
- 序列推薦系統的前世今生
- python酒店相似度推薦系統Python
- 推薦系統研究-筆記(1)筆記
- 推薦系統的評估方法
- PredictionIO:開源的推薦系統
- Netflix 推薦系統(Part Six)-To Be Continued
- 推薦系統技術概覽