- Preliminaries
3.1. CLIP and Prompt Learning(CLIP和提示学习)
CLIP核心机制
输入:未知图像 + 多组文本提示(如 “a photo of [class]”)
操作:
- 图像编码:视觉编码器
f(·)
提取图像特征f(i)
- 文本编码:文本编码器
g(·)
提取每个文本提示s_k
的特征g(s_k)
- 相似度计算:计算图像特征与所有文本特征的余弦相似度
- 概率分布:通过softmax生成图像属于各文本提示的概率分布
输出:图像属于每个文本提示的概率分布,实现零样本分类。
举个栗子🌰:
• 输入文字提示:“狗”、“猫”、“汽车”
• 计算相似度得分:8(狗)、5(猫)、1(汽车)
• Softmax处理后:
• 狗:95%
• 猫:4.7%
• 汽车:0.3%
👉 结论:这张图大概率是狗!
Prompt Learning(提示学习)步骤
目标:自动学习更有效的文本提示,提升CLIP在下游任务的表现。
输入:少量正常样本(小样本设置)
操作:
- 设计可训练提示模板:
• 模板形式:[P1][P2]...[PE_P][class_k]
•[P1]...[PE_P]
为可训练的token,[class_k]
为固定的类别名称 - 对比学习优化:
• 通过对比损失(如交叉熵)调整提示参数,使正常样本特征与正常提示特征对齐 - 生成最终提示:
• 学习后的提示模板直接用于推理
输出:优化后的文本提示,提升分类或检测性能(如异常检测)。
例子背景
任务:训练模型区分图片是“猫”还是“狗”
传统方法:需要大量标注数据训练模型
Prompt Learning方法:只改提示模板,不修改CLIP模型本身,用少量数据优化提示。
Prompt Learning步骤
输入:
• 少量标注图片(如5张猫、5张狗)
• 初始模板:“a photo of [class]”([class]替换为“猫”或“狗”)
操作:
-
定义可训练模板:
• 原始模板:[P1][P2] a photo of [class]
◦[P1][P2]
:可训练的token(模型自动学习的“魔法词语”)
◦[class]
:固定类别名称(直接替换为“猫”或“狗”)
• 例如训练后的模板可能是:"清晰特写 毛茸茸的 a photo of 猫"
-
训练过程:
• 输入一张狗图片,计算它与优化后提示的相似度:
◦ 狗的提示:[P1][P2] a photo of 狗
◦ 猫的提示:[P1][P2] a photo of 猫
• 目标:让狗图片与狗的提示相似度 远高于 猫的提示
• 通过对比损失(如交叉熵)更新[P1][P2]
的向量值 -
生成最终提示:
• 训练完成后,固定[P1][P2]
的参数
• 推理时直接使用模板:
◦ 输入狗图片 ➔ 计算与[P1][P2] a photo of 狗
的匹配概率
输出:
• 优化后的提示模板,例如:
• 狗:“特写镜头 草地上的 a photo of 狗”
• 猫:“室内环境 窗边的 a photo of 猫”
• 效果:使用优化后的提示,分类准确率从70%提升到90%!
关键点
-
可训练token([P1][P2]):
• 相当于“自动学习的神奇修饰词”,比如“特写镜头”、“毛茸茸的”
• 模型通过少量数据调整这些词的含义,让提示更匹配任务需求 -
固定类别([class]):
• 直接使用“猫”、“狗”等真实类别名,不修改
• 保证语义明确,避免模型混淆
类比理解
• 传统方法:让模型从头学习“猫狗是啥”(费时费力)
• Prompt Learning:
• 相当于给模型一个填空题模板:
“[学来的修饰词] 一张照片的 [猫/狗]”
• 模型只需要填对修饰词,就能更准确定义类别!
关键点
- CLIP优势:无需训练数据,直接通过文本提示实现零样本分类。
- Prompt Learning作用:
• 自动优化提示模板,减少人工设计成本
• 在少样本场景下提升模型对特定任务(如异常检测)的适应能力 - 对比学习核心:通过正负样本对比(如正常 vs 异常提示),增强语义区分性。
示例应用:
在异常检测中,通过学习正常提示 [P1][P2][obj]
和生成异常提示 [P1][P2][obj][flaw]
,使模型区分正常与异常特征。