跳到主要内容

预测类应用 — 从去噪到打游戏,全是组装

这一章讲七类任务。 看起来五花八门,读法只有一个:每类都是 「任务结构 → 输出头 + 损失 + 复用第 09 章的哪种塔」的一次组装。 原书第 6 章(Prediction)覆盖从图像到语音到打游戏;本章按同一个次序走。

1. 顶层全景:组装公式

任务结构 输出头 损失 塔
────────────────────────────────────────────────────────────────
图 → 干净图 同尺寸图 MSE 卷积塔(可含注意力)
图 → 类 C 个 logits 交叉熵 ResNet / ViT
图 → 若干框+类 每格 4+C+1 通道 交叉熵+回归 多尺度卷积塔
图 → 逐像素的类 每像素 C 通道 逐像素交叉熵 先压后放+跳跃连接
声音 → 文字 逐 token logits 交叉熵 Transformer 编解码
图+文 → 配不配 相似度矩阵 双向交叉熵 ViT + GPT
游戏画面 → 动作价值 每动作一个 Q 值 贝尔曼自举 小卷积塔

图说:没有一种是新零件。新的是「任务怎么翻译成输出头和损失」。

2. 图像四连

去噪:学的是「最合理的平均值」

退化(噪点、模糊、压坏)的照片能修,靠的是图像统计结构的冗余: 花瓣的灰度图能自信地上色,因为花瓣的颜色分布高度可预测。 做法是训一个去噪自编码器(autoencoder——把输入压缩成浓缩表示 再重建回来的网络;「去噪」版从退化图重建干净图),训练对靠人工造: 干净图 → 程序加噪/转灰度/压尺寸 → paired 数据1

用 MSE 训练时,模型学到的是「给定退化图,所有可能干净图的平均」。 先记一个词:期望就是「平均意义下的值」;这个量因此叫条件期望,记号写作 E[X|X̃]。 这里藏着一个该记住的坑:当退化丢的信息补不回来时, 「所有可能干净图的平均」本身是一张不真实的、糊的图。模型没学错, 是「平均」这个目标本身的问题——这条会在第 11 章被「直接学分布再抽样」的方法绕开2

分类:塔 + logits + 交叉熵,外加数据增广

标准配方:ResNet 或 ViT 出 C 个 logits,交叉熵训练(第 03、09 章,不重复)。 真正的新零件是数据增广(data augmentation):对训练图做不改变「图里说的是什么」 (这层含义叫语义)的 随机变换——裁剪、缩放、镜像、调色——一张图当十张用。 它是把第 01 章「归纳偏置」手工注入数据的直接方式: 你声明「镜像过的猫还是猫」,模型就学到了对镜像不变3

目标检测:让每格自己报框(主走查)

任务升级:不止「图里有什么」,还要「在哪」。答案的形式: 若干边界框(四角坐标 (x₁,y₁,x₂,y₂)),各带一个类标4

SSD(Single Shot Detector,Liu et al. 2015)的组装非常体现本章主题, 拿一张图走一遍5:

卷积塔出一串表示: Z₁(38×38) → Z₂(19×19) → … → Z_S(1×1),分辨率递减
每格 (s,h,w) 管原图的一块区域(第 s 层的格子对应感受野盖住的方块)
每格配一个卷积头,输出 4+C+1 个数:
4 = 一个框的坐标修正
C = 各类的 logits
+1 = 「这格没东西」类
例:C=20 类,每格报 4 个不同长宽比的框 → 这格输出 4×25=100 个数

训练:每个真框按「尺寸归哪层、中心归哪格」指派给一个 (s,h,w),
它的损失 = 框坐标回归损失 + 类别交叉熵;
没分到框的格子只挨「该报无物」的交叉熵。

图说:检测 = 把「在哪」网格化,让每格各自回答「我这儿有没有、是什么、框多大」。

两个原书点出的实话6:检测的标注极贵(框要人一个个画), 所以都从分类预训练模型微调(第 05 章);而且——作者用了「surprisingly」—— 为分类学出的特征,拿来回归几何坐标也好用,尽管分类训练从没见过坐标。

