2025年Next Token Prediction范式会统一多模态吗?

介绍一下最近和来自北大,北航,港大,国科大等学校的同学以及阿里, Microsoft, Humanify等研究机构呕心沥血的综述工作《Next Token Prediction Towards Multimodal Intelligence: A Comprehensive Survey》

作者: MMNTP Team
论文: https://arxiv.org/abs/2412.18619
Github: https://github.com/LMM101/Awesome-Multimodal-Next-Token-Prediction

图片

简介

图片

过去一两年时间里,多模态(Multimodal)领域涌现了大量基于Next Token Prediction(NTP)的模型,以下简称为MMNTP,这些模型在多模态理解与生成任务上取得了显著的进展。以图片模态举例,有以LLaVA, QwenVL为代表的图片理解模型,也有以Unified-IO系列,Chameleon,VAR为代表的基于离散Token的图片生成模型以及融合NTP和Diffusion架构的Transfusion,MAR等模型。音频部分则有Moshi为代表的基于NTP的音频理解和生成模型。

图片

本文采用全新的自下而上视角,从NTP范式的构建出发,全面探讨了以下几个核心方面:

  • 多模态的Tokenization技术

  • MMNTP模型架构设计

  • 训练方法与推理策略

  • 性能评测体系

  • 现存挑战与未来方向

综述的完整目录如下:

### 图像 Token 化在多模态大模型中的实现细节 图像 token 化是多模态大模型处理视觉信息的关键步骤之一。为了使模型能够有效理解和生成内容,通常会采用一系列技术手段来将图像转换为离散化的表示形式。以下是关于图像 token 化的具体方法和实现细节: #### 1. 图像 Patch 划分 图像的第一步通常是将其划分为多个较小的区域(patches)。这些 patches 是图像的基本单元,类似于自然语言处理中的单词或子词单位。通过这种方式,可以减少计算复杂度并提高效率。 例如,在 Qwen-VL 中采用了基于网格划分的技术,将输入图像分割成大小固定的 patches[^2]。每个 patch 的尺寸可以根据实际需求调整,常见的设置为 \(16 \times 16\) 或 \(32 \times 32\) 像素。 #### 2. 特征提取 完成图像划分后,下一步是对每个 patch 提取高层次语义特征。这一步可以通过预训练的卷积神经网络(CNN)或者 Transformer 编码器实现。常用的 CNN 骨干网络包括 ResNet 和 EfficientNet 等;而 Vision Transformers (ViT) 则成为近来更流行的解决方案。 对于每一块 patch 数据 \(x_p\), 使用编码函数 \(f_{enc}\),得到其对应的隐空间表征向量 \(z=f_{enc}(x_p)\)[^2]。 #### 3. 固定长度 Token 生成 由于原始图像可能具有不同的分辨率以及 aspect ratio,因此需要进一步规范化所有样本至统一维度以便后续建模操作。此阶段的目标就是把前面获得的一系列连续浮点数数组转化为固定数量且具备一定稀疏性的整数值序列——也就是所谓的 tokens。 一种常见做法是在降维后的潜在空间里执行聚类算法比如 K-means clustering 来构建字典 V 并分配最近邻中心作为最终输出 token id s[i]=argmin_j ||v[j]-h||_2 ^2 [^2]. #### 4. 向量量化(VQ) 最后一步涉及到了矢量量化(Vector Quantization,VQ). 这一过程中引入了一个可微分代理损失项以促进端到端优化同时保持离散性质不变. 具体而言, 对于每一个嵌入 e_i ∈ R^d , 我们寻找最接近它的码本 entry w_j ∈ C={w_k | k=1,...K}, 其中 d 表示潜变量维度,K代表码本书籍容量. \[ L_vq = \|sg[e_i]-w_j\|_2^2+\beta\|e_i-sg[w_j]\|_2^2 \] 这里 sg[] 表达停止梯度运算符,\(\beta>0\) 控制重构误差权重. --- ### 总结 综上所述,多模态大模型中的图像 token 化主要经历了四个核心环节:**Patch 划分**, **特征提取**, **Token 序列生成**, 及 **Vector Quantization**。整个流程旨在保留尽可能丰富的视觉信息的同时降低冗余,并适配下游任务所需的结构化表达形式。 ```python import torch from torchvision import models def extract_features(image_patches): backbone = models.resnet50(pretrained=True) features = [] with torch.no_grad(): for patch in image_patches: feature_vector = backbone(patch.unsqueeze(0)) features.append(feature_vector.squeeze()) return torch.stack(features) image_patch_size = (16, 16) num_tokens_per_image = ... # Define based on your application needs ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值