跳到主要内容

生成与推荐 — 两个应用宇宙,以及附录怎么用

这一章讲三件事: 生成模型里的 GAN——「造假者与鉴定师对抗」怎么变成训练信号; 推荐系统——从矩阵分解到全线神经化; 原书两摞附录(数学/工具)各自该在什么时候回来查。 这是正课的收尾章:第 01-15 章是「怎么训」, 第 16-19 章是「拿去干什么」,这一章补上最后两块拼图。

1. GAN:把「真假难辨」变成训练信号

前面所有模型都在做判别:给输入,猜标签。生成模型要的是反过来: 学会数据本身的分布,能源源不断造出以假乱真的新样本。 难在「像不像」没法写成损失函数——逐像素平方差衡量不了「这是一张真脸」。

GAN(generative adversarial network,生成对抗网络,2014)的解法 是从统计学借一个老工具:two-sample test(双样本检验, 判断两组样本是否来自同一分布)。它不光拿检验做评估, 而是拿检验当训练信号:造一个二分类器专门区分真假, 生成器的目标就是把它骗过去1

两个网络对抗:生成器 G 从随机噪声 z(隐变量,通常取自标准正态) 造出假样本 G(z);判别器 D 对输入输出「为真的概率」, 训练它把真样本判 1、假样本判 0(交叉熵);生成器则努力让 D(G(z)) 接近 12。 合起来是一个 minimax 博弈:D 最大化分辨力,G 最小化 D 的分辨力3

主走查:全世界最低效的高斯参数估计器。 原书第一个 GAN 实验不生成图片,只拟合一个二维高斯—— 数据由「真」高斯生成,生成器是单层线性网络(它要学的恰好是均值与协方差, 作者自嘲这是「世界最低效的高斯参数估计器」), 判别器是三层 MLP4。训练循环(数字为演示编的,不是真实数值):

1. 真样本:从高斯抽一批点,比如 (1.2, -0.3)、(0.8, 0.5)… 标 1
2. 假样本:z ~ N(0,1) 过 G,初期得到 (-4, 7)、(5, -6)… 离真分布很远,标 0
3. 训 D:真判 1、假判 0 —— D 很快学会「离 (1,0) 近的是真」
4. 训 G:让 D(G(z)) 更接近 1 —— G 的参数朝「假点挪向 (1,0)」的方向更新
5. 回到 1:几百轮后假样本也落在 (1,0) 附近,D 再也分不出来(输出≈0.5)

均衡点很优雅:D 对一切输入输出 0.5(完全分不清), G 的分布与真分布重合。但注意:这不是普通的最小化—— 两个玩家各有自己的损失,训练可能振荡、模式可能坍缩(G 反复造同几种样本), 这是 GAN 难训的名声来源。

2. 生成器的梯度坑与 DCGAN 配方

直接按 minimax 式子训生成器有个坑:早期 D 太强,D(G(z))≈0, 生成器的损失 log(1−D(G(z))) 梯度几乎为零——恰恰在最需要学习的时候学不动。 补救:把生成器的目标换成 −log D(G(z)) (骗过时损失小),D 强时梯度反而大5

DCGAN(2015)是把 GAN 搬到图像上的经典配方6:

  • 生成器:噪声 z → 四层转置卷积(逐步放大到 64×64)+ BN + ReLU;
  • 判别器:四层普通卷积 + BN + leaky ReLU (负半轴保留一个小斜率 αx,治「dying ReLU」—— 神经元永远输出负值时梯度为 0、再也醒不过来)7

原书用它在宝可梦精灵图上学生成。 配方里的每一条(转置卷积上采样、BN 稳定、leaky ReLU 保梯度) 都是前面章节零件的复用——GAN 的「新」在训练框架,不在积木。

3. 推荐系统:从评分矩阵到矩阵分解

换第二个宇宙。推荐系统的数据是用户×物品的交互: 显式反馈是评分(1-5 星,主动但稀缺), 隐式反馈是点击、购买、观看(遍地都是,但只能猜—— 看过一部电影不代表喜欢它)8

