CTR 預估總結分享 -上篇-

作者:特邀資深煉丹師 Eric 陳健鋒

排版:十方

導語

在廣告、推薦系統 CTR 預估問題上,早期的完全規則方法被過渡到以 LR 爲代表的機器學習方法,爲了充分發揮組合特徵的價值,在相當長一段時間裏,業界熱衷於使用 LR + 人工特徵工程。但人工組合特徵成本高昂 ,在不同任務上也難以複用。2010 年 FM 因子分解方法的出現解決了人工組合特徵的困境,2014 年 Facebook 提出的 GBDT+LR 也給出了一種利用樹模型特點構建組合特徵的思路。不過隨着深度學習的崛起,2015 年以後,藉助非線性自動組合特徵能力的深度模型,開始成爲業內的主流。從經典 DNN 到結合淺層的 Wide&Deep,用於 CTR 預估的深度模型在近些年間百花盛開,各種交叉特徵建模方法層出不窮,Attention 機制也從其他研究領域引入,幫助更好的適應業務,提升模型的解釋性。在這進化路線之下,核心問題離不開解決數據高維稀疏難題,自動化組合特徵,模型可解釋。我們梳理了近些年 CTR 預估問題中有代表性的模型研究 / 應用成果,並對部分經典模型的實現原理進行詳細剖析,落成文字作爲學習過程的記錄。

目錄

  1. CTR 預估模型進化路線
  2. 從 LR 到 FM/FFM:探索二階特徵的高效實現
        1.1 LR 與多項式模型
        1.2 FM 模型
        1.3 FFM 模型
        1.4 雙線性 FFM 模型
  3. GBDT+LR:利用樹模型自動化特徵工程
  4. 深度模型:提升非線性擬合能力,自動高階交叉特徵,end-to-end 學習
        3.1 特徵的嵌入向量表示
        3.2 經典 DNN 網絡框架
        3.3 DNN 框架下的 FNN、PNN 與 DeepCrossing 模型
        3.4 Wide&Deep 框架及其衍生模型
            3.4.1 Wide 部分的改進
            3.4.2 Deep 部分的改進
            3.4.3 引入新的子網絡
  5. 引入注意力機制:提高模型自適應能力與可解釋性
        4.1 AFM 模型
        4.2 AutoInt 模型
        4.3 FiBiNET 模型
        4.4 DIN 模型
        4.5 DIEN 模型
  6. 總結

00

CTR 預估模型進化路線

01

從 LR 到 FM/FFM

1.1 LR 與多項式模型

LR(Logistic Regression)是機器學習中的一種線性分類模型,由於其簡單、高效、易並行的特點,在實際生產環境中被廣泛地應用。假設討論互聯網廣告場景下的廣告點擊率預估問題,給定年齡、性別、教育程度、興趣類目等用戶側特徵,上下文特徵,以及廣告 id,商品類型等廣告側特徵,預測用戶對於該廣告的點擊概率 p(label=1 | user, context, ad)。針對特徵的表示,通常做法是對各類特徵進行 one-hot 編碼,對於類目型或離散型數值特徵很好理解,對於連續型數值特徵,例如收入,一般會按區間分段方式將其離散化再進行 one-hot 編碼。最後被表示成 n 維的 0-1 特徵向量 x,如式 1,然後輸入到分類模型。作爲線性分類模型,LR 實際上可拆解成線性迴歸和邏輯變換兩部分。如式 2,w 是模型參數,利用 w 對特徵向量 x 求加權和,得到迴歸值 y,這是線性迴歸。然後再對 y 進行邏輯變換(sigmoid 函數),如式 3,得到點擊廣告(即 label 爲 1)的概率值。下文講述的主要是關於公式 2 的迭代演進。

從式 2 來看,每一維特徵是相互獨立地作用在迴歸值上,即每一維特徵與 label 的相關性是被單獨衡量的。而根據實際樣本數據觀察,我們會發現對某些特徵進行組合以後,組合特徵會與 label 有更強的相關性。例如用戶性別與廣告商品類型的組合,[性別 =“女性”,商品類型 =“粉底液”],或者 [性別 =“男性”,商品類型 =“剃鬚刀”],這些特徵元組對廣告的點擊有更強的正相關信號。要引入這種組合特徵信號,一種直觀的想法是多項式模型,這裏我們僅討論二階的情況,模型表達式如下

特徵 xi 和 xj 的兩兩組合用 xixj 表示,可見只有當 xi 和 xj 都爲非零值時,組合特徵(或稱交叉項)在多項式模型中才有意義。在真實業務場景下,樣本特徵通常高維稀疏,而組合特徵 xixj 的稀疏程度則更爲嚴重。在這種極度稀疏的情形下,模型很難準確地學習出參數 wij。說通俗點,就是巧婦難爲無米之炊。因爲特徵數據十分稀疏,模型在訓練樣本中從未見過有效的交叉項 xixj,無法學習這個交叉項和 label 之間的關係。而參數無法準確學習,必然會嚴重影響模型效果。

