日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

万字详述推荐系统经典模型DCN,DCN_v2,PNN

發(fā)布時(shí)間:2023/12/16 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 万字详述推荐系统经典模型DCN,DCN_v2,PNN 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

公眾號:ChallengeHub(持續(xù)分析機(jī)器學(xué)習(xí),數(shù)據(jù)挖掘,推薦系統(tǒng),NLP方面的知識(shí))

前言:

之前文章介紹了特征交叉的一些方式和幾種推薦系統(tǒng)中關(guān)于特征交叉的一些論文。上篇文章中主要介紹了wide&deep,deepFM,和NFM模型。其中wide&deep,和deepFM模型的特征交叉就一層,屬于淺度的特征交叉,NFM可以實(shí)現(xiàn)更深的特征交叉。這篇文章將介紹兩種經(jīng)典的推薦模型,它們可以實(shí)現(xiàn)更深度的特征交叉。分別為DCN,DCN_v2和PNN。

1:DCN

論文名稱:Deep & Cross Network for Ad Click Predictions
論文鏈接:https://arxiv.org/pdf/1708.05123.pdf
論文結(jié)構(gòu)

模型結(jié)構(gòu)解讀:
(1):x0=[xembed,1T,...xembed,kT,xdenseT]x_0=[x_{embed,1}^{T},...x_{embed,k}^{T},x_{dense}^{T}]x0?=[xembed,1T?,...xembed,kT?,xdenseT?]
x0x_0x0?代表的就是將輸入特征處理之后進(jìn)行concat起來的結(jié)果。每篇論文其實(shí)對于特征的處理形式都不一樣,這篇論文是將類別的embedding,然后數(shù)值型的直接輸入,將所有特征處理后拼接成一個(gè)大的embedding就是x0x_0x0?
(2)右邊結(jié)構(gòu)h1=ReLU(Wh,0x0+bh,0)h_1=ReLU(W_{h,0}x_0+b{h,0})h1?=ReLU(Wh,0?x0?+bh,0)
這就是一個(gè)普通的DNN結(jié)構(gòu),激活函數(shù)采用的是ReLu并沒有什么特殊之處。
(3)左側(cè)結(jié)構(gòu)xl+1=x0xlTwl+bl+xlx_{l+1}=x_0x_l^{T}w_l+b_l+x_lxl+1?=x0?xlT?wl?+bl?+xl?
這個(gè)就是DCN的核心之處了,x0x_0x0?是一個(gè)維度為ddd的列向量,wlw_lwl?dld_ldl?同樣是一個(gè)ddd維度的向量,是模型的參數(shù)。公式可視化之后是這樣的:

(4)上方結(jié)構(gòu):p=σ([xL1T,hL2Twlogits])p=\sigma([x_{L_1}^{T},h_{L_2}^{T}w_{logits}])p=σ([xL1?T?,hL2?T?wlogits?])
將左側(cè)和右側(cè)得到的兩個(gè)embedding直接concat起來成為一個(gè)大的embedding,經(jīng)過一個(gè)淺層的神經(jīng)網(wǎng)絡(luò)輸出一個(gè)一維數(shù)字,再經(jīng)過一個(gè)sigmoid函數(shù)就是最終的結(jié)果了。

2:DCN_V2

論文名稱:DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-scale Learning to Rank Systems
論文地址:https://arxiv.org/pdf/2008.13535v2.pdf
看論文的名字,就知道該模型與DCN很相似了,該模型確實(shí)基于DCN的一個(gè)改進(jìn)模型。與DCN最大的區(qū)別是特征交叉的地方有一點(diǎn)點(diǎn)地差異

仔細(xì)一對比的話就是將DCN中一維向量wlw_lwl?改變成了二維矩陣WWW。除此之外,這篇論文中還提出了DCN的兩種結(jié)構(gòu):

一篇論文肯定不會(huì)這么簡單嘛,工作量這么少的論文也發(fā)不了頂會(huì)呀。于是作者們又對DCN進(jìn)行了改進(jìn),原因是DCN_V2中計(jì)算的復(fù)雜度太高了。

模型改進(jìn):

改進(jìn)的地方同樣來自于特征交叉的地方,論文中說的讓人有點(diǎn)不能理解,我們直接看修改的部分吧:

(1):由于將特征embedding之后再拼接起來成了一個(gè)ddd維的向量,這個(gè)ddd太大了,而矩陣WWW的維度是d×dd\times dd×d。所有導(dǎo)致這個(gè)計(jì)算的復(fù)雜度就很高了,于是我們可以W=UVTW=UV^{T}W=UVT,類似于矩陣分解的方法,將維度比較大的d×dd\times dd×d矩陣分解成兩個(gè)維度小一些的d×rd\times rd×r矩陣。其中rrr遠(yuǎn)小于ddd這種方法叫做矩陣的低階分解,和SVD有點(diǎn)類似。這也我們的交叉公式就發(fā)生了變化:
原來 :xl+1=x0⊙(Wlxl+bl)+xlx_{l+1}=x_0\odot(W_lx_l+b_l)+x_lxl+1?=x0?(Wl?xl?+bl?)+xl?
現(xiàn)在:xl+1=x0⊙(Ul(VlTxl)+bl)+xlx_{l+1}=x_0\odot(U_l(V_{l}^{T}x_l)+b_l)+x_lxl+1?=x0?(Ul?(VlT?xl?)+bl?)+xl?
參數(shù)的數(shù)量和運(yùn)算的復(fù)雜度都有效的變低了。

(2):收到今年比較受歡迎的 Mixture-of-Experts (MoE)的影響,作者將這種結(jié)構(gòu)也放入了交叉中之中。于是我們的交叉的公式又變?yōu)榱艘韵碌男问?#xff1a;
xl+1=∑i=1KGi(xl)Ei(xl)+xlx_{l+1}=\sum_{i=1}^{K}G_i(x_l)E_i(x_l)+x_lxl+1?=i=1K?Gi?(xl?)Ei?(xl?)+xl?
Ei(xl)=x0⊙(Uli(VliTxl)+bl)E_i(x_l)=x_0\odot(U_{l}^i(V_{l}^{iT}x_l)+b_l)Ei?(xl?)=x0?(Uli?(VliT?xl?)+bl?)
其中GiG_iGi?就是一個(gè)門函數(shù),可以是sigmoid或者是softmax。

(3):增加非線性。
Ei(xl)=x0⊙(Uli?g(Cli?g(VliTxl))+bl)E_i(x_l)=x_0\odot(U_{l}^i \cdot g(C_{l}^{i}\cdot g(V_{l}^{iT}x_l))+b_l)Ei?(xl?)=x0?(Uli??g(Cli??g(VliT?xl?))+bl?)
注:論文中用的是點(diǎn)乘,但是從淺夢大佬的代碼中用的是正常的矩陣乘法。我也認(rèn)為是矩陣乘法,否則最后Uli?g(Cli?g(VliTxl))U_{l}^i \cdot g(C_{l}^{i}\cdot g(V_{l}^{iT}x_l))Uli??g(Cli??g(VliT?xl?))的維度對不上,如果是矩陣乘法的話,那么CliC_{l}^{i}Cli?的維度則為r×rr\times rr×r

改進(jìn)的后模型據(jù)作者所說在降低了30%的復(fù)雜度的情況下,保留了模型的精度,模型可以稱之為:the mixture of low-rank DCN(DCN-Mix)。

大佬的代碼地址:https://github.com/shenweichen/DeepCTR-Torch/blob/bc881dcd417fec64f840b0cacce124bc86b3687c/deepctr_torch/layers/interaction.py#L464-L537

靈魂問答

這篇文章比較有趣的是關(guān)于實(shí)現(xiàn)部分是采用問答的形式展開的,總共有5個(gè)問題,同樣也給出了答案。擔(dān)憂翻譯問題于是我附上了英文。(文中對mDCN應(yīng)該就是DCN-Mix的意思,命名有點(diǎn)混亂,希望我沒弄錯(cuò))
(1):什么時(shí)候特征交互學(xué)習(xí)方法會(huì)比基于relu的DNN更有效?
(When would feature interaction learning methods become more efficient than ReLU-based DNN)

從論文后續(xù)的答案中,作者從三個(gè)方面回答了該問題(不過更像是回答怎樣可以提升DCN_v2的效果)
a:提升交叉的復(fù)雜度
文中使用了三種二維的交叉方法(xix_ixi?代表的是某個(gè)特征),按照交叉的復(fù)雜程度有以下三種。