最经典的模型是矩阵分解:把用户-物品评分矩阵 R 近似成两个低秩(内部维度 k 远小于行数列数的)矩阵的乘积 R≈PQᵀ—— 每个用户一根 k 维向量 p_u(他对各潜在特质的兴趣), 每个物品一根 q_i(它具备各潜在特质的程度), 预测评分就是点积,再加两个偏置项 (有的用户手松普遍打高分,有的物品质量差普遍低分)9第二处走查(数字为演示编的):设 k=2, p_u=(0.8, 0.1)(爱动作、一般文艺),q_i=(0.9, 0.2)(很动作), b_u=0.3(手松),b_i=−0.1(口碑略差), r̂ = 0.8×0.9 + 0.1×0.2 + 0.3 − 0.1 = 0.94—— 模型赌这位用户会给这部动作片接近 1 分(归一化后)。 潜在特质不用人命名,从评分里自己长出来,常常不可解释。

它的江湖地位来自 Netflix Prize:2006 年 Netflix 悬赏 100 万美元, 奖励比自家系统好 10% 的方案;Simon Funk 同年一篇博客首提矩阵分解, 最终大奖团队的混合方案里它是核心10

4. 推荐的神经化:从「猜分」到「排序」

矩阵分解是线性的,之后的模型一路把它神经化:

  • AutoRec:拿自编码器重构整行评分向量, 缺失的条目在输出层被「脑补」出来11;
  • NeuMF:点积太弱,换两条通路—— GMF(广义矩阵分解,元素乘后过神经层)抓线性交互, MLP(拼接用户、物品向量后过深网)抓非线性交互, 两路倒数第二层的表示拼接后出预测分12;
  • Caser:把用户最近的行为序列当「图像」, 用水平/垂直两种卷积抓短期模式(「牛奶+黄油→面粉」), 与长期兴趣在全连接层汇合13;
  • FM(因子分解机)与 DeepFM:特征丰富(广告 CTR 预估)时, FM 给每对特征学一个向量点积表示二阶交互, 并用代数变形把 O(d²) 的成对计算降到 O(d) 线性时间—— 高维稀疏特征也能用;DeepFM = FM(低阶)+ MLP(高阶)并联14

隐式反馈下目标也换了:没有评分可猜,要的是排序BPR(Bayesian personalized ranking)损失: 对每个用户,让「交互过的物品」排在「没交互过的」前面—— 训练数据是 (用户, 正例, 负例——用户没交互过、当作不喜欢的物品) 三元组, 直接优化相对次序而不是绝对分数15

5. 附录怎么用:两摞工具书

原书最后 19 节是附录,不是正课,定位是「卡壳时回来查」:

  • 数学附录(150-160):几何与线代操作、特征分解、单变量/多变量微积分、 积分、随机变量、最大似然、常见分布、朴素贝叶斯、统计、信息论。 典型场景:第 05 章的信息论一段(熵/交叉熵/KL)读得吃力, 就回头查「Information Theory」16;
  • 工具附录(161-168):Jupyter、各家云平台、选 GPU、 以及 d2l 工具库本身——本书所有「from scratch」与「concise」 两版实现共用的那套函数17

6. 作者的判断与证据

书里给了证据的: GAN 的 two-sample test 动机、minimax 式子、 生成器换目标的梯度理由;DCGAN 配方与 leaky ReLU 治 dying ReLU; 显式/隐式反馈之分;矩阵分解的 R≈PQᵀ+偏置与 Netflix Prize 始末; AutoRec/NeuMF/Caser/FM/DeepFM 的结构;FM 的线性时间变形;BPR 三元组。

经验判断: DCGAN 的每一味配料都是经验配方; 「排序损失比评分预测更适合隐式反馈」是实践共识而非定理。

判断(我们的,不是书里的): 把 GAN 放在 2026 年看,它的历史角色变了—— 图像生成的主流已让位给扩散模型(第 01 章作者已提过 diffusion 一线), 但 GAN 留下的思想资产比模型活得久:「学习信号可以由另一个学习器提供」 直接通向今天的 RLHF 奖励模型(学了人类偏好、替人给模型回答打分的模型)与各种对抗评测。 推荐系统一章则是「大模型前夜」的经典流水线快照—— 双通路、FM 这些设计在今天的工业界依然大量服役。 如果错,会错在: GAN 在特定领域(超分辨率、风格化、数据增广)仍是一线工具, 「让位」指的是图像生成的主流叙事,不是全部战场。