1.2 FM 模型

在多項式模型裏,高維稀疏數據使得交叉項參數學習非常困難,那麼有沒有可能通過低維稠密化解決?答案是肯定的,這就是矩陣分解的思想,我們借用 CMU 的 FM 課件 [1] 插圖來簡要說明

假設在電影推薦系統場景,系統只收集到少數的用戶電影評分樣本,R 是用戶對電影的評分矩陣,任務是預測用戶 i 對各部電影 j 的評分值 Rij,然後爲其推薦按評分值從高到低排序的前 N 部未觀影過的電影。矩陣分解的思想是,假設我們可以用 k 個維度來完全描述一部電影的所有屬性,那麼每部電影都可以表示成一個 k 維向量,對於用戶而言,對電影的每個維度會有不同的偏好程度,因此每個用戶也可以表示成一個 k 維向量。k 是系統超參數,以 k=2 作爲示例,[a1, b1] 是電影 1 的向量表示,[x1, y1] 是用戶 1 的向量表示,兩個向量的點積結果 r11 是用戶 1 對電影 1 的預測評分,而插圖是這一過程的矩陣計算形式。可以看出,nm 的評分矩陣 R 被分解成兩個矩陣的乘積,分解後的 nk 用戶矩陣和 k*m 電影矩陣是模型的參數,最後可通過最小化 Rij 的均方誤差進行求解。這裏的 k 維向量又被稱爲隱向量,一般地 k<<n,k<<m,於是我們通過低維稠密隱向量將用戶的偏好和 item(電影)的屬性聯繫了起來,因此這種方法也被稱爲隱因子模型(Latent Factor Model)。

那麼多項式模型的交叉項參數 wij 是否也可以通過隱向量分解來解決高維稀疏問題?這時候就是 FM 因子分解機(Factorization Machines)[2] 的橫空出世,它由 Konstanz 大學 Steffen Rendle 於 2010 年提出,模型方程如下

向量 vi,vj 分別是特徵 xi,xj 對應的低維稠密隱向量,隱向量長度爲 k(k<<n),<·, ·> 表示向量的點積運算。原來我們要求訓練數據中交叉項 xixj 有足夠多的共現樣本時,模型參數 wij 纔能有效學習,但這裏將參數矩陣 w 通過隱向量分解後,問題就迎刃而解了,因爲任意包含 xi 或 xj 的交叉項,都可用於參數向量 vi 或 vj 的學習。例如樣本 1(地域 =“北京”,商品類型 =“羽絨服”),樣本 2(地域 =“哈爾濱”,商品類型 =“羽絨服”),可以同時用於優化 “北京”、“哈爾濱”、“羽絨服” 對應的特徵隱向量表示。另外,模型的參數空間也從原始二項式模型的 O(n^2)壓縮到 O(kn)。

直觀上看,模型的計算複雜度是 O(kn^2),但經過如下對交叉項的優化,複雜度可以降低到 O(kn)。

經過化簡,FM 模型的最終表達式爲

梯度計算式爲

由於求和項  與 i 無關,可以在每輪迭代中對所有的 f 提前計算,因此每個參數的梯度計算和更新可以在 O(1) 時間內完成。模型總共有 kn+n+1 個參數,所以模型訓練的複雜度也是 O(kn)。

可見,FM 不僅通過矩陣分解的思想巧妙地解決了高維稀疏數據學習困難的問題,模型的參數空間以及模型的訓練、預測時間都是線性複雜度的,是一種非常高效優雅的模型。

1.3 FFM 模型

我們知道,不同特徵是按域(field)來劃分的,如下表的兩個樣本,“粉底液”、“剃鬚刀”屬於 “商品類型”field,“飛利浦”、“蘭蔻” 屬於 “品牌商”field,“男性”、“女性” 屬於 “性別”field。在 FM 模型中,所有特徵共享同一個隱空間(latent space),每一維特徵 xi 僅被映射成一個隱向量 vi 去計算與其他特徵的相互作用關係。這種做法實際上缺乏了對特徵域信息的利用,以商品類型“粉底液” 爲例,FM 模型的交叉項係數爲 <v 粉底液, v 蘭蔻 >,<v 粉底液, v 女性 >,它使用了同一個隱向量 v 粉底液去學習 “粉底液” 和“蘭蔻”以及 “粉底液” 和“女性”的隱含關係。而 “粉底液” 對於品牌商域特徵和對於性別域特徵的作用關係可能是不一樣的。

爲了將不同特徵域的差異信息顯式引入到模型中,臺灣大學阮毓欽(YuChin Juan)等人提出了域感知的改進版 FM,稱爲 FFM(Field-aware Factorization Machines)模型 [3]。模型的數學形式如下