然后就是三種交叉的結(jié)果:

b:DCN中各個(gè)部分的作用

c:提升交叉的階數(shù)

總結(jié):總而言之,即使使用更深更大的網(wǎng)絡(luò),ReLU 在捕獲顯式特征交叉(乘法關(guān)系)方面效率低下。 當(dāng)交叉模式變得更復(fù)雜時(shí),精度會(huì)大大降低。 DCN 準(zhǔn)確地捕獲了簡單的交叉模式,但無法捕捉更復(fù)雜的交叉模式。 另一方面,DCN-V2 對復(fù)雜的交叉模式保持準(zhǔn)確和高效

(2):如果去除掉DNN結(jié)構(gòu)的話,各種交叉方法的表現(xiàn)是怎么樣的?
(How does the feature-interaction component of each baseline perform without integrating with DNN)


總結(jié):高階方法表現(xiàn)出優(yōu)于二階方法的性能。 這表明高階交叉在該數(shù)據(jù)集中是有意義的。在高階方法中,交叉網(wǎng)絡(luò)取得了最好的性能,與 DNN 相比略勝一籌。

(3):DCN-Mix的于基礎(chǔ)的DCN_v2相比表現(xiàn)如何,我們應(yīng)該這么在模型的精確度和模型的消耗之間進(jìn)行平衡(以DCN為例)。
(How does the proposed mDCN approaches compare to the baselines? Could we achieve healthier trade-off between model accuracy and cost through mDCN and the mixture of low-rank DCN)


總結(jié):在所有方法中,DCN-V2效果最好,同時(shí)相比性能不差DCN-Mix 進(jìn)一步降低了模型消耗,在模型性能和效果之間取得了更好的平衡。(作者主要對比了DCN_v2和DCN-Mix與其它模型之間的效果)

(4):DCN-Mix參與與模型效果之間的關(guān)系
(Q4 How does the settings in mDCN affect model quality)


上圖左邊展現(xiàn)的是DNN模型和Cross NetWork在不同網(wǎng)絡(luò)層數(shù)下的效果。右側(cè)是展現(xiàn)在不同的矩陣維度情況下的效果。(這個(gè)matrix rank就是在改進(jìn)模型中Wl,r×dW_l,r\times dWl?,r×drrr的大小,也就是從高維分解為低維中,低維的數(shù)量)。

(5):DCN-Mix是否捕捉到了重要的特征交叉?模型的解釋性如何?
(Q5 Is mDCN capturing important feature crosses? Does the model provide good understandabilit)


作者直接從實(shí)驗(yàn)結(jié)果回答了該問題。左側(cè)是DCN_v2中的WWW權(quán)重矩陣,右側(cè)顯示的特征交叉,顏色越深代表者交叉越重要,從兩張圖的重合程度可以看出還是學(xué)到了一些重要的顯示交叉特征,比如gender-UserId和Movied-UserId。

作為近年來推薦系統(tǒng)中的SOTA模型,這篇論文還是有很多啟發(fā)的。DCN的改進(jìn),高階矩陣分解等操作還是很有學(xué)習(xí)的意義。并且實(shí)驗(yàn)階段給我們展示了很多擴(kuò)展性的工作。

PNN

論文地址:https://arxiv.org/pdf/1611.00144v1.pdf
模型結(jié)構(gòu)

首先看模型結(jié)構(gòu),從下面往上面看,第一層input就到embedding就不需要再解釋了吧。
(1)z\boldsymbol{z}zzzz就是簡單地將所有feature地embedding直接復(fù)制過去。
其中z=(z1,z2,...zN)===(f1,f2,...fN)\boldsymbol{z}=(\boldsymbol{z_1},\boldsymbol{z_2},...\boldsymbol{z_N})===(\boldsymbol{f_1},\boldsymbol{f_2},...\boldsymbol{f_N})z=(z1?,z2?,...zN?)===(f1?,f2?,...fN?).fi.\boldsymbol{f_i}.fi?就是特征iii的embedding。