7. 边界与局限

  • GAN 只讲了原始式与 DCGAN;Wasserstein GAN、条件 GAN、扩散模型原书未展开;
  • 推荐只到 2017-2018 年的模型;序列推荐的 Transformer 化(SASRec 等)未讲;
  • 矩阵分解的冷启动只提了一句;
  • 附录是查阅性质,我们没有逐节拆;
  • 两个宇宙都以「能跑起来」为标准,生产级工程(服务、AB 测试)不在书里。

8. 可带走的

  1. GAN = 生成器造假、判别器鉴假;two-sample test 当训练信号;
  2. 生成器实际用 −log D(G(z)):D 越强梯度越大,治早期的梯度消失;
  3. DCGAN 配方:转置卷积+BN+ReLU 生成,卷积+BN+leaky ReLU 判别;
  4. 反馈分显式(评分)与隐式(行为);隐式反馈只能猜动机;
  5. 矩阵分解:R≈PQᵀ+用户/物品偏置;Netflix Prize 让它成名;
  6. 神经化路线:AutoRec 重构、NeuMF 双通路、Caser 抓序列、FM 二阶交互线性化、DeepFM 高低阶并联;
  7. 隐式反馈的目标从猜分换成排序:BPR 让正例排在负例前;
  8. 附录两摞:数学卡壳查 150-160,工具上手查 161-168。

9. 原文地图

主题原书章原文位置
two-sample test 当信号Generative Adversarial Networkstext/138-generative-adversarial-networks.txt:10(搜「two-sample test」)
生成器与判别器Generative Adversarial Networkstext/138-generative-adversarial-networks.txt:17(搜「generator network」) · text/138-generative-adversarial-networks.txt:24(搜「latent variable」)
minimax 与换目标Generative Adversarial Networkstext/138-generative-adversarial-networks.txt:30(搜「too small」) · text/138-generative-adversarial-networks.txt:37(搜「minimax」)
最低效高斯估计器Generative Adversarial Networkstext/138-generative-adversarial-networks.txt:43(搜「inefficient estimator」) · text/138-generative-adversarial-networks.txt:132(搜「3 layers」)
DCGAN 配方Deep Convolutional Generative Adversarial Networkstext/139-deep-convolutional-generative-adversarial-networ.txt:142(搜「transposed convolution layer」) · text/139-deep-convolutional-generative-adversarial-networ.txt:632(搜「four convolutional layers」)
leaky ReLUDeep Convolutional Generative Adversarial Networkstext/139-deep-convolutional-generative-adversarial-networ.txt:319(搜「dying ReLU」)
显式/隐式反馈Overview of Recommender Systemstext/140-overview-of-recommender-systems.txt:24(搜「explicit or implicit」)
矩阵分解与 Netflix PrizeMatrix Factorizationtext/142-matrix-factorization.txt:3(搜「Simon Funk」) · text/142-matrix-factorization.txt:12(搜「latent matrix」) · text/142-matrix-factorization.txt:16(搜「biases」)
AutoRecAutoRec: Rating Prediction with Autoencoderstext/143-autorec-rating-prediction-with-autoencoders.txt:5(搜「autoencoder」)
BPR 排序Personalized Ranking for Recommender Systemstext/144-personalized-ranking-for-recommender-systems.txt:9(搜「Bayesian personalized ranking」)
NeuMF 双通路Neural Collaborative Filtering for Personalized Rankingtext/145-neural-collaborative-filtering-for-personalized-.txt:3(搜「two subnetworks」)
Caser 序列感知Sequence-Aware Recommender Systemstext/146-sequence-aware-recommender-systems.txt:5(搜「Caser」)
CTR 任务Feature-Rich Recommender Systemstext/147-feature-rich-recommender-systems.txt:3(搜「click-through rate」)
FM 线性时间Factorization Machinestext/148-factorization-machines.txt:19(搜「linear time complexity」)
DeepFMDeep Factorization Machinestext/149-deep-factorization-machines.txt:10(搜「FM component and a deep component」)
数学附录:信息论Information Theorytext/160-information-theory.txt:1(搜「Information Theory」)
工具附录:d2l 库Utility Functions and Classestext/167-utility-functions-and-classes.txt:2(搜「d2lbook」)