其中,fj 是特徵 xj 所屬的 field,vi,fj 是特徵 xi 與特徵 xj 交叉時的隱向量。一次項和偏置項形式不變,以第一條樣本爲例,二次項在 FM 和 FFM 中的差異如下

FM 的二次項:

<v 粉底液, v 蘭蔻 >·1·1 + <v 粉底液, v 女性 >·1·1 + <v 蘭蔻, v 女性 >·1·1

FFM 的二次項:

<v 粉底液,品牌商, v 蘭蔻,商品類型 >·1·1 + <v 粉底液,性別, v 女性,商品類型 >·1·1 + <v 蘭蔻,性別, v 女性,品牌商 >·1·1

式中 1 爲特徵 xi(或 xj)的取值,在 FM 二次項中,每個特徵僅有一個隱向量來表示,而 FFM 二次項中,每個特徵有若干隱向量表示。可見,與 FM 相比,FFM 劃分了若干個隱空間,隱空間的數量等於 field 數量。在特定的 field 下,特徵被映射成不同的隱向量,這種特性被描述爲 Field-aware。反過來看,FM 實際上等價於 field 數量爲 1 的 FFM,是 FFM 的特例。

假設隱向量的長度爲 k,特徵 fields 數量爲 f,FFM 的參數空間大小爲 fkn+n+1。由於二次項不能化簡,FFM 的訓練和預測時間複雜度爲 O(kn^2)。

最後,關於 FM 和 FFM 的介紹,美團技術團隊的博客文章深入 FFM 原理與實踐 [5],非常清晰通俗,是很好的閱讀材料,入門進階必看👍。

1.4 雙線性 FFM 模型

FFM 的二次項參數量是 FM 的 fields 數量倍,實際應用中面臨內存消耗大的困境。爲此,任職於新浪微博的張俊林博士提出了新的解決方案,稱爲雙線性 FFM 模型 [4],模型方程如下

雙線性 FFM 的二次項和 FM 類似,仍然是將所有特徵映射到同一隱空間。但不同於直接對隱向量做點積,爲了增強模型的表達能力,雙線性 FFM 在 FM 基礎上增加了 k×k 參數矩陣 W。這裏有三種不同的類型,第一種是所有特徵共享一個矩陣 W,引入的參數量爲 k×k;第二種是一個 Field 一個 Wi,引入的參數量爲 f×k×k;第三種是一個 Field 組合一個 Wij,引入的參數量爲 f×f×k×k。

下表是雙線性 FFM 在 Criteo 和 Avazu 兩個公開數據集上的對比實驗,結果表明,在內存消耗遠小於 FFM 的情況下,雙線性 FFM 效果接近於 FFM,第三種類型的效果優於第一、第二種類型。一般情況下,在加入 LayerNorm 後,效果還有一定的提升。

附:不同模型的參數規模和時間複雜度對比:

02

GBDT+LR

在 FM/FFM 之外,2014 年 Facebook 提出的 GBDT+LR[6]是實現用模型自動化特徵工程的一項經典之作。GBDT+LR 是級聯模型,主要思路是先訓練一個 GBDT 模型,然後利用訓練好的 GBDT 對輸入樣本進行特徵變換,最後把變換得到的特徵向量作爲 LR 模型的輸入,對 LR 模型進行訓練。舉個具體例子,上圖是由兩顆子樹構成的 GBDT,將樣本 x 輸入,假設經過自上而下的節點判別,左邊子樹落入到第二個葉子節點,右邊子樹落入到第一個葉子節點,那麼兩顆子樹分別得到向量 [0, 1, 0] 和[1, 0],將各子樹的輸出向量進行 concat,得到的 [0, 1, 0, 1, 0] 就是由 GBDT 變換得到的特徵向量,最後將此向量作爲 LR 模型的輸入,訓練 LR 的權重 w0, w1,...。在此過程中,從根節點到葉子節點的遍歷路徑,就是一種特徵組合,LR 模型參數 wi,對應一種特徵組合的權重。

Facebook 的論文實驗證明了 GBDT+LR 有顯著的提升,相比僅使用 LR 或 Trees 模型,loss 降低了 3% 左右。

雖然如此,GBDT+LR 也有較明顯的短板,例如,

1)樹模型在節點分裂時需要遍歷特徵集,通常不適用於海量離散 ID 類特徵場景

2)引入級聯模型誤差,無法做 end-to-end 學習

03

深度模型

