跳到主要内容

那句话可以被学出来,也可以拿测试图当场学(CoOp / TPT)

这一章讲三件事: 手工写那句话有多不靠谱;把那几个词换成可训练的数之后发生了什么; 以及为什么「换环境」这件事必须拆成两级台阶来看——第一级它扛住了,第二级它塌了。 它是全书的转折点:前七章讲「怎么造一个模型」,从这一章起全书都在讲 「一个已经训好的模型摆在这儿,怎么把它的本事取出来」这一章也是后面三章共同的靶子:第 09、10、11 章都拿它当对照。

1. 顶层全景:同一张纹理图,四种做法

本章的主走查: 一张织物纹理的照片,正确类名是 banded(条纹状)。

① 手工写模板 「a photo of a banded texture.」
人靠试错去改这句话。改一个冠词值 5 个点。

② 换成可训练的数 「[V]₁[V]₂[V]₃[V]₄ banded」
那 4 个位子不再是词,而是 4 串可以被梯度调的数。
16 张样例训完:某些数据集上比手工高 45 个点。

③ 把这套数搬去别的数据集
在纹理集上学的 → 拿到花卉集 → 只剩 33.41%
而什么都不学是 61.75%。**塌了。**

④ 换个思路:不用训练集,用这张测试图本身
把它随机裁剪 63 次 + 原图 = 64 张
→ 只留最自信的 10%(约 6 张)
→ 让这 6 张的平均预测更「确定」
→ 只走一步 → 这一张图的专属提示词

图说:这四步是本章的四个小节(第 3、4、6、8 节)。
**所有数字都是书里的真数**,来源分别是原书第 5 章和第 6 章。

2. 先看现象:改一个冠词,值 5 个点

第 01 章说过,类名写成一句话过一遍文本编码器,那串数就是分类器。 那么问题来了:这句话该怎么写?

书里给的例子直白得让人不舒服1:

在某个通用物体数据集上结果
把类名前面加一个「a」准确率涨了 5 个点以上
在纹理数据集上,把上下文换成与任务相关的「texture」明显提升
再调整句子结构(只留「texture」当上下文)还能再涨

「靠人反复试着改这句话」这件事,业内叫提示工程(第 04 章第 ⑩ 堵墙里点过它的名)。

书里对它的评价有三条,一条比一条重1:

  1. 要花大量时间——只能靠试错,在一个留出来的验证集上一遍遍改、一遍遍看;
  2. 需要先验知识——你得先知道这个任务的特点,最好还了解语言模型的脾气;
  3. 即使调很久,也不保证是最优的。

注意第 3 条的分量:它意味着「我调不出更好的」和「不存在更好的」分不开。 这是把这件事交给机器的直接理由。

3. 第一招:把那几个词换成可以被训练调整的数

做法

原来的提示词是「a photo of a [类名]」。 现在把前面那几个词换成 M 串可训练的数——每串的长度和一个真实的词变成的那串数一样 (第 02 章说过,CLIP 是 512 个数;这种「一个词对应的一串数」叫词嵌入), 但它不对应词表里的任何一个词2

原来: a photo of a [banded]
└────── 4 个真实的词 ──────┘

现在:[V]₁ [V]₂ [V]₃ [V]₄ [banded]
└── 4 串各 512 个数,随机初始化 ──┘

训练时怎么调它们: 拿几张标注图,让模型去分类; 分错了就沿着梯度(往「错得少一点」的方向)反推回来, 一路穿过文本编码器,只更新那 4 串数2

关键的一句:CLIP 的全部参数都冻住,一个数都不改。 要调的只有那 4×512 个数——和整个模型的几亿个参数相比,这是极小的一块。 这个做法的名字叫提示学习。

书里还给了一个变体:每个类别各学一套自己的提示词(而不是所有类别共享一套), 在细粒度任务上更好用2

效果:三种做法排在一起

做法准确率
手工写一句(提示工程)58.18
手工写几十句再投票(多模板集成)60.41
让机器学那句话62.95

(同一个千类分类任务,每类给 16 张样例3。)

分数据集看,差别极大4:

数据集学出来的提示词比手工高多少
卫星图像超过 45 个点
纹理超过 20 个点
千类通用物体只有 4.77 个点
宠物、食物几乎没涨

书里对最后一行的解释很实在: 食物那个数据集训练数据本身有噪声—— 颜色过度鲜艳,偶尔还有标错的;而且在这两个数据集上样例越多反而越差, 这是过拟合的迹象4

4. 一个诚实的坦白:学出来的东西读不懂

这一节很短,但它是第 04 章第 ⑧ 堵墙(可解释性)在本书里唯一一次正面遭遇。

学出来的那 4 串数是什么意思? 作者拿它们去词表里找最近的词,想反推含义。

结果5:

数据集找出来的最近词
千类物体「potd」「that」「filmed」「fruit」以及一堆标点
食物「enjoyed」
纹理「pretty」
宠物「fluffy」「paw」「snuggle」

后三行有点沾边,但连起来根本不成句。

作者的处理方式值得学:

只说了一句「我们推测这些向量可能编码了词表之外的含义」,然后明确写道 「我们无法基于这些观察得出任何确定的结论」—— 理由是用最近词去解释学出来的向量本身可能就不准确5

这是全书对「不知道」处理得最干净的一处。 照实记下来。

5. 第一级台阶:换个画风,它扛住了

「换环境就废」这句话流传很广,但它是错的——至少不完整。必须拆成两级台阶。

第一级:同一批类别,换个画风

测法: 在通用物体数据集上学好提示词,然后拿到同一批类别的四个变体上测: 另一批自然照片、素描版、艺术画版、以及一批专门挑出来会骗过模型的照片。

结果6:

方法原数据集另一批照片素描版对抗版艺术画版
什么都不学(零样本)58.1851.3433.3221.6556.00
只训一个线性分类器(线性探测)55.8745.9719.0712.7434.86
学 16 个提示词向量62.9555.1132.7422.1254.96
学 4 个提示词向量63.3355.4034.6723.0656.60

三件事从这张表里跳出来:

  1. 学 4 个向量的版本全面高于零样本——书里明说「学出来的提示词有很强的泛化能力」6;
  2. 学 16 个向量的版本在素描和艺术画上反而低于零样本(32.74 对 33.32,54.96 对 56.00) ——学得越多,越不稳;
  3. 对照组崩得很惨: 只在特征上训一个线性分类器,素描版掉到 19.07、对抗版掉到 12.74, 比零样本低了一半

第 3 条值得单独记:同样是「用 16 张样例学点东西」, 学那句话和学一个分类器,抗漂移的能力差了一个数量级。 书里给的解释是:提示词是在模型外面工作的,它只改输入的上下文, 不会扭曲预训练学到的特征7

6. 第二级台阶:换一个数据集,它塌了

上一节那四个变体,类别是同一批(还是那一千类),只是画风变了。 这一节换的是类别本身。

设定一:在通用物体集上学,搬到 10 个细分数据集上

结果是这样的8:

方法10 个数据集的平均
什么都不学(零样本)55.82
手工写几十句再投票56.63
学出来的提示词56.18

学了半天,平均只比什么都不学高 0.36,还输给「多写几句话投票」。

逐个数据集看更难看:

数据集零样本学出来的
纹理40.3737.29(低了 3.08)
花卉61.7561.55(低了 0.20)
场景58.8058.15(低了 0.65)
飞机型号15.6615.12(低了 0.54)

设定二:源数据集也换成一个细分领域

这是全书最有冲击力的一个反例。

纹理数据集上学好提示词,拿到花卉数据集上测——两边的类别毫无重叠:

学出来的:33.41%。什么都不学:61.75%。相对掉了 46%9

书里对整张图的总结是一句很硬的话: 这些少样本提示词方法的平均改进「永远是负的」,也就是说它们做得比零样本基线还差9

两级台阶的差别,一句话: 第一级换的是「照片长什么样」,第二级换的是「要认的是哪些东西」。 学出来的那几串数,记住的是这一批类别的共性,而不是「怎么描述一个类别」这件事本身。

