想象你走进一家热闹的餐厅。领班阿明跑过来,你指着桌上的糖醋鱼问:“这道菜是现做的吗?”他先抬头看了看鱼身上还在冒的热气,又侧耳听清你的问题,然后笑着说:“刚起锅,您闻这醋香。”注意,他做对了什么?他不是只“看”菜,也不是只“听”话,而是边看边听,把眼前景象和你的问题结合起来,才给出回答。这就是“多模态对话”的缩影。 AI 世界里也有这样一位“领班”。它拿到一张图片,同时听到一个自然语言问题,要给出靠谱的答案——这叫视觉问答(VQA)。更进一步,如果它还能就同一张图和你来回聊好几轮,就成了多模态对话。本篇文章,我们将跟着阿明从“眼耳并用”开始,一步步拆解 VQA 背后的原理:图像如何被“看懂”、文字如何被“听懂”、两者如何融合、注意力如何聚焦、模型如何训练。读完你会发现,这些看似高深的技术,本质上是一个“看懂并答对”的故事。

岗位关联

理解 VQA 与多模态对话,是进入多模态大模型应用开发的必经之路。它帮你设计更智能的图文助手、诊断模型幻觉问题,也能在面试和工程落地中占据主动。

目录
  1. 可视化演示
  2. 多模态对话基础
  3. 单模态编码
  4. 跨模态融合
  5. 注意力机制
  6. VQA任务
  7. 模型架构
  8. 训练优化
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

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

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

多模态对话基础

阿明刚当上领班时闹过笑话。客人指着台上的糖醋鱼问:“这鱼是甜的还是辣的?”阿明没看盘子,光听“辣”字就摇头说“不辣”。客人又问:“哪个是招牌菜?”阿明只顾着翻菜单,却没注意到客人正盯着油烟升腾的红烧肉。只用一个感官,果然翻车。

阿明的问题,是“单模态”的局限。在 AI 里,“模态”指信息的存在形式:图像是视觉模态,文字是文本模态,声音是音频模态。只处理一种模态叫单模态,同时处理两种及以上并让它们相互配合,叫多模态。而多模态对话,就是让 AI 一边“看”图像、一边“听”用户的自然语言问题,再围绕这些信息生成回答的交互过程。

其中最典型、最基础的任务是视觉问答(VQA):输入一幅图像和一个问题,输出一个答案。注意,VQA 不是“看图识字”,它要求模型先理解图像内容(猫在哪、什么颜色),再结合问题的意图(问颜色还是问位置),最后组织语言作答。你可以把它理解成一个“眼耳并用”的答题游戏。

阿明后来明白:看和听不是两件事,而是一件事的两面。VQA 用公式把那句话写了出来——先收集证据,再给出最有把握的答案。接下来我们要问的是:图像到底是怎么被“看见”的?

a∗=arg⁡max⁡aP(a∣v,q)\displaystyle a^{*} = \arg\max_{a} P(a \mid v, q)
这一行公式是阿明的“答题守则”:先收集证据(图像+问题),再从所有候选答案里挑出最有把握的那个。
  1. v 与 qv 是图像输入(好比阿明眼前的菜品照片),q 是问题文本(客人那句“哪个是招牌菜?”)。
    v∈V,q∈Qv \in \mathcal{V},\quad q \in \mathcal{Q}
  2. P(a|v,q)在已经看到图像 v、听懂问题 q 的前提下,候选答案 a 成立的概率。
    P(a∣v,q)P(a \mid v, q)
  3. argmax遍历所有候选答案,选出概率最大的那一个作为最终输出。
    arg⁡max⁡a  P(a∣v,q)\arg\max_{a}\; P(a \mid v, q)

单模态编码

阿明开始练“看”的基本功。他发现,自己看菜并不是“哐”的一下把整盘菜拍进脑子,而是目光快速扫过:鱼头、鱼身、浇汁、葱花……大脑先把场景切成一个个小块,再逐块理解。计算机的视觉编码器也是这样:把一张图片切成固定大小的区块(patch),每个区块单独做特征提取。