Footnotes

  1. 出处:「Generative Adversarial Networks」第 10 段(text/138-generative-adversarial-networks.txt:10,搜「two-sample test」)。Goodfellow 等 2014;原文强调 GAN 与多数统计论文的区别是把检验「建设性」地当训练信号。

  2. 出处:「Generative Adversarial Networks」第 17 段(text/138-generative-adversarial-networks.txt:17,搜「generator network」)、第 20 段(判别器是二分类器)与第 24-26 段(text/138-generative-adversarial-networks.txt:24,搜「latent variable」)。

  3. 出处:「Generative Adversarial Networks」第 37 段(text/138-generative-adversarial-networks.txt:37,搜「minimax」)。

  4. 出处:「Generative Adversarial Networks」第 43 段(text/138-generative-adversarial-networks.txt:43,搜「inefficient estimator」)、第 112 段(单层线性生成器)与第 132 段(text/138-generative-adversarial-networks.txt:132,搜「3 layers」)。

  5. 出处:「Generative Adversarial Networks」第 30-34 段(text/138-generative-adversarial-networks.txt:30,搜「too small」)。原文:D 太强时原目标梯度太小,所以换成喂假样本但标 y=1 的目标。

  6. 出处:「Deep Convolutional Generative Adversarial Networks」第 6 段(text/139-deep-convolutional-generative-adversarial-networ.txt:6,搜「DCGAN」)与第 632 段(text/139-deep-convolutional-generative-adversarial-networ.txt:632,搜「four convolutional layers」)。

  7. 出处:「Deep Convolutional Generative Adversarial Networks」第 142 段(text/139-deep-convolutional-generative-adversarial-networ.txt:142,搜「transposed convolution layer」)与第 315-319 段(text/139-deep-convolutional-generative-adversarial-networ.txt:319,搜「dying ReLU」)。

  8. 出处:「Overview of Recommender Systems」第 22-30 段(text/140-overview-of-recommender-systems.txt:24,搜「explicit or implicit」)。

  9. 出处:「Matrix Factorization」第 12 段(text/142-matrix-factorization.txt:12,搜「latent matrix」)与第 16 段(text/142-matrix-factorization.txt:16,搜「biases」)。

  10. 出处:「Matrix Factorization」第 3-5 段(text/142-matrix-factorization.txt:3,搜「Simon Funk」)。2006 年博客首提;Netflix Prize 比 Cinematch 好 10% 得 100 万美元;BellKor 联队获奖,MF 是核心。

  11. 出处:「AutoRec: Rating Prediction with Autoencoders」第 5-7 段(text/143-autorec-rating-prediction-with-autoencoders.txt:5,搜「autoencoder」)。

  12. 出处:「Neural Collaborative Filtering for Personalized Ranking」第 3 段(text/145-neural-collaborative-filtering-for-personalized-.txt:3,搜「two subnetworks」)与第 30 段(拼接两路倒数第二层)。

  13. 出处:「Sequence-Aware Recommender Systems」第 5 段(text/146-sequence-aware-recommender-systems.txt:5,搜「Caser」)。

  14. 出处:「Factorization Machines」第 3、19-31 段(text/148-factorization-machines.txt:19,搜「linear time complexity」)与「Deep Factorization Machines」第 10 段(text/149-deep-factorization-machines.txt:10,搜「FM component and a deep component」)。CTR 任务见「Feature-Rich Recommender Systems」第 3 段。

  15. 出处:「Personalized Ranking for Recommender Systems」第 5 段(pointwise/pairwise/listwise)与第 9-11 段(text/144-personalized-ranking-for-recommender-systems.txt:9,搜「Bayesian personalized ranking」)。

  16. 出处:「Information Theory」第 1 段(text/160-information-theory.txt:1,搜「Information Theory」)。数学附录共 11 节(150-160)。

  17. 出处:「Utility Functions and Classes」第 2 段(text/167-utility-functions-and-classes.txt:2,搜「d2lbook」)。工具附录共 8 节(161-168)。