真正的高阶特征交叉:xDeepFM与DCN-V2
文 | 水哥
源 | 知乎
Saying
1. xDeepFM和DCN-V2是真正的高階交叉,和前面講的High Order Factorization Machine(HOFM)又有著千絲萬縷的聯系。某種簡化下,都能退化為HOFM的形式
2. 如圖
3. 推薦模型迭代的時候要平衡漲點和復雜度的關系,不然你開開心心參加launch review,準備向老板匯報fancy的技術,老板直接問上了以后會不會迭代投入都要乘2是不是多的機器錢你來出就尬住了
4. 數學給我們的東西是所有階交叉都加上會好,實踐需要的是哪些特征交叉,交叉到幾階性價比最高。這一點目前看來業界很少有分享,但是又很缺
本講是 【[從零單排推薦系統]】 的第13講,這一講的兩個工作都是真正兌現了高階交叉的。兩個工作存在共同點:
(1)都是將交叉結果當做網絡的feature map(看了下面的思路反編譯你會明白是為什么);
(2)毫不吝嗇的投入大量參數來賦予權重;
(3)同時結合了顯式交叉的部分和隱式交叉的部分(DNN)。所以其實這兩個工作都可以看成是以更容易操作的方式融合了HOFM。
但是在這一講中我們也要強調兩個實際問題:
(1)引入高階交叉的同時,也需要付出很高復雜度的代價。
(2)高階交叉本身是一個很有意思的方向,但是在實踐中可能存在效果不顯著,投入產出比不高的問題,操作時建議控制投入度。
xDeepFM[1]
根據DNN的非線性性質,我們可以認為DNN完成了一種隱式的交叉。而Deep&Cross Network是致力于在做顯式的操作。但就像上一講 水哥:推薦系統精排之鋒(6):Deep&Cross Network——高階交叉空許約 提到的,DCN的交叉最后剩下的是 乘以一個變換后的系數,這樣的交叉并不像我們預期中那樣,也無法變換出High Order FM的形式。
與DeepFM相比,xDeepFM還是保持了一部分是Deep一部分是Cross這樣的結構,但重點對Cross這部分做了結構上的修改。對于輸入特征,變為embedding之后可以全部拼接起來組成一個矩陣 ,其中, 是特征的個數, 是embedding的維度。第 層的feature map記為 ,但它的第一維現在不是 了,可以暫記為個,得到第層的操作可以表示為:
在這里寫法上和python代碼是類似的, 就表示取出這個矩陣的第 行。, , 分別是輸入矩陣, 層feature map和第 層feature map的行號索引。那么新的feature map中的每一行,都是先讓上一層的每一行,和每一個輸入embedding做element-wise交叉,再用一套獨有的 做變換后加起來融合的。
這篇文章的原圖不是很容易看懂,這里重新做一張,解釋上面的操作:
在圖中,每一個圓都表示一個元素。紅色方框框起來的部分是一個embedding。灰色是原始特征 ,藍色和黃色分別是 和。我們把灰色和藍色的每一行分別交叉后,乘以對應的 ,加起來得到最終 的第一行。
像這樣操作之后,每一層都會得到一個矩陣 ,先對特征那個維度( 對應的維度,也就是上圖中的水平方向)求和,得到一個向量(這一步是不是和內積很像?)。然后把每一層的這個向量都拼在一起,最后再用一層線性層+Sigmoid輸出即可。這種每一層特征都用的方法,和DenseNet也有一定相似之處。
思路“反編譯”
這個工作的思路我們可以這么理解(這是我“反編譯”作者們如何思考得到這個工作的過程):現在我需要完成真正的交叉,那么首先想到的,就是要讓兩個embedding做element-wise的乘法操作,如果我先做了兩階的,把結果存下來,再找一個新的來做,就可以得到三階四階等等一直遞推下去。因此我恰好把兩階段的結果當做網絡中間層的feature map,然后每次交叉都從原始輸入跳連過來,就可以做到這點。當然按照FM本身的定義,需要有一個各個交叉求和的過程這里也要保留。那各路交叉融合的時候,自然需要一個融合系數了,也就是方法中的 (如果稍作靈活處理的話,個人覺得也可以把 從矩陣改為向量,節省點復雜度)。按照這樣的思路梳理下來,是否更能理解這個工作?
交叉的這部分網絡按照原文的說明,稱作Compressed Interaction Network,從以下幾個方面,我們進一步加深對它的認識:
CIN有一個聲明是,它屬于vector-wise的交叉,而不是bit-wise的交叉。vector-wise的交叉指的是,在交叉的時候,整個vector都是一個整體,要么整個vector一起操作,要么不做任何操作。這一點是兌現了的,在上面的示意圖中,每次一行的紅色框都是同進退,要么一起做,要么不做。而與此相反的bit-wise操作就是vector內部可以拆開,有的元素和別的交叉了,有的還保持不變。如果把embedding當做輸入給DNN,下面的操作就是bit-wise的,而像上一講最后的DCN本質也是bit-wise的。
為什么要把每一層的feature map都直連到輸出上?就是為了讓高階的交叉和低階交叉都傳遞到輸出上。最后輸出環節就包含了各個階的交叉信息。
名字中的compressed(壓縮)主要體現在哪里?主要是在 這一層,與原始embedding作用后,通過加權求和,最終剩下有限個embedding拼接的矩陣。交叉的結果并不會無限膨脹。因此求和這里其實就是做了壓縮。比如我們可以令每一層的 都相同,而且是一個比較小的數字。
CIN的操作其實靠近了HOFM的主旨思想,xDeepFM的模型中存在任意階(在層數允許范圍內)的交叉,而且是以類似HOFM的方式,我們嘗試是否可以通過一些簡化退化到HOFM上?
如何從CIN還原HOFM的形式?
在上面的公式中,如果我們把 做成一個恒等矩陣乘以系數的關系就可以退化到近似的HOFM上,即 這里改為 可以讓最終的形式變為embedding連乘再乘上原特征的形式,因為xDeepFM中本來就有按元素求和,因此和HOFM的本意是一致的。但是要注意,中間層的embedding是存在壓縮的,也就是上面的不能遍歷所有特征,除非設定 。
DCN-V2:Improved Cross&Deep Network[2]
在WWW2021上,DCN的作者“卷土重來”,提出了一個船新版本V2。我們直接對比V1和V2的結構來理解DCN-V2。V1的結構如圖:
它的核心表達式為:
而V2的結構為:
它的表達式可以寫為:
這里的定義和上一講保持一致。可以看出,最大的變化是將原來的向量 變成了矩陣。而這一個改動就解決了前面最大的問題。一個矩陣 擁有足夠多的參數來保留高階交叉信息,或者挑選需要的交叉結果。在現在這個結構下,就可以還原出HOFM的形式了(這里留作思考題,讀者可以自行推一下),因此這個工作也兌現了真正的高階交叉。
要注意的一個DCN-V2和xDeepFM的很大區別是,DCN-V2仍然不是vector-wise的操作。根源在于,DCN-V2把所有特征的embedding拼起來一起輸入網絡,所以在 那里無法保持同一個特征的embedding同進退,同一段embedding自己內部也存在交叉。而模型的結構又要求 是個方形矩陣,這樣參數量就會非常大。因此作者引入了低秩分解來處理,即把變成兩個小矩陣的乘,即 , :
我們團隊也嘗試了DCN-V2,漲點是沒問題的。但是如果你的模型一開始是一個MLP為基準的模型,另外半邊就是憑空冒出來的,相當于MLP那邊的復雜度要翻倍。考慮到AUC漲的幅度有限,在大幅增加的復雜度面前不是很劃算,最后沒有上線。
高階交叉本身的必要性?
我們一直說怎么做高階交叉,但是回過頭來,沒有討論過的一個問題是在實踐中,高階交叉本身有多大的必要性?
一方面在文獻,或者我們自己的實踐中,沒有說明某個具體的高階,或者某種具體的形式是能夠確定漲點的。 比如我們希望有人能夠分享經驗,說把用戶,物料,環境信息三者交叉能漲點,或者這些大方面中的哪些具體特征交叉起來是最有利的。沒有這些經驗,高階的探索變的很不確定,如果只是說就把所有的東西大雜燴放進去,那么里面可能有很多浪費的計算,而且操作很不經濟。這是現在業界在實際操作中比較需要的地方。
另一方面,在實際迭代的過程中,不僅僅要說明有所提升,還要看復雜度,時延的變化情況,必須說明這些復雜度的提升,換來這些漲點是賺的。模型復雜了,并發能支持的請求更少,就得通過堆機器把這些并發補上。那這些機器租,買,維護也是要錢的。所以一般要算一個成本,如果時延顯著增加了,需要看看錢用在這里是不是劃算。現在業界很少聽說DCN有部署的,就像上面說的,大多數場景上都是MLP一上來就上了,后面都是增量式迭代(因為有主場優勢的存在,你想不增量可能會更難)。這時候加Cross Network還不敢動原來那部分,就導致復雜度急劇增大,對后續迭代,維護都是問題。
思考題
1.DCN-V2的操作不是vector-wise的,你認為這件事情的邊界是絕對的嗎?你認為對性能會有多大影響呢?
2.在DCN-V2里面可以做一些簡化,讓模型還原出HOFM的形式嗎?如果是的話該如何操作?
提示:可以做一個分塊對角矩陣,每一個分塊都是單位矩陣的變形
下期預告
推薦系統精排之鋒(8):工具人GBDT
往期回顧
1.召回 粗排 精排,如何各司其職?
2.拍不完的腦袋:推薦系統打壓保送重排策略
3.簡單復讀機LR如何成為推薦系統精排之鋒?
4.召回粗排精排-級聯漏斗(上)
5.召回粗排精排-級聯漏斗(下)
6.推薦系統精排:看阿里媽媽再試線性模型
7.推薦精排之鋒:FM的一小步,泛化的一大步
8.推薦中使用FNN/PNN/ONN/NFM優化特征交叉
9.聊聊推薦系統的高階特征交叉問題
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
?
[1] xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems,KDD,2018
https://arxiv.org/pdf/1803.05170.pdf
[2] DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-scale Learning to Rank Systems,WWW,2021
https://arxiv.org/pdf/2008.13535.pdf
總結
以上是生活随笔為你收集整理的真正的高阶特征交叉:xDeepFM与DCN-V2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解预训练模型、信息抽取、文本生成、知识
- 下一篇: 深度学习,路在何方?