FM/FFM 等變體模型,本質上是在解決高維稀疏數據的特徵組合學習問題。解決問題的核心思路是,將高維空間轉變成低維,在低維空間內尋找特徵的稠密表示(這一過程也被稱爲 “低維稠密化”),最後利用低維稠密向量的交互運算達到特徵組合的目的。不過 FM 系列依然屬於線性模型,對於非線性數據的擬合還略顯不足,而 GBDT+LR 雖然是非線性建模,但它不適用於海量離線特徵場景,也無法進行端到端學習。在實際業務中,我們通常面對的是非線性數據,同時離散 id 類特徵也很重要,例如廣告 id,商品 id 等。因此,深度模型是另一種更好的解決方案。對非線性數據的擬合能力,一般體現在對高階特徵的建模能力上。深度模型通過全連接的多層感知器,能自動學習出特徵之間有價值的高階交叉信息,對高階組合特徵信號有很強的捕獲力,同時非常適合進行端到端建模。這一節將從深度模型中的特徵表示開始講起,然後介紹業界經典的 DNN 網絡結構,最後談論寬深度模型的演變和顯式高階組合特徵的設計原理。

3.1 特徵的嵌入向量表示

自 2013 年 Google Mikolov 的開山之作 word2vec 算法 [7] 提出以來,嵌入向量被廣泛應用於自然語言處理領域用於詞的表示。word2vec 將自然語言中的單詞從原來常規的 one-hot 表示變爲低維稠密的詞向量分佈式表示(distributed representation,或通俗理解爲低維實數向量),不僅有效降低了輸入詞維度,並且有趣的是經過訓練後的詞向量,在低維空間中有令人驚奇的幾何關係,例如 V 國王≈V 男人 -V 女人 +V 皇后。這種分佈式表示也被稱作 embedding(或嵌入向量),除了在自然語言處理上被大量使用,embedding 也快速地在其他適用深度學習的領域或任務上(例如推薦系統、廣告點擊率預估等)流行,用於物品、用戶或相關特徵的表示。

在神經網絡模型中,將特徵映射成 embedding 的操作(這種操作也叫做 embedding lookup)可以看作是對輸入層的原始 one-hot(或多值特徵對應的 multi-hot)特徵向量加上全連接線性變換,用數學符號可以表示成特徵向量 x 和參數矩陣 W 的乘法運算。在點擊率預估等任務上,一般以特徵 field 的 embedding 作爲神經網絡的 embedding 層輸出,對於單值特徵,field embedding 等於特徵的 embedding;對於多值特徵,field embedding 等於多個特徵 embedding 的求和結果。當然,求和是對多值特徵 embedding 的 sum pooling 操作,在具體應用上,也可以使用 mean/max/k-max pooling 代替。

在實際應用中,特徵 embedding 已經基本成爲解決高維稀疏特徵問題的通用操作。它和 FM 系列模型中的特徵隱向量是相似的,本質都是特徵的低維稠密表示,只是在不同的模型中,低維稠密特徵向量有不同的應用形式。在 FM 模型中,取兩兩特徵隱向量的點積作爲交叉特徵的權重;在深度模型中,將各特徵 field embedding 拼接後輸入到全連接層。

3.2 經典 DNN 網絡框架

當前業界通用的深度神經網絡模型結構,大抵可以劃分爲輸入層、embedding 層、拼接層、若干全連接層和輸出層。輸入層和 embedding 層,上文已經有過介紹,輸入層是按特徵 field 劃分的 one-hot(或 multi-hot)離散特徵向量表示,而圖中的 embedding 層實際包含 lookup 和 pooling 兩個操作。拼接層是對 embedding 層輸出的 m 個長度分別爲 di(i=1,2,...,m)的稠密向量拼成一個長度爲Σdi 的稠密向量。拼接後的向量經過若干全連接層(或稱多層感知器 MLP)後,最終在輸出層得到迴歸值或分類概率值。經典 DNN 網絡結構具有天然的自動學習交叉特徵信息的能力,然而從特徵 embedding 向量拼接和前向全連接的計算特點來看,這種能力更多是限於對隱式元素級(bit-wise)的交叉表示建模上。而經驗上,特徵間顯式的向量級交叉信息(vector-wise)具有更直接的描述特徵關係的能力,有助於使模型獲得更強的交叉特徵信號,降低模型學習難度。

3.3 DNN 框架下的 FNN、PNN 與 DeepCrossing 模型

在經典 DNN 框架下,FNN、PNN 以及 DeepCrossing 這三個是在推薦系統特徵交叉建模方面比較引人關注的模型。FNN(Factorisation-machine supported Neural Networks)[8]和 PNN(Product-based Neural Network)[9]是較早提出的引入了向量級交叉特徵信息的模型,它們分別由 Weinan Zhang 和 Yanru Qu 於 2016 年提出。DeepCrossing 模型 [10] 則是一種引入殘差網絡的改進 DNN 模型,由微軟在 2016 年提出。

FNN 模型

FNN 使用了預訓練的 FM 隱向量作爲 DNN 第一層全連接層的輸入,即左圖中的 z 層,表示如下,

