当前位置: 首页 > news >正文

多模态论文笔记——CogVLM和CogVLM2(副)

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。

在这里插入图片描述

文章目录

    • CogVLM
      • 论文
      • 背景
        • VLMs 的任务与挑战
        • 现有方法及其局限性
          • 浅层对齐方法(Shallow Alignment Methods)
          • 深度融合方法(Deep Fusion Methods)
        • CogVLM 的创新点
      • 模型架构
      • 视觉专家模块
        • 架构
        • 工作流程
          • 输入拆分
          • 注意力计算
          • FFN层
      • 训练细节
        • 1. 预训练阶段
          • 预训练第一阶段:图像描述损失函数
          • 预训练第二阶段:图像描述损失函数 + 指代表达理解(REC)任务的损失函数
        • 2. SFT有监督微调
    • CogVLM2
      • 论文
      • 优化
        • 1. 视觉专家模块的改进
        • 2. MLP 适配器的增强
        • 3. 视觉优先的加强

首先我们需要知道CogVLM是主要用于图像生成文本的。在此之前,我们已经介绍了BLIP和BLIP2,但是BLIP模型生成的文本描述较为简单,模型训练则需要更详细、准确的图像描述或字幕。

在上期文章中将介绍了模型Coca(Contrastive Captioners,谷歌出品),OpenAI的DALL·E 3在处理图像-文本训练数据集就是基于谷歌的CoCa模型,微调一个image captioner,用来合成图像的caption。

Coca参考历史文章:多模态论文笔记——Coca

同样,在SD 3中也使用了模型去优化图像-文本数据集中的文本描述,只不过SD 3中使用了CogVLM。

SD 3介绍参考 SD 系列文章:Stable Diffusion 3详解

CogVLM

论文

CogVLM: Visual Expert for Pretrained Language Models

背景

VLMs 的任务与挑战

VLM 的应用任务: 视觉语言模型具有广泛的应用场景,例如:图像描述、视觉问答、视觉定位、分割等。这些任务需要模型具备强大的多模态推理能力,而这种能力通常依赖于对视觉和语言数据的深度理解与融合

训练 VLM 的挑战: 训练与大规模语言模型(如 LLaMA2)性能相匹配的 VLM 是一项复杂任务。当前的主流方法是复用已有的预训练语言模型(如 GPT),并在此基础上扩展视觉处理能力。而这个扩展过程的核心挑战在于解决视觉特征和语言特征的对齐问题。

现有方法及其局限性
浅层对齐方法(Shallow Alignment Methods)

代表方法有 BLIP 2(原文为:InstructBLIP,)MiniGPT-4

  • 通过一个 冻结的预训练语言模型(如 GPT)和 预训练视觉编码器(如 CLIP)实现简单连接。
  • 通过 可训练的 Q-Former 或线性层,将图像特征映射到语言模型的输入嵌入空间。
  • 优势:收敛快,训练简单。
  • 劣势:性能劣于深度融合模型,例如 LLaVA-1.5。问题包括:
    1. 视觉与语言特征的不匹配:视觉特征在经过浅层映射后无法充分适配语言模型的深层结构。
    2. 任务表现受限:在生成任务(如图像描述)中,这种方法难以捕获特定任务的细节。

BLIP2 参考历史文章:多模态论文笔记——BLIP2

深度融合方法(Deep Fusion Methods)

代表方法有 LLaVA-1.5PaLIQwen-VL

  • 在预训练或监督微调阶段,直接对语言模型进行训练
  • 问题:深度融合方法会显著改变语言模型的分布,导致 灾难性遗忘(Catastrophic Forgetting)。
    • 语言模型在训练过程中会失去其原有的 NLP 能力,例如自然语言生成(NLG)性能下降。

注意:

  • 浅层对齐方法和深度融合方法的区分点在于:是否会改变原始模型的权重参数,如果会修改,则是深度融合方法,否则,为浅层对齐方法。
    • LLaVA 属于浅层对齐方法,原始的语言和视觉模型权重是冻结的;
    • LLaVA 1.5 属于深度融合方法,原始的语言和视觉模型权重不是被冻结的,而是可以进行训练的。
