【多模态大语言模型】Qwen-VL 系列解读,持续更新中。。。

张开发
2026/4/18 8:20:18 15 分钟阅读

分享文章

【多模态大语言模型】Qwen-VL 系列解读,持续更新中。。。
【多模态大语言模型】Qwen-VL 系列解读持续更新中。。。文章目录【多模态大语言模型】Qwen-VL 系列解读持续更新中。。。0. 介绍1. Qwen-VL1.0版本1.1 视觉编码器Visual Encoder1.2 输入投影层感知位置的视觉-语言适配器Position-aware Vision-Language Adapter 1.3 输入和输出1.4 训练过程2. Qwen2-VL2.1 原生动态分辨率Naive Dynamic Resolution2.1.1 Patch Pack 保留原生分辨率2.1.2 ViT引入2D-RoPE位置编码2.2 输入投影层压缩Vision token MLP Adapter2.3 Multimodal Rotary Position Embedding M-RoPE)2.4 统一的图像和视频理解框架2.5 模型训练3. Qwen2.5-VL4. Qwen3-VL5. Qwen-3.5参考0. 介绍网上关于QwenVL系列整理的不太好看自己整理整理方便自己看。问最新的AI回复的也不是最新的进展。在通用的MM-LLMMulti-Modality LLM框架里共有五个模块整体以LLM为核心主干具体描述如下模态编码器Modality Encoder将多模态的数据编码成向量空间特征该模块通常是单独进行预训练的典型的方法有基于CNN的ResNET基于Transformer的ViT等。输入投影层Input Projector将模态编码器的输出映射到LLM的输入特征空间的适配层一般模型结构比较简单不同的多模态模型一般是随机初始化该模块的参数做冷启训练。典型的网络层MLPCross-Attention等LLM主干网络LLM BackboneLLM是经过预训练的模型一般还要串联多个模块继续做Post-Pretrain和微调使得模型能识别多模态的特殊token和多模态的特征输入。输出投影层Output Projector将LLM生成的数据映射成Modality Generator 可理解的特征空间一般是简单的Transformer层或MLP层。模态生成器Modality Generator多模态的生成器最终输出多模态的结果如图像、语音、视频等。模型基本都是基于LDMLatent Diffusion Models的衍生模型如图片领域的Stable Diffusion方法。在多模态场景通常包括两类任务理解任务 和 生成任务。对应的模型分别是多模态理解模型和多模态生成模型。多模态理解模型 主要包括前三个模块模态编码器输入投影层LLM主干网络即模型接受多模态数据输入以文本形式输出。多模态生成模型包括全部5个模块即多模态数据输入多模态数据输出多模态生成模型通常要更复杂也很难建模。以上介绍完了通用的MM-LLM的框架。本文主要梳理的Qwen-VL模型是一系列视觉文本多模态理解模型即LVLM(Large-scale Vision-Language Model)主要处理文本和视觉特征输入Text、Image、Video输出Text。1. Qwen-VL1.0版本Qwen-VL 是以 Qwen-7B Base 为主干模型通过引入视觉感知器Visual receptor来增强视觉特征的感知能力。视觉感知器包括一个跟语言模型对齐视觉编码器visual encoder和一个位置感知的适配器position- aware adapter。套用上面的通用多模态框架Qwen-VL包括了典型的前3个模块模态编码器Modality Encoder 视觉编码器visual encoder只用来编码图片视觉特征输入投影层Input Projector位置感知的适配器position-aware adapterLLM主干网络LLM Backbone Qwen-7B Base 模型下面我们分别来看看Qwen-VL的两个核心模块视觉编码器、感知位置的适配器。接着描述一些规范化样本处理过程最后描述下模型的训练过程。1.1 视觉编码器Visual EncoderQwen-VL的视觉编码器使用的是ViT架构Vision TransformerViT的网络设置和初始化参数使用了 OpenCLIP 预训练好的 ViT-bigG 模型。OpenCLIP是 laion.ai 组织的一个开源项目是对OpenAI’s的CLIPContrastive Language-image Pre-training的开源实现。laion.ai 发布了一系列基于CLIP框架训练的不同size模型同时他也为CV领域贡献了大量的开源数据ViT-bigG是经过了 2B 的训练数据训出来的ViT模型。Qwen-VL使用的ViT(ViT-bigG)是基于CLIP框架训练的CLIP是通过Contrastive Learning的方式来学习Vision和文本的表征。对于一个Batch的数据以样本集中原始图文pair 为正例pairBatch内与其他样本组成为负例pair。模型训练采用了对比损失函数通过最大化正例Pair的相似度同时最小化负例Pair的相似度来训练模型。通过这种方式能学习到视觉特征和文本特征的对齐关系。最后将训练好的Image Encoder模型(即ViT)参数保存下来以供其他下游任务热启使用。其中ViT的原理比较简单将图片分割成多个图像块Patch然后针对每个Patch通过一系列线性映射转化成token再将所有token拼接成序列最终将一张图片从 H,W,C格式转换成 (SH) 格式的序列特征。其中 H 高 W 宽 C 通道数 S 序列长度 H 特征维度。在标准的ViT实现上输入图片会先被调整成长宽比 11 的正方形然后再分割成固定的图像块。因此这种标准的ViT框架的设计只能接收固定分辨率的图片同时Patch的大小也是模型在训练期间使用的一个固定size。看下源码设置的一些参数Qwen-VL 可接受的图像分辨率为 448 * 448 所以输入的图片会先处理成统一的尺寸W: 448, H: 448 C: 3。注Qwen-VL模型训练其实是做了三个阶段如下面章节所述。第一阶段图像会统一处理成低像素 224 \times 224 后面两个阶段统一分辨率为 448 \times 448 。这里只以高分辨率的设置为例。patch_size : 14 这个参数指定patch的大小同时也是卷积核 W 和 H 的尺寸也是卷积操作的stripe步长width1664这个参数指定的输出通道数即out_channels也就是每个Patch输出的特征的维度我们以batch_size(B) 1为例首先一张图片做卷积操作处理成 [width, grid, grid] [1664, 32, 32]的数据。然后按行优先展开处理成一个二维格式的数据[sequence_len, hidden_size] [1024, 1664]类似与一条文本处理后的序列。最后增加位置编码并输入给vit transformer模型1.2 输入投影层感知位置的视觉-语言适配器Position-aware Vision-Language Adapter 经过上述ViT处理后对于 448 \times 448 分辨率的图像生成一个[1024, 1664]的序列也就是向量维度为1664的长度为1024的序列。为了压缩视觉token的输入长度Qwen-VL引入了一个Adapter来压缩图像特征。这个Adaper就是一个随机初始化的单层Cross-Attention模块。该模块使用一组可学习的query向量将来自ViT的图像特征作为Key向量。通过Cross-Attention操作后将视觉特征序列压缩到固定的256长度。此外考虑到位置信息对于精细图像理解的重要性Qwen-VL将二维绝对位置编码三角位置编码整合到Cross-Attention的 q,k 中以减少压缩过程中可能丢失的位置细节。随后将长度为256的压缩图像特征序列输入到大型语言模型中。1.3 输入和输出对于输入LLM前的特征序列为了区分图片和文本的输入信息对图片的feature使用了特殊的token包裹图像特征的开始和结束用 和 token圈定来明确标识图像特征的起止位置。同时为了做grounding任务对图像中bounding box 统一用一个左上-右下坐标框格式表示 (X_{topleft},Y_{topleft}),(X_{bottomright},Y_{bottomright}) 坐标值统一做归一化处理规范化到 (0,1000) 区间。并用 、 特殊token圈定。 对于描述bounding box的文本也用 、 两个特殊的token圈定起来。下图是一条典型的grounding 任务的样本实例1.4 训练过程Qwen-VL共分成3个训练阶段包括两个预训练阶段和一个SFT阶段。第一阶段单任务大规模预训练Pre-training 主要使用大量网上抓取和内部的图文pair数据做预训练训练数据有1.4B英文数据占比77.3%中文占比22.7%训练数据的图片统一处理成224 \times224 的尺寸。该阶段LLM模型参数是frozen的ViT和Cross-Attention层的参数是激活更新的这个阶段主要通过大规模数据训练模型的vision模态对齐语言模型的能力。第二阶段多任务预训练Multi-task Pre-training这个阶段使用了更高分辨率、更高质量的数据同时引入图文混排的数据。该阶段是个多任务的预训练阶段包括7个任务其中有6个Vision任务包括Captioning VQAgrounding等和1个文本生成任务这个阶段模型是全参数激活的。该阶段之所以引入文本生成任务主要是为了保证模型的通用文本处理能力。该阶段的训练数据Vision数据的分辨率从 224 \times 224 提升到 448\times 448 数据做了精选处理包括多模态数据69M和 文本数据7.8M。第二阶段的数据量比第一阶段少了2个量级。该阶段训练完成后最终产出了Qwen-VL base模型。第三阶段 指令微调Supervised Fine-tuning)主要提升模型的指令遵循能力和对话能力。在这个阶段作者对数据做了些数据增强通过人工标注、模型生成和策略拼接等方式构造多模态的多轮会话数据。该阶段指令集数据共收集了350K。三个阶段详细的训练过程包括样本、模型和建模任务等细节如下图所示。上面完整描述了Qwen-VL的核心工作具体做法没有什么大的创新数据规模和数据多样性上也没有明显的优势所以Qwen-VL的模型效果基本就是中规中矩没有太强的表现。2. Qwen2-VL相对于Qwen-VLQwen2-VL整体模型架构做的比较大的升级首先从模型命名上可知主体模型从Qwen升级到了Qwen2。并且发布了三个size的模型分别是Qwen2-VL-2BQwen2-VL-7BQwen2-VL-72B 这里遵从Qwen官网发布的命名后缀并不能准确表示模型的参数量模型详细参数。Qwen2-VL系列模型针对Vision Encoder采用了相同size675M的模型结构这里应该是做了一些ablation的实验取得一个合适的size。另外相对于Qwen-VL系列Qwen2-VL并没有显示描述Vision-Language Adapter的参数。Qwen2-VL对 Adapter 做了简化处理并没有采用一个Cross-Attention的结构而是使用了简单的线性变换层这层参数比较少相对于总参数规模可以忽略不计。除了主干模型的升级论文中还提到了一些重要的升级点总结如下重新训练了 nav ViT采用原生动态分辨率单一分辨率 - 任意分辨率 Qwen-VL模型输入只接受单一分辨率的图片Qwen2-VL可输入不同分辨率的图像避免了Vision数据适配单一分辨率而导致的失真问题。Vision Encoder位置编码绝对位置编码 - 相对位置编码从二维三角位置编码升级到二维RoPE位置编码RoPE对长序列有更好的泛化能力有利于提升对长序列Vision特征的建模能力LLM主体模型位置编码多模态位置编码从projector转移到了LLM。1D-3D RoPE引入多模态旋转位置编码技术M-RoPE刻画多模态(时序、高、宽)三维数据。进一步提升对时空数据的建模能力。统一多模态数据 单图片 - 统一图片和视频统一框架处理图片和视频数据进一步提升对真实世界认知和理解能力训练数据 1.4B - 1.4T数据量提升了3个量级同时数据覆盖了多领域任务。下面详细介绍下这些升级点。2.1 原生动态分辨率Naive Dynamic Resolution2.1.1 Patch’ Pack 保留原生分辨率回顾 Qwen-VL 使用的视觉编码器是标准的ViT这要求输入的图片要统一处理成单一的、固定的分辨率才能feed到模型进行处理。一般标准的预训练好的ViT通常是将图片处理成正方形长:宽1:1。这样处理后通常图片会失真导致模型理解上有信息损失或引入一些误导。对于一些宽高比差距较大的图片处理后通常会造成图片扭曲。而Qwen2-VL实现的原生动态分辨率方法则会保留原始图片的宽高比将图片resize到适当的大小使图片像素满足一个适当的区间再对图片做Patch处理将每个图片处理成变长的Vision token序列再输入给LLM模型。目前看上述的方法是比标准的ViT更合理的因为它保留了图片的原始分辨率但是同时也引入了一个问题。传统的ViT会将任何图片数据都处理成定长的Patch序列然后输入给Vision Encoder这种统一定长的输入是对硬件计算非常友好的非常好组Batch并且不需要任何padding处理。Batch序列中每个位置的计算都是有效的。而对于上面提到的原生动态分辨率方法会将不同图片处理成不同长度的Patch序列。对于不同的长度的输入做并行计算时我们自然会想到类似于文本数据的操作对数据做padding再Feed给模型。但这相比传统的ViT方法无Padding会更慢因为为了适配一个Batch中最长的序列要做适当的Padding处理导致会有些冗余计算。因此这并不是一个完美的方法。Qwen2-VL采用的原生动态分辨率方法实现上同时也考虑了性能问题。核心方法是采用了NaViT的Patch n’ Pack技术把不同图像的多个patch打包到一个序列能保留不同图片的可变分辨率。同时在一个次序列计算中同时可处理多个图像提升了模型计算的吞吐在性能上始终优于传统的ViT。其性能提升主要来源于Pack处理后一个序列包括多个图片能同时计算使得在固定计算预算下动态分辨率方法能训练更多样本从而带来更好的性能。2.1.2 ViT引入2D-RoPE位置编码在Qwen2-VL系列的ViT网络中并没有沿用Qwen-VL的2D绝对位置编码而是引入了2D-RoPE相对位置编码。之所以引入2D-RoPE我个人理解主要考虑Qwen2-VL系列处理的图片Patch是变长的对于超长的一些位置如果采用绝对位置编码由于数据稀疏性 并不能得到充分训练。但RoPE本身是具有一定的外推性对长序列建模有更好的泛化能力。我们都知道1维的旋转位置编码1D-RoPE对序列增加相对位置的处理过程。RoPE从1维扩展到2维一个简单的结论针对一个位置将输入向量分成两半前一半向量用 x 坐标的一维RoPE矩阵处理后一半向量用 y 坐标的一维RoPE矩阵处理然后再将两半处理后的结果拼接在一起就做完了2维的RoPE处理。2.2 输入投影层压缩Vision token MLP AdapterQwen-VL在输入投影层做了Vision token的压缩处理是采用了Cross-Attention的架构通过一个组可学习的Query向量来压缩原始的特征序列。那么Qwen2-VL为什么没有继续沿用Cross-Attention的架构这里主要是因为Cross-Attention架构适合处理固定长度的kv当长短不一时是不适合做Attention计算的。而Qwen2-VL通过原生动态分辨率方法处理的每个图片的token序列恰恰是变长的无法使用Cross-Attention架构做特征压缩处理。因此Qwen2-VL采用了一种更简单的压缩方法对空间位置临近的patch 特征做拼接再经过2层MLP线性变换这样将原来长度n的序列可压缩到n/4最终将压缩后的特征序列输入给LLM模型。为了区分Vision token和文本tokenQwen2-VL也引入了两个特殊的token。2.3 Multimodal Rotary Position Embedding M-RoPE)Qwen2-VL模型输入增加了视频模态视频可以看做是在图片二维空间上增加了时序维度是三维时空分布的数据:M-RoPE将位置编码信息从1维扩展到了3维这样就能清晰刻画视频模态数据时空位置信息。对于文本一维和图像二维的数据如何统一表示成3维的位置ID呢处理也比较简单直接文本因为文本是一维空间序列三个维度的值保持一致也就退化成1D-RoPE。图像图像只有宽高两个维度所以对于一张图片时序维度的位置始终保持固定。对于混合多模态数据每个模态的起始position ID是前面模态三维位置ID中取最大的ID并加1得到。有了三维的位置最终怎么映射成3D-RoPE映射方式类似与2D-RoPE针对一个位置 对的输入向量的维度分成三份分别处理然后再将三份处理后的结果拼接在一起就做完了3维的RoPE处理。2.4 统一的图像和视频理解框架Qwen2-VL统一了视频和图像的理解框架能混合输入图像和视频数据进行理解。为了保证图片和视频的处理一致对视频和图像分别做如下处理视频处理以每秒两帧的速率对视频进行采样最终可采样偶数个帧序列。对于长视频为了平衡序列长度和计算效率通过动态调整每一帧的分辨率将视频总token限制在16K以内。图像处理对图像做复制操作使得单一图片变成一个时序为2的帧序列。使用3D的卷积对帧序列做特征抽取每两张图片为一组进行卷积操作抽取特征。这样通过将卷积核扩充了时序维度可以进一步压缩序列长度因此也能进一步提升模型处理更多帧的能力。2.5 模型训练Qwen2-VL采用了与Qwen-VL一致的三阶段训练方式。Qwen2-VL在训练数据上相比Qwen-VL做了大量的有价值的工作。数据来源除了获取开源数据、经过清洗的网页数据还做的大量数据合成的工作。数据涉及多种场景包括图像-文本对OCR数据视觉问答数据视频对话数据等多样化数据。此外Qwen2-VL数据规模大幅提升Qwen-VL整体训练样本1.4B左右Qwen2-VL直接翻了3个量级达到了1.4T。通过大幅提升样本规模和样本多样性使得Qwen2-VL的模型效果在多任务的评估中保持领先也碾压了GPT-4o的效果。3. Qwen2.5-VL在 Qwen2-VL基础上ViT使用了更接近LLM的架构。Attention结构上使用了交错的Window Attention。使用SwiGLU的FFN结构hidden_actsilu并且增加bias注意这里在llama这样的语言模型中是默认无偏置。标准化使用RMSNorm。Projector仍然使用的是PatchMerger但是替换了LayerNorm为RMSNormLLM语言模型升级使用了Qwen2.5。MRoPE在视频输入对齐了现实video的帧率即对齐了绝对时间。训练4. Qwen3-VLViT沿用Qwen2.5 bias配置、2D-RoPE但是替换了激活函数PatchEmbed启用bias。ProjectorAdaptor本次更新中使用了两个部分特征一部分是沿用的Qwen2.5的PatchMerger。另外一部分使用了deepstack_visual_indexes用于与LLM特征进行融合。之前的多模态模型包括 Qwen2-VL通常只把Vision Encoder最后一层的输出喂给 LLM。这就像是你去旅游只给朋友看最后修好的精修图朋友虽然知道你去过海边但照片里路边的野花、墙边的砖块这些的细节全丢了。DeepStack 机制做了一个操作它不再只走正路线而是开了三个支线搞辅助连接。它也没有为了省参数去复用 MLP Merger 模块而是一共部署了 4 个 MLP Merger1 个主路 3 个支线。主路ViT 最后一层 - 主 MLP Merger - 变成 Input Embeddings告诉 LLM 整体是啥。支线它从 ViT 的 浅层、中层、深层 分别提取特征。注意每一层特征都有一个独立专用的 Merger 进行投影然后依次残差连接到 LLM 的第 1、2、3 层。ViT 浅层看纹理、边缘 - 专用 Merger A - 注入 LLM 第 1 层ViT 中层看形状、结构 - 专用 Merger B - 注入 LLM 第 2 层ViT 深层看语义、类别 - 专用 Merger C - 注入 LLM 第 3 层怎么融辅路的信息不是直接拼接到文本后面而是通过残差连接直接相加到 LLM 的隐藏状态里因为要保持维度。LLMQwen3-VL-235B-A22B使用的是Qwen3的MoE版本还会有非MoE版本开源架构上使用了 QKNormQwen3VL使用3维多模态位置编码MRoPE并且采用了MRoPE-Interleavet,h,w交错分布实现对时间高度和宽度的全频率覆盖提升鲁棒性和外推性能。在前 K 层使用了DeepStack特征融合。之前的 Qwen2-VL 用了一种叫 MRoPE 的位置编码把时间(t)、水平(h)、垂直(w)分开编码。但qwen团队发现这样做会导致频率谱不平衡简单说就是模型在处理长视频时对时间的感觉会变差。Qwen3-VL 改用了 Interleaved MRoPE。和名字一样就是它把 t, h, w 的编码像洗牌一样均匀地插在了dim维度中。这让模型在长达 256K 的上下文里依然能精准地定位到“视频第 58 分钟左上角的那只猫”。Qwen2.5-VL 用绝对时间位置编码来告诉模型“这是第几秒”。结果发现视频太长的时候这个数字变得巨大且稀疏模型学懵了。Qwen3-VL 改成直接用纯文本来打标签如4.0 seconds。训练5. Qwen-3.5Qwen-3.5是一个Dense多模态大模型也支持Text-Only模式多模态架构上相比 Qwen3-VL 去除了复杂的DeepStack结构回归了 Qwen2-VL/Qwen2.5-VL的NaViT PatchMerger LLM的三段式结构。LLM架构上Qwen-3.5参考 Qwen3 Next 使用支持交错Gated/Linear Attention 架构(每4层:3层GatedDeltaNet1层Gated Attention)整体上看Qwen-3.5就是多模态版的 Qwen3 Next。训练主要改进集中于预训l练视觉-文本数据、多语言数据的scaling、以及RL的infrascaling。参考【1】https://zhuanlan.zhihu.com/p/25267823390【2】https://zhuanlan.zhihu.com/p/2009916203162936002【3】https://zhuanlan.zhihu.com/p/1981497299956946050

更多文章