一文看懂推荐系统:排序11:Deep Cross Network(DCN)
一文看懂推薦系統(tǒng):排序11:Deep & Cross Network(DCN)
提示:最近系統(tǒng)性地學(xué)習(xí)推薦系統(tǒng)的課程。我們以小紅書的場景為例,講工業(yè)界的推薦系統(tǒng)。
我只講工業(yè)界實(shí)際有用的技術(shù)。說實(shí)話,工業(yè)界的技術(shù)遠(yuǎn)遠(yuǎn)領(lǐng)先學(xué)術(shù)界,在公開渠道看到的書、論文跟工業(yè)界的實(shí)踐有很大的gap,
看書學(xué)不到推薦系統(tǒng)的關(guān)鍵技術(shù)。
看書學(xué)不到推薦系統(tǒng)的關(guān)鍵技術(shù)。
看書學(xué)不到推薦系統(tǒng)的關(guān)鍵技術(shù)。
王樹森娓娓道來**《小紅書的推薦系統(tǒng)》**
GitHub資料連接:http://wangshusen.github.io/
B站視頻合集:https://space.bilibili.com/1369507485/channel/seriesdetail?sid=2249610
基礎(chǔ)知識(shí):
【1】一文看懂推薦系統(tǒng):概要01:推薦系統(tǒng)的基本概念
【2】一文看懂推薦系統(tǒng):概要02:推薦系統(tǒng)的鏈路,從召回粗排,到精排,到重排,最終推薦展示給用戶
【3】一文看懂推薦系統(tǒng):召回01:基于物品的協(xié)同過濾(ItemCF),item-based Collaboration Filter的核心思想與推薦過程
【4】一文看懂推薦系統(tǒng):召回02:Swing 模型,和itemCF很相似,區(qū)別在于計(jì)算相似度的方法不一樣
【5】一文看懂推薦系統(tǒng):召回03:基于用戶的協(xié)同過濾(UserCF),要計(jì)算用戶之間的相似度
【6】一文看懂推薦系統(tǒng):召回04:離散特征處理,one-hot編碼和embedding特征嵌入
【7】一文看懂推薦系統(tǒng):召回05:矩陣補(bǔ)充、最近鄰查找,工業(yè)界基本不用了,但是有助于理解雙塔模型
【8】一文看懂推薦系統(tǒng):召回06:雙塔模型——模型結(jié)構(gòu)、訓(xùn)練方法,召回模型是后期融合特征,排序模型是前期融合特征
【9】一文看懂推薦系統(tǒng):召回07:雙塔模型——正負(fù)樣本的選擇,召回的目的是區(qū)分感興趣和不感興趣的,精排是區(qū)分感興趣和非常感興趣的
【10】一文看懂推薦系統(tǒng):召回08:雙塔模型——線上服務(wù)需要離線存物品向量、模型更新分為全量更新和增量更新
【11】一文看懂推薦系統(tǒng):召回09:地理位置召回、作者召回、緩存召回
【12】一文看懂推薦系統(tǒng):排序01:多目標(biāo)模型
【13】一文看懂推薦系統(tǒng):排序02:Multi-gate Mixture-of-Experts (MMoE)
【14】一文看懂推薦系統(tǒng):排序03:預(yù)估分?jǐn)?shù)融合
【15】一文看懂推薦系統(tǒng):排序04:視頻播放建模
【16】一文看懂推薦系統(tǒng):排序05:排序模型的特征
【17】一文看懂推薦系統(tǒng):排序06:粗排三塔模型,性能介于雙塔模型和精排模型之間
【18】一文看懂推薦系統(tǒng):特征交叉01:Factorized Machine (FM) 因式分解機(jī)
【19】一文看懂推薦系統(tǒng):物品冷啟01:優(yōu)化目標(biāo) & 評(píng)價(jià)指標(biāo)
【20】一文看懂推薦系統(tǒng):物品冷啟02:簡單的召回通道
【21】一文看懂推薦系統(tǒng):物品冷啟03:聚類召回
【22】一文看懂推薦系統(tǒng):物品冷啟04:Look-Alike 召回,Look-Alike人群擴(kuò)散
【23】一文看懂推薦系統(tǒng):物品冷啟05:流量調(diào)控
【24】一文看懂推薦系統(tǒng):物品冷啟06:冷啟的AB測試
【25】推薦系統(tǒng)最經(jīng)典的 排序模型 有哪些?你了解多少?
【26】一文看懂推薦系統(tǒng):排序07:GBDT+LR模型
【27】一文看懂推薦系統(tǒng):排序08:Factorization Machines(FM)因子分解機(jī),一個(gè)特殊的案例就是MF,矩陣分解為uv的乘積
【28】一文看懂推薦系統(tǒng):排序09:Field-aware Factorization Machines(FFM),從FM改進(jìn)來的,效果不咋地
【29】一文看懂推薦系統(tǒng):排序10:wide&deep模型,wide就是LR負(fù)責(zé)記憶,deep負(fù)責(zé)高階特征交叉而泛化
提示:文章目錄
文章目錄
- 一文看懂推薦系統(tǒng):排序11:Deep & Cross Network(DCN)
- Deep & Cross Network(DCN)
- 一、動(dòng)機(jī)
- 二、DCN網(wǎng)絡(luò)結(jié)構(gòu)
- 2.1 DCN整體結(jié)構(gòu)
- 2.2 cross network部分
- 我們來看個(gè)paddle的實(shí)現(xiàn),完整的代碼參見 DCN
- 三、DCN網(wǎng)絡(luò)一些參數(shù)設(shè)置
- 總結(jié)
Deep & Cross Network(DCN)
這篇文章是斯坦福和谷歌合作發(fā)表在ADKDD’17上的成果,
這篇paper的一作是斯坦福的數(shù)學(xué)&統(tǒng)計(jì)系的學(xué)生,
在谷歌實(shí)習(xí)時(shí),與谷歌的研究人員合作發(fā)表了這篇文章。
這篇文章的思想依然是推薦系統(tǒng)模型的永恒主題——
如何得到更有效的交叉特征,從而提高模型的表達(dá)能力。
其主要工作是針對(duì)wide&deep網(wǎng)絡(luò)中wide部分做了改進(jìn),
在wide&deep網(wǎng)絡(luò)中,wide部分是個(gè)簡單的線性模型,其交叉特征依然需要人工設(shè)計(jì),
而在DCN中設(shè)計(jì)了專門的cross網(wǎng)絡(luò)用于自動(dòng)學(xué)習(xí)交叉特征。
關(guān)于這個(gè)cross網(wǎng)絡(luò)目前存在一定的爭議,
比如在xdeepFM這篇論文中認(rèn)為DCN中cross網(wǎng)絡(luò)交叉的本質(zhì)
只是對(duì)輸入向量x 0 x_0 做了一個(gè)和x 0的相關(guān)的放縮。
我個(gè)人認(rèn)為,DCN中cross網(wǎng)絡(luò)還是有一定作用的,但這個(gè)交叉是bit-wise的,
并不像FM系列的vector-wise,
所以其交叉能力應(yīng)該不像FM系列這么強(qiáng)。
至于到實(shí)踐中,其效果還需要在具體的場景中來驗(yàn)證,
如果你的場景中目前還在用LR等模型,想要應(yīng)用深度模型,個(gè)人更推薦直接跨越到deepFM。
言歸正傳,我們來看看這篇文章,還是和以前的博客結(jié)構(gòu)差不多,從動(dòng)機(jī)、模型結(jié)構(gòu)、細(xì)節(jié)等入手。
一、動(dòng)機(jī)
這篇文章的動(dòng)機(jī)可以歸納為兩個(gè)點(diǎn):
普通的DNN雖然理論上可以逼近任意的函數(shù),
隨著網(wǎng)絡(luò)層數(shù)加深能學(xué)到任意的特征組合,
但實(shí)際上其很難有效的學(xué)到特征的二階交叉甚至三階交叉。
個(gè)人認(rèn)為那些懷抱著只要有足夠的數(shù)據(jù),其他的都交給DNN去辦想法的,
基本上很難取得令人滿意的效果。
引用本文作者在DCN V2論文中的一段話:
People generally consider DNNs as universal function approximators, that could potentially learn all kinds of feature interactions. However, recent studies found that DNNs are inefficient to even approximately model 2nd or 3rd-order feature crosses。
正因?yàn)镈NN無法有效的學(xué)到明顯的交叉特征,
所以大多還是人工手動(dòng)的做一些交叉特征,
比如wide&deep模型中wide部分的特征,
但顯然人工的去設(shè)計(jì),會(huì)面臨著諸多的痛點(diǎn):組合爆炸問題,需要先驗(yàn)的專家知識(shí)等。
基于以上兩個(gè)痛點(diǎn),這篇文章提出了DCN模型,
其包含兩個(gè)部分:
cross網(wǎng)絡(luò)和普通的dnn網(wǎng)絡(luò),
cross網(wǎng)絡(luò)能夠自動(dòng)的學(xué)習(xí)任意高階的交叉特征。
二、DCN網(wǎng)絡(luò)結(jié)構(gòu)
2.1 DCN整體結(jié)構(gòu)
這里直接拿原始論文中的網(wǎng)絡(luò)結(jié)構(gòu)圖,如下圖所示。
從圖中能夠比較清晰的看到DCN的結(jié)構(gòu)也是類似于wide&deep這種范式,
不同的是用了一個(gè)cross network替代了wide network,
右邊都是一樣的,用了普通的DNN。
所以我們接下來也是把重心放在cross network上。
2.2 cross network部分
整篇論文的核心,也將是本篇博客的重點(diǎn)筆墨的部分。
cross network的網(wǎng)絡(luò)結(jié)構(gòu)如下所示(引用DCN V2論文[2]中的的圖):
其中一層的計(jì)算是
再結(jié)合形式化的公式一起,感覺更好理解:
在實(shí)踐中顯然是不能按照這個(gè)公式去算得,因?yàn)閺?fù)雜度有點(diǎn)高。
我們稍微把這個(gè)公式變個(gè)形,
一來更方面計(jì)算,
二來也更加有利于理解及實(shí)現(xiàn)(作者在dcn v2這篇論文中也是這樣寫的):
我們來看個(gè)paddle的實(shí)現(xiàn),完整的代碼參見 DCN
def _cross_layer(self, input_0, input_x):"""input_0: Tensor(shape=[8, 247]), 8=batch_sizeinput_x: Tensor(shape=[8, 247])"""# input_x, Tensor(shape=[8, 247]) --> 8=batch_size# layer_w, shape=[247]# input_w, Tensor(shape=[8, 247])input_w = paddle.multiply(input_x, self.layer_w) # Tensor(shape=[8, 1])input_w1 = paddle.sum(input_w, axis=1, keepdim=True) # input_0=[8, 247], input_w1=[8,1]# broadcast --> [8, 247]input_ww = paddle.multiply(input_0, input_w1)input_layer_0 = paddle.add(input_ww, self.layer_b)input_layer = paddle.add(input_layer_0, input_x)# print("-----input_layer----", input_layer)return input_layer, input_w這里是用的數(shù)據(jù)集是Criteo的Display Advertising Challenge數(shù)據(jù)集,
26個(gè)類別特征,13個(gè)連續(xù)值特征,
這里類別特征embedding維度為9,因此x 0的維度為13+26*9=247。
一步步來看下這個(gè)代碼:
input_w = paddle.multiply(input_x, self.layer_w) 為一個(gè)哈達(dá)瑪積,即對(duì)應(yīng)元素相乘
input_w1 = paddle.sum(input_w, axis=1, keepdim=True) 然后做一個(gè)sum,這兩步的結(jié)果為一個(gè) 8 ? 1 8*18?1的矩陣:
上面的例子能夠比較清晰的看出cross network這種結(jié)構(gòu)是如何做到特征交叉的,
并且cross network的網(wǎng)絡(luò)層數(shù)決定了特征交叉的階數(shù)。
三、DCN網(wǎng)絡(luò)一些參數(shù)設(shè)置
通過看這些網(wǎng)絡(luò)結(jié)構(gòu)的一些超參數(shù)的設(shè)置以及訓(xùn)練時(shí)的一些小trick,
多多少少能對(duì)我們有一些幫助,下面來看看DCN的一些超參數(shù)的設(shè)置:
總結(jié)
提示:如何系統(tǒng)地學(xué)習(xí)推薦系統(tǒng),本系列文章可以幫到你
(1)找工作投簡歷的話,你要將招聘單位的崗位需求和你的研究方向和工作內(nèi)容對(duì)應(yīng)起來,這樣才能契合公司招聘需求,否則它直接把簡歷給你掛了
(2)你到底是要進(jìn)公司做推薦系統(tǒng)方向?還是純cv方向?還是NLP方向?還是語音方向?還是深度學(xué)習(xí)機(jī)器學(xué)習(xí)技術(shù)中臺(tái)?還是硬件?還是前端開發(fā)?后端開發(fā)?測試開發(fā)?產(chǎn)品?人力?行政?這些你不可能啥都會(huì),你需要找準(zhǔn)一個(gè)方向,自己有積累,才能去投遞,否則面試官跟你聊什么呢?
(3)今日推薦系統(tǒng)學(xué)習(xí)經(jīng)驗(yàn):DCN是對(duì)wide&deep網(wǎng)絡(luò)中wide部分做了改進(jìn)為cross network
總結(jié)
以上是生活随笔為你收集整理的一文看懂推荐系统:排序11:Deep Cross Network(DCN)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android studio使用开源项目
- 下一篇: 中山公园再添一座新地标,青岛首家丛林书吧