这个“切块”动作,正是视觉 Transformer(ViT)的核心。它不像早年 CNN 那样用滑动窗口扫图,而是直接把图像切成 16×16 的小格子,像把拼图拆散。每个小格子的像素展平后,经过一个可学习的线性映射,变成一个“语义向量”。同理,文本一侧也有自己的编码器:先把句子切成词(token),再把每个词向量化——阿明的“耳朵”其实也是一套编码器。

把图像切成 N 个区块后,ViT 会这样组装输入序列:

切块、映射、编号——阿明发现,“看见”的本质是把图像翻译成模型的语言。但光有眼睛还不够:视觉特征和文本特征现在是两种“语言”,怎么放在一起聊?这就是下一节的融合问题。

z0=[ xcls;  xp1E;  xp2E;  ⋯ ;  xpNE ]+Epos\displaystyle z_0 = [\,x_{\mathrm{cls}};\; x_p^{1}E;\; x_p^{2}E;\; \cdots;\; x_p^{N}E\,] + E_{\mathrm{pos}}
这一行把“看菜”翻译成了“读序列”:图片被编成一串向量,每个向量代表一个小区块,最后还带一个汇总用的“班牌”。
  1. x_p^i第 i 个图像区块展平后的原始像素向量(好比切好的第 i 块食材)。
    xpi∈RP2⋅Cx_p^{i} \in \mathbb{R}^{P^2 \cdot C}
  2. E可学习的线性映射矩阵,把像素向量“翻译”成模型能理解的语义向量(厨师调好的味)。
    E∈R(P2⋅C)×DE \in \mathbb{R}^{(P^2 \cdot C) \times D}
  3. x_cls一个特殊的汇总向量,训练后用来概括整张图(班里的班长,最后代表全班发言)。
    xclsx_{\mathrm{cls}}
  4. E_pos位置编码,告诉模型每个区块原来在图片的左上还是右下(拼图上的序号)。
    Epos∈R(N+1)×DE_{\mathrm{pos}} \in \mathbb{R}^{(N+1) \times D}
  5. [ ; ; …… ]把所有区块向量首尾拼接成一个长序列,交给后续网络处理。
    z0=[ xcls;  xp1E;  xp2E;  ⋯ ;  xpNE ]+Eposz_0 = [\,x_{\mathrm{cls}};\; x_p^{1}E;\; x_p^{2}E;\; \cdots;\; x_p^{N}E\,] + E_{\mathrm{pos}}

跨模态融合

眼睛说“这条鱼红亮亮”,耳朵听到“糖醋”——红色加糖醋等于糖醋鱼,阿明心里暗喜。可当他要拼接两边的信息时,卡壳了:图像侧送来的特征是一个 784 维的向量,文本侧却是 512 维的向量,维度对不上,怎么合并?

这就是跨模态融合要解决的问题。就像两套不同制式的插头不能直接插进同一个插座,解决的办法是加一个“转换插头”——投影层(Projection Layer)。投影层本质上就是一个线性层(矩阵乘法加偏置),把视觉特征的维度映射到语言模型能接受的维度,让两边住进同一个“特征空间”。

有了投影层,融合就顺理成章:最简单的方式是把视觉特征和文本特征拼接(concatenate)成一个长向量,再交给后续网络;更高级的方式是让两者的 token 在注意力层里互相“照看”(即下一节的交叉注意力)。无论哪种,前提都是先把特征空间对齐:

阿明点点头:原来“眼耳并用”不是把两张照片叠在一起,而是先翻译成同一种语言再合并。不过,拼接只是“傻傻地并排站着”。客人一问“招牌菜在哪”,阿明的目光要学会“唰”地锁定目标——注意力机制登场。

