LIVE: Learnable In-Context Vector for Visual Question Answering
NIPS 2024
Why
直接应用 ICL 存在两大瓶颈:计算成本高和对示例选择的高度敏感性。
一种解决思路:用一个紧凑的“上下文向量”(In-Context Vector, ICV) 来浓缩示例信息,替代冗长的真实示例。之前研究,如 Task Vector (TV)、Function Vector (FV) 和 PCA-ICV,普遍采用了一种不可学习的策略。它们的特点:
- 被动提取:它们通过一些固定的、启发式的规则从一组给定的范例中“提取”出一个向量。例如,TV 提取模型中间层的某个激活值,FV 平均关键注意力头的输出,PCA-ICV 则对表征差异进行主成分分析。
- 浅层模仿:这些方法本质上是在对示例的表面统计特征进行建模。比如,它们可能善于发现示例的答案都是“是/否”,或者都是数字,在简单文本任务上表现尚可,但面对像视觉问答(VQA)这样复杂推理任务时就失效。
核心动机:我们需要一种更根本的方式来创造这个上下文向量。我们需要的不是一个被动“提取”出来的、代表少数几个示例的“样本向量”,而是一个主动“学习”出来的、代表整个任务本质的“任务向量”。
What
为解决上述问题,本文提出了一个解决方案——LIVE (Learnable In-Context Vector),即可学习的上下文向量。
创新点
新的实现方式:可学习的参数 VVV 和 ααα:
- 之前向量提取规则是启发式,由人来定义如何计算;LIVE将获取上下文向量的问题重新定义为一个端到端的优化问题。通过训练得到最优的向量。
LIVE 将上下文向量的引导作用解构为两个部分:一个代表“方向”的可学习向量 VVV,和一个代表“强度”的可学习权重 ααα。这两个参数乘积构成了注入到模型每一层的偏移向量。
- 之前向量提取规则是启发式,由人来定义如何计算;LIVE将获取上下文向量的问题重新定义为一个端到端的优化问题。通过训练得到最优的向量。
自蒸馏训练机制:
- 为了得到VVV和ααα,LIVE 设计了一个“师生模型”框架。让一个使用32-shot ICL的教师模型,去教一个使用LIVE的学生模型。通过最小化两者在输出上的差异(KL散度)以及对齐学生模型真实答案(交叉熵),LIVE能够从大量多样化的ICL“教学案例”中,蒸馏出稳定的任务知识。
成果总结:LIVE最终产出了一套紧凑的VVV和ααα参数。在推理时,它们可以被即插即用,使得模型在无需任何示例的情况下,达到甚至超越传统32-shot ICL的性能,同时将推理成本降低到几乎与Zero-Shot持平的水平。
How
3.1 理论推导
核心:自注意力机制的分解
公式推导过程:
对于语言或多模态模型(LLM/LMM)实现上下文学习(ICL)时,输入形式为X˙={XD,x^}\dot{X}=\{X_D, \hat{x}\}X˙={XD,x^},其中XD={x1,...,xk}X_D=\{x_1,...,x_k\}XD={x1,...,xk}是k个上下文示例的串联,x^\hat{x}x^是查询输入。给定XXX作为Key和Value,对x^\hat{x}x^的每个tokenx^i\hat{x}_ix^i应用自注意力(SA)时,其计算过程可整合为:
SA(x^i,X,X)=SA(x^i,[XDx^],[XDx^])=softmax([x^iXD⊤x^ix^⊤])[XDx^]=exp(x^iXD⊤)XDZ1+Z2+exp(x^ix^⊤)x^Z1+Z2=Z1Z1+Z2softmax(x^iXD⊤)XD+Z2Z1+Z2softmax(x^ix^⊤)x^=μSA(x^i,XD,XD)+(1−μ)SA(x^i,x^,x^) \begin{align*} SA\left( \hat{x}_{i},X,X \right) &= SA\left( \hat{x}_{i},\left[ \begin{array}{c} X_{D} \\ \hat{x} \end{array} \right],\left[ \begin{array}{c} X_{D} \\ \hat{x} \end{array} \right] \right) \\ &= softmax\left( \left[ \hat{x}_{i}X_{D}^{\top} \quad \hat{x}_{i}\hat{x}^{\top} \right] \right) \left[ \begin{array}{c} X_{D} \\ \hat{x} \end{array} \right] \\ &= \frac{exp\left( \hat{x}_{i}X_{D}^{\top} \right) X_{D}}{Z_{1} + Z_{2}} + \frac{exp\left( \hat{x}_{i}\hat{x}^{\top} \right) \hat{x}}{Z_{1} + Z_{2}} \\ &= \frac{Z_{1}}{Z_{1} + Z_{2}} softmax\left( \hat{x}_{i}X_{D}^{\top} \right) X_{D} + \frac{Z_{2}}{Z_{1} + Z_{2}} softmax\left( \hat{x}_{i}\hat{x}^{\top} \right) \hat{x} \\ &= \mu SA\left( \hat{x}_{i}, X_{D}, X_{D} \right) + (1 - \mu) SA\left( \hat{x}_{i}, \hat{x}, \hat{x} \right) \end{align*} SA(x^i,X,X)=SA(x^i,[XDx^],[XDx^])=softmax([x^iXD⊤x^ix^⊤])[XDx^]=Z1+Z2exp(x^iXD⊤)XD+Z1+Z2exp(x^ix^⊤)x^=Z1+Z2Z1softmax(x^iXD⊤)XD+Z1+Z2Z2softmax(x^ix^⊤)x^=μSA(x^i,XD,XD)+(1−μ)SA(x^i,x^,x^)
其中,向量[x^iXD⊤x^ix^⊤]∈R1×l\left[ \hat{x}_{i}X_{D}^{\top} \quad \hat{x}_{i}\hat{x}^{\top} \right] \in \mathbb{R}^{1\times l}[x^iXD⊤x^ix^⊤]∈R1×l(lll为整个输入[XD,x^]\left[ X_D, \hat{x} \right][XD,x^]的序列长度),Z1=∑lcexp(x^iXD⊤)Z_1=\sum_{l_c} \exp(\hat{x}_i X_D^{\top})Z1=∑lcexp(x^iXD⊤)、Z2=∑lqexp(x^ix^⊤)Z_2=\sum_{l_q} \exp(\hat{x}_i \hat{x}^{\top})Z2=∑lqexp(x^ix^⊤)(lcl_clc和lql_qlq分别为xDx_DxD和x^\hat{x}x^的长度),μ=Z1/(Z1+Z2)\mu=Z_1/(Z_1+Z_2)μ=Z1/(Z1+Z2)。
简化:SA(x^i,X,X)=μh(XD)+(1−μ)h(x^)SA\left( \hat{x}_{i}, X, X \right) = \mu h\left( X_{D} \right) + (1 - \mu) h\left( \hat{x} \right) \quadSA(x^i,X,X)=μh(XD)+(1−μ)h(x^)
作者观察:这个公式看出,ICL的本质作用,可以看作是在零样本的原始表示 h(x^)h(\hat{x})h(x^) 的基础上,加上一个由示例 XDX_DXD 提供的“平移向量” h(XD)h(X_D)h(XD)。这个“平移”将原始表示推向了一个更适合当前任务的“方向”。
作者思路:直接学习一个通用的“平移向量”来替代每次都要动态计算的 h(XD)h(X_D)h(XD)
3.2 LIVE向量设计
基于上述洞察,作者设计了LIVE。论文引用指出,大模型的不同层扮演不同角色。因此,作者为模型的每一层都设计了专属的平移向量。
参数设计
LIVE由两组可学习的参数构成,对应模型的每一层(假设有 LLL 层):
- 方向向量集 V={v1,v2,...,vL}V = \{v_1, v_2, ..., v_L\}V={v1,v2,...,vL}:
- vlv_lvl 是一个与模型隐藏层维度相同的向量。
- 它的作用是为第 lll 层提供一个特定的“平移方向”。
- 权重因子集 α={α1,α2,...,αL}\alpha = \{\alpha_1, \alpha_2, ..., \alpha_L\}α={α1,α2,...,αL}:
- αl\alpha_lαl 是一个可学习的标量(单个数值)。
- 它的作用是控制第 lll 层平移的“强度”。
参数使用:
在推理时,当一个查询 xix_ixi 在模型的第 lll 层计算出其表示 Ml(xi)M_l(x_i)Ml(xi) 后,LIVE会对其加上偏移量:
Ml(xi)′=Ml(xi)+αl⋅vlM_l(x_i)' = M_l(x_i) + \alpha_l \cdot v_lMl(xi)′=Ml(xi)+αl⋅vl
3.3 LIVE的训练
使用了“知识蒸馏”的策略,构建了一个“教师-学生”模型。
© 教师模型 (Conventional In-Context Learning):
- 取一个查询 xxx。
- 随机抽取 kkk 个(例如32个)示例,构成上下文 XDX_DXD。
- 将 [XD,x][X_D, x][XD,x] 输入给模型,得到一个答案的概率分布 P(answer∣XD;M)P(\text{answer} | X_D; M)P(answer∣XD;M)。
(a) 学生模型 (Learnable In-context Vector):
- 只将查询 xxx 输入给模型。
- 在模型的每一层,应用我们上面提到的 +αl⋅vl+ \alpha_l \cdot v_l+αl⋅vl 操作。
- 得到一个使用LIVE后的答案概率分布 P(answer∣V,α;M)P(\text{answer} | V, \alpha; M)P(answer∣V,α;M)。
损失函数 - 公式(7):
训练的目标是让“学生”尽可能地模仿“教师”。这是通过一个组合的损失函数 LLL 实现的:
L=λ⋅Lgt+LdL = \lambda \cdot L_{gt} + L_dL=λ⋅Lgt+Ld
LdL_dLd - 蒸馏损失:Ld=KL(P(x^∣XD;M)∥P(x^∣V,α;M))\mathcal{L}_d = KL\left( \mathcal{P}\left( \hat{x}|X_D; \mathcal{M} \right) \| \mathcal{P}\left( \hat{x}|V, \alpha; \mathcal{M} \right) \right) \quadLd=KL(P(x^∣XD;M)∥P(x^∣V,α;M))
- 这是学生输出 P(student)P(\text{student})P(student) 和教师输出 P(teacher)P(\text{teacher})P(teacher) 之间的 KL散度。
- 它的作用是对齐学生和教师之间的输出差异。
LgtL_{gt}Lgt - 真实标签损失:Lgt=−∑ilogP(x^i∣V,α;M)\mathcal{L}_{gt}=-\sum_i \log \mathcal{P}(\hat{x}_i|V, \alpha; \mathcal{M})Lgt=−∑ilogP(x^i∣V,α;M)
- 这是学生模型的预测和真实答案之间的标准交叉熵损失。
- 它的作用是对齐学生输出与真实答案之间的差距。
λ\lambdaλ 是一个超参数,用于平衡这两个损失的重要性。
3.4 实验
性能对比
- 对比方法:零示例、32示例ICL、其他非学习式ICV方法(TV, FV, PCA-ICV)以及微调方法(LoRA)
- LIVE训练设置:每个查询分配 32 个示例,viv_ivi 采用均值为 0、标准差为 0.01 的正态分布进行初始化,所有 αi\alpha_iαi 初始化为 0.1
- 模型和数据集:IDEFICS-9B(交叉) VQAv2和OKVQA两个视觉问答数据集
- 结果:LIVE的准确率最高,超过了第二名传统32-shot ICL,提升2%。训练参数只有LoRA微调的九分之一。
推理效率对比 (Figure 3 & Appendix Table 9)
- 实验目的:量化LIVE在速度和计算成本上的优势。
- 结果:
Figure 3
展示了LIVE与传统ICL的FLOPs(计算量)和Runtime(推理时间)的对比。LIVE的成本几乎和Zero-Shot一样低。Table 9
给出了具体数字,直接使用32-shot ICL需要25倍计算量,8倍推理时间。
损失函数消融实验 (Table 2)
- 实验目的:验证组合损失函数中 LdL_dLd 和 LgtL_{gt}Lgt 是否都不可或缺。
- 结果:LdL_dLd (蒸馏损失)更重要,但不如两者结合。这证明了从ICL中“蒸馏”知识是至关重要的。
训练数据量和示例数的影响 (Table 3, Figure 4)
- 实验目的:探究训练LIVE时使用的单次示例数量(kkk)和训练数据总量(NNN)的影响。
- 结果:
Table 3
显示,训练时单次用的示例 kkk 越多,LIVE学得越好,并且在所有 kkk 值下都稳定优于ICL。Figure 4
显示,LIVE样本效率极高,用很少的训练数据(如500个)就能达到很好的效果,远超LoRA。
- 潜在空间可视化分析 (Figure 5, Table 4)
- 实验目的:验证LIVE是否真的在潜在空间中起到了与ICL相似的“平移”作用。
- 结果:
Figure 5
的t-SNE(非线性降维 )可视化图清晰地显示,经过LIVE“平移”后的查询表示(紫色倒三角)与32-shot ICL“平移”后的表示(黄色圆点)高度重合,而与原始的零样本表示(蓝色点)相距甚远。Table 4
用余弦相似度量化了这一点,LIVE的平移方向与ICL的相似度高达0.742/0.829,远超其他方法。
- 解码分析 (Table 5, Table 6)
- 实验目的:解释为什么旧的非学习式方法在VQA上效果差。
- 结果:Table5Table 5Table5通过直接解码ICV向量发现,旧方法倾向于学习“是/否”这样的简单偏见,而LIVE学习到了对任务本质的正确理解,它理解了这个任务的结构是“提问(Question)”、“回答(answer)”、并可能需要一个“简短(Short)”的答案。
Table 6
统计了在10,000个测试样本上幻觉和无效回答的频率,发现旧方法(特别是TV)会产生大量“是/否”幻觉,与向量解码内容印证。