MM-LLM:CogVLM解读

在图文多模态模型中,范式是图像的编码器、文本编码器、模态融合器。也就是不同模态特征抽取加模态对齐。
这部分可以看李沐的精讲

在大模型里的范式在也是如此,目前的工作大部分都专注于怎么拉齐不同模态。

该论文的动机(背景):

论文认为以 BLIP2代表的多模态模型在模态对齐时是shallow alignment,所谓浅对齐,是为了说明该论文的深度对齐。
shallow alignment:BLIP-2为代表的对齐方法,通过对比学习Loss训练Q-Former 或者线性层,来连接冻结的vision encoder和LLM,将图像特征对齐到text Embedding空间。这种办法收敛快,但是性能不如联合训练。同时还具有幻觉问题。
在这里插入图片描述

作者的灵感来自于p-tuning and LoRA ,认为p-tuning的添加prompt的方式和浅对齐的模态拼接相似,
(because in the shallow alignment methods, the image features act like the prefix embedding in p-tuning)

p-tuning
而Lora通过在权重矩阵外增加旁支通路,取得了比p-tuning更优秀的结果。

作者推测造成浅对齐的更具体的原因是

  1. 冻结的LLM在面对text token的时候才会训练。视觉特征在输入文本空间,将不会有一个很好的对应。因为经过多层Transformer以后,visual feature将不会和weights的输入分布保持一致在深层。

  2. 在预训练阶段,图像描述任务的先验(例如,写作风格、字幕长度),只能用浅对齐方法编码到视觉特征中。这削弱了视觉特征和内容之间的一致性。

作者继续说如果采用图文联合训练可以增强模态的对齐性能,但是会带来模型在文本上的性能损失。也很自然地想到,原本的LLM在大规模文本数据集上训练,自己再在小规模数据集上微调本身就会出现灾难性遗忘。

总结: 以往工作的浅对齐方法在模态对齐上存在性能不足和幻觉问题。
1.冻结的LLM限制了视觉特征与文本空间的有效对齐。
2.预训练阶段的图像描述任务先验削弱了视觉特征与内容之间的一致性。
3.联合训练可以在一定程度克服浅对齐的弊端,增强对齐性能,但会带来文本性能损失和灾难性遗忘问题。

由此引出了作者借鉴Lora而做的visual expert

CogVLM instead adds a trainable visual expert to the language model.

是针对图像特征,在LLM的每一层解码器上,都copy一份形状相同、初始状态相同的Q、K、V和MLP。
因为针对图像输入训练了一份权重,所以保留了原始的语言处理能力,不损失在单独文本处理上的能力。

模型结构

在这里插入图片描述紫色部分是可以训练的,其它是冻结的。

1.编码器
Vision Encoder:最后一层被移除的EVA2-CLIP-E
文本编码器
2.MLP Adapter
2层MLP,激活函数:SwiGLU(有必要开一篇专门的激活函数博客)
将图像特征映射到跟文本特征一样的向量空间。图像特征的position id都是一样的。
3.LLM
使用的基座模型是Vicuna-7Bv1.5。
4.Visual Expert Module(创新)
每一层,都包含QKV矩阵,和MLP。形状和LLM的相同,并且从其初始化。
其动机在于,语言模型中的每个注意力头捕捉某一方面的语义信息,而可训练的视觉专家能够转换图像特征以对齐不同的注意力头,从而实现深度融合。

重点——每层解码器的计算:

在这里插入图片描述在这里插入图片描述
代码:https://github.com/THUDM/CogVLM/tree/main/models

图像tokens与文本tokens的Q,K,V分别计算后拼接为一体。在Q,K,V的计算过程中,图像与文本互不干扰。图像信息与文本信息的交互在计算attention score与attention output的过程中发生。

训练阶段

1 预训练

1 所用数据

包含通用图文对数据和视觉定位数据。

通用图文对数据集:LAION-2B 和 COYO-700M。
数据过滤条件:移除损坏的URL;移除NSFW(不适合工作场所)的图像;移除带有噪声标题的图像;移除具有政治偏见的图像;移除长宽比大于6或小于1/6的图像。