判断(我们的,不是书里的): 「学出来的提示词换环境就废」这句流传很广的话, 需要加一个限定才成立:换类别时废,换画风时反而更稳。 原书两章各说一半(原书第 5 章说「泛化能力强」、原书第 6 章说「平均改进永远是负的」), 而它从没把这两句放在一起对比过——两级台阶这个结构是我们排的。 如果错,会错在: 如果换画风那一级的优势只在这四个特定变体上成立 (它们都是从同一个千类数据集派生出来的), 那「第一级扛得住」就不能推广——书里只测了这一个源数据集,我们无从判断。

7. 泛化差,不是因为学得不够——恰恰相反

一个自然的想法是:效果不好是不是因为可训练的东西太少?书里做了这个实验,结论反过来。

把可训练向量的个数从 4 加到 8 再加到 1610:

向量个数原数据集上的平均成绩换画风之后
472.65最稳(见第 5 节那张表)
873.20中间
1673.42最不稳

原数据集上越多越好,换环境后越少越好。

书里的结论是一句坦白:

「没有确定的规则可以选出完美的上下文长度。实践者必须在高性能和抗分布漂移之间自己权衡。」10

还有一个顺带的发现:那几串数怎么初始化几乎没影响—— 随机初始化和用「a photo of a」的词嵌入初始化,平均差别小于 0.01%11

8. 换个思路:不用训练集,用要预测的那一张图

病根在第 6 节已经指出来了:它学的是那个训练集。那就干脆不要训练集。

做法:拿这一张测试图,当场学一个只给它用的提示词

书里的做法是四步12:

一张测试图(没有标签,也没有任何训练数据)
│ ① 随机裁剪、变换,增广出 63 个版本 + 原图 = 一批 64 张

64 张同一内容的不同视图
│ ② 每张各出一份预测(这一步用的是当前的提示词)

64 份预测
│ ③ 按「有多确定」排序,只留最确定的 10%(约 6 份)

6 份预测
│ ④ 把这 6 份平均起来,让这个平均分布尽量「确定」
│ 朝这个方向调提示词,只走一步

这一张图的专属提示词 → 用它重新分类这张图

图说:**63、64、10%、一步,全是书里的真数**;
优化器是 AdamW,学习率 0.005;提示词的初值就是「a photo of a」那 4 个 token。

「确定」这件事怎么量:熵

这一节唯一的新概念是熵,而它可以从现象讲起。

回忆第 01 章最后那一步:模型给出的是一排加起来等于 1 的百分比。

输出长什么样它有多确定
0.97 / 0.02 / 0.01非常确定
0.35 / 0.34 / 0.31完全没主意

熵就是量这件事的那个数:分布越平摊,熵越大;越集中在一个选项上,熵越小。 所以「让它更确定」= 让熵变小。

为什么「让不同视图的平均预测更确定」是个合理目标: 同一张图的不同裁法,内容是同一个,模型对它们的判断本来就该一致。 一致 → 平均起来还是尖的 → 熵小;不一致 → 平均起来被摊平 → 熵大。 所以最小化这个熵,等于逼模型对同一张图的各种看法达成一致12

一道必要的筛子:只留最自信的一成

为什么不用全部 64 张:

随机裁剪可能把关键内容裁掉了。 一张被裁得只剩背景的图, 模型对它的预测是纯噪声——把它平均进来只会捣乱12

做法: 按「有多确定」把 64 份预测从高到低排,只取前 10% 进平均。

效果:书里做了消融,去掉这道筛子,分布外的平均成绩掉 1.6113:

原数据集对抗版另一批照片艺术画版素描版分布外平均
不加筛子60.3123.6553.6657.4834.3142.28
加上筛子60.7426.6754.7059.1135.0943.89(+1.61)

效果:它在最难的那一栏上赢

用更强的主干时的对照14:

方法对抗版数据集分布外四项平均
什么都不学47.8757.20
手工写 80 句再投票49.8959.42
学出来的提示词49.7159.28
测试时当场学54.7760.81
两者叠加57.9562.83

三件事:

  1. 在最难的那一栏(对抗版)上,当场学比学出来的高 5 个点以上;
  2. 它一张训练数据都没用——对照的那两行各用了每类 16 张样例;
  3. 两者可以叠加,叠加后又高一截——说明它们解决的不是同一个问题。

