小白也能看懂的多模态大模型:当AI学会“看“和“听“
系列文章:AI大模型知识体系 | 第四周·第四篇
引言:当大模型从"盲人"变成了"明眼人"
上一篇我们聊了大模型评估体系,搞清楚了怎么用各种 Benchmark 给模型"打分排名"。但你有没有发现一个问题——这些评测几乎全是文字的?
模型只会读文字、写文字,就像一个博学但失明失聪的学者。你给它看一张猫的图片,它一脸懵;你给它放一段音乐,它毫无反应。它只能靠别人用文字描述给它"听",然后才能理解这个世界。
多模态大模型,就是让这个"盲人学者"恢复了视觉和听觉。
想象一下:一个从小失明的天才,突然有一天做了手术恢复了视力。他之前通过盲文读遍了万卷书,知识渊博,但第一次看到猫的时候,他并不知道眼前这个毛茸茸的东西就是"猫"——他需要把视觉信息和已有的知识对齐,才能理解"原来这就是猫"。
多模态大模型做的事情,本质上就是这件事:让已经拥有强大语言能力的 LLM,学会"看"图片、"听"声音,并把不同模态的信息统一到同一个语义空间里。
今天我们就来拆解多模态大模型的技术原理、代表模型、评测方法和应用场景,最后还带你实操一把图文理解。
一、多模态大模型的架构:视觉编码器 + 翻译官 + LLM
多模态大模型的核心问题只有一个:图片是像素矩阵,文字是 token 序列,它们俩怎么才能"对话"?
答案用一个类比就能讲清楚——翻译官。
想象你有一个只会说中文的大学教授(LLM),和一个只会拍照片的摄影师(视觉编码器)。教授很聪明但看不见,摄影师能看见但不会说话。怎么让他们合作?
你需要一个翻译官(投影层),把摄影师拍的照片"翻译"成教授能听懂的语言。
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 图片输入 │ │ 文字输入 │ │ │
│ (猫的照片) │ │ (这是什么?) │ │ │
└──────┬───────┘ └──────┬───────┘ │ │
│ │ │ │
▼ │ │ │
┌──────────────┐ │ │ │
│ 视觉编码器 │ │ │ │
│ (CLIP ViT) │ │ │ │
│ "摄影师" │ │ │ │
└──────┬───────┘ │ │ │
│ │ │ │
▼ │ │ │
┌──────────────┐ │ │ │
│ 投影层 │ │ │ │
│ (MLP/Q-Former)│ │ │ │
│ "翻译官" │ │ │ │
└──────┬───────┘ │ │ │
│ │ │ │
▼ ▼ │ │
┌──────────────────────────────────────┐ │ │
│ LLM(大语言模型) │ │ │
│ "博学的教授" │ │ │
│ │ │ │
│ 视觉 token + 文字 token → 拼接 → 生成 │ │ │
└──────────────────────┬───────────────┘ │ │
│ │ │
▼ │ │
┌──────────────┐ │ │
│ 输出回答 │ │ │
│ "这是一只猫" │ │ │
└──────────────┘ │ │
三大组件详解
|
组件 |
角色 |
常见实现 |
类比 |
|---|---|---|---|
|
视觉编码器 |
把图片变成特征向量 |
CLIP ViT、SigLIP、InternViT |
摄影师拍照片 |
|
投影层 |
把视觉特征"翻译"成语言空间 |
MLP、Q-Former、Resampler |
翻译官 |
|
LLM |
理解融合后的信息并生成回答 |
LLaMA、Qwen、InternLM |
博学的教授 |
关键洞察: 投影层是整个架构的灵魂。视觉编码器输出的特征维度和 LLM 的 embedding 维度通常不一样,投影层负责做这个"维度对齐"。对齐得好不好,直接决定了模型能不能真正"看懂"图片。
二、代表模型:四大门派各显神通
多模态大模型领域目前百花齐放,我们挑四个最有代表性的来聊。
2.1 GPT-4V:闭源王者
OpenAI 的 GPT-4V(Vision)是多模态大模型的标杆,能力最强但不开源。它的架构细节没有公开,但从表现来看,视觉和语言的对齐做得非常深入,不仅能理解图片内容,还能做复杂的视觉推理。
特点: 能力天花板高,支持多图输入、图文交错对话,但价格不便宜。
2.2 LLaVA:开源先锋
LLaVA(Large Language-and-Vision Assistant)是开源多模态大模型的里程碑,由威斯康星大学等机构提出。架构非常简洁:
图片 → CLIP ViT → MLP 投影层 → LLaMA
LLaVA 的核心创新不在架构,而在数据。 它用 GPT-4 生成高质量的图文对话数据,然后用这些数据做视觉指令微调,让模型学会"看图说话"。
2.3 Qwen-VL:阿里出品
Qwen-VL 是阿里通义千问的多模态版本,架构上引入了 Visual Resampler(视觉重采样器),能把视觉编码器输出的几百个 token 压缩到 256 个,大幅降低计算开销。
图片 → ViT (OpenCLIP) → Visual Resampler (256 tokens) → Qwen-7B
特点: 支持多图、多轮对话,中文能力突出,还有专门的 Qwen-VL-Chat 版本。
2.4 InternVL:上海AI Lab的野心之作
InternVL 的核心思路是让视觉编码器和 LLM 一样大。传统做法用 CLIP ViT-L(约 300M 参数)做视觉编码器,InternVL 直接上了 InternViT-6B(6B 参数),视觉理解能力大幅提升。
图片 → InternViT-6B → MLP 投影层 → InternLM2-8B/20B
特点: 视觉编码器参数量远超同类模型,在多个评测上接近 GPT-4V 水平。
四大模型对比
|
维度 |
GPT-4V |
LLaVA |
Qwen-VL |
InternVL |
|---|---|---|---|---|
|
开源 |
❌ 闭源 |
✅ 开源 |
✅ 开源 |
✅ 开源 |
|
视觉编码器 |
未公开 |
CLIP ViT-L |
OpenCLIP ViT-bigG |
InternViT-6B |
|
投影层 |
未公开 |
MLP |
Visual Resampler |
MLP |
|
LLM |
GPT-4 |
LLaMA-2/3 |
Qwen-7B |
InternLM2 |
|
中文能力 |
一般 |
较弱 |
强 |
强 |
|
定位 |
商业标杆 |
学术基准 |
工业应用 |
学术+工业 |
三、视觉指令微调:教模型"看图说话"
有了架构,模型怎么学会"看图回答问题"呢?这就要用到视觉指令微调(Visual Instruction Tuning)。
3.1 从 SFT 到 V-SFT
还记得第二周我们聊过的 SFT(监督微调)吗?视觉指令微调就是 SFT 的多模态版本——
|
维度 |
SFT |
V-SFT(视觉指令微调) |
|---|---|---|
|
输入 |
纯文字指令 |
图片 + 文字指令 |
|
输出 |
文字回答 |
文字回答 |
|
数据格式 |
(instruction, response) |
(image, instruction, response) |
|
核心挑战 |
指令质量 |
图文对齐质量 |
|
类比 |
教文盲读书识字 |
教盲人"看图说话" |
3.2 LLaVA 的数据构造方法
LLaVA 提出了一种非常巧妙的数据构造方法,用 GPT-4 来"自动生成"图文对话数据:
┌─────────────┐
│ 原始图片 │
│ (猫的照片) │
└──────┬──────┘
│
▼
┌─────────────────────────────────────────────┐
│ 提取图片的两种描述: │
│ 1. Caption: "一只橘猫趴在沙发上" │
│ 2. Boxes: "猫在画面中央,沙发在底部" │
└──────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 把描述喂给 GPT-4,让它扮演"人类提问者": │
│ │
│ Prompt: 请根据以下图片描述,生成三种对话: │
│ 1. 对话型(Conversation) │
│ 2. 详细描述型(Detail Description) │
│ 3. 复杂推理型(Complex Reasoning) │
└──────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ GPT-4 生成的训练数据: │
│ │
│ Q: 图片里有什么动物? │
│ A: 图片里有一只橘色的猫。 │
│ │
│ Q: 这只猫在做什么? │
│ A: 这只猫趴在沙发上,看起来很放松。 │
│ │
│ Q: 为什么你觉得它很放松? │
│ A: 因为它的身体姿态很舒展,眼睛半闭, │
│ 这是猫咪放松时的典型表现。 │
└─────────────────────────────────────────────┘
这个方法的精妙之处在于:用 GPT-4 的语言能力来"补"视觉能力的课。 GPT-4 虽然看不到图片,但有了文字描述,它能生成非常自然、多样的问答对。这些问答对再用来训练 LLaVA,就实现了"视觉→语言"的桥接。
3.3 训练流程
多模态大模型的训练通常分两阶段:
|
阶段 |
目标 |
数据量 |
冻结策略 |
|---|---|---|---|
|
阶段一:预训练对齐 |
让投影层学会"翻译" |
大量图文对(~百万级) |
冻结 ViT 和 LLM,只训练投影层 |
|
阶段二:视觉指令微调 |
让模型学会图文对话 |
高质量指令数据(~十万级) |
冻结 ViT,训练投影层和 LLM |
用类比来说:阶段一是教翻译官学会基本的"图片→文字"翻译,阶段二是教教授和翻译官配合完成复杂的"看图问答"任务。
四、多模态能力评测:怎么给"眼睛"打分?
上一篇我们聊了纯文本的评测基准,多模态也有自己的一套评测体系。而且多模态评测更难——你不仅要测"说"的能力,还要测"看"的能力,更要测"看+说"的协同能力。
4.1 三大核心评测基准
|
基准 |
全称 |
测什么 |
难度 |
类比 |
|---|---|---|---|---|
|
MMBench |
MultiModal Benchmark |
通用视觉理解 |
⭐⭐ |
小学看图说话考试 |
|
MMMU |
Massive Multi-discipline Multimodal Understanding |
大学级多学科视觉推理 |
⭐⭐⭐⭐⭐ |
大学跨学科综合考试 |
|
MathVista |
Mathematical Visual Task |
数学图表推理 |
⭐⭐⭐⭐ |
数学看图解题竞赛 |
MMBench 是最基础的通用评测,涵盖物体识别、属性判断、关系推理等,类似于"看图说话"的基础考试。
MMMU 是目前最难的多模态评测之一,题目来自大学教材和专业考试,涵盖 6 大学科 30 个子领域。比如给你一张生物细胞图,让你判断细胞分裂的阶段——这需要专业知识和视觉理解的深度结合。
MathVista 专门测试模型对数学图表的理解能力,比如看柱状图算增长率、看几何图求面积。这考验的是"看图+推理+计算"的综合能力。
4.2 评测维度对比
纯感知 理解推理 专业领域
┌─────────┐ ┌─────────┐ ┌─────────┐
简单 ────────► │ 图片分类 │ │ 图文匹配 │ │ 基础OCR │
│ 物体检测 │ │ 视觉问答 │ │ 表格识别 │
└─────────┘ └─────────┘ └─────────┘
▲ ▲ ▲
│ │ │
┌───┴───┐ ┌───┴───┐ ┌───┴───┐
中等 ────────► │MMBench│ │MMBench│ │MathVista│
│ 部分 │ │ 推理题 │ │ 基础题 │
└───────┘ └───────┘ └────────┘
▲ ▲ ▲
│ │ │
┌───┴───┐ ┌───┴───┐ ┌───┴───┐
困难 ────────► │ 少 │ │ MMMU │ │MathVista│
│ │ │ 专业题 │ │ 进阶题 │
└───────┘ └───────┘ └────────┘
4.3 当前模型表现一览(2024-2025)
|
模型 |
MMBench |
MMMU |
MathVista |
|---|---|---|---|
|
GPT-4V |
85+ |
59+ |
58+ |
|
Gemini Ultra |
83+ |
59+ |
53+ |
|
InternVL2-76B |
87+ |
58+ |
65+ |
|
Qwen-VL-Max |
83+ |
53+ |
55+ |
|
LLaVA-1.6-34B |
79+ |
44+ |
39+ |
可以看到,开源模型和闭源模型的差距正在快速缩小,InternVL2 在部分指标上已经追平甚至超越了 GPT-4V。
五、多模态应用场景:不只是"看图说话"
多模态大模型能做什么?远比你想象的多。
5.1 图文理解
最基础的应用——给一张图片,问任何问题。比如:
-
"这张图片里有多少个人?"
-
"这张图片的构图有什么特点?"
-
"这张图片适合做什么广告配图?"
5.2 文档 OCR
传统 OCR 只能把图片中的文字"抄"出来,多模态大模型能理解文档的语义结构:
┌──────────────────────────────────┐
│ 传统 OCR │
│ 输入:发票图片 │
│ 输出:一堆乱序的文字 │
│ "金额 128.00 日期 2024-01-15" │
│ │
│ 多模态大模型 │
│ 输入:发票图片 │
│ 输出:结构化理解 │
│ "这是一张发票,金额128元, │
│ 日期2024年1月15日, │
│ 开票方是XX公司, │
│ 商品是笔记本电脑" │
└──────────────────────────────────┘
5.3 视频理解
视频 = 图片序列 + 音频,多模态大模型可以逐帧(或按关键帧采样)理解视频内容,实现:
-
视频摘要:"这个视频讲了什么?"
-
视频问答:"视频里的人在第几秒打开了门?"
-
视频审核:"这个视频是否包含违规内容?"
5.4 代码截图转代码
这是程序员最爱的功能——截一张代码截图,模型直接还原成可运行的代码:
# 输入:一张代码截图
# 输出:还原的代码
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
应用场景总览
|
场景 |
输入 |
输出 |
难度 |
实用性 |
|---|---|---|---|---|
|
图文理解 |
图片+问题 |
文字回答 |
⭐⭐ |
⭐⭐⭐⭐⭐ |
|
文档OCR |
文档图片 |
结构化信息 |
⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
|
视频理解 |
视频+问题 |
文字回答 |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
|
代码截图转代码 |
代码截图 |
可运行代码 |
⭐⭐⭐ |
⭐⭐⭐⭐ |
|
医学影像分析 |
医学图片 |
诊断建议 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
|
自动驾驶感知 |
路况图片 |
驾驶决策 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
六、实操:用 Qwen-VL 做一次图文理解
光说不练假把式,我们来动手跑一个多模态大模型。这里我们用阿里的 Qwen2-VL,它开源、中文能力强、部署简单。
6.1 环境准备
pip install transformers accelerate pillow torch
6.2 加载模型并推理
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from PIL import Image
import torch
# 加载模型和处理器
model_name = "Qwen/Qwen2-VL-2B-Instruct"
model = Qwen2VLForConditionalGeneration.from_pretrained(
model_name,
torch_dtype=torch.float16,
device_map="auto"
)
processor = AutoProcessor.from_pretrained(model_name)
# 准备输入:图片 + 问题
image = Image.open("cat.jpg") # 替换成你的图片路径
messages = [
{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": "请详细描述这张图片的内容。"},
],
}
]
# 处理输入
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(
text=[text],
images=[image],
padding=True,
return_tensors="pt"
).to(model.device)
# 生成回答
output_ids = model.generate(**inputs, max_new_tokens=512)
output_text = processor.batch_decode(
output_ids[:, inputs.input_ids.shape[1]:],
skip_special_tokens=True
)[0]
print("模型回答:", output_text)
6.3 用 LLaVA 也行
如果你更想试试 LLaVA,代码也很简单:
from transformers import LlavaNextProcessor, LlavaNextForConditionalGeneration
from PIL import Image
import torch
# 加载 LLaVA-1.6
model_id = "llava-hf/llava-v1.6-mistral-7b-hf"
processor = LlavaNextProcessor.from_pretrained(model_id)
model = LlavaNextForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto"
)
# 推理
image = Image.open("cat.jpg")
conversation = [
{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": "What is happening in this image?"},
],
}
]
prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
inputs = processor(images=image, text=prompt, return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=256)
print(processor.decode(output[0], skip_special_tokens=True))
6.4 实操小贴士
|
问题 |
建议 |
|---|---|
|
显存不够怎么办 |
用 2B 的 Qwen2-VL-2B,4bit 量化后约 2GB 显存 |
|
图片太大会OOM |
Qwen2-VL 会自动 resize,LLaVA 建议不超过 672×672 |
|
中文回答不好 |
优先用 Qwen2-VL,中文能力远强于 LLaVA |
|
想要更高质量 |
用 7B 或 72B 版本,质量显著提升 |
七、多模态大模型的核心挑战
多模态大模型虽然很酷,但还有不少硬骨头要啃:
7.1 幻觉问题
模型会"看走眼"——图片里明明没有的东西,它信誓旦旦地说有。比如图片里是一只猫,模型可能说"猫旁边有一个碗"(其实没有)。这叫视觉幻觉,比纯文本幻觉更难检测和修复。
7.2 高分辨率图片的处理
一张 4K 图片的像素量是 224×224 图片的 300 多倍,直接塞进 ViT 会爆显存。目前的解决方案包括:
-
动态分辨率: 根据图片大小动态调整 token 数量
-
Patch 切分: 把大图切成小块分别处理
-
视觉重采样: 用 Resampler 压缩视觉 token 数量
7.3 视频理解的长时序依赖
视频有成百上千帧,模型怎么处理长时间序列?目前主流做法是均匀采样关键帧,但这样会丢失细节。更优雅的方案还在探索中。
7.4 多模态对齐的深度
目前的投影层大多只是浅层对齐——把视觉特征"翻译"成语言空间。但人类看图时,视觉和语言是深度交织的。如何实现更深层的多模态融合,是未来的关键方向。
八、总结与下篇预告
今天我们聊了多模态大模型的核心知识:
-
架构三件套: 视觉编码器(摄影师)+ 投影层(翻译官)+ LLM(教授)
-
四大代表模型: GPT-4V(闭源标杆)、LLaVA(开源先锋)、Qwen-VL(中文强)、InternVL(视觉编码器大)
-
视觉指令微调: 用 GPT-4 生成图文对话数据,两阶段训练
-
评测体系: MMBench(通用)、MMMU(大学级)、MathVista(数学图表)
-
应用场景: 从图文理解到文档OCR,从视频理解到代码截图转代码
-
实操: 用 Qwen2-VL 或 LLaVA 跑通图文理解
多模态大模型让 AI 从"只能读"进化到"能看能读",这是迈向通用人工智能的关键一步。但还有一个问题没解决——模型能"看"的图片再多,它的"记忆"也是有限的。
目前主流 LLM 的上下文窗口是 8K-128K token,但很多场景需要处理超长文本(整本书、完整代码库、长对话历史)。怎么让模型在有限算力下处理超长上下文?这就是长上下文与高效注意力要解决的问题。
下篇预告: 我们将聊长上下文窗口和高效注意力机制——RoPE 外推、FlashAttention、稀疏注意力、Mamba 等技术,看模型如何突破"记忆瓶颈"。敬请期待!
本系列持续更新中,欢迎关注收藏,一起从小白变大牛!
更多推荐



所有评论(0)