语义分割:先压后放,跳跃连接救细节

最细的预测:逐像素分类(这像素属于路、车还是人)。难点在多尺度: 大物体要在粗分辨率层才看得全,边界细节只在细分辨率层才有。 标准结构:卷积一路压小(扩感受野),再用转置卷积或「按周围值填中间点」 (这叫插值)一路放回, 压缩前的同分辨率层和放大后的层用跳跃连接直连(第 07 章的第二份工作 在这里兑现),把细节从「必然经过的低分辨率瓶颈」旁边绕过去7

3. 语音识别:当成翻译来做

Whisper(Radford et al. 2022)的做法展示了一次漂亮的任务改写: 语音识别(speech recognition——把一段声音转成它对应的文字) = 「以声谱图为原文、以文字为译文」的翻译。 声谱图是把声音切成小时间片、每片算各频带能量得到的 T×D 张量—— 一种图像。于是:声谱图过几个 1D 卷积,进第 09 章的 Transformer 编码器; 解码器照旧逐 token 生成文字8

一个模型同时学多件事:英语转写、其它语言转写、翻译成英语、 甚至「这段不是语音」的检测——任务本身被编码进要生成的 token 序列里。 原书还点了一个概念上的真相:虽然目标是尽量确定的转写, 形式上它仍是「以声音为条件的文本采样——「采样」= 按算出的概率抽签, 不是查表」,即一种合成,不是「固定输出」的转换**。 这个观察直接通到下一章9

4. CLIP:把图和文拉进同一个向量空间(走查二)

CLIP(Contrastive Language-Image Pre-training,Radford et al. 2021) 回答的问题:能不能不为每个新任务重新训练,让模型直接理解 「这张图和这段文字说的是不是一回事」?

组装:图像编码器用一个 ViT,文本编码器用一个 GPT 改造的编码器 (在句尾挂一个「句完」token,取它最后一层的表示当全句向量)。 两个编码器各产出一条向量(512–1024 维)10

训练是本章第二个值得走查的机制:第 03 章对比损失的批量化。

这类「靠『谁该近、谁该远』的对比来学表示」的路数,行话叫对比学习 (contrastive learning)11:

一批 N 对(图, 文),比如 N=4:(图₁,文₁)…(图₄,文₄)
每个图向量 × 每个文向量 算余弦相似度(只看方向、不看长度的相似度:
两向量夹角的余弦,同向为 1、反向为 −1) → 一张 4×4 打分表:

文₁ 文₂ 文₃ 文₄
图₁ [ 0.31 0.02 0.05 0.01 ] ← 该让 (1,1) 最高
图₂ [ 0.03 0.28 0.04 0.02 ]
……(这些分数是为演示编的)

损失 = 行方向的交叉熵(每行该答对「我配第几列」)
+ 列方向的交叉熵(每列该答对「我配第几行」)

图说:一批 N 对里造出 N² 个对比。4 亿对图文这样训完,
「图和文说的是一回事」就变成「两条向量方向相近」。

训完得到一个超能力:零样本(zero-shot)分类——一个训练时从没见过的类, 不用补一个训练样本:把候选类写成文字(「一张猫的照片」「一张狗的照片」), 各自编码成向量,拿图的向量去比谁更近,谁近就归谁。 分类器是用语言临时写出来的12

还有个副产品:文字描述往往很细致(「一只橘猫趴在键盘上」), 模型被迫捕捉比「是不是猫」丰富得多的线索, 所以在专门刁难常规分类器的对抗性数据集上,它反而明显更抗造13

5. 强化学习:DQN 打游戏

最后一类跳出「有标准答案」的世界。强化学习(Reinforcement Learning, RL) 处理的是:一个做决策的「玩家」——行话叫智能体——在环境里选动作、拿奖励,要学的是「什么状态下 该做什么动作」——没有标准答案,只有事后算账14

