想象一场特殊的看图问答考试:考官递来一张照片,同时问你“照片里的猫是什么颜色?”你要一边看图,一边读题,把两边信息对应起来,才能写出答案。过去十年,AI 学者们就在训练一台“AI 考生”参加这场考试,这个任务就是视觉问答(Visual Question Answering,VQA)。这场考试里,AI 考生的备考方式经历了四代变迁:一开始它是个笨拙的“抄写员”,把整张图草草抄成特征纸条;后来学会“带着问题看考卷”,目光像探照灯一样聚焦关键区域;再后来,它把图中的每个色块和问题里的每个词都拉到一张圆桌上“全员讨论”;如今,它已经是刷过海量图文题库的“全能状元”,看图答题游刃有余。这篇进阶课,我们就沿着这场考试的进化,搞懂 VQA 的模型演进与核心套路。

岗位关联

对 AI 从业者来说,掌握 VQA 模型演进意味着理解多模态智能的底层逻辑,无论做研究还是产品落地,都能选对架构、评对指标、看清趋势。

目录
  1. 可视化演示
  2. 任务与挑战:一张图与一个问题的特殊考试
  3. 早期融合范式:先抄图再答题的笨办法
  4. 注意力机制:带着问题看图
  5. Transformer架构:全员讨论的圆桌会议
  6. 预训练范式:先刷海量题库再实战
  7. 评估方法:一场公道的阅卷标准
  8. 大模型演进:刷遍天下的全能状元
  9. 未来方向:更开放的试卷
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

VQA模型演进 CNN+LSTM早期融合 注意力机制聚焦区域 大模型统一架构 CNN+LSTM→Attn→Transformer→LLM 从双流到统一多模态

任务与挑战:一张图与一个问题的特殊考试

想象一场特殊的看图问答考试:考官递来一张照片,同时问你“照片里的猫是什么颜色?”你既要认出那是猫,又要定位“毛色”这个属性,两边信息缺一不可。如果照片换成一堆水果,问题问“最右边的苹果上有虫子吗?”,你就得先数位置、再看细节。VQA 这场考试的精髓,正在于“视觉证据”和“语言问题”必须互相引用,答案才能成立。

VQA 全称 Visual Question Answering,输入是图像 I 和自然语言问题 Q,输出是答案 A。它和图像分类、文本问答有本质区别:单一模态任务只理解像素或文字,而 VQA 必须同时理解两种信号,并让它们在语义层面“接上头”。这个对接动作,业界叫“多模态对齐”——图像里的“红色圆形”如何与问题里的“红色”这个词绑定,是贯穿整个模型演进的核心难题。

从数学上看,VQA 的骨架是条件概率:模型学到的是“在看见图像、读完问题之后,各个候选答案有多可信”。由于答案空间开放——可能是物体名、颜色、数字甚至一句描述——模型输出的不是一个字符串,而是词典上的概率分布。这带来两个现实挑战:一是答案候选成千上万,分类头设计需要技巧;二是标注成本高,同一个问题不同人答案不同,数据集通常靠多人投票定标准答案。

这场考试的第一道门槛,是“听得懂题、看得懂图,还能把两者对上”。后面的所有模型演进,本质上都是让 AI 考生在这一步做得更好——先学会抄,再学会看,然后学会讨论,最后成为通才。

P(a∣I,Q)\displaystyle P(a \mid I, Q)
这个式子读作“在已知图像 I 和问题 Q 的条件下,答案 a 的概率”。模型的全部任务,就是让正确答案的概率最高。
  1. 答案变量 a表示模型要预测的答案,可以是“白色”“3 个”这样的词,也可以是一个离散标签,来自预先定义的答案词典。
    a∈Aa \in \mathcal{A}
  2. 条件符号 |I,Q竖线右边是已知条件——图像 I 与问题 Q。模型要做的是“在已知两者的情况下”推断答案,缺一不可。
    I∈RH×W×3,Q=(q1,q2,…,qm)I \in \mathbb{R}^{H \times W \times 3},\quad Q = (q_1, q_2, \dots, q_m)
  3. 概率最大化训练时拉高正确答案概率,推理时取概率最大的答案作为输出,这就是最大后验策略。
    a^=arg⁡max⁡aP(a∣I,Q)\hat{a} = \arg\max_{a} P(a \mid I, Q)

早期融合范式:先抄图再答题的笨办法

早期的 AI 考生很笨拙——它先把整张图“抄”成一张特征纸条,把问题也“抄”成另一张纸条,两份纸条直到交卷前最后一刻才被贴在一起,然后凭这份“临时的合体笔记”写出答案。抄写过程丢三落四,融合又发生在最后一步,前面的信息损耗早已无法挽回,答案自然不灵光。

