AI是如何理解图像的

2026-04-08T00:00:00Z | 4分钟阅读 | 更新于 2026-04-08T00:00:00Z

@
AI是如何理解图像的

上一篇写 RAG 的时候,我提到了 embedding——把文字变成向量,让模型可以做语义检索。

写完之后我就开始想另一个问题:图片是怎么做到这件事的?

当我在 ChatGPT 或者 Claude 里上传一张截图,让它帮我解释里面的内容,模型是怎么"看懂"这张图的?

图片在计算机里是什么

我先想搞清楚一件事:计算机眼里的图片到底是什么。

在计算机里,一张图片本质上就是一个数字矩阵。以最常见的 RGB 图片为例,每个像素点都有三个数值,分别对应红、绿、蓝三个通道,值的范围是 0 到 255。

一张 512×512 的图片,就是一个 512×512×3 的数字数组,共计约 78 万个数字。

计算机"存图片"这件事就是这样——存一堆数字。

但这堆数字本身没有"猫"或者"表格"或者"代码截图"这些概念,它只是数字。从一堆数字里读出"这是一只猫",就是 AI 理解图像要解决的问题。

早期的解法:CNN

在 Transformer 出现之前,图像识别的主流方案是 CNN(卷积神经网络)

CNN 的做法是:用一个小窗口(卷积核)在图片上一块一块地扫,每次只看一小块区域,提取局部特征。扫完一遍之后,这些局部特征再被逐层叠成更抽象的特征。

可以粗略地理解为:

  • 第一层识别出"边缘"和"颜色"
  • 中间层识别出"纹理"和"形状"
  • 最后几层识别出"耳朵"、“眼睛”、“毛发”
  • 最终输出"这是一只猫"

CNN 在图像分类这个任务上做得很好,但它有个局限:它的感受野是固定的,很难建立图片里跨区域的长距离关系。比如理解"这是一张表格",你需要同时感知行、列、标题这些分散在各个位置的元素,CNN 的局部扫描就比较吃力。

现在的主流方案:ViT

ViT 全称是 Vision Transformer,2020 年由 Google 提出。它做了一件很有意思的事:把图片当成文字来处理

Transformer 处理文字的方式是把一段话切成一个个 token,每个 token 变成一个向量,再通过注意力机制让每个 token 关注其他所有 token。

ViT 的做法几乎一模一样:

  1. 把图片切成若干个固定大小的小方块,叫做 patch(比如 16×16 像素一块)
  2. 把每个 patch 展平成一个向量,再经过线性变换,变成一个 patch embedding
  3. 加上位置编码,告诉模型这个 patch 在图片的哪个位置
  4. 把这一排 patch embedding 送进标准的 Transformer 里处理

这样,一张图片就被转换成了一串"视觉 token",和文字 token 的形式完全一致。

以一张 224×224 的图片为例,如果每个 patch 是 16×16,那整张图片会被切成 196 个 patch,也就是 196 个视觉 token。

多模态模型怎么把图片和文字连起来

到这里就到了我最好奇的部分:像 GPT-4o 或者 Claude 这样的多模态模型,是怎么同时理解图片和文字的?

答案是:得让图片的表示和文字的表示落在同一个向量空间里,这样才能互相比较。

说到这里就绕不开 CLIP(Contrastive Language-Image Pre-training),OpenAI 在 2021 年发布的。

CLIP 的训练方法说起来不复杂:给模型大量"图片 + 文字描述"的配对,让匹配的图文对在向量空间里靠近,不匹配的推远。

训练完之后,CLIP 拥有两个编码器:

  • 一个图像编码器(Image Encoder)
  • 一个文字编码器(Text Encoder)

两个编码器的输出在同一个向量空间里,所以可以直接做相似度比较。这也是为什么用 CLIP 可以做"以文搜图"——把文字和图片分别 embed,然后找最近邻。