CogVLM 的创新点

CogVLM 提出了新的解决方案,回答了一个核心问题:是否能在保留语言模型 NLP 能力的同时,赋予其强大的视觉理解能力?

CogVLM 的方法:引入视觉专家(Visual Expert)

  • CogVLM 并不对原始语言模型进行修改,而是添加了一个 可训练的视觉专家
    • 视觉专家的作用:在每一层中,视觉特征通过QKV 矩阵MLP 层 与文本特征交互。
    • 参数与效率:视觉专家的引入使参数数量增加一倍,但模型的计算量(FLOPs)保持不变。
  • 优势
    • 保留语言模型的 NLP 能力:原始语言模型的参数完全冻结,避免灾难性遗忘问题。如果输入序列中没有图像,模型表现与原始语言模型一致。
    • 深度融合视觉与语言特征:使用类似低秩矩阵的思想,间接改变模型参数的方式实现深度融合。避免浅层对齐中的特征分布偏移问题。

这个灵感来源于:P-Tuning 与 LoRA 的对比

  • P-Tuning
    • 学习任务特定的输入前缀(prefix embedding),通过调整输入来适配模型。
    • 类似浅层对齐方法中的图像特征映射。
  • LoRA
    • 在每一层通过引入低秩矩阵分解调整模型权重,实现更好的性能与稳定性。
  • 类比:CogVLM 的视觉专家类似于 LoRA,它通过在每一层引入视觉-语言交互,解决了浅层对齐方法中的特征不匹配问题。

P-Tuning和LoRA请分别参考微调系列文章:

  • SD模型微调之Textual Inversion和Embedding fine-tuning
  • SD模型微调之LoRA

模型架构

在这里插入图片描述

图4. CogVLM的架构。(a) 关于输入的示意图,其中一张图像由预训练的ViT处理,并映射到与文本特征相同的空间。(b) 语言模型中的Transformer模块。图像特征具有不同的QKV矩阵和FFN。只有紫色部分是可训练的。

CogVLM模型共包含四个基本组件:ViT 编码器,MLP 适配器,预训练大语言模型(GPT-style)和视觉专家模块。

  1. ViT 编码器
    CogVLM 中采用了 预训练的 EVA2-CLIP-E作为ViT 编码器,该编码器将图像输入转化为特征表示。在 CogVLM-17B 中,移除了 ViT 编码器的最后一层,因为该层主要用于整合 [CLS] 特征用于对比学习。
  2. MLP 适配器
    CogVLM 使用了一个 两层的 MLP(SwiGLU) 作为 MLP 适配器。MLP适配器的作用是将 ViT 的输出映射到与 文本特征 相同的空间。
    SwiGLU 是一种高效的激活函数,通常用于提升模型的表达能力和稳定性。所有的图像特征共享相同的 position id,这意味着模型不会区分图像特征的顺序,仅仅根据位置进行编码。MLP适配器在训练过程中通过少量参数的调整,显著提升了模型的表现。
  3. 预训练大语言模型
    CogVLM 的预训练大语言模型采用了与 GPT-style 的大语言模型兼容的设计。具体来说,CogVLM-17B 采用了 Vicuna-7B-v1.5 作为基础模型,进行进一步的训练。此外,还选择了 GLM 系列模型LLaMA 系列模型,这确保了 CogVLM 能够在各种预训练大语言模型上进行扩展,以优化多模态任务的表现。
  4. 视觉专家模块
    CogVLM 引入了 视觉专家模块,在每一层 Transformer 中加入 图像特征的深度融合。每个 Transformer 层中的图像特征使用与 文本特征不同的 QKV 矩阵和 MLP 层,这些矩阵和层都是可训练的。这个设计使得视觉特征和语言特征能够深度融合,提高视觉与语言特征对齐的精度,进而增强多模态任务的效果。

视觉专家模块