这个方案就是“双流架构”:视觉流用 CNN(如 VGG、ResNet)把图像编码成向量 v,语言流用 LSTM/GRU 把问题逐步读入、编码成向量 q;然后通过拼接(concatenate)把 v 和 q 合成一个长向量,送进全连接分类器,在预定义的答案集合上做 softmax。整体是“视觉一个分支、语言一个分支、末端汇合”的管道式设计。

这个“抄写员”路线很快撞上信息瓶颈:CNN 的全局向量丢掉了“在哪里”的空间细节,LSTM 对长问题也记不全,而融合只发生在最后一刻,中间没有任何信息交换。就像考生把整张图缩画在巴掌大的纸条上,细节全糊了,最后对答案自然吃力——要考高分,必须学会“带着问题看图”。

P(a)=softmax(W⋅[v;q]+b)\displaystyle P(a) = \mathrm{softmax}\left(W \cdot [v; q] + b\right)
方括号里的分号表示“把图像向量和问题向量首尾拼接”,W 是权重矩阵,softmax 把得分变成概率。融合只有一次,而且发生在最后——这就是它的致命伤。
  1. 视觉向量 vCNN 把整张图压成一个高维向量,相当于“抄写的纸条”,空间细节(猫在哪、背景是什么)被大幅压缩。
    v=CNN(I),v∈Rdvv = \mathrm{CNN}(I), \quad v \in \mathbb{R}^{d_v}
  2. 文本向量 qLSTM 把问题逐词读入,用最后一个隐状态浓缩整句话的语义,相当于“读题的笔记”。
    q=LSTM(Q),q∈Rdqq = \mathrm{LSTM}(Q), \quad q \in \mathbb{R}^{d_q}
  3. 拼接操作 [v;q]把两个向量首尾相连,形成维度为 d_v + d_q 的新向量,视觉和语言信息在此“第一次见面”。
    [v;q]∈Rdv+dq[v; q] \in \mathbb{R}^{d_v + d_q}
  4. 线性映射与 softmaxW 把拼接向量变换到答案词典的分数空间,softmax 将分数归一化成概率,取最大者作答。
    a^=arg⁡max⁡asoftmax(W⋅[v;q]+b)\hat{a} = \arg\max_{a} \mathrm{softmax}(W \cdot [v; q] + b)

注意力机制:带着问题看图

聪明的考生换了策略——他不抄整张图,而是先读题,再让目光像“探照灯”一样在图上扫:题目问“猫的毛色”,灯光直接照在猫身上;问“身后是树还是墙”,灯光就移到背景。图像中与问题无关的区域,权重自动降低。这就是注意力机制:不让模型平均地看整张图,而是按需聚焦。

具体实现上,注意力给图像的每个区域分配权重,加权求和得到“聚焦后的视觉特征”。关键在权重如何产生:问题特征作为查询(Query),“我想要找什么”;图像区域特征作为键(Key),“每个区域是什么”;点积相似度决定每个区域该被看多少。后来学界又发展出 Co-Attention(共同注意力):图像帮助问题选词,问题帮助图像选区域,两个模态互相“照亮”,跨模态对齐更加精细。

注意力让考生告别“通篇傻看”,而且权重还能可视化——我们能直接看到 AI 考生在看哪里,可解释性大大增强。但单点探照仍有局限:如果问题有歧义,或者图中多个物体相互关联,一次聚焦就不够用了。下一个阶段,考生学会了“全员讨论”。

