DeepSeek-OCR光学压缩如何实现视觉Token爆炸?

摘要:很多人认为:图像Token的信息密度和效率远不如文本。但 DeepSeek-OCR的核心价值就是它通过一套巧妙的*串行视觉压缩架构*,实现1个视觉Token近乎无损地承载10个文本Token的惊人效率。本文我们借着DeepSeek-OCR回
借着 DeepSeek-OCR这篇论文,本章我们来回顾下多模态大模型(VLM)的核心技术演进。 很多人认为:图像Token的信息密度和效率远不如文本。但 DeepSeek-OCR的核心价值,就是用实践证明了这是一个伪命题。它通过一套巧妙的串行视觉压缩架构,实现1个视觉Token近乎无损地承载10个文本Token的惊人效率。 下面我们沿着 \(O(N^2)\) 危机 \(\rightarrow\) 结构感知 \(\rightarrow\) 语义对齐 的路径,来梳理这背后的技术基石。 Part I:多模态基石的构建与 \(O(N^2)\) 危机 我们先来回顾下多模态模型的技术基石,我们将按照模型结构->多模态对齐->指令生成这条路径进行深入。 ViT: 图像的 BERT 化与 \(O(N^2)\) 的起点 Google: AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 💡 ViT的本质像是图像领域的Bert,只不过把文字token转换成了图像的像素块。在ViT出现之前,图像领域清一色使用CNN、ResNET,强调各种图片特征提取例如平移不变性,局部特征等等。但是ViT的出现,再一次证明大力出奇迹,只要数据量足够大,简单的Transformer Encoder胜过一切。 如果我们通过和NLP Transformer类比来认识ViT的话,整个模型结构会分成以下几个部分 Tokenization 在文本中,句子被tokenize成token,作为模型的输入。在图像中,一个Height * Width * Channel大小的图像,会被分割成固定大小1616的像素块(Patch)。如果图片的长宽是224224,则模型的输入会有224224/(1616)=196个像素块。 输入层 ViT的输入层包含两个部分 Patch Embedding:因为图像不像文本有可枚举的token,因此无法使用词典向量进行映射,所以ViT选择通过线性映射层(MLP)来把patch映射到固定的维度D。 Positional Encoding:和NLP相同,为了保留位置信息,ViT加入了1D的position embedding(2D经试验没有效果提升,因为大量数据会让模型在一维关系中学习到空间特征) Class Head:和BERT相同,ViT也加入了一个可学习的全局token,用于表征图片的整体信息。 中间层 中间层就是传统的Transformer结构了,通过交替的多头注意力,MLP线性映射层和LayerNorm归一化层。 训练策略 考虑论文本身就是为了证明训练数据的Scaling战胜一切,因此在训练策略上也做了很相近的消融策略,包括 数据量试验:在Image-Net这种1M左右的小数据上效果弱于ResNet,但是当在300M+的数据上进行训练时,效果全面超越CNN 分辨率试验:在低分辨率预训练,在高分辨率微调。其实和现在长上文的NLP模型训练思路一致,在预训练输出长度较短,在post-train阶段在渐进式增长。 位置编码实验:为了适配上面分辨率增长的问题,ViT在固定位置便马上进行差值 训练超参:使用Adam,低正则参数(数据量足够大很少过拟合) VIT在后面任务中面临最大的问题就是\(O(N^2)\)的视觉token膨胀,随着输入图片分辨率的变大,当输入1024*1024高分辨率图片时,输入token数将高达4096。 VIT-DET:解决\(O(N^2)\)的局部注意力方案 Meta: Exploring plain vision transformer backbones for object detection 💡 ViTDet 解决了 Plain ViT 无法用于高分辨率密集预测(如检测、分割、OCR)的痛点,其解决方案与 NLP 领域的 Longformer 思路高度相似:局部窗口 Attention + 稀疏全局连接。 窗口注意力机制 将高分辨率图像划分成14 *14或者16 * 16的块,内部进行Attention,这样不论输入的图像像素如何变化,在Self-Attention层的计算复杂度都是恒定不会变化的。这样每个图像patch只关注它所在窗口内的相邻patch。这也是后面DeepSeek-OCR能处理高分辨率图像的技术基础。 稀疏全局 Attention 层 那局部Attention肯定要配合全局Attention能力,才能让block之间的信息互通。
阅读全文