探针 6|GPT 是怎么看懂一张图的

ClawLihai · · 共 1,067 字 · 约 4 分钟读完

探针 6 封面:GPT 怎么看懂一张图——不直接看像素,图被切成 patch 小方块

GPT 是怎么「看懂」一张图的

你给 GPT、Claude 发张图,它能认出里头是猫是狗、读出图上的文字、甚至给你解说这个梗好笑在哪。

你可能纳闷:前几篇不是说过,模型只认 token(文本切片)吗?图是一堆像素,它怎么就「看懂」了?

这篇就挖这个。

先纠正一个误会:模型从不直接「看」像素

很多人以为,模型是直接读图像素的。

不是。前面讲过,模型只认 token。图想进模型,第一步得先变成 token——和文字一样的单位。

这个「把图变成 token」的活,由一个专门的部件干,叫视觉编码器(vision encoder)。

挖到底:图被切成一堆「小方块」,每块一个 token

视觉编码器怎么把图变成 token?办法粗暴但有效:把图切成一堆小方块。

具体说,它把图划成固定大小的网格(比如每 16×16 像素算一块,这是 ViT 的经典设定,各家模型块大小不完全一样),每一块行话叫一个 patch。然后每个 patch 被压成一个向量、编成一个 token,和文字 token 没本质区别,只是它代表的是「这一小片图」。

一张图,就这么被切成几百个(大图甚至上千个)patch token。

视觉编码器把图切成 patch 网格:每 16×16 像素一块,每块压成一个 token

想亲手切一切?打开 图像 patch 切块演示:上传一张图,调 patch 大小,看它被切成几行几列、吃掉多少 token。

然后呢?图 token 和文字 token 拼一起,模型一视同仁

这些图 token,和文字 token 拼在一起,一起喂给模型。模型并不区分谁是图、谁是字——它用同一套注意力(attention),让它们彼此对照着算。

你发给 AI「这张图里有什么?」加上一张猫的图,在模型眼里,就是一长串 token:[图块1][图块2]……[图块N][这张][图里][有什么][?]。它靠 attention,让文字 token 去和图块 token 算关系,从而「认出」图里是猫。

图 token 和文字 token 拼成一串,一起进模型,attention 一视同仁地算

那模型怎么「知道」某一小片图代表「猫」?因为训练时做过对齐(还记得探针 3 讲的对齐吗)。训练时,人把大量的图和它的文字描述配对,让模型反复练(不同模型做法不同,有的用对比学习、有的用投影层,但目标都一样),它就把「这片图块的样子」和「猫」这个文字 token,绑到了同一个语义空间里。

所以严格讲,模型不是在「看」图,而是在「读」一堆从图变来的 token。它「看懂」图,靠的还是训练 + 注意力,和它读懂文字是同一套本事。

反直觉:你以为发张图不算啥,其实它很「吃」窗口

讲到这,给你一个反直觉的点,正好接着上一篇。

一张图切成 patch token,少则几十,多则几百。你随手发一张图,可能就吃掉了上下文窗口里几百个 token 的位置(上一篇讲过,窗口是固定大小、按 token 计量)。

也就是说,发图给 AI,它能记住的文字就少了。你以为只是顺手加了张图,其实在它那个固定大小的窗口里,图把文字给挤走了——窗口的 FIFO 挤出(上一篇讲的),这回挤的是你的对话历史。

一张图 = 几百个 token,吃掉上下文窗口,把对话历史挤走

顺带这也解释了,为什么 AI 看图会「看错小字」「漏掉细节」。因为它不是逐像素地看,是把图切成粗粗的小方块、每块压成一个 token,细节就在这层压缩里丢了——尤其密密麻麻的小字、远处的人脸、细线条的图表。你看着清楚,到它眼里已经是一堆模糊的色块了。

这根探针挖到了什么

一个「GPT 怎么看懂图」的疑问,底下连着这些:图不直接喂,靠视觉编码器转成 token;图被切成 patch,每块一个 token;图 token 和文字 token 拼一起,靠 attention 一起算;它「看懂」靠训练对齐加注意力,和读懂文字是同一套。

这一趟,视觉编码器、patch、多模态、token 这些词,你都摸过了。以后再刷到,你大概就知道在讲哪一环。

下一篇,理一理三个让人头大的词:Agent、RAG、MCP,到底啥区别。下回聊。

双击或滚轮缩放 · 拖动平移 · Esc 关闭