形式化:状态 S_t、动作 A_t、奖励 R_t 排成时间序列;若状态满足 「知道现在就等于知道全部历史,过去不追加信息」——这个性质叫马尔可夫性—— 这套对象就叫马尔可夫决策过程(MDP)。 目标:找一个策略 π(状态→动作的映射),最大化折扣累计奖励 E[Σ γᵗR_t],γ 是 0 到 1 之间的折扣因子(未来的奖励打折)15

钥匙是贝尔曼方程:定义 Q(s,a) =「在 s 做了 a,之后都按最优策略玩, 能期望拿到的总折扣奖励」,则 Q 满足一个自指关系—— Q(s,a) = 即时奖励 + γ×「下一状态最好的 Q」。这个自指关系直接变成 训练目标:让参数化的 Q 网络去逼近这个等式,左右两边的差就是损失16

DQN(Deep Q-Network,Mnih et al. 2015)把它落到 Atari 游戏上17:

  • 状态 = 最近 4 帧画面叠起来(让马尔可夫性大致成立——单帧看不出球的速度);
  • Q 网络 = 两层卷积 + 一层全连接(一个小 LeNet),每个动作一个输出值;
  • 数据 = 自己玩、自己录,从录像里抽 (状态, 动作, 奖励, 下一状态) 做小批;
  • 一个关键技巧:算目标值时用的 Q 是一个锁定不动的副本 w̄——「冻结」就是 锁定不动、梯度不回传—— 否则「目标」跟着「预测」一起动,永远追不上,学不稳;
  • 探索靠 ε-greedy:以概率 ε 随机选动作,否则选当前最优—— 不随机就永远发现不了没试过的打法。

成绩单(原书数字):1000 万帧、约 8 天的游戏量,训完在 49 款游戏里 多数达到人类水平;学出的价值曲线还有可解释的形状—— Breakout(打砖块)里,快要打穿上层砖墙之前,状态价值已经提前飙升18

6. 作者的判断与证据

  • 「分类特征可直接服务几何回归」标了 surprisingly——实证意外,无解释;
  • 「Whisper 形式上是合成」是作者的概念澄清,不是性能声明;
  • CLIP 的 4 亿对、512–1024 维、对抗数据集表现,均为引用论文的实测;
  • DQN 的帧数、天数、49 款多数人类水平,是 Mnih et al. 2015 的原始结果;
  • 「检测标注极贵所以靠微调」是工程现实陈述,与第 05 章范式互证。

7. 边界与局限

  • 七类都是 2023 年视图;目标检测此后还有 DETR 系(直接用注意力做检测)等, 原书未收(补充,不在书里,来自通用知识);
  • RL 只讲了 DQN 一条线(价值派);策略梯度、演员-评论家等另一大半, 原书未覆盖;第 11 章「靠人打分再训一轮」用的正是本章没讲的那些;
  • 「零样本」不是免费午餐:候选类的文字写法影响结果,原书未展开;
  • 去噪的「平均必糊」在第 11 章由扩散模型正面回应。

8. 可带走的

  1. 预测应用 = 组装:先写清「答案的形状」,输出头、损失、塔就都定了;
  2. MSE 学的是条件期望——真值不唯一时,它注定给出糊的平均;
  3. 数据增广 = 把归纳偏置手工注入数据;
  4. 检测 = 网格化「在哪」:每格报框报类,外加「无物」类;
  5. 分割 = 先压后放 + 跳跃连接救细节;
  6. 语音、翻译、检测……都能改写成序列到序列,套同一台 Transformer;
  7. CLIP:对比损失批量化,把两个模态拉进同一空间;零样本 = 用语言现场写分类器;
  8. RL 的自举:贝尔曼方程把「价值」变成可回归的目标;冻结目标网络防追尾巴; ε-greedy 保探索。

9. 原文地图

