深度學習推薦#

深度學習在推薦系統中的應用日益廣泛,能自動學習複雜的特徵交叉與序列模式。本章介紹幾個代表性模型。

為什麼深度學習能取代傳統 LR / FM?

  1. Embedding 把高維稀疏的離散特徵壓成低維稠密向量,效率與表達力兼顧
  2. MLP 自動學習任意階的特徵交叉,免去人工設計
  3. 端到端訓練讓特徵抽取與預測共同優化

後續所有模型本質都在玩這三件事的組合與變體。

Wide & Deep#

動機#

Wide & Deep 是 Google 2016 年提出的經典模型,結合記憶能力(Wide)與泛化能力(Deep)。

組件能力特點
Wide記憶(Memorization)記住歷史中已驗證的高頻組合
Deep泛化(Generalization)透過 embedding 推廣到沒見過的組合

模型結構#

                    Output
                      ↑
                   Sigmoid
                      ↑
        ┌─────────────┴─────────────┐
        │                           │
    Wide Part                   Deep Part
        ↑                           ↑
Cross-Product                   Hidden Layers
  Features                          ↑
        ↑                       Embedding
        │                           ↑
    ┌───┴───┐               ┌───────┴───────┐
 Raw Features            Categorical Features

Wide 部分#

y_wide = w^T [x, φ(x)] + b

φ(x) 是人工設計的交叉特徵,例如:gender=Female AND language=English

Deep 部分#

a^(0) = [e_1, e_2, ..., e_k]   # 拼接所有 embedding
a^(l) = ReLU(W^(l) a^(l-1) + b^(l))
y_deep = W^(L) a^(L-1) + b^(L)

聯合訓練#

P(Y=1|x) = σ(w_wide^T [x, φ(x)] + w_deep^T a^(L) + b)

Wide 與 Deep 同時訓練、共享梯度。

TensorFlow 實作
import tensorflow as tf

# Wide 部分
crossed_feature = tf.feature_column.crossed_column(
    ['gender', 'language'], hash_bucket_size=100)

# Deep 部分
embedding_columns = [
    tf.feature_column.embedding_column(
        tf.feature_column.categorical_column_with_hash_bucket(
            'user_id', hash_bucket_size=10000), dimension=32),
]

model = tf.estimator.DNNLinearCombinedClassifier(
    linear_feature_columns=[crossed_feature],
    dnn_feature_columns=embedding_columns,
    dnn_hidden_units=[256, 128, 64])

DeepFM#

動機#

Wide & Deep 的 Wide 部分還是要靠人工設計交叉。DeepFM 用 FM 取代 Wide,讓二階交叉也自動學

模型結構#

       Output
         ↑
      Sigmoid
         ↑
    ┌────┴────┐
    FM      DNN
    ↑         ↑
 Sparse    Dense
 Features Embedding
    │         │
    └────共享 Embedding 層────┘

公式#

y_FM  = <w, x> + Σ <v_i, v_j> x_i x_j
y_DNN = MLP(concat(embeddings))
ŷ     = σ(y_FM + y_DNN)

為什麼共享 Embedding 層很關鍵?#

FM 和 DNN 共用同一份 embedding,有三個好處:

  1. 參數量大幅減少,避免過擬合
  2. embedding 同時被低階(FM 二階)與高階(DNN)信號訓練,學得更好
  3. 不再需要 Wide & Deep 的人工交叉特徵,端到端

DeepFM 是工業界 CTR 預估的事實標準起點,後續的 xDeepFM、AutoInt 都是它的進化。

雙塔模型(Two-Tower)#

這是現代召回層的主流模型:把矩陣分解的「user / item 向量內積」搬到神經網路上做。前面 第 4 章 提的 ANN 召回流程在這裡才完整。

模型結構#

   User Tower            Item Tower
        ↑                     ↑
       MLP                   MLP
        ↑                     ↑
   Embedding             Embedding
        ↑                     ↑
   User Features         Item Features

       └──────── 內積 ────────┘
                  ↓
                Logit