starti 和 endi 分別是第 i 個 field 的首末特徵索引,W0i 是 (K+1)×(endi−starti+1) 維的參數矩陣,由 FM 模型預訓練得到。由於 FM 模型本身包含交叉特徵隱向量點乘,因此這裏認爲 FNN 模型實際上引入了向量級交叉特徵信息。對於上面的表達式,需要說明的是,FNN 中的 zi 下標 i 表示第 i 個特徵 field,而 FM 公式中的下標 i 表示第 i 個特徵。FNN 原文符號表示時假設每個特徵 field 是單值的,但對於多值特徵 field,FNN 模型仍然適用。

不過,由於 FNN 的初始 embedding 是由 FM 模型預訓練得到的,這樣的 embedding 初始化質量要取決於 FM 模型,引入了一些外部依賴。另外,FNN 的 z 層向量輸入到 MLP 全連接層,接受的是 “加法” 操作,而 PNN 論文作者認爲這樣的 “加法” 操作可能不如向量 “乘法” 操作能進一步的建模不同特徵 filed 之間的局部關係。

PNN 模型

PNN 在 embedding 層和 MLP 全連接隱層之間增加了一個乘積層(product layer),用於更直接的建模兩兩特徵的交互作用關係。乘積層包含 z 向量和 p 向量兩部分,z 向量由常數 “1” 向量和特徵 embedding 相乘得到,因此 z 向量部分實際相當於特徵 embedding 的直接拼接。p 向量部分是 PNN 的核心,它是兩兩特徵 embedding 進行 “乘法” 操作後的產物。論文作者給出了兩種 “乘法” 操作,分別是內積型乘法和外積型乘法,使用不同 “乘法” 得到的變體模型被分別命名爲 IPNN(Inner Product-based Neural Network)和 OPNN(Outer Product-based Neural Network)。論文在兩個公開數據集上對不同的模型進行了對比,從實驗結果看,PNN 模型,包括 IPNN、OPNN、PNN*(將 inner product 和 outer product 進行拼接),效果都要優於 FNN。另外也能看到,基於深度神經網絡的模型,效果普遍優於 LR、FM 線性模型,這說明非線性高階特徵建模有很重要的提升作用。

注:CCPM(Convolutional Click Prediction Model)是基於卷積神經網絡的點擊率預測模型,CIKM 2015。

最後,PNN 作者在論文中也提出了一些思考,他們認爲乘積層實質上是一系列的加法和乘法操作,文中具體的內積型和外積型只是其中兩種實施方案,實際上還可以定義其他更通用或更復雜的乘積層,以更充分的挖掘特徵間的交互關係。以邏輯電路爲例做類比,“加法” 操作類似於邏輯 “OR”,乘法操作類似於邏輯 “AND”,而對於 web 應用領域,這些經過人爲定義的用戶、item 類目型特徵,相比像 CV 領域的圖片像素等原始特徵,有更高抽象的概念和含義,因此他們認爲在特徵交互中引入乘法操作,與加法相輔相成,能更有效的建模這些高抽象特徵。

DeepCrossing 模型

DeepCrossing 模型結構如上圖,Stacking 層負責將各特徵 embedding 拼接成一個向量,隨後使用級聯的多個殘差單元來代替傳統 MLP。引入殘差單元是 DeepCrossing 的主要改進點,好處是可以使用更深的網絡層數,建模更高階的特徵,增強模型的表達能力。

FNN、PNN 和 DeepCrossing 模型都是在經典 DND 框架下演化而來的,它們都有效的提高了交叉特徵的建模能力。不過,這些模型都偏重於挖掘高階交叉特徵,對低階交叉特徵信息利用不足,下文介紹的 Wide&Deep 框架及其系列的衍生模型,將彌補這種缺陷,同時兼顧高階和低階交叉特徵。

3.4 Wide&Deep 框架及其衍生模型

對推薦系統的排序模型而言,定性地說,我們通常追求模型的記憶能力和泛化能力。一方面我們希望模型能準確記憶不同特徵組合對預測目標的影響,以便依照已有的用戶畫像以及用戶過去發生的行爲使系統獲得精準推薦能力,準確觸達用戶興趣。另一方面,希望模型擁有一定的泛化能力,對未見過的或極少出現的特徵組合,同樣給出良好的預測結果,提高推薦內容的多樣性。我們知道,線性模型以淺層形式直接學習稀疏組合特徵權重,對訓練數據中出現過的組合特徵具有很好的記憶能力。而深度模型,稀疏特徵被映射成低維稠密 embedding 向量,隨後在深層全連接網絡中獲得充分交互,對具體的特徵組合的 “記憶” 能力會減弱,但換來了更好的泛化效果。

基於這些想法,Google 工程師在 2016 年提出了一種線性模型和深度模型的聯合學習框架——Wide&Deep 模型 [11],期望通過聯合訓練的方式,同時獲得線性模型(Wide)的記憶能力和深度模型(Deep)的泛化能力,提高模型的預測準確性和多樣性。Wide&Deep 模型框架如上圖(中間)所示,模型的左側是輸入單元和輸出單元直接連接的線性模型,即方程形式是 y=wx+b,輸入單元接收的是未經嵌入的高維稀疏交叉特徵向量。模型的右側是一個 DNN 網絡,輸入層的稀疏特徵先映射成低維稠密 embedding,經過拼接後再饋入到隱層全連接網絡進行前向計算。最終模型以左側 Wide 部分輸出和右側 Deep 部分輸出的加權和,作爲預測事件發生的概率函數的變量,概率表達式如下