搞清楚 CLIP 之后,多模态模型的工作方式就好理解了:

  1. 用一个 Vision Encoder(通常是 ViT)把图片变成一组视觉 token
  2. 把这组视觉 token 和文字 token 拼在一起,一起送进语言模型
  3. 语言模型通过注意力机制,让文字和图片的 token 互相感知,最终生成回答

就是这么直接:图片被转成 token,和文字 token 混在一起,统一处理。

小结

现在回头看,整件事没我想象的神秘:

  • 图片是像素数组,本质是数字
  • ViT 把图片切成 patch,每个 patch 变成一个向量,形式和文字 token 一致
  • CLIP 做了图文对齐,让图片和文字可以在同一个语义空间里比较
  • 多模态模型把视觉 token 和文字 token 一起送进 Transformer,用注意力机制做融合

当我把截图发给 AI 让它解释,背后大概就是这个过程:图片切成 patch,变成 token,和我的问题拼在一起进了模型,然后模型输出回答。

这个系列还有很多可以继续深挖的地方,但对我现在的目的来说,先搞清楚主流程就够了。

© 2026 火箭的博客

🌱 Powered by Hugo with theme Dream.

爱好
  • 三国演义:从大二开始听评书版的《三国演义》,现在主要是作为睡前小故事来听(我估计是第七八遍了)
  • 写代码:没错,写代码也是我的爱好。只要出门超过半天,我基本都会背着笔记本,随时可能进入“编码模式”。
  • 健身:曾经的爱好。结婚之后就逐渐被抛弃了 🤷,结婚一年涨了10斤。
  • 看电影:后续可能会写影评。
  • 探索新事物和工具:准备开一个主题,专门分享我接触到的各种新玩意儿。
关于我

👋 你好,我是 huojian (火箭)

欢迎来到我的个人博客!建立这个小站的初衷,是想在浩瀚的互联网中拥有一块属于自己的“数字花园”。我经常从各类优秀的博客中汲取养分,现在,我也想成为那个输出和分享的人。

这里没有刻板的文章更新 KPI,更多的是我个人的技术沉淀、学习笔记以及生活碎片的真实记录。

👨‍💻 关于我与我的技术栈

我是一名客户端软件工程师,日常与代码和系统架构打交道。在技术探索的道路上,我享受解决复杂问题带来的成就感,也喜欢折腾各种能提升幸福感的工具。

在这里,你可能会看到我分享以下内容:

  • 💻 开发与架构探讨: 探讨 WPF/C# 领域的开发经验、代码质量优化,以及诸如客户端热修复 (Hotfix) 系统设计等我在实际项目中遇到并解决的挑战。
  • 🛠️ 工作流与跨平台折腾: 记录我游走在 Windows 与 macOS 环境下的效率心得。从外设配置到好用的跨平台开发工具,分享如何打造顺手的生产力环境。
  • 🐳 自托管与数字生活: 我是个“自建服务”爱好者。会不定期掉落关于 Docker 部署、云服务器折腾指南,以及如何搭建属于自己的 RSS 阅读环境等教程。
  • 📝 学习笔记与自我精进: 记录各种技术学习心得。同时,我也在持续死磕英语,努力提升口语和写作能力,告别“哑巴英语”,相关的学习路径和思考也会记录在这里。

💡 我的理念

“Talent is enduring patience.” (才能即是长久的忍耐)

我相信持续输出的力量。无论是深度的技术解析,还是一个简单的开发踩坑记录,亦或是一篇普通的生活随笔,都是打造个人 IP 与技术影响力的基石。

📬 建立连接

非常高兴能在这里与同样喜欢写代码、喜欢阅读的你相遇。如果你对我的文章有共鸣,或者想交流技术与生活,欢迎随时找我:

  • GitHub: @huojian-jan
  • RSS 订阅: 欢迎通过博客右上角的 RSS 订阅我的最新文章。
记录什么?
  • 学习笔记

  • 一些想法:记录日常思考,不一定有结论,更像是一种随手的表达。

  • 旅游与随笔:旅行时的见闻与感受,以及偶尔的文字随笔。