首先要说明一下,ChatGLM3并非是一个独立存在的大模型,而CogVLM是这个模型中的一个重要组成部分,也是一个独立的视觉语言模型。CogVLM专注于多模态任务,主要是视觉理解,如图像字幕、视觉问答、视觉定位和分割等。
CogVLM论文:https://github.com/THUDM/CogVLM/blob/main/assets/cogvlm-paper.pdf
Github地址:https://github.com/THUDM/CogVLM
1. CogVLM模型组件构成
包含四个基本组件:视觉变换器(ViT)编码器、MLP适配器(Adapter)、预训练的大型语言模型(GPT)和一个视觉专家模块。其中,5B参数的视觉编码器和6B参数的视觉专家模块,总共11B参数建模图像特征。
ViT编码器:CogVLM-17B使用预训练的EVA2-CLIP-E模型,其中ViT编码器的最后一层被移除,因为它专门用于聚合[CLS]特征进行对比学习。
MLP适配器:是一个两层的MLP,用于将ViT的输出映射到与单词嵌入的文本特征相同的空间。所有图像特征在语言模型中共享相同的位置ID。
预训练大语言模型:采用Vicuna-7Bv1.5进行进一步训练,其中包括对图像特征的注意力操作。
视觉专家模块:视觉专家模块由QKV矩阵和MLP组成,与预训练语言模型的形状相同,并从中初始化。具体内容见章节2。
2. 技术特点
CogVLM的核心思想是“视觉优先”,它在多模态模型中将视觉理解放在更优先级的位置。
CogVLM通过可训练的‘视觉专家模块’在注意力层和FFN层中连接了(预训练的大语言模型 和 图像编码器),实现、构建深度融合的视觉语言特征。
具体实现(见下图b),就是在每个层中添加‘视觉专家模块’,实现了对图像特征的转换(图像特征来自于编码器),使其与语言模型的注意力头对齐,从而实现深度融合。
如上图(a)所示:输入由(图像特征 + 文本特征)构成,图像特征由图像依次经过Vit编码器和MLP适配器 计算而来。
如上图(b)所示:是一个Transformer模块,图像特征有着不同的QKV矩阵和FFN;并且只有紫色部分参与训练。
注:在这里笔者是这么理解的,紫色部分 = 视觉专家模块,实现对图像特征的转换,使其与LM的注意力头对齐,实现深度融合。
如上述公式所示,公式(1)用于计算多头注意力,公式所需的Q、K、V来自于公式(2) ,在这里输入X被拆分为Xi和Xt,也就是图像和文本特征分别处理后拼接。
3. 杂谈
3.1 预训练
预训练的图像-文本对都是公开可用的,包括LAION-2B和COYO-700M。经过筛选,剩下约15亿张图像用于预训练。
这里采用的是多阶段训练。
第一阶段训练使用1.5B的(图像-文本)对进行,共进行了120,000次迭代;
第二阶段训练使用VQA(Visual Question Answering)形式的(文本-图像)对和视觉定位数据集,共进行了60,000次迭代。最终30,000次迭代中,输入分辨率从224×224变为490×490。
补充:‘视觉定位数据集’ 由论文作者构建,是一个包含40M张图像的视觉grounding数据集。数据集中每个名词都与边界框关联,用于指示‘名词’在图像中的位置。该数据集的构建过程基本上遵循了 Peng 等人的方法,使用 spaCy 提取名词并使用 GLIPv2 预测边界框。这些图像-文本对是从 LAION-115M 中采样的,保留了至少包含两个边界框的图像的子集。
3.2 SFT:有监督微调
SFT需要高质量数据,包括LLaVA-Instruct、LRV-Instruction、LLaVAR和内部数据集,共约50万个VQA对。其中,LLaVA-Instruct由仅涉及Language的GPT-4生成,难免存在错误,因此需要通过手动检查和注释进行纠正。
有监督微调,batch_size = 640;lr = 10-5;50个热身迭代(?笔者不太懂);8000次迭代训练。
在训练/微调过程中,Vit编码器参数冻结,其余参数可训练;值得注意的是语言模型本身就是在Vicuna-7Bv1.5进一步训练得到,为了防止过拟合,在预训练语言模型的更新中使用较小的学习率(其它参数的0.1倍)。
其余,CogVLM在各类任务上的表现,以及‘消融实验’,感兴趣的各位可以去原文观看。
笔者ChatGLM系列解析链接如下:
ChatGLM系列解析(一)—— ChatGLM开篇之作_chatglm开源模型简介-CSDN博客