hv=Wv⋅v+bv,h=[ hv;  hq ]\displaystyle h_v = W_v \cdot v + b_v ,\quad h = [\,h_v;\; h_q\,]
这一行是“转换插头”的说明书:先把视觉特征投影到语言频道,再和文本特征拼在一起,组成统一表示。
  1. v视觉编码器输出的图像特征向量(阿明眼睛记下的“菜品速写”)。
    v∈Rdvv \in \mathbb{R}^{d_v}
  2. W_v 与 b_v投影层的权重矩阵和偏置,是可学习的参数(转换插头内部的电路)。
    Wv∈RdL×dv,bv∈RdLW_v \in \mathbb{R}^{d_L \times d_v},\quad b_v \in \mathbb{R}^{d_L}
  3. h_v投影后的视觉特征,维度已和文本特征对齐(换好插头、电压匹配)。
    hv=Wv⋅v+bvh_v = W_v \cdot v + b_v
  4. h_q文本编码器输出的问题特征。
    hq∈RdLh_q \in \mathbb{R}^{d_L}
  5. [h_v; h_q]把两个特征首尾拼接成同一个向量 h,交给下一步解码。
    h=[ hv;  hq ]h = [\,h_v;\; h_q\,]

注意力机制

客人问“哪个是招牌菜”时,阿明不会把全店 50 道菜挨个背一遍,他的目光会瞬间锁在红烧肉上。这种“带着问题去找重点”的能力,在模型里叫注意力机制(Attention)。它让模型在处理每个问题时,动态决定“该重点看哪一块”。

注意力最著名的形态是缩放点积注意力(Scaled Dot-Product Attention)。直觉上它做了三件事:用问题生成查询 Q,让每个图像区块准备好自己的键 K 和值 V;用 Q 和每个 K 算相似度打分;最后按分数加权汇总 V。分数越高,说明“这块越值得看”。在跨模态场景里,交叉注意力(Cross-Attention)让 Q 来自问题文本、K/V 来自图像区块——问题像探照灯一样扫过全场,照到哪块,哪块的画面就清晰浮现。

阿明豁然开朗:“注意力就是我的眼神!”问题不同,眼神不同;问招牌菜,眼神落在红烧肉上;问水杯,眼神落在桌角。有了它,阿明终于能边听边看、边看边答。

Attention(Q,K,V)=softmax ⁣(QK⊤dk)V\displaystyle \mathrm{Attention}(Q, K, V) = \mathrm{softmax}\!\left(\frac{Q K^{\top}}{\sqrt{d_k}}\right) V
这一行是注意力的“打光公式”:用问题当探照灯,图像区块当被照的舞台,光照强的地方权重高,最终画面由灯光亮度加权合成。
  1. Q查询矩阵,来自问题文本一侧(客人的问题“招牌菜在哪?”)。
    Q∈Rnq×dkQ \in \mathbb{R}^{n_q \times d_k}
  2. K图像各区块的“键”,相当于每块的姓名牌(“我是红烧肉”“我是糖醋鱼”)。
    K∈Rnv×dkK \in \mathbb{R}^{n_v \times d_k}
  3. QK^T让问题去和每个区块的姓名牌算相似度,得到分数(探照灯扫过每个牌子的亮度)。
    QK⊤∈Rnq×nvQ K^{\top} \in \mathbb{R}^{n_q \times n_v}
  4. √d_k缩放因子,用维度开方,防止分数太大把 softmax 推成非 0 即 1(给探照灯加滤光片)。
    QK⊤dk\frac{Q K^{\top}}{\sqrt{d_k}}
  5. softmax把所有分数转成和为 1 的权重(亮度归一化,总有一块最亮)。
    softmax ⁣(QK⊤dk)\mathrm{softmax}\!\left(\frac{Q K^{\top}}{\sqrt{d_k}}\right)
  6. V图像各区块的实际内容,按权重加权求和,得到“带着问题视角”的融合特征。
    Attention(Q,K,V)=softmax ⁣(QK⊤dk)V\mathrm{Attention}(Q, K, V) = \mathrm{softmax}\!\left(\frac{Q K^{\top}}{\sqrt{d_k}}\right) V

