MM-LLM:CogVLM解读

news2024/12/27 16:15:21

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

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

该论文的动机(背景):

论文认为以 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.coloradmin.cn/o/1855303.html

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

相关文章

Bev系列算法总结

1. LSS-Based 1.1 BevDet 通过Lift splat 对于2d 特征中的每个pixel(特征点)估计一个3d的深度分布,这样就可以将2d点投影到3d空间上。这样就可以拿到UVD个3d特征点,然后通过voxel pooling 对高度方向拍平, 这样就得到Bev空间的特征图。然后再通过Bev encoder以及任务头。 …

vue3-openlayers 使用tianditu,wmts和xyz等source加载天地图切片服务

本篇介绍一下使用vue3-openlayers加载天地图切片,三种方法: 使用tianditu(ol-source-tianditu内部实现其实用的wmts)使用wmts(ol-source-wmts)使用xyz(ol-source-xyz) 1 需求 vue…

ArkTS开发系列之导航 (2.6 图形)

上篇回顾:ArkTS开发系列之导航 (2.5.2 页面组件导航) 本篇内容: 显示图片、自定义图形和画布自定义图形的学习使用 一、知识储备 1. 图片组件(Image) 可以展示jpg 、png 、svg 、gif等各格式的网络和本地资源文件图…

潜艇伟伟迷杂交版植物大战僵尸2024最新免费安卓+ios苹果+iPad分享

嗨,亲爱的游戏迷们!今天我要给你们种草一个超有趣的游戏——植物大战僵尸杂交版。这款游戏不仅继承了原有经典游戏的核心玩法,还加入了许多创新元素,让玩家能够体验到前所未有的乐趣。快来跟随我一起探索这个神奇的世界吧&#xf…

自然语言处理领域的明星项目推荐:Hugging Face Transformers

在当今人工智能与大数据飞速发展的时代,自然语言处理(NLP)已成为推动科技进步的重要力量。而在NLP领域,Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度,为您深…

线程封装,互斥

文章目录 线程封装线程互斥加锁、解锁认识接口解决问题理解锁 线程封装 C/C代码混编引起的问题 此处pthread_create函数要求传入参数为void * func(void * )类型,按理来说ThreadRoutine满足,但是 这是在内类完成封装,所以ThreadRoutine函数实际是两个参数,第一个参数Thread* …

Python 围棋

效果图 完整代码 源码地址:Python 围棋 # 使用Python内置GUI模块tkinter from tkinter import * # ttk覆盖tkinter部分对象,ttk对tkinter进行了优化 from tkinter.ttk import * # 深拷贝时需要用到copy模块 import copy import tkinter.me…

高纯PFA容量瓶PFA试剂瓶在半导体材料的应用

在半导体生产过程中,为避免金属污染对硅器件性能造成不利影响,碳化硅产业链不同阶段产品(如衬底、外延、芯片、器件)表面的痕量杂质元素浓度表征至关重要。 在实验人员使用质谱法高精度检测第三代半导体碳化硅材料的痕量杂质浓度…

Linux - 探秘 Linux 的 /proc/sys/vm 常见核心配置

文章目录 PreLinux 的 /proc/sys/vm 简述什么是 /proc/sys/vm?主要的配置文件及其用途参数调整对系统的影响dirty_background_ratio 和 dirty_ratioswappinessovercommit_memory 和 overcommit_ratiomin_free_kbytes 实例与使用建议调整 swappiness设置 min_free_kb…

2024.6.23刷题记录

目录 一、P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 1.hash表-一次遍历 2.双指针(同向,可以算滑动窗口)-排序 二、P8667 [蓝桥杯 2018 省 B] 递增三元组 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 1.排序指针 2…

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

题目&#xff1a; 题解&#xff1a; class Solution {const int L 10;unordered_map<char, int> bin {{A, 0}, {C, 1}, {G, 2}, {T, 3}}; public:vector<string> findRepeatedDnaSequences(string s) {vector<string> ans;int n s.length();if (n < L…

《AI旋律:创意产业的重塑与共生》

AI乐章&#xff1a;技术革命下的创意产业新生态 在数字化浪潮的推动下&#xff0c;音乐创作领域迎来了前所未有的变革——AI音乐大模型的横空出世&#xff0c;犹如一颗石子投入平静的湖面&#xff0c;激起了层层涟漪。这些模型以令人难以置信的速度和多样性&#xff0c;将音乐…

WinForm 2048

WinForm 2048 是一个基于 Windows 窗体应用程序&#xff08;WinForms&#xff09;实现的经典益智游戏——2048。这个游戏通过简单的滑动或点击操作&#xff0c;将相同数字的方块合并&#xff0c;以生成更大的数字方块&#xff0c;最终目标是创造出一个数字为 2048 的方块。 游…

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

题目&#xff1a; 题解&#xff1a; class Solution { public:int maxProfit(int k, vector<int>& prices) {if (prices.empty()) {return 0;}int n prices.size();k min(k, n / 2);vector<int> buy(k 1);vector<int> sell(k 1);buy[0] -prices[0]…

Ubuntu 之Glade图形化设计器

演示环境说明&#xff1a;本机使用Windows 11 家庭版本搭载 Ubuntu 22.04.4 LTS 子系统&#xff0c;同时并安装Ubuntu桌面虚拟化软件XLaunch。 如果没有搭建好上述问题&#xff0c;请参考&#xff1a;windows11子系统Ubuntu 22.04.4子安装图形化界面 Glade是什么&#xff1f;…

驾校预约管理系统

摘 要 随着驾驶技术的普及和交通安全意识的增强&#xff0c;越来越多的人选择参加驾校培训&#xff0c;以获取驾驶执照。然而&#xff0c;驾校管理面临着日益增长的学员数量和繁琐的预约管理工作。为了提高驾校的管理效率和服务质量&#xff0c;驾校预约管理系统成为了必不可少…

[spring] Spring MVC - CRUD 操作

[spring] Spring MVC - CRUD 操作 基础实现源自于这两篇笔记&#xff1a; [spring] Spring Boot REST API - 项目实现[spring] Spring Boot REST API - CRUD 操作 除了 Rest API 部分改成了 Controller 之外&#xff0c;其他没什么变化&#xff0c;还是使用 service --> …

6/23 第四周 python操作excel

excel对于python来说就是一个二维数组&#xff0c;只是多了一个多sheet的index的索引&#xff0c;在确定索引之后&#xff0c;不管是读取还是写入&#xff0c;都是类似于二维数组。对于数据的处理&#xff0c;读取和写入就够了&#xff0c;如果要应用图表&#xff0c;个人觉得还…

nest.js关键笔记

Nest.js 介绍核心功能设计模式&#xff1a;IOC 控制反转 DI 依赖注入前置知识&#xff1a;装饰器前置知识装饰器-实现一个GET请求 Nestjs脚手架Nestjs cli 常用命令 RESTful 风格设计Nestjs 控制器控制器中常见的参数装饰器 Session 实例Nestjs 提供者**工厂模式**异步模式 Nes…

Linux 7种 进程间通信方式

传统进程间通信 通过文件实现进程间通信 必须人为保证先后顺序 A--->硬盘---> B&#xff08;B不知道A什么时候把内容传到硬盘中&#xff09; 1.无名管道 2.有名管道 3.信号 IPC进程间通信 4.消息队列 5.共享内存 6.信号灯集 7.socket通信 一、无名管道&a…