(2) p\boldsymbol{p}ppi,j,i=1...N,j=1...Np_{i,j},i=1...N,j=1...Npi,j?,i=1...Nj=1...N,其中pi,j=g(fi,fj)p_{i,j}=g(\boldsymbol{f_i},\boldsymbol{f_j})pi,j?=g(fi?,fj?),可以看出pi,jp_{i,j}pi,j?就是特征i,ji,ji,j之間交叉的結(jié)果。至于怎么交叉,我們稍后再說。

(3)z,pz,pz,p層到達(dá)L1L_1L1?我感覺是我看這篇論文沒有想到的。
在我看來,應(yīng)該就是將z\boldsymbol{z}z展開,再將p\boldsymbol{p}p展開,然后concat成一個(gè)一維的向量,然后再經(jīng)過一層網(wǎng)絡(luò)得到L1,但其實(shí)并不是這樣的。我們介紹L1的構(gòu)成:
l1=relu(lz+lp+b1)\boldsymbol{l}_1=relu(\boldsymbol{l}_z+\boldsymbol{l}_p+\boldsymbol{b}_1)l1?=relu(lz?+lp?+b1?)

可以看出lz,lp,b1\boldsymbol{l}_z,\boldsymbol{l}_p,\boldsymbol{b}_1lz?,lp?,b1?三個(gè)一維的向量加起來再經(jīng)過relu得到的L1。與我看模型結(jié)構(gòu)時(shí)的猜想并不一致。

首先我們來介紹lz\boldsymbol{l}_zlz?的構(gòu)成:
lz=(lz1,lz2,...lzD1)\boldsymbol{l}_z=(l_z^1,l_z^2,...l_z^{D_1})lz?=(lz1?,lz2?,...lzD1??)
lzn=Wzn⊙z=∑i=1N∑j=1M(Wzn)i,jzi,jl_z^n=\boldsymbol{W}_z^n\odot \boldsymbol{z}=\sum_{i=1}^N\sum_{j=1}^M(\boldsymbol{W}_z^n)_{i,j}z_{i,j}lzn?=Wzn?z=i=1N?j=1M?(Wzn?)i,j?zi,j?可以看出,Wzn\boldsymbol{W}_z^nWzn?時(shí)一個(gè)維度與z\boldsymbol{z}z完全相同的矩陣,最后lz\boldsymbol{l_z}lz?的維度有多少(D1D_1D1?),則Wzn\boldsymbol{W}_z^nWzn?的個(gè)數(shù)有多少。

同理我們可以得到:
lpn=Wpn⊙p=∑i=1N∑j=1N(Wpn)i,jpi,jl_p^n=\boldsymbol{W}_p^n\odot \boldsymbol{p}=\sum_{i=1}^N\sum_{j=1}^N(\boldsymbol{W}_p^n)_{i,j}p_{i,j}lpn?=Wpn?p=i=1N?j=1N?(Wpn?)i,j?pi,j?。但是在求pi,jp_{i,j}pi,j?處作者提出了兩種方法。

第一種是IPNN


這種就是最常見的交叉了,pi,j=<fi,fj>=fiTfjp_{i,j}=<\boldsymbol{f_i},\boldsymbol{f_j}>=\boldsymbol{f_i^T}\boldsymbol{f_j}pi,j?=<fi?,fj?>=fiT?fj?
受到FM模型的啟發(fā),將Wpn\boldsymbol{W_p^n}Wpn?轉(zhuǎn)化為兩個(gè)向量。即:Wpn=θnθnT\boldsymbol{W_p^n}=\boldsymbol{\theta^n}\boldsymbol{\theta^n}^TWpn?=θnθnT
因此原來的等式就可以變?yōu)?#xff1a;
lpn=Wpn⊙p=∑i=1N∑j=1NθinθjnT<fi,fj>=<∑i=1Nδin,∑i=1Nδin>l_p^n=\boldsymbol{W}_p^n\odot p=\sum_{i=1}^N\sum_{j=1}^N{\theta_i^n}{\theta_j^n}^T<\boldsymbol{f_i},\boldsymbol{f_j}>=<\sum_{i=1}^N\delta_i^n,\sum_{i=1}^N\delta_i^n>lpn?=Wpn?p=i=1N?j=1N?θin?θjn?T<fi?,fj?>=<i=1N?δin?,i=1N?δin?>
此時(shí):δin=θinfi\delta_i^n={\theta_i^n}\boldsymbol{f_i}δin?=θin?fi?。可得lpn=(∣∣∑i=1δi1∣∣,...∣∣∑i=1δin∣∣)l_p^n=(||\sum_{i=1}\delta_i^1||,...||\sum_{i=1}\delta_i^n||)lpn?=(i=1?δi1?,...i=1?δin?)。引入這種方法與FM的初衷也是一樣,為了降低計(jì)算的復(fù)雜度,同時(shí)也可以減少參數(shù)的數(shù)量。