式中,Φ(x) 表示原始特徵 x 的交叉組合,a(lf) 是 Deep 部分最後一層的激活值。從表達式來看,如果去掉右側的 Deep 部分,模型將退化成一個 LR 模型。整體上,Wide&Deep 模型並不複雜,不過其提出的創新點更多在於 Wide 模型和 Deep 模型的聯合訓練上。相比傳統的 ensemble 模型集成形式,即各模型獨立訓練並且每個模型通常需要足夠大的參數規模以確保模型的表達能力,Wide&Deep 模型中,Wide 部分只需考慮加入少量的強交叉特徵,用很少的參數來彌補 Deep 模型記憶力的不足,實現更好的效果。

Wide&Deep 模型在 Google 應用商店的 App 推薦業務上進行了實際測試,相比僅使用 Wide 模型,使用 Wide&Deep 模型 App 安裝率相對提升了 3.9%,提升幅度比僅使用 Deep 模型也高 1%。除了在 Google 內部業務獲得應用,Wide&Deep 作爲一種新的模型框架,也逐漸在業內流行。並且在原來基礎上,Wide 部分和 Deep 部分被不斷優化改進,或者加入第三部分更精巧設計的子網絡,衍生出各種不同變體模型。

3.4.1 Wide 部分的改進

衍生 1:DeepFM 模型

Wide&Deep 模型中 Wide 部分和 Deep 部分的特徵輸入是不同的,Wide 部分的輸入還需要依賴人工特徵工程來挑選有效特徵,爲了減少特徵工程依賴,華爲工程師在 2017 年提出了 DeepFM 模型 [12]。DeepFM 仍然由 Wide 部分和 Deep 部分構成,不過 Wide 部分使用了 FM 來構建,利用 FM 自動學習二階交叉特徵的能力,代替需要人工交叉特徵的 LR。另外,Wide 部分和 Deep 部分的底層輸入特徵以及特徵 embedding 向量完全共享,能實現端到端學習。

衍生 2:Deep&Cross(DCN)模型

除了用 FM 代替 LR 以外,2017 年發表的 Deep&Cross Network(DCN)模型 [13],提出了一種新的 Cross 網絡來建模 Wide 部分,可以用更高效的方式實現更高階的交叉。

根據 DCN 的模型結構圖,我們可以把 DCN 的輸出端點,即 sigmoid 節點的輸入拆解成三個部分:由 cross 網絡貢獻的 gl(x0)(l 爲交叉網絡的層數),由 deep 網絡貢獻的 deep(x0) 和偏置項 blogit。這裏的 deep(x0) 和偏置項 blogit 不再說明,我們主要關心 cross 網絡 gl(x0) 是如何高效實現高階交叉的。下面我們先來看 cross 網絡的特徵交叉是怎麼實現的,然後再看爲什麼高效。

在 cross 網絡中,一個 cross layer 的運算操作如下,

爲了簡化計算,參考論文分析省略常數項,我們討論下面的交叉迭代公式

約定符號 xij,wij 的下標 i 表示第 i 層,上標 j 表示向量的元素索引,假設經過 embedding 拼接後的特徵向量維度爲 3,在這種約定下,第一層的輸入向量和參數向量分別爲 x0=[x01, x02, x03],w0=[w01, w02, w03]。根據上式,不難發現,對於層數爲 l 的 cross 網絡,可以實現的最高交叉階數爲 l+1。這裏給出 2 階 cross(l=1)和 3 階 cross(l=2)的計算示例

從 gl(x0) 的展開式,可以更直觀的看到每一個交叉項 x0ix0jx0k(通常的寫法是 xixjxk,下文迴歸這種寫法)最終都被分配到一個關於參數集 {wmi}m=0~l、{wmj}m=0~l、{wmk}m=0~l 乘積和的係數。以 l=2 時的交叉項 x1x2x3 爲例,它的係數是

                     (4)

對於任意階數的情況,gl(x0) 可以表示成如下形式

                        (5)

式中,x1,x2,...,xd 表示 d 維的輸入特徵向量,即 x0=[x1, x2, ..., xd];α1,α2,...,αd 分別是對應特徵項的冪數,|α|=Σαi;cα(w0, ..., wl) 是交叉項 x1α1x2α2...xdαd 的係數。DCN 論文給出了係數表達式 cα(w0, ..., wl) 的詳細數學推導,本文不再深入討論。這裏簡單以交叉項 x1x2x3 爲例,係數式(4)可以形式化爲  ,其中 Pα是特徵索引(1, 2, 3)的全排列集合。