VQA任务

餐厅为了考核领班,设计了一套标准问答卷:拿一张菜品照片,配一个问题,让阿明回答,再和资深领班的答案比对。这套“考核制度”,在 AI 领域就叫 VQA 任务。它不只是研究者的玩具,而是所有多模态对话系统的地基。

VQA 任务有三个要素:输入是“图片+问题”的配对;输出是自然语言答案;数据是人工标注的(图片,问题,答案)三元组。经典的 VQA 数据集中,问题覆盖颜色、数量、位置、关系等类型——相当于餐厅题库里分好了“辣不辣”“哪个菜”“几个人吃”等题型。

有了标准题和标准答案,就能给模型打分。最常用的指标是准确率(Accuracy):模型的预测答案和人工标注答案一致,就算答对一题。注意,有些问题允许多个合理答案,因此也有“开放答案”的评测协议,但核心思想不变——答对多少题:

阿明看了一眼自己的得分,笑了:原来“会聊天”是可以被量化、被比拼的。标准题库有了,下一步就是选一套趁手的“答题装备”——模型架构。

Acc=1N∑i=1N1(a^i=ai)\displaystyle \mathrm{Acc} = \frac{1}{N}\sum_{i=1}^{N} \mathbb{1}\big(\hat{a}_i = a_i\big)
这一行是“正确率”的计算规则:把 N 道题里答对的加起来,再除以总题数。
  1. N测试集中的问题总数(考核的总题数)。
    NN
  2. a_i_hat模型对第 i 题的预测答案(阿明写在卷子上的答案)。
    a^i\hat{a}_i
  3. a_i人工标注的标准答案(资深领班的答案)。
    aia_i
  4. 𝟙(·)指示函数,括号里成立记 1、不成立记 0(答对记一分,答错零分)。
    1(a^i=ai)\mathbb{1}\big(\hat{a}_i = a_i\big)
  5. 求和除以 N把所有题的得分平均,得到 0 到 1 之间的正确率。
    1N∑i=1N1(a^i=ai)\frac{1}{N}\sum_{i=1}^{N} \mathbb{1}\big(\hat{a}_i = a_i\big)

模型架构

餐厅迎来了一次大改造:不再让眼睛、耳朵、嘴巴三个部门各自为政,而是请来一位“金牌解说员”统一调度。眼睛(视觉编码器)负责看,翻译官(投影层)把画面译成解说员听得懂的“内部语言”,解说员(大语言模型)一边听客人提问、一边参考画面,流利组织答案。这条流水线,就是当下最流行的多模态大模型架构——LLaVA 模式。

LLaVA 的“三大件”是:视觉编码器(如 ViT/CLIP)、投影层(一个线性层或 MLP)、大语言模型(如 LLaMA/Qwen)。图像被视觉编码器切成 N 个区块、变成 N 个视觉 token,投影层把它们映射成“语言模型看得懂”的 token,然后与问题文本 token 拼在一起,喂给大语言模型。

大语言模型以自回归方式生成答案:每生成一个词,就把“已经生成的词+问题+视觉信息”全部作为上下文,预测下一个词。整句答案的概率是每个词概率的乘积:

阿明对这个新搭档很满意:眼睛负责看,耳朵负责听,大脑负责说,各司其职又彼此协作。但这样的“解说员”不是天生就会看图的——它需要一场严苛的训练。这就是最后一幕:训练优化。

