闲得没事,猜猜GPT-4o如何对图像编码 原创

发布于 2025-3-17 01:29
浏览
0收藏

GPT-4o收取170个Token来处理在高分辨率模式512x512的图块。在 ~0.75 个tokens/word的比例下,说明一张图片价值约为227个Token单词。 170是一个奇怪的具体数字,OpenAI 在其定价中使用“20 美元”或“0.50 美元”等整数,或使用 2 和 3 的幂作为其内部尺寸。为什么在这种情况下选择像170?OpenAI选择170,若不是作为某种神秘定价策略的一部分,而图像图块实际上真的被表示为170个连续嵌入向量??


Transformer模型对向量进行操作,而不是离散Token。输入必须是向量,否则Transformer的点积相似性就失去意义。Token来至于预处理,文本被转换为Token,Token令牌在到达转Transformer的第一层之前,通过嵌入模型转换为嵌入向量。


Llama 3 在内部使用 4,096 个特征维度。假若有一句话被​​BPE转换​​为12个Token,然后通过嵌入模型将每个标记转换为 4,096 维向量,从而产生一个12x4096 矩阵,这是Transformer的输入。


OpenAI在2021年发布了CLIP嵌入模型。CLIP将文本和图像嵌入到同一个语义向量空间中,允许使用余弦相似性来查找与文本字符串相关的图像,或语义上与其他图像相似的图像。CLIP 将整个图像嵌入为单个向量,而不是170个。


OpenAI喜欢2的幂,有时还混杂着3的单一因子。例如,使用1,536个用于 ada-002嵌入,或将3,072个用于text-embedding-3-large。众所周知,GPT-3自始至终使用12,288个维度。GPT-4o可能保留或增加了该参数。鉴于所有这些,GPT-4o 内部使用的特征维度数量很可能是其中之一。


闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区


图像是正方形的,因此可能由正方形的标记网格表示。170非常接近13×13。那么是如何从512*512*3到13*13*12228?传统的办法是:

  • 将 512x512 图像划分为 8x8 网格。
  • 每个小块是 64x64x3 ,将其展平为维度为 12,228 的向量
  • 每个小块会对应一个嵌入向量
  • 整个图像就会被表示为 64 个连续的嵌入向量


可是64 ≠ 170。


那会不会是卷积神经网,该模型在成功处理图像数据方面有着十多年的记录,一起看看 2012 年推出的经典 CNN  AlexNet的架构:

闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区

再来看看YOLO的架构:

闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区

在这里,符号“xN”表示整个块重复了 N 次。YOLOv3 的深度是AlexNet的 10倍,但在某些方面仍然非常相似。但关键的区别在于,它不会将图像缩小为单个平面向量,而是停在 13x13 。之后就没有完全连接的层了。

YOLOv3 的输出实际上是169个不同的向量,它们排列在一个13x13网格中,每个向量的维度为1,024,每个向量代表在网格的特定单元格中或附近找到的对象的类。这意味着 YOLO不会在图像中只看到一个对象,而是可以在一次传递中看到多个对象。

若GPT-4o也是采用CNN,那么现在要做的就是玩一个连接点小游戏:如何从512x512x3使用标准CNN层到13x13x12228。

闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区

上面是有个研究人员提出一个可行或者可能的CNN架构,将已知的输入大小( 3个RGB颜色通道512x512的图像)连接到假设的输出形状( 13x13 嵌入每个 12,228 个维度的向量)。

当然还有一种可能就是下图,最终为12x12。

闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区


那就开始来实验一下,好事者生成了如下的一些样例图片,然后以下面的提示让GPT-4o来回答,"""Divide this image into a {k}x{k} grid and describe the shape and color of each cell. Report your results as a JSON array of arrays (no objects or row labels) and use all lowercase."""大概得意思就是将图切分成k*k份,且返回形状和颜色。



闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区



闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区



闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区



然而,事实上在5x5网格和更小的网格(例如 2x2 ,3x3, 4x4 )表现很好。随后开始迅速下降。到达 13x13时,那只是运气。

但 5x5 网格结果具有启发性。GPT-4o 确实可以跟踪 25 个不同的物体及其在图像中的绝对位置。也许基本概念是对的,最终应该是5x5。那就再加上几层呗。但是如何使用5x5和更小的网格,构建输出170个token。

闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区

接近 85 和 170 的一种方法是假设在一系列越来越细的级别(如金字塔)中对图像进行编码。从一个嵌入向量开始捕捉整个图像的格式塔印象,添加3x3以捕获左/中/右和顶部/中间/底部,然后添加 5x5 7x7 依此类推。


闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区

如果添加一个最终 9x9 网格,则非常接近 170。如果为 512x512 添加一个临时 2x2 网格,并假设有一个特殊 <|image start|> 标记,可以得到一个完美的匹配:1+1^2+2^2+3^2+5^2+7^2+9^2=1+1+4+9+25+49+81=170。

鉴于齐纳网格性能在此 5x5 之后开始下降,这与证据并不完全一致。作为替代方案,可以尝试将所有网格(偶数和奇数)设置为 5x5 :

闲得没事,猜猜GPT-4o如何对图像编码-AI.x社区


如果我们假设每个小图块有 3 个令牌,每个图块之间有一个分隔符,我们可以得到 170:3×(1^2+2^2+3^2+4^2+5^2)+5=170。

虽然这个靠猜测,但与实证结果相吻合。金字塔策略具有很强的直观力。它是一种在不同缩放级别下对空间信息进行编码的方式。这也许可以解释为什么它在5x5网格和网格下方的表现如此之好,而在网格6x6以上表现却如此糟糕。

上述假设都无法解释的一件事是GPT-4o是如何进行 OCR。CLIP 本身不能很好地执行 OCR,然而,GPT-4o 显然可以进行高质量的OCR,它可以转录长文本块、阅读手写文本或被移动、旋转、投影或部分遮挡的文本。

从理论上讲,OpenAI 可以构建一个真正如此出色的模型,但这与其在齐纳网格任务上相对较弱的性能不一致。如果它不能从图像中读出整齐 6x6网格中的36个符号,它肯定无法完美地读出几百个文本字符。所以会不会OpenAI正在运行一个现成的 OCR 工具,并将识别出的文本与图像数据一起输入转换器??!

本文转载自​​鲁班模锤​​,作者:庞德公


©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报


回复
相关推荐