本來計(jì)算的時(shí)間復(fù)雜度為:O(N2(D1+M)O(N^2(D_1+M)O(N2(D1?+M)(NNN是特征的數(shù)量,MMM為特征embedding的維度,D1D_1D1?為最后lp\boldsymbol{l_p}lp?的維度)。由于pi,jp_{i,j}pi,j?只需要計(jì)算一次,時(shí)間復(fù)雜度并不是直接的O(N2D1M)O(N^2D_1M)O(N2D1?M)。通過降維后時(shí)間復(fù)雜度為O(ND1M)O(ND_1M)O(ND1?M)

這種通過矩陣分解的方式減少參數(shù)數(shù)量,降低計(jì)算的復(fù)雜度在推薦模型中應(yīng)用還是很多的,上面的DCN-M同樣也應(yīng)用到了。

第二種是OPNN


這種交叉比較少見,pi,j=fifjT\boldsymbol{p_{i,j}}=\boldsymbol{f_i}\boldsymbol{f_j}^Tpi,j?=fi?fj?T。在IPNN中p_{i,j}是一個(gè)數(shù)字,但是在OPNN中,則是一個(gè)矩陣,pi,j\boldsymbol{p_{i,j}}pi,j?的維度為M×MM \times MM×M。此時(shí)p\boldsymbol{p}p再也不是根據(jù)pi,j\boldsymbol{p_{i,j}}pi,j?,而是這樣的:

p=∑i=1N∑j=1NfifiT\boldsymbol{p}=\sum_{i=1}^N\sum_{j=1}^N\boldsymbol{f_i}\boldsymbol{f_i}^Tp=i=1N?j=1N?fi?fi?T
總結(jié)來說,有N個(gè)特征,那么就會(huì)交叉N的平方次,每次交叉都會(huì)形成一個(gè)矩陣,將N的平方和矩陣相加起來就可以得到p\boldsymbol{p}p了。直觀來說就是將上面那個(gè)正方形的矩陣層層疊加,最后得到一個(gè)相同大小的矩陣。該矩陣的維度同樣為M×MM\times MM×M。此時(shí)計(jì)算的復(fù)雜度達(dá)到驚人的O(N2D1M2)O(N^2D_1M^2)O(N2D1?M2)

同樣上面的公式還是可以進(jìn)行優(yōu)化的:
p=f∑f∑T\boldsymbol{p}=\boldsymbol{f_{\sum}}\boldsymbol{f_{\sum}}^Tp=f?f?T

其中f∑=∑iNfi\boldsymbol{f_{\sum}}=\sum_i^N\boldsymbol{f_i}f?=iN?fi?。然后直接采用公式lpn=Wpn⊙pl_p^n=\boldsymbol{W}_p^n\odot \boldsymbol{p}lpn?=Wpn?p就可以得到我們要的結(jié)果。

以上就是關(guān)于推薦系統(tǒng)中經(jīng)典模型DCN,DCN_v2,PNN模型的詳細(xì)介紹,介紹得很詳細(xì),對于我自己來說相當(dāng)于重新仔細(xì)地學(xué)習(xí)了一遍,收獲不淺,更加了解了模型中的具體細(xì)節(jié)。同時(shí)也希望可以給有興趣學(xué)習(xí)推薦模型的一些朋友有一定的幫助。

此外,喜歡數(shù)據(jù)挖掘,推薦系統(tǒng),nlp的朋友可以關(guān)注我們公眾號,然后回復(fù)加群添加我好友。

總結(jié)

以上是生活随笔為你收集整理的万字详述推荐系统经典模型DCN,DCN_v2,PNN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。