9. 这一招不只对分类有效

书里还在另一个任务上验证了同一套思路,这一节值得单独讲,因为它证明了通用性。

那个任务长这样15:给你两组示例图—— 一组里的人都在做某个「人和物体的互动」(比如「骑自行车」),另一组里都没有; 这个概念是什么,不告诉你。然后给一张查询图,问它属于哪一组。

这一招在这里怎么用: 在那些示例图上,同时学提示词的前缀和两个二元「类名」 (相当于让模型自己给这两组各起一个名字),训 64 步,再去判断查询图15

结果16:

方法平均正确率
一个普通卷积网络基线49.92(约等于瞎猜——这是二选一)
一个元学习基线58.30
此前最好的专门方法62.46
测试时当场学66.59

注意 49.92 那一行:二选一任务里瞎猜就是 50。 所以那个专门为这个任务训练过的卷积网络,等于什么都没学到。

10. 代价:每张图都要多跑一遍

这条路不是白赚的。

每来一张测试图,都要:增广 64 次 → 前向 64 次 → 反推一次 → 再前向一次。 (那个「反推」就是第 3 节说的沿梯度往回推的动作,它的正式名字叫反向传播。) 推理时间成倍增加。

作者自己把这一条写进了结论:「在应用测试时优化的同时, 如何加快推理速度,是一个重要的待研究问题17

书里还顺手指了两条后续方向(在延伸阅读里),都是这本书出版前后才起头的17:

  • 语言模型上的「测试时计算扩展」;
  • 用测试时优化去提升模型的推理能力。

这两条是全书唯一一处指向「书出版之后」的路标。 我们把它记在第 20 章的时间戳一节里处理。

11. 作者的判断与证据

书里给了证据的:

说法证据
手工提示词不可靠加一个「a」涨 5 个点以上(有具体数据集)
学那句话比手工和多模板投票都好58.18 / 60.41 / 62.95 三档
学出来的提示词在同域漂移上更稳表 5.3 的四个变体,4 向量版全面高于零样本
学一个分类器比学提示词脆得多同一张表:素描 19.07、对抗 12.74
跨数据集就废表 6.2 的 10 个数据集 + 那张跨数据集矩阵,平均改进「永远是负的」
向量越多越不稳4 / 8 / 16 三档的对照
置信度筛选有用消融:分布外平均 +1.61
测试时当场学在最难那栏上赢对抗版 54.77 对 49.71

属于作者的推断:

  • 「学出来的向量可能编码了词表之外的含义」——作者自己明说这不是结论;
  • 「提示词在模型外面工作,所以不扭曲预训练特征」——这是一个解释, 它和我们第 13 章要讲的那个失败实验、以及原书第 6 章的消融相互印证,但本章没有单独证明它;
  • 「食物那个数据集涨得少是因为训练数据有噪声」——原文用的是「appears to result from」, 是推测。

12. 边界与局限

① 两级台阶的界线,书里从来没有明说过。 原书第 5 章说「泛化能力强」,原书第 6 章说「平均改进永远是负的」—— 两句话同时为真,因为它们说的是不同的实验。 这本书没有把它们放在一起对比过,这一节的两级台阶结构是我们排的。

② 测试时当场学的成本,书里没有量化。 它只说「推理变慢」,没有给出具体的倍数。 (第 09 章有一张成本表,量的是另一条路线,可以拿来参照。)

③ 为什么「只留最自信的一成」这个比例是 10%,书里给了曲线但没给原理。 消融显示 10% 最好,再高再低都差一点——这是调出来的,不是推出来的。

④ 这一章所有的成绩都在一个前提下:类名是已知的、能写成一句话的。 如果新类别连名字都说不清(比如「这种特定的机器故障」),这一整套都不适用。