至此可見,cross 網絡是以元素級 bit-wise 方式來建模高階交叉特徵,並且不同於 dnn 網絡,cross 網絡的高階交叉是顯式的。論文還指出,cross 網絡實際上是 n 階多元多項式的一種高效實現。

用 Pn(x) 表示 n 階多元多項式(multivariate polynomial),

                           (6)

式中,wα是交叉項的權重係數,對於 d 維特徵,要實現最高 n 階的交叉,需要的參數空間爲 O(dn),是 n 次方階複雜度。

觀察可知,cross 網絡 gl(x0),式(5),和 Pn(x),式(6),表達的是同樣的多項式,只是交叉項的係數不一樣。我們現在來看,cross 網絡 gl(x0) 實現的 n 階多元多項式需要多大的參數規模呢?前文說了,實現 n 階需要的網絡層數爲 n-1,對於 d 維特徵,cross 網絡需要的參數數量爲 d×(n-1)×2,因此空間複雜度爲 O(d),只需要線性複雜度。

cross 網絡參數複雜度的大幅降低,其實是得益於參數共享的思想,下面參考原著和 FM 作類比。在 FM 模型中,特徵 xi 用隱向量 vi 來表示,交叉項 xixj 的權重由內積 <vi, vj> 計算。而 cross 網絡中,特徵 xi 和參數集 {wki}k=0~l 關聯,交叉項 xixj 的權重由參數集

{wki}k=0~l 和 {wkj}k=0~l 計算。這二者背後都是參數共享思想,減小參數規模,同時解決數據稀疏帶來的權重學習困難問題,使模型學習更有效。

最後,實際上 cross 網絡的時間和空間複雜度都是關於輸入維度 d 的線性量,相對 deep 部分並沒有增加額外的複雜度,因此 DCN 模型在整體效率上是可以比擬傳統 DNN 模型的。

3.4.2 Deep 部分的改進

衍生 3:NFM/AFM 模型

對 Deep 部分的改進,Neural Factorization Machines(NFM)模型 [14] 是一個比較有效的方案,由 Xiangnan He 等人於 2017 年提出。NFM 作者認爲,經典 DNN 框架中的 concat 層只是把各特徵 embedding 拼接成一個向量,並沒有在底層利用好特徵交互信息,只能依賴後面的 MLP 全連接層來建模特徵之間的相互關係。但由於深度網絡有梯度消失、梯度爆炸和過擬合等問題,DNN 並不是很好優化,所以最終會導致模型效果有損失。所以 NFM 的主要改進點是,引入 Bi-Interaction Pooling 層,替代經典 DNN 的 concat 層,在底層增加足夠的特徵交互信息後,再饋入到 MLP 網絡做進一步的高階非線性建模。

NFM 改進後的 Deep 部分如上圖所示,Bi-Interaction Pooling 算子定義如下

其中 Vx = {x1v1, ..., xnvn} 表示特徵的 embedding 集合,符號 “⊙” 表示向量的哈達瑪積,即 [a1, a2, a3]⊙[b1, b2, b3] = [a1b1, a2b2, a3b3]。Bi-Interaction Pooling 將兩兩特徵 embedding 做哈達瑪積交互後,再通過求和的方式壓縮成一個向量。經過化簡後,上式的計算複雜度可以從 O(kn2) 優化到 O(kn):

加入 Wide 線性部分後,NFM 模型的完整表達式爲

介紹完 NFM,我們想在此處先簡單地把另一個也是對 Deep 部分進行改進的模型——AFM 模型(Attentional Factorization Machines)[15] 也引出場。這兩個模型出自同一個團隊,AFM 模型名字帶有 “Attentional”,給人的直覺 AFM 應該是在 NFM 的基礎上改進的,但實際上這兩個模型是各有所長的。不同於 NFM 將 Bi-Interaction Pooling 兩兩向量交互後直接(等權)求和壓縮成一個向量,AFM 引入了 attention 權重因子來對交互後的向量進行加權求和壓縮,增強了二階交叉的表達能力。不過,壓縮後的向量不再經過 MLP,而是直接一層 full connection 輸出到 prediction score,這就將模型限制在只表達二階交叉特徵,缺少更高階信息的建模。儘管如此,AFM 對特徵交互的 “attention-based”pooling 思路仍然非常有借鑑意義和應用價值,作爲基於注意力機制模型的一種,我們將在下一部分 “2.3 引入注意力機制:提高模型自適應能力與可解釋性”,再展開對 AFM 的介紹。

3.4.3 引入新的子網絡

衍生 4:xDeepFM 模型

xDeepFM 模型 [16],全稱 eXtreme Deep Factorization Machine,是微軟研究人員在 Deep&Cross(DCN)模型基礎上進行研究和改進後提出的。xDeepFM 的主要創新點是,在傳統 Wide 部分和 Deep 部分之外,提出了一種新的特徵交叉子網絡,Compressed Interaction Network(CIN),用於顯式地以向量級 vector-wise 方式建模高階交叉特徵。上圖是 xDeepFM 的模型網絡結構,模型輸出節點的數學表達式爲