Attention(Q,K,V)=softmax(QK⊤dk)V\displaystyle \mathrm{Attention}(Q, K, V) = \mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right) V
Q 来自问题编码(考生想找什么),K 和 V 来自图像区域特征(图上有哪些候选线索)。点积算出“问题词与图像区域”的匹配分,softmax 归一化成权重,再对 V 加权求和,得到带着问题意图的视觉特征。
  1. 查询矩阵 Q问题编码后得到的向量集合,代表“我要找的目标线索”,可能是一组词向量。
    Q∈Rm×dkQ \in \mathbb{R}^{m \times d_k}
  2. 键矩阵 K 与值矩阵 V图像各区域分别扮演“我是谁”(K)和“我有什么内容”(V)两个角色,通常来自同一个视觉特征的不同线性变换。
    K,V∈Rn×dkK, V \in \mathbb{R}^{n \times d_k}
  3. 点积相似度 QK^T逐对计算每个问题词与每个图像区域的匹配程度,得到一个 m×n 的分数矩阵,分数越高越该看。
    S=QK⊤S = QK^\top
  4. 缩放因子 √d_k维度高时点积数值容易过大,softmax 会进入饱和区导致梯度消失,除以根号 d_k 把方差拉回稳定区间,相当于调节探照灯亮度防止过曝。
    S′=QK⊤dkS' = \frac{QK^\top}{\sqrt{d_k}}
  5. softmax 加权求和对每行分数做 softmax 得到权重,再对 V 按权重求和,输出就是“被问题筛选过的视觉摘要”。
    Att(Q,K,V)=∑iαivi,α=softmax(S′)\mathrm{Att}(Q,K,V) = \sum_{i} \alpha_i v_i,\quad \alpha = \mathrm{softmax}(S')

Transformer架构:全员讨论的圆桌会议

如果说注意力是探照灯,Transformer 就是把所有探照灯同时打开,还让每个被照到的信息单元都参与讨论。图像被切成一个个小色块(patch),每个色块像一个“证人”,问题的每个词也坐到圆桌旁。任意两个座位之间都连着思维线——任何信息都能看向任何其他信息,经过多层传递,所有证人达成“共识”。

技术上,ViT 先把图像切成 16×16 的 patch,每个 patch 线性映射成一个 token;问题词也变成 token。二者拼接成一个序列,一起进入共享的 Transformer 编码器。自注意力(Self-Attention)让图像 token 之间互相交流、问题 token 之间互相对齐;在编码器-解码器结构中,跨模态注意力(Cross-Attention)则让解码器生成时反复“回看”图像特征。图像和文本第一次在同一个骨干网络里深度融合,早期代表包括 VisualBERT、ViLT 等统一编码器模型。

圆桌会议上所有线索被充分交换,模型的理解能力跃升。但这样的模型参数庞大,像“全班一起讨论”需要消耗大量算力,更需要海量练习资料来喂饱——这就顺理成章地引出了预训练范式。

headi=Attention(QWiQ,KWiK,VWiV)\displaystyle \mathrm{head}_i = \mathrm{Attention}(QW_i^Q, KW_i^K, VW_i^V)
MHA(X)=Concat(head1,…,headh)WO\displaystyle \mathrm{MHA}(X) = \mathrm{Concat}(\mathrm{head}_1, \dots, \mathrm{head}_h) W^O
多头注意力把“全员讨论”分成 h 组进行,每组在不同视角下交流,最后把各组结论拼起来再融合一次。好比圆桌会议分成多个小组同时讨论,再汇总各组意见。
  1. 输入 X图像 patch token 与问题词 token 拼接成的特征矩阵,是“全体与会者”的座位表。
    X=Concat(PatchTokens(I),WordTokens(Q))X = \mathrm{Concat}(\mathrm{PatchTokens}(I), \mathrm{WordTokens}(Q))
  2. 投影矩阵 W_i第 i 个注意力头的专属线性变换,让这个头只在某个子空间里观察关系——有的头看颜色,有的头看位置。
    Qi=XWiQ,Ki=XWiK,Vi=XWiVQ_i = XW_i^Q,\quad K_i = XW_i^K,\quad V_i = XW_i^V
  3. 单头注意力 head_i在一个子空间内执行完整的注意力运算,得到该组的讨论结论。
    headi=softmax(QiKi⊤dk)Vi\mathrm{head}_i = \mathrm{softmax}\left(\frac{Q_iK_i^\top}{\sqrt{d_k}}\right) V_i
  4. 多头拼接与输出投影 W^O把 h 个头的输出首尾拼接,再经过一次线性融合,得到综合所有视角的最终表示。
    MHA(X)=Concat(head1,…,headh)WO\mathrm{MHA}(X) = \mathrm{Concat}(\mathrm{head}_1,\dots,\mathrm{head}_h) W^O

预训练范式:先刷海量题库再实战

一个考生如果只做过考场上的几十套卷子,肯定考不好。预训练范式的思路是让 AI 考生先去“海量题库”刷题——几亿张图片配上文字说明,让模型反复练习“图与文如何对应”。等基础扎实了,再回到 VQA 真题上做短期集训(微调)。这就是“先通识、后专精”的备考路线。

预训练的关键是自监督目标,不需要人工标注。三大类目标最常用:图文对比学习(Contrastive Learning)让匹配的图文对相似度高、不匹配的低,代表是 CLIP;掩码语言建模(MLM)把文字遮住让模型猜,代表是 ALBEF;掩码图像建模(MIM)把图像块遮住让模型重建。多个目标组合训练,模型学到通用的视觉-语言对齐能力。微调阶段,再用 VQA 标注数据做交叉熵训练,把“通识”转正到具体考点上。

刷过千万道题的考生,做几十套模拟卷就能举一反三。预训练范式让 VQA 模型在少量标注下也能快速达到高水平——但考得好不好,最终还得看阅卷标准公不公道。

LCLIP=−log⁡exp⁡(sim(I,Q)/τ)∑j=1Bexp⁡(sim(I,Qj)/τ)\displaystyle \mathcal{L}_{\mathrm{CLIP}} = -\log \frac{\exp\left(\mathrm{sim}(I, Q) / \tau\right)}{\sum_{j=1}^{B} \exp\left(\mathrm{sim}(I, Q_j) / \tau\right)}
分子拉近“匹配的图文对”的相似度,分母对当前批次所有“不匹配的图文对”求和并压低。温度 τ 控制分布的锐利程度。这个目标让视觉编码器和文本编码器学会“同一种语言”。
  1. 正样本对 (I, Q)一张图像和它对应的文字描述,是必须被拉近的“正确答案”。
    positive pair: (I,Q)\text{positive pair: } (I, Q)
  2. 相似度函数 sim通常用两个编码器输出的向量点积或余弦相似度,衡量图文编码后有多一致。
    sim(I,Q)=vI⊤vQ∥vI∥∥vQ∥\mathrm{sim}(I, Q) = \frac{v_I^\top v_Q}{\|v_I\| \|v_Q\|}
  3. 温度系数 ττ 小则概率分布尖锐,模型更“较真”地对待困难负样本;τ 大则分布平滑,训练更温和。
    τ∈(0,1]\tau \in (0, 1]
  4. 负样本分母批次内其他 B-1 个文本都与当前图像不匹配,模型要降低它们的相似度,学会分辨“只有这一张图配这段话”。
    ∑j=1Bexp⁡(sim(I,Qj)/τ)\sum_{j=1}^{B} \exp(\mathrm{sim}(I, Q_j)/\tau)

评估方法:一场公道的阅卷标准

如果阅卷老师只按“答对关键词”打分,考生就会投机——看到图里有人就答“人”,看到问题里有“是吗”就答“是”,完全不看图也能拿高分。VQA 评估的难点就在这:如何设计一套让人没法“裸考”的阅卷标准?

VQA 的最大特点是标准答案不唯一。因此数据集的参考答案由约 10 个人类标注者投票产生:模型预测被算对,当且仅当至少 3 个标注者给出相同答案;得分按相同答案的标注者人数折算。官方 VQA 准确率正是基于这种“人类一致性”思想。此外,研究者设计了“答案熵”指标衡量模型是否总在乱猜,并用盲模型基准检验“不看图能考多少分”。

语言先验偏置是 VQA 评估的头号公敌——“问题里有没有‘香蕉’时,答案 90% 是‘没有’”。一个不看图像的盲模型都能靠语言统计刷到高分。所以研究者提出 VQA-CP 等重组数据集,打乱训练与测试分布,逼模型不能依赖先验。好的阅卷标准逼着考生真正看图,模型想拿高分,就必须把视觉证据“用起来”。

Acc=1N∑i=1N1[a^i=ai∗]\displaystyle \mathrm{Acc} = \frac{1}{N}\sum_{i=1}^{N}\mathbb{1}\left[\hat{a}_i = a_i^*\right]
对每个测试样本,模型概率最大的答案等于人类参考答案就记 1 分,否则记 0 分,最后取平均。公式简单,但背后是“答案一致性”的复杂设计。
  1. 预测答案 â_i模型对第 i 个样本输出概率最大的答案,是考生写下的“答卷”。
    a^i=arg⁡max⁡aP(a∣Ii,Qi)\hat{a}_i = \arg\max_{a} P(a \mid I_i, Q_i)
  2. 参考答案 a_i*由多人投票产生的人类标准答案,可能是“白色”也可能被归一化成“白”。
    ai∗=majority_vote(human answers)a_i^* = \mathrm{majority\_vote}(\text{human answers})
  3. 指示函数 1[·]括号内条件成立取 1,不成立取 0,相当于阅卷老师的“对/错”判定。
    1[a^i=ai∗]\mathbb{1}[\hat{a}_i = a_i^*]
  4. 求和取平均对所有样本的正确判定求和并除以 N,得到 0~1 之间的准确率。
    Acc=correct countN\mathrm{Acc} = \frac{\text{correct count}}{N}

大模型演进:刷遍天下的全能状元

如今考场上出现了“全能状元”——GPT-4V、Gemini、Qwen-VL 这些多模态大模型。它们不仅刷过海量图文题库,还读过几乎整个互联网的文本,练就了“看图说话 + 逻辑推理”的综合内力。面对 VQA 考题,它们不仅给出短答案,还能解释为什么,甚至在答不出时坦诚说“不确定”。

大模型 VQA 的核心范式是“视觉编码器 + 投影层 + 大语言模型”:图像先经视觉编码器变成 token,再通过投影层映射到大语言模型的输入空间,与大语言模型一起自回归生成答案。指令微调是关键配方——把问题包装成指令,用海量的(图像、指令、答案)三元组微调,让模型学会“听令答题”。思维链(Chain-of-Thought)进一步引导模型先推理再作答:“先看猫的位置,再看背景……答案是……”。

当模型规模达到千亿级后,涌现能力出现了——小模型不具备的跨模态推理、视觉联想、少样本即兴作答纷纷登场。考试从“标准化选择题”变成了“开放论述题”。但状元并非完美无缺,“一本正经胡说”的时候也常有,这正是未来要解决的问题。

LSFT=−∑t=1Tlog⁡Pθ(yt∣y<t, Enc(I), Xinstr)\displaystyle \mathcal{L}_{\mathrm{SFT}} = -\sum_{t=1}^{T} \log P_\theta\left(y_t \mid y_{<t},\, \mathrm{Enc}(I),\, X_{\mathrm{instr}}\right)
在“已经看到图像编码、读完指令、生成了一部分答案”的条件下,最大化下一个词的概率。训练目标是最小化所有词位置的负对数似然,让模型学会连贯作答。
  1. 视觉编码 Enc(I)视觉编码器(如 ViT)把图像变成 token 序列,相当于把“整张照片”变成模型能读的符号。
    Enc(I)∈Rn×d\mathrm{Enc}(I) \in \mathbb{R}^{n \times d}
  2. 指令文本 X_instr包含问题的完整指令,例如“请根据图片回答:猫是什么颜色?”,模型学会遵循指令格式。
    Xinstr=“根据图片回答…”X_{\mathrm{instr}} = \text{“根据图片回答…”}
  3. 自回归生成 y_t模型逐词预测下一个 token,前面的输出 y_{<t} 会作为后续预测的上下文。
    Pθ(yt∣y<t,Enc(I),Xinstr)P_\theta(y_t \mid y_{<t}, \mathrm{Enc}(I), X_{\mathrm{instr}})
  4. 负对数似然求和对所有 T 个词位置的损失求和,梯度下降让正确答案序列的概率整体升高。
    LSFT=−∑t=1Tlog⁡Pθ(yt∣⋅)\mathcal{L}_{\mathrm{SFT}} = -\sum_{t=1}^{T} \log P_\theta(y_t \mid \cdot)

未来方向:更开放的试卷

VQA 的考卷正在从“有标准答案的选择题”进化成“开放论述题”:问题可以绕好几个弯——“右边第二只猫的项圈是什么颜色?”——答案不再限定,甚至要考生区分“我确定”和“我猜的”。未来的 AI 考生还需要会查工具、会操作,比如把图放大再看细节。

四个方向最为关键。开放域问答:不再限定答案词典,模型自由生成,评估也更困难。组合推理:需要多跳推理,先定位对象再提取属性,例如“先找到右边第二只猫,再看它的项圈颜色”。可信度建模:让模型输出答案的同时给出置信度,或学会答“不知道”,减少幻觉。智能体化(Agent):VQA 系统能调用外部工具——放大镜、搜索引擎、OCR——把单次问答变成多轮任务。

考试没有终点。从抄写员到全能状元,AI 考生在不断进化,而新的题型永远在路上。理解 VQA 的演进,就是理解多模态 AI 未来的考试大纲——谁能更好地对齐图文、更诚实地评估自己,谁就能在下一场考试中胜出。

z1=Att(I,q1),z2=Att(z1,q2),a∼Dec(z2)\displaystyle z_1 = \mathrm{Att}(I, q_1), \quad z_2 = \mathrm{Att}(z_1, q_2), \quad a \sim \mathrm{Dec}(z_2)
多跳组合推理的链式表示:先对图像做第一次注意力获得第一步证据,再带着新证据做第二次注意力,最后用解码器生成答案。答案不是一步到位,而是靠证据链逐步逼近。
  1. 子问题 q_1第一个子问题编码,比如“右边第二只猫在哪里”,用于初步定位目标对象。
    q1=Enc(“右边第二只猫在哪里”)q_1 = \mathrm{Enc}(\text{“右边第二只猫在哪里”})
  2. 注意力精炼 z_1在图像区域上执行注意力,得到聚焦了目标对象的视觉证据向量。
    z1=∑iαivi,α=softmax(q1⊤K)z_1 = \sum_i \alpha_i v_i,\quad \alpha = \mathrm{softmax}(q_1^\top K)
  3. 子问题 q_2第二个子问题编码,比如“项圈是什么颜色”,在第一步证据基础上继续提问。
    q2=Enc(“项圈是什么颜色”)q_2 = \mathrm{Enc}(\text{“项圈是什么颜色”})
  4. 解码输出 a解码器根据精炼证据生成最终答案,也可以输出一个带置信度的分布。
    a∼Dec(z2,q2)a \sim \mathrm{Dec}(z_2, q_2)

AI 应用场景

智能客服故障报修

阶段:模型推理与产品落地

解决的问题:用户上传设备照片并提问“这个指示灯为什么亮了?”。传统客服靠人工看图判断,效率低且 7×24 小时人力成本高。VQA 模型定位图中指示灯区域,结合问题识别状态并给出排查建议,将平均响应时间从分钟级降到秒级,还能沉淀为标准知识库。

具体案例:某云厂商工单系统接入 VQA 能力后,用户拍下服务器面板照片问“第三颗灯亮红是什么意思?”,模型通过目标定位与颜色属性识别,返回“风扇故障,请更换模块”的答案,减少了一线客服的重复劳动。

视障辅助应用

阶段:多模态感知与生成

解决的问题:视障人士“看不见”但能问。传统 OCR 只能识别文字,无法回答“我面前是什么”“牛奶在冰箱第几层”这类开放式问题。VQA 把“拍照 + 提问”变成自然交互,让视觉信息以语音答案的形式传递给用户。

具体案例:Be My Eyes 类应用中,用户拍下冰箱内部照片并问“里面有牛奶吗?”,VQA 模型先定位层板区域,再判断是否有牛奶盒,返回“有,在第二层靠左”的自然语言答复,显著提升视障人群的生活自主性。

电商智能导购

阶段:预训练 + 微调

解决的问题:用户对着商品图问“这件衣服适合夏天穿吗?”,传统检索只能匹配关键词,无法理解“材质”与“季节”之间的语义关联。VQA 模型在商品图上同时读图与读题,定位面料细节并推断适用季节,实现真正的“所见即所答”。

具体案例:某电商平台用 CLIP 式图文对比学习做预训练,再用商品问答数据微调。用户问“有蓝色款吗”,模型聚焦颜色通道并定位对应商品图,返回“有,浅蓝和深蓝各一件”,提升导购转化率。

Python 演示

python39 行
"""玩具版问题引导注意力VQA:在三个物体中回答形状与颜色问题"""import numpy as np # 区域特征: [圆形, 方形, 三角形, 红色, 绿色, 蓝色]regions = np.array([    [1, 0, 0, 1, 0, 0],  # 区域0: 红色圆形    [0, 0, 1, 0, 1, 0],  # 区域1: 绿色三角形    [0, 1, 0, 0, 0, 1],  # 区域2: 蓝色方形], dtype=float) shapes = ["圆形", "方形", "三角形"]colors = ["红色", "绿色", "蓝色"] def softmax(x):    e_x = np.exp(x - np.max(x))    return e_x / e_x.sum() def vqa_answer(question_vec, temperature=2.0):    # 问题引导注意力: 问题向量与每个区域特征做点积    scores = (regions @ question_vec) * temperature    # softmax 归一化成注意力权重    weights = softmax(scores)    # 按注意力权重加权求和, 得到聚焦后的视觉特征    context = weights @ regions    # 判断问题关注的是形状通道还是颜色通道    if question_vec[:3].sum() > 0:        answer = colors[np.argmax(context[3:])]    else:        answer = shapes[np.argmax(context[:3])]    return answer, weights if __name__ == "__main__":    q_red = np.array([0, 0, 0, 1, 0, 0])    # 问题: 红色物体是什么形状?    q_tri = np.array([0, 0, 1, 0, 0, 0])    # 问题: 三角形的颜色是什么?    for name, q in [("红色物体是什么形状?", q_red), ("三角形的颜色是什么?", q_tri)]:        ans, w = vqa_answer(q)        print(f"问题: {name}")        print(f"注意力权重: {w.round(3)}")        print(f"模型答案: {ans}\n")
目的:用 numpy 实现一个最小化的问题引导注意力 VQA 系统,演示“问题向量与区域特征点积 → softmax 归一化 → 加权求和 → 读取答案”的完整流程。
  1. regions = np.array([...])每个区域特征同时编码“形状”和“颜色”两个属性,模拟图像区域的特征表示。
  2. scores = (regions @ question_vec) * temperature问题向量与每个区域做点积,算出“这块区域与当前问题有多相关”;温度系数让注意力分布更锐利。
  3. weights = softmax(scores)把相关分数归一化成和为 1 的注意力权重,权重高意味着模型“重点看这里”。
  4. context = weights @ regions按权重对所有区域特征加权求和,得到带着问题意图的融合特征。
  5. if question_vec[:3].sum() > 0:判断问题问的是形状还是颜色:前三维是形状通道,后三维是颜色通道。
  6. answer = shapes[np.argmax(context[:3])]从融合特征中挑出最突出的形状维度,映射成可读的答案文本。

常见误区

误区很多初学者以为 VQA = CNN 提取图像特征 + LSTM 编码问题 + 最后拼个分类器就完事了,觉得多模态只是“两个单模态模型各干各的”。

正解双流拼接只是最早期的方案,效果差就差在“融合太晚”。真正的核心难点是跨模态对齐——图像中的区域与问题中的词要在中间层反复交互。注意力、Transformer、预训练都是为了加强这种交互。就像抄写员把图和题分开放着,直到交卷前才匆匆贴在一起,自然不如边看边对。

为何常见:因为早期论文确实这么搭,而且“CNN 管图、LSTM 管字”简单直观,容易让人误以为多模态就是两块独立积木。

误区看到注意力热力图集中在目标区域,就认为模型真正“理解”了图像内容和语义关系,甚至觉得可视化就是模型思考过程。

正解注意力只是计算过程中的权重分配,反映的是“相关性”,不等于因果推理。模型可能因为颜色统计而聚焦到猫,却不知道“猫”这个概念;研究发现注意力热力图存在噪声和对抗脆弱性。它更像舞台聚光灯,告诉我们“在看哪”,而不是“为什么看”。

为何常见:热力图直观又有说服力,人脑天然地把“关注”与“理解”划上等号,忽略了权重的统计本质。

误区在标准 VQA 榜单上拿到高准确率,就认为模型已经是可靠的“看图答题状元”,可以直接上线。

正解数据集中语言先验极强——“有没有香蕉”这类问题盲答“没有”能对 90%,一个不看图的盲模型也能刷到高分。研究者必须用 VQA-CP 重组数据集或盲模型对比检验。准确率只是试卷分数,考生可能靠“押题”拿高分,不证明真的看了题。

为何常见:模型拿高分的客观原因是数据分布不均衡,而人们主观上天然相信分数,很少追问“分数怎么来的”。

误区看到模型演进到 Transformer 时代,就认为旧架构毫无价值,所有任务无脑上 Transformer 就能最强。

正解架构是重要变量,但数据量、预训练配方和计算资源往往是更大的变量。小数据下从零训 Transformer 可能不如预训练过的 CNN+LSTM 融合方案。大模型的成功是“架构 + 规模 + 数据 + 训练目标”的共同作用,不能单一归因于架构。

为何常见:SOTA 榜单上清一色 Transformer 大模型,给人“架构决定一切”的错觉,忽略了背后巨量数据和算力投入。

误区GPT-4V 等演示效果惊艳,就认为 VQA 已完全解决,剩下的只是工程调用。

正解大模型仍有明显短板:幻觉(一本正经胡说)、组合推理薄弱(多跳问题容易错)、空间位置精度差(左右上下分不清)。开放域评估标准也还不成熟。VQA 仍是未完成的考试,可信度建模与推理链是当前研究的重头戏。

为何常见:演示视频经过精心挑选,容易夸大模型能力;用户只看到惊艳样本,没看到失败样本。

面试题

Q1. VQA 任务的输入和输出是什么?

单选题 · easy

  • A.只输入图像给出分类标签
  • B.输入图像和问题给出答案← 正确答案
  • C.只输入文本生成描述图像
  • D.输入视频并给出字幕文本

答案:B。VQA 的核心是跨模态:输入图像和自然语言问题,输出答案。它区别于图像分类(A)、文本生成图像(C)和视频字幕(D)。类比考试:既有考卷(图)又有题目(问题),才能写出答案。

Q2. 早期双流 VQA 模型(CNN+LSTM)的主要瓶颈是什么?

单选题 · easy

  • A.CNN 特征提取速度太慢
  • B.视觉语言融合发生得太晚← 正确答案
  • C.LSTM 无法处理长文本
  • D.训练时缺少足够的 GPU

答案:B。双流架构在最后才拼接视觉与文本特征,中间没有信息交换,形成“信息瓶颈”。就像抄写员把图和题分开放着,交卷前才匆匆贴在一起,细节早已丢失。速度、长文本、算力都不是本质问题。

Q3. 注意力公式 softmax(QK^T/√d_k)V 中 √d_k 的作用是什么?

单选题 · mid

  • A.线性加速整体计算速度
  • B.防止点积过大导致梯度消失← 正确答案
  • C.增加模型可学习参数量
  • D.减少键和值的特征维度

答案:B。高维向量点积的数值随维度增大而变大,softmax 会进入饱和区,梯度极小难以训练。除以 √d_k 把方差拉回 1。这就像调节探照灯亮度,避免光线过曝导致什么都看不清。

Q4. 关于 Co-Attention(共同注意力)机制,下列说法正确的有?

多选题 · mid

  • A.只关注图像区域
  • B.图文互相引导注意力← 正确答案
  • C.能增强跨模态对齐← 正确答案
  • D.不需问题特征参与

答案:BC。Co-Attention 让图像帮助问题选词、问题帮助图像选区域,两个方向交替或联合计算。A 和 D 都错在把注意力限制在单一模态上,违背了“互相照亮”的核心思想,目的是加强跨模态对齐(B、C 正确)。

Q5. 在 ViLT 这类统一 Transformer 中,图像 patch 和问题词是如何交互的?

单选题 · mid

  • A.先并行编码最后再做拼接
  • B.共享编码器并进行自注意力← 正确答案
  • C.用两个独立的 LSTM 编码
  • D.图像和文本完全不进行交互

答案:B。ViLT 将图像 patch 与问题词拼成一个 token 序列,一起进入同一个 Transformer 做自注意力,实现“全员圆桌讨论”。A 是早期双流的做法,C 用了 LSTM,D 直接违背多模态融合的基本前提。

Q6. CLIP 图文对比学习中,温度系数 τ 的主要作用是什么?

单选题 · hard

  • A.控制负样本采样数量
  • B.调节相似度分布的锐度← 正确答案
  • C.控制图像输入的分辨率
  • D.调整训练批次大小参数

答案:B。τ 小则 softmax 分布更尖锐,模型对困难负样本更敏感;τ 大则分布平滑,训练更温和。它不改变负样本数量(A)、分辨率(C)或批次大小(D),只是调节“阅卷严格程度”。

Q7. 下列哪些是 VQA 评估中用于对抗语言先验偏置的手段?

多选题 · mid

  • A.盲模型对比基准← 正确答案
  • B.VQA-CP 重组测试集← 正确答案
  • C.简单增加标注数据量
  • D.引入答案熵检测指标← 正确答案

答案:ABD。盲模型基准考察“不看图能得多少分”;VQA-CP 打乱训练/测试分布让模型无法依赖先验;答案熵检测模型是否总在猜。单纯增加数据量不改变数据分布中的语言先验,所以选 A、B、D。

Q8. 为什么不同论文的 VQA 准确率不能直接比较?

单选题 · mid

  • A.不同模型参数量差异很大
  • B.测试集与归一化方式不同← 正确答案
  • C.训练所用的 GPU 型号不同
  • D.开发者代码风格存在差异

答案:B。VQA 数据集的测试集划分、答案归一化规则(如“白色”与“白”是否算同一答案)会影响分数,跨模型对比必须使用官方统一评估脚本。参数量、GPU、代码风格不影响“分数可比较性”这一原则。

Q9. 多模态大模型(如 Qwen-VL)的核心组成部分包括哪些?

多选题 · hard

  • A.视觉编码器模块← 正确答案
  • B.特征投影连接层← 正确答案
  • C.大语言模型主干← 正确答案
  • D.光流估计子模块

答案:ABC。标准配方是“视觉编码器 + 投影层 + 大语言模型”:图像先编码成 token,再投影到 LLM 输入空间,由 LLM 自回归生成答案。光流估计属于视频运动任务,与 VQA 大模型的核心架构无关。

Q10. 关于大模型在 VQA 上表现出的“涌现能力”,下列说法正确的是?

单选题 · hard

  • A.只依赖于视觉编码器规模
  • B.规模扩大后出现跨模态推理← 正确答案
  • C.是注意力公式改变的结果
  • D.与训练数据规模没有关系

答案:B。涌现能力是指模型规模扩大到千亿级后,出现小模型不具备的跨模态推理、视觉联想等能力,是“规模 + 数据 + 训练配方”共同作用的结果,不是单一组件或公式改变导致的,也与“与数据无关”的说法相反。