P(a)=∏i=1LP(ai∣a<i, q, hv)\displaystyle P(a) = \prod_{i=1}^{L} P\big(a_i \mid a_{<i},\, q,\, h_v\big)
这一行是解说员的“发言流程”:每蹦出一个词,都要回头看看前面说过啥、客人问了啥、画面里是啥,再决定下一个词。
  1. L答案句子的长度(解说员一共要说几个词)。
    LL
  2. a_i第 i 个输出词(解说员说的第 i 个字)。
    aia_i
  3. a_<i前 i−1 个已经生成的词(解说员自己刚说过的话)。
    a<ia_{<i}
  4. q问题文本的 token 序列(客人刚才的问题)。
    qq
  5. h_v投影后的视觉 token(翻译官递给解说员的画面笔记)。
    hvh_v
  6. Π(连乘)把每个词的概率相乘,得到整句话的概率(整句话通顺的概率)。
    ∏i=1LP(ai∣a<i, q, hv)\prod_{i=1}^{L} P\big(a_i \mid a_{<i},\, q,\, h_v\big)

训练优化

新的解说员虽然口才了得,但一上来指着土豆说“这是苹果”,让阿明哭笑不得。要让模型真正“看图说话”,必须经过系统训练。现在的做法是两阶段带教:第一阶段做“图文对齐”预训练,让视觉特征和文本特征“绑定”;第二阶段做“指令微调”,用大量(图片,问题,答案)数据教它作答。

第一阶段的王牌方法叫对比学习(Contrastive Learning):给模型看“一对对”图文配对样本,训练目标是——匹配的图文对(菜和它的名字)特征要靠近,不匹配的对(菜和别人的名字)特征要推开。CLIP 就是这么练出来的。它用 InfoNCE 损失实现:

第二阶段指令微调(如 LLaVA 用图文对话数据做 SFT)让模型学会“有问必答”的对话格式;此外还会做数据增强——对图片随机裁剪、翻转、改变亮度,模拟“换个角度看同一道菜”,逼迫模型学到真正的内容而非死记硬背。数据质量(图文对齐程度)往往比数据量更重要。

阿明摸了摸胸前的领班徽章:从眼耳并用,到切块编码,到特征融合,再到注意力聚焦、架构选型、两阶段训练——他终于明白,所谓多模态对话,不过是一套完整的“看懂+听懂+说对”的成长链条。那条鱼、那盘红烧肉还是老样子,但他已经不是原来那个只会翻菜单的领班了。

L=−log⁡exp⁡(s(vi,ti)/τ)∑j=1Bexp⁡(s(vi,tj)/τ)\displaystyle \mathcal{L} = -\log \frac{\exp\big(s(v_i,t_i)/\tau\big)}{\sum_{j=1}^{B}\exp\big(s(v_i,t_j)/\tau\big)}
这一行是“配对训练”的评分规则:给模型看一张图和一堆文本,它得学会从里面一把揪出真正配对的那句描述。
  1. s(v_i, t_i)第 i 张图像与其配对文本的相似度分数(菜品和名字的匹配度)。
    s(vi,ti)s(v_i, t_i)
  2. τ(温度系数)控制分数分布的陡峭程度,τ 越小训练越严格(评分标准更严苛)。
    τ\tau
  3. t_jmini-batch 里所有文本,包含一个正样本和 B−1 个负样本(一桌菜里只有一道是答案)。
    j=1,2,…,Bj = 1, 2, \ldots, B
  4. exp 与 log构成 softmax 形式,让正样本分数尽量大、负样本尽量小。
    exp⁡(s(vi,ti)/τ)∑j=1Bexp⁡(s(vi,tj)/τ)\frac{\exp\big(s(v_i,t_i)/\tau\big)}{\sum_{j=1}^{B}\exp\big(s(v_i,t_j)/\tau\big)}
  5. 负号把“越大越好”翻转为损失函数“越小越好”。
    −log⁡(⋅)-\log(\cdot)

AI 应用场景

医学影像辅助问答

阶段:多模态模型推理 + 领域微调

解决的问题:医生阅片时想快速核对“这个结节边界是否清晰”,传统方式是翻报告、找模板,费时且主观。多模态模型结合影像和医生的自然语言提问,用注意力定位病灶区域并生成回答,降低漏诊风险。