在传统的多模态模型中,图像在处理过程中往往被当作“附庸”来处理,图像特征通常被直接对齐到文本特征的输入空间(拼接到一起,如LLaVA、ViT、ViLT等)。

  • 这种方式使得图像特征在多模态模型中并没有获得与文本同等的处理和重视。这导致了图像理解的能力有限,尤其是在需要复杂图像理解和生成的任务中,模型的效果自然会受到限制。

CogVLM 通过引入 视觉专家 来改变这一思路,采用 视觉优先 的方法。

  • 通过让图像特征与语言特征在每一层 Transformer 进行深度融合,CogVLM 使得图像特征能够在多个层次上参与建模,并获得与文本特征同等的重视,从而提升了图像理解的效果,避免了传统方法中图像特征被视为“附庸”的情况。
架构

CogVLM 中,视觉专家模块被引入到每一层,以实现深度视觉-语言特征融合。这个模块主要由两部分组成:

  1. QKV矩阵:用于计算注意力,决定哪些部分的信息对当前输出最重要;
  2. MLP层用于前馈神经网络,对注意力计算后的特征进行进一步的非线性转换,增强模型的表达能力。
    在这里插入图片描述
工作流程

视觉专家模块在每个transformer层对图像特征进行专门处理,使得模型更好理解和融合视觉信息。

输入拆分

首先,输入的隐藏状态 X X Xhidden states)会被拆分成图像隐藏状态 X I X_I XI)和文本隐藏状态 X T X_T XT)。

其中,输入的隐藏状态为 X ∈ R B × H × ( L I + L T ) × D X \in \mathbb{R}^{B \times H \times (L_I + L_T) \times D} XRB×H×(LI+LT)×D

  • B B B:批次大小(batch size)
  • L I L_I LI:图像序列的长度
  • L T L_T LT:文本序列的长度
  • H H H:注意力头的数量(Attention heads)
  • D D D:隐藏层的大小(hidden size)
注意力计算

视觉专家模块中的注意力机制计算过程如下:

  1. Q、K、V的计算
    Q = concat ( X I W I Q , X T W T Q ) Q = \text{concat}(X_I W_I^Q, X_T W_T^Q) Q=concat(XIWIQ,XTWTQ)
    K = concat ( X I W I K , X T W T K ) K = \text{concat}(X_I W_I^K, X_T W_T^K) K=concat(XIWIK,XTWTK)
    V = concat ( X I W I V , X T W T V ) V = \text{concat}(X_I W_I^V, X_T W_T^V) V=concat(XIWIV,XTWTV)
    • 其中 W I Q , W I K , W I V W_I^Q, W_I^K, W_I^V WIQ,WIK,WIV 是视觉专家的 QKV 矩阵, W T Q , W T K , W T V W_T^Q, W_T^K, W_T^V WTQ,WTK,WTV 是原始语言模型的 QKV 矩阵。
  2. 注意力权重计算
    使用上一步得到的 Q、K、V ,代入下面的公式,进行计算:
    Attention ( X , W I , W T ) = softmax ( Tril ( Q K T ) D ) V \text{Attention}(X, W_I, W_T) = \text{softmax}\left(\frac{\text{Tril}(QK^T)}{\sqrt{D}}\right) V Attention(X,WI,WT)=softmax(D Tril(QKT))V
    • W I W_I WI W T W_T WT 分别是视觉专家和原始语言模型中的 QKV 矩阵。
    • Tril ( ) \text{Tril}() Tril()下三角矩阵操作,用于掩盖掉未来信息(常用于自注意力机制中的掩码操作)。
FFN层

在计算完注意力后,视觉和文本特征会被进一步传递到前馈神经网络(FFN)层
FFN ( X ) = concat ( FFN I ( X I ) , FFN T ( X T ) ) \text{FFN}(X) = \text{concat}(\text{FFN}_I(X_I), \text{FFN}_T(X_T)) FFN(X)=concat(FFNI(XI),FFNT(XT))

  • 其中 FFN I \text{FFN}_I FFNI FFN T \text{FFN}_T FFNT 分别是视觉专家和原始语言模型的前馈神经网络

