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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nlp基础-文本预处理及循环神经网络

1 认识文本预处理 1 文本预处理及其作用 定义:文本送给模型之前,提前要做的工作 作用:指导模型超参数的选择 、提升模型的评估指标 举个例子: 思路常识,打造成 X Y关于Y:10分类标签是否均衡关于X&#xf…

代码随想录训练营Day44

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、零钱兑换二、完全平方数三、单词拆分 前言 提示:这里可以添加本文要记录的大概内容: 今天是跟着代码随想录刷题的第44天&#xff…

LeetCode:经典题之1491、896 题解与延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …

Oracle自动创建分区

一、需要分区的表 create table PARTITION_TABLE_INFO ( table_name VARCHAR2(500), comments VARCHAR2(500), enable VARCHAR2(500) default Y ) / comment on table PARTITION_TABLE_INFOis 分区维护表 / comment on column PARTITION_TABLE_INFO.table_name is …

Mybatis plus:Wrapper接口

一、介绍 MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。 …

springCloud组件专题(四) --- sentinel

前言 限流,熔断降级概念 限流:顾名思义,就是对一个资源(服务或者接口都可以算资源)的访问进行限制。简单来说就是限制单位时间内允许资源被访问的次数。常见的算法就是令牌桶算法。 降级:降级其实是一种资源…

IBM IMM1服务器硬件监控指标解读

在复杂多变的IT环境中,服务器的稳定运行对于保障业务的连续性至关重要。IBM IMM1(Integrated Management Module 1)作为IBM服务器的一个重要组件,提供了强大的远程管理和监控功能。 监控易作为一款专业的IT基础设施监控软件&#…

实际中路由器故障处理方法

1.路由器的部分功能无法实现 (1)故障现象:路由器配置完全正确,但是有些功能却不能实现。 (2)故障原因:如果是在确保路由器配置正确的前提下,那么问题应该就在路由器的软件系统上。 &…

【鸿蒙】ERROR_GET_BUNDLE_INSTALLER_FAILED

错误信息 [ERROR_GET_BUNDLE_INSTALLER_FAILED] Troubleshooting guide $ hdc file send D:\Huawei\devEcoProjects\entry\build\default\outputs\default\entry-default-unsigned.hap /sdcard/e8a215ea7be1444197e6a58ebda7721f/entry-default-unsigned.hap Error while Depl…

26.3 Django路由层

1. 路由作用 在Django中, URL配置(通常称为URLconf)是定义网站结构的基础, 它充当着Django所支撑网站的目录. URLconf是一个映射表, 用于将URL模式(patterns)映射到Python的视图函数或类视图上. 这种映射机制是Django处理HTTP请求的基础, 它决定了当客户端发送请求时, Django如…

什么是DND网络?

DND网络通常指的是“无人机网络”(Drone Network),它是通过多个无人机(Drones)之间的相互连接和通信形成的网络系统。无人机网络是一种特殊类型的无线自组织网络(Wireless Ad-hoc Network)&…

Java中的线程安全与同步技术

Java中的线程安全与同步技术 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中的线程安全问题以及如何利用同步技术来保证多线程环境下的…

免费ddns工具,快解析DNS解析使用教程

DDNS(Dynamic Domain Name Server),中文叫动态域名解析,主要用于没有固定公网ip的网络环境下,使用一个固定的域名,解析动态变化的ip地址,达到远程访问的目的。 众所周知,目前公网ip资源非常紧缺…

Golang | Leetcode Golang题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; const L 10 var bin map[byte]int{A: 0, C: 1, G: 2, T: 3}func findRepeatedDnaSequences(s string) (ans []string) {n : len(s)if n < L {return}x : 0for _, ch : range s[:L-1] {x x<<2 | bin[byte(ch)]}cnt : map[int]in…

OLAP(联机分析处理)和OLTP(联机事务处理)详细介绍与发展历程

OLAP&#xff08;Online Analytical Processing&#xff0c;联机分析处理&#xff09;和OLTP&#xff08;Online Transaction Processing&#xff0c;联机事务处理&#xff09;是数据库系统中两种不同的处理模式&#xff0c;各自有不同的应用场景和技术特点。以下是对OLAP和OLT…

解决MNIST数据集下载慢,或者Http连接失败问题

下载MNIST数据集时遇到速度慢的问题 解决&#xff1a;手动从MNIST数据集的官方网站直接使用下载好的数据文件&#xff0c;放到指定目录下&#xff0c;再进行调取即可。 手动下载地址&#xff1a;MNIST官网 http://yann.lecun.com/exdb/mnist/ 【仍需要连接外网】 这里我提供…

【强化学习】DQN走迷宫(一)

书接上回&#xff0c;《【强化学习】Q-learning训练AI走迷宫》&#xff08;去年的&#xff09; 本节讲述在相同的环境下&#xff0c;使用DQN来走迷宫。&#xff08;假设我们已经了解相关基础。&#xff09; 一. 概念重温 1.1 什么是DQN&#xff1f; 让我们从颗粒度上对齐一下…

Mybatis分页查询,同时返回total

在垃圾项目中一般都是使用mybatis plus自动返回Page,但是涉及到多表联合或者等等情况最终还是要使用mybatis进行手写sql查询,所以有此文章以便后续使用查询. 首先mysql需要支持多条查询语句,在mysql配置url后加上: &allowMultiQueriestrue&useAffectedRowstrue Mapper…

C语言 | Leetcode C语言题解之第188题买卖股票的最佳时机IV

题目&#xff1a; 题解&#xff1a; int maxProfit(int k, int* prices, int pricesSize) {int n pricesSize;if (n 0) {return 0;}k fmin(k, n / 2);int buy[k 1], sell[k 1];memset(buy, 0, sizeof(buy));memset(sell, 0, sizeof(sell));buy[0] -prices[0];sell[0] 0…

上证所抓包实战

第 2 页jsonCallBack 回调函数Request Headers爬取股票列表下载时间戳Initiator在 Network 中抓到的包,有 Headers、Payload、Preview、Response、Initiator、Timing、Cookies 面板,从这些面板中获取有用的信息来写脚本。 上海证券交易所 https://www.sse.com.cn/assortment…