具体案例:肺结节 CT 场景中,医生输入“左上肺的结节边缘光滑吗?”,视觉编码器扫描影像、文本编码器理解提问,交叉注意力把医生的问题引向结节区块,模型回答“边缘光滑,倾向良性”。这正是“阿明看菜听问”在临床的落地。

电商客服图文问答

阶段:多模态对话系统部署

解决的问题:用户退货时拍张照片问“这个划痕能保修吗”,纯文本客服看不见图,只能让用户反复打字描述,体验差、效率低。融合视觉的客服机器人看图+读问题,直接判断划痕位置与程度,给出售后建议。

具体案例:某电商平台的售后机器人接入多模态能力后,用户上传手机外壳照片并提问,模型先切块编码图片,再用交叉注意力聚焦划痕区域,结合“保修”问题的语义输出“划痕长度约 3 厘米,属于外观磨损,不在保修范围内”。

Python 演示

python64 行
# -*- coding: utf-8 -*-"""Minimal VQA demo: 用注意力机制回答简单的看图问题""" import math # 4 个语义概念: 猫 / 亮 / 蓝 / 红CONCEPTS = ["cat", "bright", "blue", "red"] # 3x3 图像, 每块是视觉编码器输出的 4 维语义向量patches = [    [0.9, 0.1, 0.1, 0.8],  # 左上: 红毛的猫    [0.2, 0.9, 0.2, 0.1],  # 中上: 最亮的光斑    [0.1, 0.2, 0.2, 0.9],  # 右上: 红色摆件    [0.1, 0.2, 0.9, 0.1],  # 左中: 蓝色窗帘    [0.8, 0.3, 0.1, 0.2],  # 正中: 第二只猫    [0.2, 0.8, 0.2, 0.2],  # 右中: 台灯    [0.1, 0.1, 0.9, 0.2],  # 左下: 蓝色地毯    [0.2, 0.2, 0.2, 0.8],  # 中下: 红色抱枕    [0.3, 0.3, 0.3, 0.3],  # 右下: 普通墙面]POS = ["top-left", "top-mid", "top-right", "mid-left", "center",       "mid-right", "bottom-left", "bottom-mid", "bottom-right"]  def encode_question(q):    """把问题文本映射成概念查询向量"""    vec = [0.0] * len(CONCEPTS)    for i, c in enumerate(CONCEPTS):        if c in q:            vec[i] = 1.0    if sum(vec) == 0.0:        vec = [1.0] * len(CONCEPTS)  # 没匹配到关键词就一视同仁    return vec  def softmax(scores):    """数值稳定的 softmax"""    scores = [s - max(scores) for s in scores]    exps = [math.exp(s) for s in scores]    total = sum(exps)    return [e / total for e in exps]  def vqa(question):    """前向推理: 问题查询 -> 图像注意力 -> 加权融合 -> 选答案"""    q_vec = encode_question(question)    scores = []    for p in patches:        dot = sum(a * b for a, b in zip(q_vec, p))        scores.append(dot / math.sqrt(len(CONCEPTS)))  # 缩放点积    weights = softmax(scores)               # 注意力分布    hot = weights.index(max(weights))       # 注意力最强的区块    fused = [0.0] * len(CONCEPTS)    for j, p in enumerate(patches):        for k in range(len(CONCEPTS)):            fused[k] += weights[j] * p[k]   # 按权重汇总视觉信息    reason = CONCEPTS[fused.index(max(fused))]    return POS[hot], reason, weights  if __name__ == "__main__":    for q in ["where is the cat", "which part is bright", "red appears where"]:        pos, reason, _ = vqa(q)        print("Q:", q, "-> looked at:", pos, "main concept:", reason)
目的:用约 60 行代码实现一个极简 VQA 前向推理管道,演示“问题驱动注意力 → 加权融合 → 给出答案”的完整过程。
  1. scores.append(dot / math.sqrt(len(CONCEPTS)))缩放点积:防止相似度分数过大,把 softmax 推向极端。
  2. weights = softmax(scores)把分数变成和为 1 的注意力权重,每块图像“分到多少关注”。
  3. hot = weights.index(max(weights))找出注意力最强的区块,它就是答案的“落点”。
  4. fused[k] += weights[j] * p[k]按权重汇总视觉内容,模型“带着问题视角”看整张图。
  5. for q in ["where is the cat", ...]每个问题就是一个 VQA 样本,等价于餐厅考核里的一道题。