训练细节

CogVLM的训练是氛围两阶段,第一阶段进行预训练,第二阶段,对下游任务进行针对性微调。

这个两阶段的训练过程,在大模型中很常见,例如LLaVA也是两阶段:

  • 阶段1:特征对齐预训练
  • 阶段2:端到端微调

LLaVA参考历史文章:多模态论文笔记——LLaVA

1. 预训练阶段

数据集:

  • 预训练数据集:公开可用的图像文本对进行训练

  • 视觉定位数据集:作者还构建了一个包含4000万张图像的视觉定位数据集,图像中的名词与边界框相关联,表示物体在图像中的位置

预训练超参数:参考论文原文表5。

预训练第一阶段:图像描述损失函数

在预训练的第一阶段,主要使用 图像描述损失函数 来进行训练,目标是让模型学会根据图像生成描述文本。具体来说,模型被训练去预测图像对应的文本序列中的下一个标记(token)。

使用了15亿图像文本对,进行12万次迭代,批量大小为8192。

  • 目标:对于每一张图像,模型需要生成与之对应的描述文本。这个过程类似于传统的图像描述生成(image captioning)任务,模型通过最大化对文本部分的下一个标记预测的概率来进行训练。
  • 损失函数:通常使用 交叉熵损失(cross-entropy loss)来计算模型生成的文本序列与真实描述序列之间的差异,损失函数定义为:
    Loss = − ∑ t = 1 T log ⁡ P ( y t ∣ x , y < t ) \text{Loss} = -\sum_{t=1}^{T} \log P(y_t|x, y_{<t}) Loss=t=1TlogP(ytx,y<t)
    • 其中, P ( y t ∣ x , y < t ) P(y_t|x, y_{<t}) P(ytx,y<t) 表示在给定图像 x x x 和前面生成的文本 y < t y_{<t} y<t 的条件下,预测下一个标记 y t y_t yt 的概率。
预训练第二阶段:图像描述损失函数 + 指代表达理解(REC)任务的损失函数

第二阶段,除了图像描述任务外,还引入了 指代表达理解(REC)任务。REC任务要求根据物体的文本描述预测图像中的边界框位置,采用类似VQA的训练形式(问题:物体在哪里?答案: [ x 0 , y 0 , x 1 , y 1 ] [x_0,y_0,x_1,y_1] [x0,y0,x1,y1])。

在第二阶段,训练进行了6万次迭代,批量大小为1024,最后3万次迭代中提升了输入分辨率(从224×224到490×490),以增加图像细节和增强模型的泛化能力。

  • 图像描述损失:与第一阶段相同,图像描述损失函数依然用于训练模型生成图像的描述文本。

  • REC任务的损失函数:REC任务需要模型根据物体的文本描述预测图像中的边界框位置。具体来说问题:物体在哪里?答案: [ x 0 , y 0 , x 1 , y 1 ] [x_0,y_0,x_1,y_1] [x0,y0,x1,y1]。为了训练这一任务,使用 下一个标记预测的损失函数,即类似于图像描述任务的交叉熵损失,但这次输出是坐标值。

  • 损失函数:对于 REC 任务,损失函数可以形式化为:
    Loss REC = ∑ i = 1 N MSE ( y pred , i , y gt , i ) \text{Loss}_{\text{REC}} = \sum_{i=1}^{N} \text{MSE}(y_{\text{pred}, i}, y_{\text{gt}, i}) LossREC=i=1NMSE(ypred,i,ygt,i)
    其中, y pred , i y_{\text{pred}, i} ypred,i 是模型预测的边界框坐标, y gt , i y_{\text{gt}, i} ygt,i 是真实的边界框坐标, N N N 是边界框的数量。

2. SFT有监督微调
  • 微调数据:可以参考数据集 CogVLM-SFT-311K 进行训练。
  • 微调超参数:参考论文原文表6。
  • 训练细节:在有监督微调(SFT)阶段,除 Vision Transformer (ViT) 编码器外,所有的参数都是可以训练的。

