最近看到了一篇极具启发性的论文: 《DeepSeek-OCR: Contexts Optical Compression》 [1] , AI 大神 Andrej Karpathy 对 DeepSeek 那篇 DeepSeek-OCR 的论文评价很高,你可能以为他会说:“哇,这个 OCR 模型真厉害,识别率又提升了!”
但他没有。相反,他几乎是挥了挥手说:“它是个不错的 OCR 模型,但这不重要。” 因为真正令人兴奋的,是这篇论文引出的一个更具颠覆性的想法:我们是不是从一开始就喂了错误的“语料”给 AI 了?
Karpathy 的核心观点是:也许,大型语言模型( LLM )的输入端,根本就不应该是“文本”(Text),而应该永远是“像素”(Pixels)。
这个想法听起来有点绕。我们明明有纯文本,为什么非要先把它“渲染”成一张图片,再喂给 AI 去看呢?
我们现在用“文本”喂 AI,是通过一个叫“Tokenizer”(分词器)的东西,把句子切成一个个“词元”(Token)。比如“Hello, world!”可能被切成 ["Hello", ",", " world", "!"]。问题是,这种方式可能很“浪费”。
而 DeepSeek-OCR 这篇论文无意中提供了一个佐证:它证明了,AI 可以只用 100 个“视觉词元”(Vision Tokens),就高精度地“解压缩”出包含 1000 个“文本词元”的原文内容。这就像,你给AI的不是一长串啰嗦的文字,而是一小块高密度的“信息压缩饼干”(图片)。AI “吃” 下去(处理)的上下文窗口更短,效率自然更高。
想象一下,你让 AI 帮你阅读一个网页。现在的“文本”输入方式,就像是你通过电话把网页内容念给 AI 听。所有加粗、颜色、字体大小、排版布局……这些视觉信息全都丢失了。
而“像素”输入方式,就像是你直接截了一张图发给 AI。哪个信息更全?不言而喻。Karpathy 认为,像素是一个“信息流更广”的输入方式。它不仅能处理纯文本,还能自然地理解文本的样式(粗体、颜色),甚至页面上任意的图表和图像。
前面两点只是铺垫,Karpathy 真正的“怨念”在于:他想彻底干掉“分词器”(Tokenizer)。他直言不讳地“炮轰”:“我必须再说一次我有多讨厌分词器。分词器是丑陋的、分离的、非端到端的。它 ‘进口’ 了所有 Unicode 编码、字节编码的丑陋之处,继承了大量历史包袱,还带来了安全/越狱风险……它必须被淘汰。”
为什么他这么恨分词器?分词器就像是 AI 的“嘴替”和“眼替”,它强行介入在“原始文本”和“AI 大脑”之间。这个“中间商”不仅笨拙,而且会扭曲信息。
Karpathy 举了个绝妙的例子:一个笑脸表情符号 “😀”。通过“分词器”,AI 看到的不是一张“笑脸”,而是一个奇特的内部代码,比如 [tok482]。AI 无法利用它在看图时学到的关于“人脸”和“微笑”的知识(迁移学习)来理解这个符号。
但如果输入的是一张包含“😀”的图片,AI 的“视觉”部分会立刻认出:哦,这是一张微笑的脸。哪个更符合直觉?哪个更智能?像素输入,让 AI 得以“眼见为实”。
Karpathy 的设想是,未来的 AI 模型,其“输入端”(用户提问)应该只接收图像(像素),而“输出端”(AI 回答)则可以保持为文本。为什么?因为“看懂一张图”(视觉到文本)的任务,远比“画出一张逼真的图”(文本到视觉)要容易得多,也实用得多。
这种“输入用眼(像素),输出用嘴(文本)”的架构,也天然契合了AI处理信息的两种模式:输入(Encoding):像人一样,一口气看完整个页面(图片),全盘理解(即双向注意力)。输出(Decoding):像人一样,一个词一个词地往外说(即自回归)。所以,DeepSeek-OCR这篇论文的真正价值,不在于它提供了一个多好的 OCR 工具,而在于它充当了一次“概念验证”(Proof-of-Concept)。
它用实验数据证明了:用“看图”的方式来“读书”,是完全可行的,而且可能效率更高。这不仅仅是“文本到文本”(Text-to-Text)任务变成了“视觉到文本”(Vision-to-Text)任务,它暗示了一个更根本的转变 —— AI 的主要信息入口,正在从“语言”转向“视觉”。
这个小小的 OCR 研究,可能真的撬动了一个大大的未来。
欢迎大家关注 OceanBase 社区公众号 “老纪的技术唠嗑局”,在这个公众号中,会持续为大家更新与 #数据库、 #AI、 #OceanBase 相关的技术内容!
(本文的作者是来自蚂蚁集团的陈梓康( 库达 ),前面 “楔子” 部分的内容,出自 Karpathy 和 宝玉,在正文内容开始之前,先对这三位大佬表示感谢~)
今天,我不想做一次简单的论文导读。我希望我们能一起,从第一性原理出发,将这篇论文放置于 VLM 和 LLM 发展的宏大叙事中,解构其思想,审视其价值,并探寻其为我们揭示的未来图景。
其中,我会在文中使用 「这是我自己的猜想」 标识来 highlight 我觉得那些重要的,并且隐藏在论文背后的故事和思考。
我们首先从信息论和系统架构的视角,来审视 DeepSeek-OCR 所解决的根本问题: 计算效率与信息密度的矛盾。
但,咱们也并不是说 DeepSeek OCR 颠覆了什么事情,例如这两天公众号上发布的文章,很多都是 AI 吹出来的。 所以在此我也泼一泼冷水,让大家能够更加谨慎却勇敢地探索未来 AI 记忆系统的各种可能性。
首先,请允许我提出一个论断:这篇论文最核心的思想贡献,绝不是“一个更好的 OCR 模型”。如果是这样,我们今天就不必坐在这里。它的真正价值,在于提出了一个大胆且反直觉的范式——“上下文光学压缩” (Contexts Optical Compression)。
它在问一个根本性的问题:当 LLM 的上下文窗口成为计算和内存的瓶颈时,我们除了在“数字域” (Digital Domain) 内卷算法和架构,是否可以另辟蹊径,回到“模拟域”或者说“光学域”去寻找答案?
ref:数字型号和模拟信号的互搏
这篇论文的作者们,实际上是将一张包含数千个文本Token的文档页面,“渲染”成一张图像,再用一个高效的视觉编码器将其压缩成几百个视觉 Token。这个过程,本质上是将离散的、一维的符号序列(Text Tokens),映射为连续的、二维的像素矩阵(Image),再重新编码为离散的、一维的特征序列(Vision Tokens)。它完成了一次信息的跨模态转码和压缩。
那么,这种“光学压缩”范式,与当前主流的长上下文解决方案相比,其本质区别何在?
Then,回答刚才的问题: DeepSeek OCR 它更接近什么(本质)? 我认为,它完美地融合/仿生了两个概念:
首先我们需要知道,LLM long context 的核心吐槽有:
正所谓 “ 一图胜千言 ”,视觉模态本质上是一种高效的 压缩介质 。我们的目标是实现视觉 Token n 数量远小于文本 Token N 数量的“上下文光学压缩”,即 n ≪ N。
提问:还有其他高效的介质吗? 我认为可能是视频介质。你可以这么理解,就是 Image 本身是一个 2D 表征,它似乎证明 2D 表征的压缩率大于平方开销的 Text Context。那么,3D 表征是什么?至少,视频介质是 3D 的,只不过里面的时间流向是单向的。
此外,本质上我们在寻找什么? 我们寻找的是表征方法,然后再寻找的才是在哪个环节借助 NN 网络解决我的需求。
要实现高压缩比(例如 10:1 或更高)下的无损或近无损解码,核心在于编码器必须具备在极低 Token 数量下捕获高分辨率输入的能力。这就是 DeepEncoder 的职责。
解码的方案有千千万,比如:InternVL 的瓦片方法或 Qwen-VL 的自适应分辨率编码。但是它们的问题在于,传统 VLM 编码器在高分辨率下要么产生过多 Token,要么导致激活内存爆炸,影响训练和推理效率。
显然 DeepSeek 也意识到了这个问题,于是,他们设计出了:DeepEncoder——其,串行混合注意力机制 (Serial Hybrid Attention)。分三步走:
结论:DeepEncoder 成功地将高分辨率输入的挑战转化为一个可控的、低激活内存的压缩问题,输出的是一组高度提炼的潜在视觉 Token:
经过前面的压缩操作,那么接下来,压缩后的视觉 Token Z 现在需要被 LLM 解码器 f 重新构建成原始的长文本 X。
目标:如何让一个紧凑的语言模型,从如此少量的视觉信息中,准确地“幻想”出并输出长达 10 倍的文本内容?
DeepSeek-OCR 不仅仅是一个高效的 OCR 模型,它更是 基于信息压缩第一性原理,探索视觉与语言模态(VLM/LLM)协同的先驱性工作 。其核心算法流程,从 DeepEncoder 的低激活内存高压缩架构,到 MoE 解码器的高效知识重构,为我们提供了一套将长文本信息转化为计算高效的视觉潜在表征的完整范式。值得借鉴学习的地方很多。
毋庸置疑,这种“OCR 1.0 + 2.0”技术是 VLM/LLM 在 STEM 领域发展的基石。并且,它其实超过了我们对于 OCR 的定义范围。 它是一种端到端的数据识别和数据清洗的算法(nlp instructions + pdf -> structured data)。 发散来讲,我觉得这种思路,可以解决 80% LLM 语料清洗的各种疑难杂症问题。 不知道 LLM 数据团队是不是有可能改造 DeepSeek OCR 框架,来做出一个基于视觉的通用的语料数据清洗框架呢?(3B 模型的消耗还是很诱人的哈哈哈) 「这是我自己的猜想 😄」
上下文光学压缩提供了一个模拟人类记忆衰退的优雅方案。 该学术问题的背景: 在一个多轮对话系统中,我们如何管理历史上下文,以防止计算开销爆炸?
论文展望: 这一机制为构建 理论上无限上下文 的 LLM 架构提供了潜在途径,它巧妙地在信息保留和计算约束之间取得了平衡。DeepSeek-OCR 的研究表明,这种通过视觉模态进行长上下文压缩的方法,是未来 VLM/LLM 协同发展的一个极具前景的新方向。
我们知道,传统的记忆框架,大都是个闭环记忆系统:每次交互后,新记忆被压缩 C (一般是向量压缩 RAG、或者一些所谓的 NN 模型压缩比如 MemGen)并分级存储,供未来检索。
但是现在压缩 C 的方法多了一种,即上下文光学压缩。
DeepSeek OCR 它真正想说的,是 如何用光学-视觉通道,重新设计大型语言模型的「记忆系统」 。论文用 OCR 这个概念掩盖了 DeepSeek 的真实目的,那就让我来推演「技术的下一步」吧。下面我按照“记忆”而非“OCR”的主线,结合我对于大模型记忆的理解和经验,给出一条在大模型记忆这个方向的 思维推演 。
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
用图像分辨率当“光圈”
|
|
|
|
|
|
把“遗忘”做成可微的光学降采样
|
DeepSeek-OCR 的核心创意,是 让第 1→2 层的压缩过程,从“数字-序列”域搬到“光学-像素”域 ,从而把 「记忆容量」与「计算开销」解耦 。下面所有外推,我都是在放大这一思想。
既然 DeepEncoder 对于图像的压缩效果显著,那么我会选择采用「文本 → 图像 → vision token」这条通道。其本质上,其实在做 一次可控的有损编码 :
这么操作的关键是: 把“遗忘”预先 baked in 到编码器权重里 ,让模型 学会哪些视觉纹理对应“可丢”的排版空白,哪些对应“必保”的语义 token ——这比事后用启发式阈值剪枝要优雅,因为:
因为在 LLM 记忆之中,我们希望模型能够动态的调整压缩率。因此,或许我可以大胆尝试把 DeepEncoder 的 16× Conv 下采样改成一个 可学习的、内容依赖的“光圈模块” :
基于这样的设计,或许我们能够在未来的 LLM 中实现一个这样的 feature:
你看,是不是很有意思?
把 DeepEncoder 当成一枚「光学视网膜」,与语义向量并行工作:
doc → ┌── semantic encoder → 256 d 向量 ─┐
└── DeepEncoder → 128 vis tokens ─┤
↑ |
+–––––––– fuse –––––––––+
我们可以基于上面的想法(光学双路相机),来改进 RAG 系统。比如,可以在某个 8B-Instruct 上插 64 个 vision slot,用 DeepSeek-3B-MoE 当“光学解码头”,做金融年报 QA。
我觉得未来的记忆框架,肯定不只是长上下文,也不只是 RAG,因此我尝试提炼探索 1 和探索 2 中的思想和架构,来找到一种能够统一不同框架的统一框架。
我想这样设计,就是它只有三个可执行二进制: optix-encode、optix-cache、optix-recall ,却同时替代了
不妨把整个系统叫做 Optix-Memory Stack (简称 OMS),一句话总结:
「任何长度的文本、权重、对话,一律先拍成一张 1024×1024 灰度图,再压成 128 个 vision-token,成为 唯一寻址单位 ;Attention 永远只在这 128×128 的“光斑”里做二次运算。」
下面给出细节的 统一架构、数据流、训练-推理一体组合 。
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
对于架构,我们需要注意到:
[batch, 128, dim]
,不管你来的是文档、权重还是历史。这个框架的作用就是,能够把三种原本异质的数据(文档、权重、对话历史)先强行拍成「同一张 1024×1024 灰度图」,再压成同形状的 128-D 向量,以后系统里只认这 128-D 向量,别的统统不存在。
为什么非得“统一”?
目标函数只留两项:
L = L_task + λ · aperture
训练流程(伪代码):
for batch in loader:
img = Renderer(batch, aperture=uniform(0.02,1.0))
vk = DeepEncoder(img) # 128
vw = DiffractiveFilm(LoRA_png) # 128
out = OptixAttn(v_q, v_k, v_w) # 128 × 128 恒定
loss = CrossEntropy(out, target) + λ*aperture
grad = loss.backward() # 梯度穿透 CNN + 衍射层
opt.step()
所有参数(CNN、衍射层、MoE)联合更新,一次收敛 ;收敛后, 把 aperture 固化成 3 个离散档位 :
Optix-Memory Stack 让「上下文长度」「权重大小」「对话轮数」这三个曾经各自膨胀的维度, 全部坍缩成一张 1024×1024 的灰度图 ;自此,LLM 的记忆问题被转译成 可调光圈、可衍射、可遗忘的光学系统 —— 不再问“能装多少 token”,而只需问“想保留多少像素” 。
当然,再次强调,整个 Section 3 都是一些思维实验上的探索,时间短,可能有很多考虑不周甚至错误的想法。
其他开放问题:
或许未来,评价一个模型的记忆能力,我们不再问“它能容纳多少 Token”,而是问:“在一张代表着记忆的底片上,我们应该选择保留多少像素?”
《DeepSeek-OCR: Contexts Optical Compression》: https://github.com/deepseek-ai/DeepSeek-OCR/blob/main/DeepSeek_OCR_paper.pdf
[2]由 MetaAI 提出的 Segment Anything(SAM): https://segment-anything.com/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047136/viewspace-3099470/ ,如需转载,请注明出处,否则将追究法律责任。