常见误区

误区很多初学者觉得,只要给聊天机器人加一个“上传图片”的功能,它就能看图说话。反正模型那么聪明,直接把图片塞进去不就行了?

正解模型“看不到”原始像素。图片必须经过视觉编码器切成 token、投影层对齐维度后,变成大语言模型能读懂的向量,才能参与对话。上传功能只是外层管道,真正难的是“图像如何变成模型的语言”。如果把原始像素直接喂给纯文本模型,它只会一脸茫然——就像把一盘菜端给一个只听得懂菜名、从没见过菜的人。

为何常见:用户界面看起来就是“多了一个传图按钮”,让人误以为底层只是加了个接口,其实是整套架构(编码器+投影层+多模态训练)的更新。

误区以为模型像人眼一样完整地看到了图片里的每个细节,背景、光线、角落全都能感知。

正解视觉编码器把图片切成小块并映射成向量,模型只能看到“被编码后的语义摘要”。细节会被压缩、丢失甚至扭曲,这也是多模态模型产生幻觉(说出图中没有的东西)的重要原因。它“看”到的不是图片本身,而是图片的特征素描。

为何常见:看 demo 时模型答得头头是道,人们就容易高估它的“视力”,忽视了特征压缩带来的信息损失。

误区注意力热力图显示模型盯着猫的区域,很多人就说“模型真的理解猫了”,仿佛权重分布就是思维过程。

正解注意力只是相关性信号,不是推理过程。模型可能在答错时仍“盯着”正确区域,也可能“看了”别处却答对。注意力适合做调试参考,但不能等同于可解释的“思考链”。阿明盯着红烧肉,也可能因为走神而报错菜名。

为何常见:注意力热力图太直观、太有说服力,让人误以为看到了模型的心思。

误区榜单上 90% 的准确率,让外行以为模型已经掌握了“看物推理”的能力。

正解数据集中存在大量语言偏置。例如“图中物体是什么颜色”这类问题,训练集里答案经常是“白色/黑色”,模型只需记住“颜色问题→答白色”就能拿高分,根本不用看图。这类“捷径学习”造成的虚高,需要设计对抗样本才能暴露。

为何常见:准确率是单一数字,看起来客观公正,但数据分布不均衡会骗人;只看分数不看错误分析,很容易被误导。

面试题

Q1. 视觉问答(VQA)任务的输入是什么?

单选题 · easy

  • A.一张图片和一个问题← 正确答案
  • B.一段音频和一段视频
  • C.一份表格和一段描述
  • D.一组日志和一段报错

答案:A。VQA 的标准输入是一张图片和一个自然语言问题,输出是自然语言答案,相当于“领班同时看菜和听问”。音频、视频是其他模态,表格、日志不属于视觉问答的典型输入。

Q2. 视觉 Transformer(ViT)处理图片的第一步是?

单选题 · easy

  • A.把图片切成统一大小区块← 正确答案
  • B.把图片压缩成单个向量
  • C.把图片旋转校正水平
  • D.把图片转成灰度图像

答案:A。ViT 的第一步是把图片切成大小一致的区块(patch),再展平映射成向量序列。压缩成单向量、旋转校正、灰度化都不是 ViT 的标准流程,好比阿明看菜先分块再看每一块。

Q3. 评测 VQA 模型答案好坏最常用的指标是?

单选题 · easy

  • A.答案的准确率← 正确答案
  • B.模型的推理速度
  • C.显存的占用大小
  • D.网络的延迟高低