视觉定位数据集: 从LAION-115M中抽样而来,再使用spaCy提取名词,并使用GLIPv2预测边界框。共计4000万张图像。

2 预训练的第一阶段

是图像描述损失(image captioning loss),即文本部分的下一个标记预测。
迭代次数:120k
Batch size:8192

3 预训练的第二阶段

图像描述和指代表达理解(REC)的混合训练。
REC任务是根据对象的文本描述预测图像中的边界框,以VQA(视觉问答)的形式进行训练,即“问题:物体在哪里?”和“答案:[[x0, y0, x1, y1]]”。x和y坐标的范围是000到999,表示图像中的归一化位置。在“答案”部分,我们只考虑下一个标记预测的损失。
迭代次数:60k
Batch size:1024
其中在最后30,000步中图像的分辨率从常见的224x224调整为了490x490。

得到CogVLM Grounding Model。base模型。

2 SFT

数据集:LLaVA-Instruct、LRV-Instruction、LLaVAR和一个内部数据集,总共约有50万对VQA(视觉问答)数据对。

对于监督微调,我们进行8,000次迭代训练,每批次大小为640,学习率为10^-5,并且进行了50次预热迭代。
为了防止数据集中文本答案的过拟合,我们采用了较小的学习率(其他参数学习率的10%)来更新预训练的语言模型。除了ViT编码器外,所有参数在SFT期间都是可训练的。

得到 Chat model。

个人总结:
作者在浅对齐的基础上增加了视觉专家模型,实现了不同模态的深度融合,效果也是很强的。但是模型参数量也是上涨了一倍多。也许是可以改进的点。

参考:
1.https://arxiv.org/abs/2311.03079
2.https://zhuanlan.zhihu.com/p/672491823
3.https://zhuanlan.zhihu.com/p/662764235
4.https://zhuanlan.zhihu.com/p/668806245
5.https://blog.csdn.net/weixin_38252409/article/details/134678294
6.【COGVLM: VISUAL EXPERT FOR LARGE LANGUAGEMODELS】 https://www.bilibili.com/video/BV1Fc41167rN/?share_source=copy_web&vd_source=29af710704ae24d166ca951b4c167d53

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/760348.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

指针类型及数据读取和解释

