2026/1/1 16:31:13
网站建设
项目流程
晋州住房保障建设局网站,wordpress tag页面优化,门户网站百度百科,廊坊门户网站CoOp#xff08;Context Optimization#xff09;公式原理详解
一、CoOp的背景与动机
1. CLIP提示工程的痛点
CLIP的零样本分类依赖于手工设计的提示模板#xff0c;如#xff1a;
“一张{类别}的照片”“{类别}的照片”“这是{类别}的图片”
问题所在#xff1a;
模板敏感…CoOpContext Optimization公式原理详解一、CoOp的背景与动机1. CLIP提示工程的痛点CLIP的零样本分类依赖于手工设计的提示模板如“一张{类别}的照片”“{类别}的照片”“这是{类别}的图片”问题所在模板敏感性不同模板效果差异很大任务特定性某些任务需要特殊上下文如医疗图像、卫星图像优化困难人工尝试不同模板效率低下2. CoOp的核心思想用可学习的向量代替手工设计的上下文词传统一张 {类别} 的照片CoOp[可学习向量1] [可学习向量2] ... [可学习向量M] {类别}二、CoOp公式详解1. 基本符号定义x图像特征来自CLIP图像编码器c_i第i个类别的词嵌入向量v_1, v_2, ..., v_MM个可学习的上下文向量g(·)CLIP文本编码器冻结参数τ温度参数通常固定为CLIP训练时的值2. 提示构建过程传统CLIP提示t_i TextEncoder(一张 猫 的照片) ↓ t_i TextEncoder( [E(一张), E(猫), E(的照片)] )CoOp提示t_i g([v_1, v_2, ..., v_M, c_i])关键区别固定词变为可学习向量一张→v_1照片→v_M连续表示v_j是连续空间的向量不是离散的词端到端优化通过梯度下降学习最佳上下文3. 分类概率公式p(yi | x) exp(sim(x, g(t_i))/τ) / ∑_{j1}^K exp(sim(x, g(t_j))/τ)展开理解第1步构建每个类别的提示 t_1 [v_1, v_2, ..., v_M, c_1] # 猫 t_2 [v_1, v_2, ..., v_M, c_2] # 狗 ... t_K [v_1, v_2, ..., v_M, c_K] # 第K类 第2步文本编码 z_i g(t_i) # 第i类的文本特征 第3步计算相似度 s_i sim(x, z_i) (x·z_i) / (||x||·||z_i||) 第4步Softmax分类 p_i exp(s_i/τ) / [exp(s_1/τ) ... exp(s_K/τ)]4. 优化目标交叉熵损失对于训练数据{(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)}L -1/N ∑_{n1}^N log p(yy_n | xx_n)梯度传播路径损失L → p(y|x) → 相似度s_i → 文本特征z_i → 提示t_i → 上下文向量v_j由于CLIP的文本编码器g(·)是可微分的梯度可以从损失函数一直反向传播到上下文向量v_j。三、CoOp的训练过程详解1. 初始化策略随机初始化从正态分布采样词嵌入初始化用a、photo等词的嵌入初始化零初始化初始化为零向量2. 前向传播流程输入图像x真实标签y 步骤 1. 图像编码x ImageEncoder(image) # CLIP图像编码器冻结 2. 文本提示构建 对于每个类别i t_i [v_1, v_2, ..., v_M, E(c_i)] # E(c_i)是类别名称的词嵌入 3. 文本编码 z_i TextEncoder(t_i) # CLIP文本编码器冻结 4. 计算相似度 s_i sim(x, z_i) 5. Softmax分类 p_i exp(s_i/τ) / ∑ exp(s_j/τ) 6. 计算损失 L -log(p_y) # y是真实标签3. 反向传播计算反向传播时只更新上下文向量v_j∂L/∂v_j ∂L/∂p · ∂p/∂s_i · ∂s_i/∂z_i · ∂z_i/∂t_i · ∂t_i/∂v_j ↓ v_j ← v_j - η · ∂L/∂v_j # 梯度下降更新重要特性CLIP的主干网络图像编码器和文本编码器保持冻结只有上下文向量被更新。四、CoOp的变体与设计选择1. 上下文向量长度M的选择t_i [v_1, v_2, ..., v_M, c_i]M4对应一张照片4个token[“a”, “photo”, “of”, “a”]M8/16更多上下文容量可能学习更复杂的模式权衡M越大参数越多可能过拟合M越小表达能力有限2. 类别特定上下文不推荐原始论文提到但不推荐的变体t_i [v_{i,1}, v_{i,2}, ..., v_{i,M}, c_i] # 每个类别有自己的上下文问题参数量大K×M个向量无法泛化到新类别新类别没有对应的上下文过拟合风险高3. 混合初始化策略结合手工模板初始化初始化v_1 E(A), v_2 E(photo), v_3 E(of), v_4 E(a) 学习后v_1 ≈ E(A) Δ_1, v_2 ≈ E(photo) Δ_2, ...这样既保留了先验知识又允许模型调整。五、CoOp的几何解释1. 特征空间视角在CLIP的特征空间中每个类别有一个锚点w_i g(t_i)CoOp通过调整t_i来移动这些锚点目标是让锚点更接近相应类别的图像特征分布中心2. 优化过程可视化初始状态 猫的锚点 ↓ ······●········· 图像特征分布 优化后 猫的锚点 ↓ ········●······ 更对准分布中心上下文向量v_j的学习相当于旋转和平移整个文本特征空间使其与图像特征空间更好对齐。六、CoOp与CLIP对比1. 提示构造方式方面CLIPCoOp上下文固定自然语言可学习连续向量优化手工调整梯度下降优化泛化依赖模板设计自动学习适应效率试错成本高一次学习多次使用2. 计算流程对比CLIP图像 → 图像编码器 → x 提示一张猫的照片 → 文本编码器 → w_猫 计算sim(x, w_猫)CoOp图像 → 图像编码器 → x 学习到的提示[v_1,...,v_M, c_猫] → 文本编码器 → w_猫 计算sim(x, w_猫)3. 性能差异来源CoOp通常优于手工设计模板因为数据驱动优化从训练数据学习最佳上下文连续空间搜索在连续向量空间搜索比离散词汇组合更高效任务自适应自动适应特定数据集特性七、CoOp的数学特性1. 梯度计算详解令L -log p(y|x)其中p(y|x) exp(s_y/τ) / ∑_j exp(s_j/τ) s_j x·z_j # 假设已归一化余弦相似度点积 z_j g(t_j) t_j [v_1, ..., v_M, c_j]梯度∂L/∂v_k ∑_j (∂L/∂s_j) · (∂s_j/∂z_j) · (∂z_j/∂t_j) · (∂t_j/∂v_k) 其中 ∂L/∂s_j [1(jy) - p_j]/τ # softmax梯度 ∂s_j/∂z_j x # 向量导数 ∂z_j/∂t_j J_g(t_j) # 文本编码器在t_j处的雅可比矩阵 ∂t_j/∂v_k I # 单位矩阵如果v_k是t_j的第k部分2. 优化目标重述CoOp最小化的损失函数实际上是带可学习上下文的对比损失L -E_{(x,y)}[sim(x, g([v_1,...,v_M, c_y]))/τ] log∑_j exp(sim(x, g([v_1,...,v_M, c_j]))/τ)这可以看作最大似然估计目标是最大化正确类别的后验概率。八、CoOp的实际应用1. 训练步骤# 伪代码示例classCoOp:def__init__(self,clip_model,num_context_tokens4):self.clipclip_model# 冻结参数self.context_vectorsnn.Parameter(torch.randn(num_context_tokens,clip_model.text_embed_dim))defforward(self,image,class_names):# 图像特征image_featuresself.clip.encode_image(image)# 构建提示prompts[]fornameinclass_names:# 获取类别词嵌入class_embedself.clip.get_text_embedding(name)# 拼接上下文向量prompttorch.cat([self.context_vectors,class_embed.unsqueeze(0)])prompts.append(prompt)# 文本特征text_featuresself.clip.encode_text(prompts)# 分类logitsimage_features text_features.T/temperaturereturnlogitsdeftrain_step(self,images,labels):logitsself(images,class_names)lossF.cross_entropy(logits,labels)loss.backward()# 只更新context_vectorsoptimizer.step()2. 超参数选择经验学习率较小的学习率1e-3到1e-4因为只更新少量参数训练轮数通常50-100轮即可收敛上下文长度M4-16之间根据任务复杂度调整批量大小与CLIP预训练时相似32-1283. 典型应用场景专业领域适应医疗图像学习病理切片显示等上下文风格化数据艺术图像学习一幅画描绘了等上下文少样本学习数据稀缺时CoOp比微调整个模型更有效九、CoOp的局限性1. 理论基础薄弱可学习向量的可解释性差学到的v_j对应什么语义过拟合风险在小型数据集上可能学出数据集特定的偏见2. 泛化能力限制领域外泛化在一个数据集学习的上下文可能不适用于其他领域新类别适应需要重新学习或手工设计3. 计算效率每个训练迭代需要为所有类别计算文本特征类别多时计算开销较大十、CoOp的后续发展CoOp启发了许多后续工作CoCoOp条件式上下文优化为每个图像生成特定上下文Tip-Adapter基于缓存的提示优化无需梯度下降PromptSRC自回归上下文优化考虑上下文token间的依赖关系总结CoOp的核心贡献是将提示工程从人工设计转为可学习优化核心公式t_i [v_1, v_2, ..., v_M, c_i]优化目标最小化交叉熵损失只更新上下文向量关键优势比手工提示更优比全模型微调更高效哲学意义在保持预训练知识的前提下通过极小参数量实现任务适应CoOp展示了如何通过轻量级适配器仅上下文向量来桥接预训练大模型与下游任务这种思路后来被广泛应用于视觉-语言模型的各种适配场景中。