答案:A。VQA 的核心指标是答案准确率,即预测答案与人工标注一致的比例。推理速度、显存占用、网络延迟属于工程性能指标,衡量的是“跑得快不快”,而不是“答得对不对”。

Q4. 缩放点积注意力中除以 √d 的作用是?

单选题 · mid

  • A.防止内积过大影响训练← 正确答案
  • B.降低计算的复杂度
  • C.增加模型的表达能力
  • D.压缩向量的特征维度

答案:A。QK^T 的数值会随维度增大而增大,导致 softmax 输出接近 one-hot、梯度趋近于零。除以 √d 相当于给分数加“滤光片”,把分数拉回合适尺度,保证梯度健康。

Q5. 投影层(Projection Layer)的主要作用是?

单选题 · mid

  • A.对齐图像与文本特征维度← 正确答案
  • B.增加图像的色彩通道数
  • C.压缩文本的词汇量
  • D.加速模型的推理过程

答案:A。视觉编码器输出的特征维度(如 1024)与语言模型期望的维度(如 4096)通常不同,投影层用线性映射对齐两者,相当于“转换插头”。增色彩通道、缩词汇、加速推理都不是投影层的职责。

Q6. 以下哪些属于多模态应用场景?

多选题 · mid

  • A.依据拍照识别菜品卡路里← 正确答案
  • B.对纯文本做关键词抽取
  • C.对音频做降噪增强
  • D.结合 X 光片辅助诊断← 正确答案

答案:AD。A 是“图像+文本→答案”的典型 VQA;D 是医学图像结合医生问题做辅助诊断,也属于多模态。B 只处理文本,C 只处理音频,都是单模态任务,不涉及“图文协作”。

Q7. 在交叉注意力层中,查询向量(Q)通常来自?

单选题 · mid

  • A.问题文本一侧← 正确答案
  • B.图像区块一侧
  • C.随机初始化的噪声
  • D.上一个答案的词

答案:A。交叉注意力的设计是“问题提问、图像应答”:Q 来自问题文本侧,K/V 来自图像区块侧,让问题的语义决定图中哪里被重点关注。反过来或随机初始化都会破坏这种引导关系。

Q8. 关于注意力机制的描述,正确的有?

多选题 · hard

  • A.权重高表示该区域相关性高← 正确答案
  • B.权重分布就等于模型思维
  • C.交叉注意力可连接图文← 正确答案
  • D.问题词会引导视觉聚焦← 正确答案

答案:ACD。注意力权重反映的是相关性而非因果推理,所以 B 是常见误区。A 正确,权重高说明该区域与当前问题更相关;C 正确,交叉注意力让文本跨模态“看”图像;D 正确,Q 来自问题词,权重分布由问题引导。

Q9. 关于两阶段训练的说法正确的有?

多选题 · hard

  • A.第一阶段做图文对齐← 正确答案
  • B.第二阶段做指令微调← 正确答案
  • C.两阶段可以完全颠倒
  • D.数据质量影响对齐效果← 正确答案

答案:ABD。两阶段训练是“先对齐后微调”:第一阶段用图文配对做对比学习,让视觉与文本特征绑定;第二阶段用问答数据教模型对话格式。C 错误,颠倒顺序会让模型“学会说话却不会看图”;D 正确,图文不对齐的数据会损害对齐效果。

Q10. VQA 模型在榜单上分数虚高,最可能的原因是?

单选题 · extreme

  • A.数据集存在答案语言偏置← 正确答案
  • B.模型使用了更大的显存
  • C.标注团队人数非常多
  • D.模型推理框架更加高效

答案:A。经典的语言偏置陷阱:训练集中“颜色类”问题答案多为黑/白,模型学到“颜色问题→答黑色”的捷径,不看图也能得高分,这是“捷径学习”导致的虚高。显存、标注人数、推理框架都不会改变数据集本身的偏置。