式中,a 爲原始離散特徵向量(raw feature),xdnnk、p+ 分別是 DNN 和 CIN 模塊的輸出。不難得知,由於包含了線性模塊(Wide)、DNN 模塊(Deep)和 CIN 模塊,xDeepFM 模型是同時具備顯式和隱式特徵交叉的建模能力的。不過這裏同樣不再介紹線性和 DNN 模塊,下文主要討論子網絡 CIN 的由來、實現方式和特點,以及論文的實驗效果。

xDeepFM 論文認爲,Deep&Cross 中的 cross 網絡存在兩點不足,1)cross 網絡是限定在一種特殊形式下實現高階交叉特徵的,即 cross 網絡中每一層的輸出都是 x0 的標量乘積,αix0;2)cross 網絡是以 bit-wise 形式交叉的,即便同一個 field embedding 向量下的元素也會相互影響。

關於第 1 點,論文給出了證明過程

注:雖然 cross 網絡的輸出是 x0 的標量乘積,但並不意味輸出是 x0 的線性量,因爲標量係數αi 是與 x0 相關的,它並非僅由模型自身的參數來定義。

針對以上兩個缺點,xDeepFM 提出了新的解決方案,CIN。

論文給出的 CIN 實現原理圖如上,a 和 b 是 CIN 第 k 層的計算過程,數學形式是

式中,1≤h≤Hk,Wk,h 是一個 Hk-1×m 的參數矩陣,符號 “◦” 表示向量的哈達瑪積,即 [a1, a2, a3] ◦ [b1, b2, b3] = [a1b1, a2b2, a3b3]。每一層 Xk 都由前一層 Xk-1 和 X0 進行 vector-wise 的交互得到,如果用 T 表示網絡深度,那麼 CIN 最高可以實現 T+1 階特徵交叉。圖 c 是 CIN 網絡的整體架構,網絡的最終輸出 p+,是每層的 Xk 沿 embedding 維度 sum pooling 後再拼接的向量,維度是所有隱層的 feature map 個數之和,即Σi=1~THi。

其中,

初次讀 xDeepFM 論文,我就有一個困惑,爲什麼說 CIN 特徵交叉建模是 vector-wise 的呢?不知道大家是否會有同樣的疑惑,個人認爲論文裏的圖片和公式,並沒有很直觀的體現出 vector-wise。所以,如果我們把圖 a 和 b 所示的張量在三維空間裏旋轉一下,用另一種角度來看,或許能幫助更直觀的理解。

上面這張圖我們也把 CIN 第 k 層的計算拆解成兩步,第一步是對 X0 和 Xk-1 中的兩兩 embedding 向量做哈達瑪積,得到一箇中間張量 Zk,這一步實際就是對兩兩特徵做交互,所以稱爲 interaction。第二步是使用 Hk 個截面(類似 CNN 中的 “kernel”),每個截面對中間張量 Zk 從上往下掃,每掃一層計算該層所有元素的加權和,一個截面掃完 D 層得到 Xk 的一個 embedding 向量(類似 CNN 中的 “feature map”),Hk 個截面掃完得到 Hk 個 embedding 向量。這一步實際是用 kernel 將中間張量壓縮成一個 embedding 向量,所以我們稱此過程爲 compression。這也是整個子網絡被命名爲 Compressed Interaction Network(CIN)的原因。從這兩步計算過程可以看到,特徵交互是在 vector-wise 級別上進行的(哈達瑪積),儘管中間經過壓縮,每一個隱層仍然保留着 embedding vector 的形式,所以說 CIN 實現的是 vector-wise 的特徵交叉。

注:假設 CIN 每個隱層的 feature map 數量都爲 H,特徵 field 數量爲 m,那麼深度爲 T 層的 CIN,空間複雜度爲 O(mTH2),由於 m 和 H 通常不會很大,所以認爲這種複雜度是可接受的(對應的 DNN 模塊空間複雜度爲 O(mDH+TH2))。而 CIN 的時間複雜度爲 O(mH2DT),對應的 DNN 模塊時間複雜度爲 O(mHD+H2T),相比之下,時間複雜度上 CIN 稍有不利。

最後,給出論文中的實驗效果:

注:CIN 每個隱層的 feature map 數量設置爲 Criteo 200,Dianping/Bing News 100。

在 Criteo,Dianping,Bing News 三個數據集上,單獨交叉模塊 CIN 的效果要一致優於 FM、DNN、CrossNet(DCN 中的 Cross 模塊),結合線性和 DNN 模塊後的 xDeepFM 效果要顯著優於前文介紹的其他模型。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/7Rer2qC54CbBYkPrNmWZRA