13. 可带走的

  1. 手工写提示词不可靠:加一个冠词值 5 个点,而且调很久也不保证最优;
  2. 提示学习 = 把那几个词换成可训练的数,模型本体一个参数不动;
  3. 收益极不均匀:卫星图像 +45 个点,通用物体只有 +4.77,宠物和食物几乎没涨;
  4. 学出来的东西读不懂,作者拿最近词去反查得到一堆碎片,并明确拒绝下结论;
  5. 「换环境」有两级台阶——换画风(扛住了)和换类别(塌了),别混为一谈;
  6. 第一级的证据:4 向量版在四个变体上全面高于零样本;而只训一个线性分类器的对照组崩到 19.07 / 12.74;
  7. 第二级的证据:10 个数据集平均 56.18 对零样本 55.82,纹理集上 37.29 反而低于 40.37; 最极端的一组是 33.41% 对 61.75%;
  8. 泛化差不是学得不够:向量从 4 加到 16,源数据集上升、换环境后下降, 而作者明说「没有确定的规则」;
  9. 测试时当场学:一张图增广 64 次,只留最自信的 10%,让平均预测的熵变小,只走一步;
  10. 熵 = 量「有多没主意」的那个数,分布越平摊越大;
  11. 置信度筛选是必要的,因为随机裁剪会裁掉关键内容,那种视图的预测是噪声(+1.61);
  12. 这一招不限于分类:在一个「看两组示例图猜概念」的任务上也赢了专门方法(66.59 对 62.46);
  13. 代价是推理变慢,作者把加速列为待解问题。

14. 原文地图

主题原书章原文位置
加一个「a」涨 5 个点、提示工程的三条毛病5. Differentiable Prompt Learningtext/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:41(搜「increases accuracy by more than 5」)
把上下文词换成可学向量、只训它们、类别专属变体同上text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:45(搜「learnable vectors」) · text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:119(搜「same dimension as word embeddings」) · text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:127(搜「class-specific context」)
三种做法的对照 58.18 / 60.41 / 62.95同上text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:267(搜「58.18」)
分数据集的增益、食物集的噪声与过拟合同上text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:249(搜「exceeding 45% and 20%」)
学出来的向量读不懂、拒绝下结论同上text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:375(搜「beyond the existing vocabulary」)
同域漂移的四个变体、4 向量版更稳同上text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:285(搜「learned prompts possess strong generalization capabilities」) · text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:307(搜「33.32」)
上下文长度 4/8/16、「没有确定的规则」同上text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:351(搜「no definitive rule」)
初始化几乎没影响同上text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:371(搜「less than 0.01%」)
提示词不扭曲预训练特征6.3 TPTtext/31-ch06-03-6-3-tpt-test-time-prompt-tuning.txt:31(搜「do not distort pretrained features」)
测试时调整的四步、熵、置信度筛选6.3 TPTtext/31-ch06-03-6-3-tpt-test-time-prompt-tuning.txt:43(搜「minimize the entropy of the averaged prediction」) · text/31-ch06-03-6-3-tpt-test-time-prompt-tuning.txt:53(搜「a random crop may have removed important image content」)
63 次增广、top 10%、一步、AdamW 0.0056.4 Experimentstext/32-ch06-04-6-4-experiments.txt:23(搜「augment a single test image 63 times」)
对抗版 47.87 → 54.77、叠加 57.956.4 Experimentstext/32-ch06-04-6-4-experiments.txt:171(搜「47.87」) · text/32-ch06-04-6-4-experiments.txt:235(搜「54.77」)
跨数据集平均 56.18 对 55.82、33.41 对 61.756.4 Experimentstext/32-ch06-04-6-4-experiments.txt:293(搜「33.41」) · text/32-ch06-04-6-4-experiments.txt:395(搜「56.18」)
那个「看两组示例图猜概念」的任务与结果6.3 / 6.4text/31-ch06-03-6-3-tpt-test-time-prompt-tuning.txt:25(搜「two sets of support images」) · text/32-ch06-04-6-4-experiments.txt:647(搜「66.59」)
置信度筛选消融 +1.616.5 Ablation Studytext/33-ch06-05-6-5-ablation-study.txt:89(搜「+1.61」)
加速是待解问题、两条后续方向6.6 Conclusiontext/34-ch06-06-6-6-conclusion.txt:5(搜「accelerate the inference speed」) · text/34-ch06-06-6-6-conclusion.txt:15(搜「scaling of test-time computation」)