主题原书章原文位置
去噪与 E[X|X̃] 的糊Predictiontext/25-fm-prediction.txt:16(搜「denoising autoencoder」) · text/25-fm-prediction.txt:33(搜「best average clean picture」)
分类与数据增广Predictiontext/25-fm-prediction.txt:51(搜「data aug」)
SSDPredictiontext/25-fm-prediction.txt:69(搜「Single Shot」) · text/25-fm-prediction.txt:121(搜「4 + C + 1」)
检测标注贵/分类特征迁移Predictiontext/25-fm-prediction.txt:126(搜「are costly to」) · :133(搜「Surprisingly」)
语义分割与跳跃连接Predictiontext/25-fm-prediction.txt:146(搜「se」) · :173(搜「strict downscaling-upscaling」)
WhisperPredictiontext/25-fm-prediction.txt:202(搜「sequence-to-sequence translation」) · :226(搜「formally the sampling」)
CLIPPredictiontext/25-fm-prediction.txt:238(搜「Contrastive Language-Image」) · :251(搜「400 million」) · :259(搜「N × N matrix」)
零样本Predictiontext/25-fm-prediction.txt:271(搜「zero-shot」)
MDP/贝尔曼Predictiontext/25-fm-prediction.txt:292(搜「Marko」) · :319(搜「Bell」)
DQN 细节与成绩Predictiontext/25-fm-prediction.txt:7(搜「Deep」) · :364(搜「constant copy」) · :375(搜「ten million frames」)

Footnotes

  1. 出处:「Prediction」§6.1,第 6–30 段(text/25-fm-prediction.txt:16,搜「denoising autoencoder」;:26,搜「degraded conditions」)。

  2. 出处:「Prediction」第 31–38 段(text/25-fm-prediction.txt:33,搜「best average clean picture」)。原文:「This quantity may be problematic when X is not completely determined by X̃, in which case some parts of the generated signal may be an unrealistic, blurry average」。

  3. 出处:「Prediction」§6.2,第 39–55 段(text/25-fm-prediction.txt:51,搜「data aug」)。

  4. 出处:「Prediction」§6.3,第 56–66 段(text/25-fm-prediction.txt:63,搜「bounding box」)。

  5. 出处:「Prediction」第 68–145 段(text/25-fm-prediction.txt:69,搜「Single Shot」;:115,搜「4 + C + 1」;图 6.1 题注 :93,搜「decreasing resolutions」)。

  6. 出处:「Prediction」第 126–136 段(text/25-fm-prediction.txt:126,搜「are costly to」;:133,搜「Surprisingly」)。

  7. 出处:「Prediction」§6.4,第 146–193 段(text/25-fm-prediction.txt:173,搜「strict downscaling-upscaling」;:180,搜「skip con」)。

  8. 出处:「Prediction」§6.5,第 194–224 段(text/25-fm-prediction.txt:202,搜「sequence-to-sequence translation」;:205,搜「spectrogram」)。

  9. 出处:「Prediction」第 226–229 段(text/25-fm-prediction.txt:228,搜「formally the sampling」)。

  10. 出处:「Prediction」§6.6,第 230–249 段(text/25-fm-prediction.txt:238,搜「Contrastive Language-Image」;:244,搜「end of sentence」)。

  11. 出处:「Prediction」第 251–268 段(text/25-fm-prediction.txt:252,搜「400 million」;:259,搜「N × N matrix」)。

  12. 出处:「Prediction」第 270–277 段(text/25-fm-prediction.txt:271,搜「zero-shot」)。

  13. 出处:「Prediction」第 279–284 段(text/25-fm-prediction.txt:281,搜「richer representation」)。引 ImageNet Adversarial(Hendrycks et al., 2019)。

  14. 出处:「Prediction」§6.7,第 288–308 段(text/25-fm-prediction.txt:292,搜「Marko」)。

  15. 出处:「Prediction」第 299–308 段(text/25-fm-prediction.txt:303,搜「return」)。

  16. 出处:「Prediction」第 310–331 段(text/25-fm-prediction.txt:319,搜「Bell」)。原书公式 6.1。

  17. 出处:「Prediction」第 332–373 段(text/25-fm-prediction.txt:7,搜「Deep」;:364,搜「constant copy」;:370,搜「greedy」)。

  18. 出处:「Prediction」第 375–378 段及图 6.5 题注(text/25-fm-prediction.txt:375,搜「ten million frames」;:358,搜「clearing a brick」)。