訓練#

  • 正樣本:用戶實際互動的 (user, item)
  • 負樣本:In-batch 負採樣(同 batch 內其他 item)+ 全域熱門採樣
  • Loss:Sampled Softmax 或對比學習(InfoNCE)

線上部署#

1. 離線:Item Tower 算出所有 item 的 embedding,存進 ANN 索引
2. 線上:User Tower 即時算出 user embedding
3. 用 user embedding 在 ANN 索引中查 TopK item

雙塔的關鍵限制:user 與 item 在最後內積前不能交叉(否則無法離線預算 item embedding)。要做精細交叉只能交給後面的精排模型。

YouTube DNN#

系統架構#

YouTube 推薦系統分兩階段,是雙塔思想的早期工業實踐:

百萬級影片 → Candidate Generation → 數百影片 → Ranking → 數十影片
             (召回層)                        (排序層)

召回網路#

輸入特徵:

  • 用戶觀看歷史(影片 embedding 平均池化)
  • 搜尋歷史(query embedding 平均池化)
  • 地理位置、年齡、性別

模型結構:

[video embeddings]   → Average → ┐
[search embeddings]  → Average → ├→ Concat → MLP → User Vector
[demographic features] ─────────┘

訓練目標:

max Σ log P(w_t | U, C)

訓練用 softmax 分類器(負採樣),線上服務改為向量檢索(ANN)。

排序網路#

排序層特徵更豐富,且 YouTube 把「預測觀看時長」當目標,而非 CTR:

YouTube 發現:優化觀看時長比優化點擊率更能反映「真實滿意度」,且能抑制 clickbait(標題殺人)。這是「業務目標選擇」勝過「模型結構優化」的著名案例。

序列建模#

用戶的行為是有序的,後續行為依賴之前的行為。

用戶行為序列:[item_1, item_2, ..., item_t] → 預測 item_{t+1}

RNN / LSTM#

最早的序列模型,用門控機制處理長距離依賴。範例:歌單生成。

model = Sequential([
    Embedding(vocab_size, embedding_dim),
    LSTM(128, return_sequences=True),
    LSTM(64),
    Dense(vocab_size, activation='softmax')
])

Self-Attention / Transformer#

Attention(Q, K, V) = softmax(QK^T / √d_k) V

RNN 慢且難以平行化,現在序列推薦幾乎都改用 Transformer 系列:

  • SASRec(2018):把 Transformer Decoder 套到推薦序列
  • BERT4Rec(2019):用 Masked Language Model 思路訓練
  • BST(阿里):把 Transformer 接在排序模型前處理用戶行為序列

DIN(Deep Interest Network,阿里)#

不是所有歷史行為對當前候選物品都同等重要:看候選是球鞋時,歷史中的「球鞋瀏覽」比「咖啡瀏覽」更有意義。

給定候選 item_candidate:
attention_i = f(item_i, item_candidate)         # 計算相關度
user_repr   = Σ attention_i × item_i            # 加權聚合用戶歷史

DIN 的核心貢獻:用戶表示是 query-aware 的——換個候選物品,user 表示就跟著變。這擺脫了「用戶有一個固定 embedding」的假設。

LLM 時代的新範式#

前面的模型都是「打分 ➡️ 排序」的判別式思路。大模型興起後,推薦開始出現幾個新方向,目前多屬前沿、尚未成為工業標準,但值得認識。

語義 ID(Semantic ID)#

傳統用 item_id=12345 這種沒有語意的整數 ID,新物品一出現就得重訓才有 embedding。語義 ID 改用「能反映內容的離散 token」來表示物品:

  • 語意相近的物品,ID 在 token 空間中也相近。
  • 對沒見過的新物品,能靠語意泛化,緩解冷啟動。

生成式推薦#

不再「對每個候選逐一打分」,而是讓模型直接生成下一個物品的(語義)ID 或自然語言建議:

範式召回方式特點
判別式排序先召回候選,再逐一打分成熟、可控、易校正
生成式推薦直接生成目標物品省去候選生成瓶頸、能對更豐富上下文推理

檢索增強推薦(RAG 式)#

借用 RAG 的思路:先檢索與用戶興趣相關的物品與外部知識(商品屬性、評論摘要、知識圖譜),再讓模型在這些上下文上做排序或生成。當物品元資料豐富、或冷啟動嚴重時特別有用。

生成式做法有個傳統排序沒有的風險——幻覺:模型可能生成根本不存在的物品、或杜撰物品屬性。務必拿生成結果去比對物品目錄做事實校驗,詳見下節。

模型對比#

模型用途特點
Wide & DeepCTR 排序記憶 + 泛化,需人工 wide 特徵
DeepFMCTR 排序FM + DNN 共享 embedding
雙塔模型召回user / item 分開塔,靠 ANN
YouTube DNN召回 + 排序兩階段架構,目標是觀看時長
RNN / LSTM序列推薦已被 Transformer 取代多數場景
SASRec / BST序列推薦Transformer 結構,現代主流
DINCTR 排序Query-aware 的用戶表示

工程實踐#

Embedding 技巧#

技巧說明
預訓練用 Word2Vec、圖神經網路預訓練再微調
共享相關特徵共享 embedding(如同類目)
維度選擇經驗值 min(50, 類別數^(1/4) × 6)
特徵雜湊控制 vocabulary 上限,犧牲少量碰撞換工程簡潔

模型訓練#

# TensorFlow 分散式訓練
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
    model = build_model()
    model.compile(optimizer='adam', loss='binary_crossentropy')
    model.fit(dataset, epochs=10)

線上服務#

深度模型推理延遲較高,常用優化:

  • 模型剪枝、量化(INT8、FP16)
  • TensorRT、ONNX Runtime 等推理引擎
  • 特徵預計算與快取(user 特徵離線批次更新)
  • 召回 / 排序分離:召回靠雙塔 + ANN,排序才上深度模型

風險與限制#

深度(尤其生成式)模型威力強,但也帶來幾個必須正視的風險。

幻覺與事實性#

當系統用生成式模型來排序或解釋推薦時,可能推薦不存在的物品、誤植屬性、甚至杜撰用戶歷史。這與傳統「排錯順序」不同——是內容本身造假。防線:

  • 把生成的物品 ID 比對物品目錄,不存在就丟棄。
  • 對生成的描述,用真實元資料做事實校驗。

資料偏誤#

模型只會複製訓練資料裡的偏誤,且常被放大:

偏誤類型表現緩解
熱門偏誤熱門物品訊號多,馬太效應越推越熱多樣性正則、曝光去偏
群體偏誤少數族群 / 新用戶推薦品質明顯較差對弱勢群體上採樣
長尾覆蓋長尾物品訓練訊號稀少,幾乎推不出來內容特徵補強、探索策略

可解釋性#

深層網路是黑盒,用戶與監管都會問「為什麼推這個」。相較 FM / Wide & Deep 還能看特徵交叉,深度模型需額外手段:注意力權重視覺化(哪幾個歷史物品起了作用)、SHAP 局部解釋等。可解釋性提升信任、也利於合規(見 第 10 章)。

總結#

要點說明
共通基底Embedding + 自動交叉 + 端到端
Wide & Deep記憶 + 泛化的開山之作
DeepFMFM + DNN 共享 embedding,CTR 起點
雙塔模型現代召回主流,配合 ANN
YouTube DNN召回 + 排序兩階段,目標選觀看時長
序列建模RNN ➡️ Transformer(SASRec、BST)
DINQuery-aware 用戶表示
LLM 新範式語義 ID、生成式推薦、RAG 式檢索
風險與限制幻覺、資料偏誤、可解釋性
工程實踐Embedding、分散式訓練、推理優化

下一章:系統架構