指针类型的作用和解引用的过程 指针类型的作用: 根据指针类型确定读取数据位数(float类型指针,读取32位);根据指针类型解释读取的数据(float类型指针,按照1位符号位,8位指数位&…

(单机架设教程)3D剑踪

前言 今天给大家带来一款单机游戏的架设:3D剑踪 如今市面上的资源参差不齐,大部分的都不能运行,本人亲自测试,运行视频如下: 3D剑踪 搭建教程 此游戏架设不需要虚拟机, 我们先解压 “3D剑踪.zip” &…

【计算机图形学 | 基于MFC三维图形开发】期末考试知识点汇总(上)

文章目录 视频教程第一章 计算机图形学概述计算机图形学的定义计算机图形学的应用计算机图形学 vs 图像处理 vs模式识别图形显示器的发展及工作原理理解三维渲染管线 第二章 基本图元的扫描转换扫描转换直线的扫描转换DDA算法Bresenham算法中点画线算法圆的扫描转换中点画圆算法…

老师如何发布期末成绩查询

期末成绩的发布总是让人既期待又紧张。但别担心,今天我就来和大家分享一下如何高效、准确地发布期末成绩查询,让家长和学生都能轻松查到成绩,同时也减轻你的工作负担。 整理成绩数据是关键。确保你的成绩单是最新的,并且已经经过仔…

架构师篇-10、DDD实战篇:通过领域模型落地系统

基于领域模型的设计与开发 数据库设计程序设计微服务设计 在线订餐系统的领域事件通知 微服务拆分 事件风暴会议 梳理领域事件进行领域建模识别聚合关系划分限界上下文 用户下单领域模型 更新后的模型 领域模型的设计实现过程 数据库设计 数据库映射:一对一关系…

【Mac】Auto Mouse Click for Mac(高效、稳定的鼠标连点器软件)软件介绍

软件介绍 Auto Mouse Click for Mac 是一款专为 macOS 平台设计的自动鼠标点击软件,它可以帮助用户自动化重复的鼠标点击操作,从而提高工作效率。以下是这款软件的主要特点和功能: 1.自动化点击操作:Auto Mouse Click 允许用户录…

【硬件视界2】CPU和GPU:计算机架构的双子星

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、CPU (中央处理器)①主要作用②特点 2、 GPU (图形处理…

Workerman在线客服系统源码,附搭建教程

源码介绍: Workerman在线客服系统源码。 workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天…

气膜仓库的优势与应用—轻空间

随着现代物流和存储需求的不断增长,传统仓库的建设和运营成本日益增加,企业需要寻找更加灵活、高效和经济的解决方案。在这种背景下,气膜仓库作为一种新型仓储形式,以其独特的优势和广泛的应用前景,逐渐受到市场的青睐…

Hadoop3:Yarn配置任务的优先级

一、需求说明 配置队列优先级 容量调度器,支持任务优先级的配置,在资源紧张时,优先级高的任务将优先获取资源。默认情况,Yarn将所有任务的优先级限制为0,若想使用任务的优先级功能,须开放该限制。 二、修…

【STM32嵌入式系统设计与开发---传感器拓展】——1_4_标准库FreeRTOS移植实验

目录 雅俗理解源码下载链接知识拓展步骤1:stm32f103vet6移植freeRTOS步骤:(1)准备开发环境(2)添加FreeRTOS移植 致谢 雅俗理解 雅:FreeRTOS是一个开源的实时操作系统(RTOS)&#xf…

index()方法——字符串首次出现的索引位置

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 index()方法用于查询一个字符串在其本身字符串对象中首次出现的索引位置。它与find()方法功能相同,区别在于当find()方法没有检…

数据产品经理知识库构建

概述 数据产品经理是企业中负责管理和推动数据产品的专业人员。他们利用数据来辅助决策,优化产品,提升用户体验。用STAR法则(Situation, Task, Action, Result)来介绍数据产品经理的角色,应该学习的数据产品&#…

cookie 的获取过程

#第一次请求过程 浏览器第一次发送请求时,不会携带任何cookie信息 服务器接收到请求之后,发现请求中没有任何cookie信息 服务器生成和设置一个cookie.并将此cookie设置通过set_cookie的首部字段保存在响应报文中返回给浏 览器 浏览器接收到这个响应报文之后,发现里…

人工智能 (AI) 在能源系统中应用的机会和风险

现代文明极度依赖于电力的获取。电力系统支撑着我们视为理所当然的几乎所有基本生活功能。没有电力的获取,大多数经济活动将是不可能的。然而,现有的电网系统并未设计来应对当前——更不用说未来的——电力需求。与此同时,气候变化迫切要求我…

1.linux操作系统CPU负载

目录 概述CPU平均负载查看平均负载结束 概述 CPU 使用率 和CPU 平均使用率。 CPU平均负载 单位时间内系统处于 [可运行状态] 和 [不可中断状态] 的平均进程数,就是平均活跃进程数,和CPU使用率并没有直接关系 可运行状态 正在使用CPU或者正等待CPU的进…

vscode 开发qt6 开发环境搭建

vscode代码编辑器有自己一些优势,考虑用它开发qt6项目: 整个配置过程如下: 插件安装: .mingw&cmake安装配置: qt creator 创建一个测试工程,当然,工程是cmake类型 : vsocode 打开cmakeLis…

❤ Gitee平台的使用

Gitee平台的使用 文章目录 Gitee平台的使用一、Gitee的注册1、注册2、添加邮箱 二、仓库的创建 和 团队成员的添加1、单击右上角的 **+** 号 、创建仓库2、如下填写即可 三、仓库克隆到本地1、安装好git 和 小乌龟(TortoiseGit)2、打开仓库 复…

计算机Java项目|基于SpringBoot的作业管理系统设计与实现

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

ThreadPoolExecutor 线程回收时机详解

个人博客 ThreadPoolExecutor 线程回收时机详解 | iwts’s blog 总集 想要完整了解下ThreadPoolExecutor?可以参考: 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog Worker-工作线程管理 线程池设计了内部类Worker,主要是用来…