这些训练细节展示了 CogVLM 的多阶段训练过程,其中预训练和微调的结合确保了模型能够高效地理解和生成图像与文本之间的关系。

CogVLM2

论文

CogVLM2: Visual Language Models for Image and Video Understanding

优化

CogVLM 2与第一代CogVLM类似,CogVLM 2在注意力和FFN模块中都采用了视觉专家的架构。这种架构创新促进了视觉和语言特征的深度融合,同时保留了模型固有的语言能力。
与第一代模型不同,CogVLM 2进一步采用2×2下采样模块,在保持效率的同时提高输入分辨率,并使用LLaMA 3-8B作为LLM骨干。此外,我们从多样性和质量方面不断增强训练前和训练后数据,详细信息见第3.1节和第4.1节。

CogVLM2CogVLM 的基础上做了多项优化和改进,主要体现在以下几个方面:

1. 视觉专家模块的改进
  • CogVLM 中的视觉专家模块主要通过引入视觉专家对每一层的视觉特征进行深度处理,实现图像特征与文本特征的深度融合。
  • CogVLM2 进一步优化了视觉专家模块,使得图像特征的处理更加高效和精确。具体来说,CogVLM2引入了 多层视觉专家模块,让视觉专家模块在每一层都能更加精细地调节图像和文本特征的融合。
2. MLP 适配器的增强
  • CogVLM 中使用了 MLP适配器 来将视觉特征与文本特征对齐,这一操作是通过一个两层的 MLP(SwiGLU)来完成的。
  • CogVLM2 中对 MLP 适配器进行了优化和增强,增强了适配器的能力,使其能够更有效地映射不同模态的特征,进一步提高了图像和文本特征的融合效果。具体增强了适配器的容量和非线性表达能力,使得图像和文本的对齐更加精细。
  • CogVLM2 使用了 Downsample 操作来降低计算复杂度,同时保证特征的准确性,使得模型在处理更大规模的图像数据时依然保持高效。
3. 视觉优先的加强
  • CogVLM 中,视觉特征在多个层次上和文本特征进行对齐,但图像的处理可能没有完全达到视觉信息的深度融合。
  • CogVLM2 强化了“视觉优先”的思想,进一步优化了图像特征与文本特征的深度融合过程,确保图像特征在各个层次上都有充分的表达,而不是仅在浅层中对齐。这使得 CogVLM2 能够更好地理解复杂的视觉信息,并在视觉任务上取得更好的效果。

http://www.mrgr.cn/news/82429.html

相关文章:

  • Redis四种模式在Spring Boot框架下的配置
  • 【开源社区openEuler实践】compass-ci
  • C++文件流 例题
  • PHP Array:精通数组操作
  • JAVA异常处理练习
  • deepseek v3模型为啥要开源
  • redis的集群模式与ELK基础
  • 如何从文档创建 RAG 评估数据集
  • .Net Core配置系统
  • U8G2库使用案例(stm32)
  • 计算机网络原理(谢希仁第八版)第4章课后习题答案
  • Java-list均分分割到多个子列表
  • Unity+Hybridclr发布WebGL记录
  • [Hive]七 Hive 内核
  • springboot3+vue项目实践-黑马
  • 大模型WebUI:Gradio全解系列10——Additional Features:补充特性(下)
  • 【开源社区openEuler实践】qemu
  • UML之泛化、特化和继承
  • YOLO11改进 | 卷积模块 | ECCV2024 小波卷积
  • Linux下部署Redis集群 - 一主二从三哨兵模式
  • mysql 事物隔离级别 与mvcc
  • 【go每日一题】golang异常、错误 {源码、实践、总结}
  • 数据挖掘——支持向量机分类器
  • 【sql】CAST(GROUP_CONCAT())实现一对多对象json输出
  • C 实现植物大战僵尸(二)
  • Elasticsearch: 高级搜索