Footnotes

  1. 出处:「5. Differentiable Prompt Learning for Vision-Language Models」第 41 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:41,搜「increases accuracy by more than 5」)。原文三条评价:找到合适的提示词往往需要大量时间来调;提示工程需要关于任务的先验知识,理想情况下还要理解语言模型的内部机制;即使经过大量调优,得到的提示词也不保证对下游任务是最优的 2

  2. 出处:同上第 45 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:45,搜「learnable vectors」)、第 119 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:119,搜「same dimension as word embeddings」)与第 127 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:127,搜「class-specific context」)。原文:用可学向量为提示词的上下文词建模,可以随机初始化也可以用预训练词嵌入初始化;用交叉熵损失最小化预测误差,同时保持全部预训练参数固定;梯度可以穿过文本编码器一路回传,从而把编码器参数里的丰富知识蒸馏出来。每个向量的维度与词嵌入相同(CLIP 是 512),向量个数 M 是超参数。类别专属变体在细粒度任务上更有用。 2 3

  3. 出处:同上第 267 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:267,搜「58.18」)。这是表 5.2 的三行:提示工程 58.18、多模板集成 60.41、提示学习 62.95。原文说明:集成用的是 CLIP 作者精选、并在这个数据集上大量调过的那批模板,所以这是一个公平的强对照。

  4. 出处:同上第 249 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:249,搜「exceeding 45% and 20%」)。原文:16 张样例时平均改进约 15%,卫星图像与纹理这两个专门任务分别超过 45% 和 20%;千类物体那一项 4.77% 的提升「值得注意」;而宠物与食物两个细粒度集提升有限,食物那一项似乎是因为训练数据本身有噪声——颜色过度鲜艳、偶尔标签有误;并且这两个集上样例越多收益递减,提示存在过拟合 2

  5. 出处:同上第 375 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:375,搜「beyond the existing vocabulary」)。原文:解释学出来的提示词很困难,因为向量是在连续空间里优化的;他们退而求其次,在词表里按欧氏距离找最近的词。少数词与任务有点关系,但把所有最近词连起来,提示词并不成句;他们「推测学到的向量可能编码了超出现有词表的含义」,并明说无法基于这些观察得出任何确定的结论,因为用最近词来解释本身就可能不准确。 2

  6. 出处:同上第 285 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:285,搜「learned prompts possess strong generalization capabilities」)与表 5.3 所在的第 307 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:307,搜「33.32」)。原文:值得注意的是,尽管是在源数据集上训练的,提示学习提高了 CLIP 对分布漂移的鲁棒性,这说明学到的提示词具有很强的泛化能力;更少的上下文 token 进一步增强了鲁棒性;相比之下,线性探测模型在这些目标数据集上表现明显更差。 2

  7. 出处:「6.3 TPT: Test-Time Prompt Tuning」第 31 段(text/31-ch06-03-6-3-tpt-test-time-prompt-tuning.txt:31,搜「do not distort pretrained features」)。原文:已有工作表明,直接微调(不论端到端还是只调一部分层)会带来领域特定的行为,丢掉基础模型的分布外泛化能力与鲁棒性;而提示词是在预训练模型之外工作的,它通过修改模型输入的上下文起作用,因此不会扭曲预训练特征

  8. 出处:「6.4 Experiments」第 395 段(text/32-ch06-04-6-4-experiments.txt:395,搜「56.18」)。这是表 6.2 里 10 个细分数据集的平均值那一列:零样本 55.82、多模板集成 56.63、学出来的提示词 56.18。同一张表里逐个数据集的四组对照(纹理 40.37 对 37.29、花卉 61.75 对 61.55、场景 58.80 对 58.15、飞机 15.66 对 15.12)见第 327 段起(text/32-ch06-04-6-4-experiments.txt:327,搜「61.75」)。

  9. 出处:同上第 293 段(text/32-ch06-04-6-4-experiments.txt:293,搜「33.41」)。原文原样举了这个例子:用手工提示词的基线模型在花卉集上是 61.75%,而在纹理集上调出来的提示词在花卉集上只有 33.41%,相对变化 −0.46;并总结说这些少样本提示词方法在最后一列的平均改进「永远是负的」,意味着它们做得比零样本基线还差 2

  10. 出处:「5. Differentiable Prompt Learning for Vision-Language Models」第 351 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:351,搜「no definitive rule」)。原文:在 11 个数据集上把上下文长度从 4 变到 8 再到 16,平均结果是 72.65 / 73.20 / 73.42,源数据集上越多越好;而根据上一节的结果,更短的上下文对分布漂移更有利;结论是「没有确定的规则」,实践者必须在高性能与鲁棒性之间权衡。 2

  11. 出处:同上第 371 段(text/26-ch05-5-differentiable-prompt-learning-for-vision-lang.txt:371,搜「less than 0.01%」)。原文:在上下文长度都设为 4 的公平对照下,随机初始化与用「a photo of a」的词嵌入初始化,平均差别小于 0.01%;所以实践中直接随机初始化就够了。

  12. 出处:「6.3 TPT: Test-Time Prompt Tuning」第 43 段(text/31-ch06-03-6-3-tpt-test-time-prompt-tuning.txt:43,搜「minimize the entropy of the averaged prediction」)与第 53 段(text/31-ch06-03-6-3-tpt-test-time-prompt-tuning.txt:53,搜「a random crop may have removed important image content」)。原文:因为测试时没有标签,只能用无监督的损失;他们的目标是让模型对同一张测试图的不同增广视图给出一致的预测,做法是最小化平均预测分布的熵;此外为了减少随机增广带来的噪声,引入置信度筛选,滤掉那些熵高(也就是不自信)的视图——因为随机裁剪可能把重要内容裁掉了。「熵是量分布有多平摊的数」这个白话解释是我们补的,书里直接用了这个词。 2 3

  13. 出处:「6.5 Ablation Study」第 89 段(text/33-ch06-05-6-5-ablation-study.txt:89,搜「+1.61」)。表 6.4:不加筛子的基础版分布外平均 42.28,加上筛子 43.89,提升 1.61;其中对抗版那一栏单独提升 3.02。同一节还说,在四组参数(整个模型 / 文本编码器 / 视觉编码器 / 提示词)里,调提示词最有效,而调视觉编码器结果最差——这与「微调图像编码器会扭曲预训练特征」的说法一致。

  14. 出处:「6.4 Experiments」第 171 段(text/32-ch06-04-6-4-experiments.txt:171,搜「47.87」)与第 235 段(text/32-ch06-04-6-4-experiments.txt:235,搜「54.77」)。这是表 6.1 里更强主干的那一组:对抗版上零样本 47.87、多模板集成 49.89、学出来的提示词 49.71、测试时当场学 54.77、两者叠加 57.95;分布外四项平均分别是 57.20 / 59.42 / 59.28 / 60.81 / 62.83。

  15. 出处:「6.3 TPT: Test-Time Prompt Tuning」第 25 段(text/31-ch06-03-6-3-tpt-test-time-prompt-tuning.txt:25,搜「two sets of support images」)。原文:一个测试样本包含两组示例图和一张查询图,两组分别示范某个「人-物交互」概念的存在与不存在(比如「骑车」);动作和物体都没有被显式给出,要靠模型的推理能力判断查询图是否包含这个概念。做法是同时学提示词前缀和两个二元类别 token,在示例图上用交叉熵训练。 2

  16. 出处:「6.4 Experiments」第 647 段(text/32-ch06-04-6-4-experiments.txt:647,搜「66.59」)。表 6.3 的四行平均值:普通卷积网络基线 49.92、元学习基线 58.30、此前最好的专门方法 62.46、测试时当场学 66.59。原文另注明:那个专门方法是在包含测试概念在内的全部人-物交互概念上训练过的,而这里的方法没有用这个任务的训练集

  17. 出处:「6.6 Conclusion」第 5 段(text/34-ch06-06-6-6-conclusion.txt:5,搜「accelerate the inference speed」)与第 15 段(text/34-ch06-06-6-6-conclusion.txt:15,搜「scaling of test-time computation」)。原文:这个想法可以推广到别的基础模型乃至语言模型上,关键问题是设计合适的测试时目标;同时,如何在应用测试时优化时加快推理速度,也很重要。延伸阅读里点了两条后续方向:语言模型中测试时计算的扩展,以及用测试时优化提升语言模型的推理能力。 2