cogvlm:visual expert for large lanuage models

2023-12-12 03:04

本文主要是介绍cogvlm:visual expert for large lanuage models,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CogVLM: Visual Expert For Large Language Models论文笔记 - 知乎github: https://github.com/THUDM/CogVLM简介认为原先的shallow alignment效果不好(如blip-2,llava等),提出了visual expert module用于特征的deep fusion在10项任务上达到SOTA,效果堪比PaLI-X 55B分为专家模…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/6627642351.introduction

shallow alignment不好,blip2,minigpt4,llava,visualglm等通过可训练的Q-former或线性层将冻结的预训练视觉编码器和语言模型连接起来,将图像特征映射到语言模型的输入嵌入空间中,虽然收敛速度快,但是不如联合训练视觉和语言模块的方法,例如PaLi-X,容易产生幻觉。shallow alignment较差的原因是视觉和语言之间缺乏深度融合deep fusion。这一想法来自于高效微调中的p-tuning和lora的比较,其中p-tuning通过学习输入中的任务前缀嵌入,而lora通过地址矩阵调整每个层的模型权重,lora效果更好更稳定。在VLM中,shallow alignment中,图像特征起到了p-tuning中的前缀嵌入作用,导致p-tuning和shallow alignment性能下降的原因包括:1.语言模型的权重是用文本token训练的,视觉特征在输入文本空间中并不能很多的对齐,因此在多层转换之后,视觉特征可能不再与深层权重的输入分布相匹配。2.在预训练阶段,cation中的先验信息只能被编码到浅层对齐方法中的视觉特征中,这削弱了视觉特征和文本之间的一致性。当然这也不全然,QWen-VL采用的三阶段训练,语言模型也会训练应该会解决一些对齐和融合的问题。一种方法是将语言模型和图像-文本联合训练,包括PaLI和QWen-VL,但是这种方式会导致语言模型能力下降,PaLM-E语言模型在VLM预训练期间可能会灾难性遗忘,导致8B的语言模型NLG下降87.3%.

        CogVLM相反,向语言模型中添加了一个可训练的visual expert,在每一层中,序列中的图像特征使用一个新的不同的QKV矩阵和MLP层与文本特征并行。visual expert保证FLOPS不变的同时使参数数量翻倍。语言模型使用的是Vicuna-7B.

2.method

2.1 architecture

cogvlm由四个基本组件组成:VIT,MLP adapter,预训练语言模型,visual expert。

VIT:CogVLM-17B,预训练的EVA2-CLIP-E,VIT最后一层被移除。大概有4.4B。

MLP adapter:2层MLP,用于将VIT的输出映射与词嵌入的文本特征相同的空间。

预训练语言模型:Vicuna-7B-V1.5.

visual expert模块:在语言模型的每一层上都加了visual expert,以实现深层次的视觉语言对齐,由一个QKV矩阵和一个MLP组成,和语言模型中的QKV矩阵,MLP的形状相同,并从语言模型中初始化,语言模型中的每个attention head捕捉语义信息,可训练的visual expert可以将图像特征转换为与不同的attention head对齐,从而实现深度融合。

2.2 pretraining

数据:

开源数据集:LAION-2B,COYO-700M,剔除有问题的,大概还有15亿张图像用于预训练。

构造一个40M的视觉grounding数据集,在LAION-115M中采样,GLIPv2预测,确保75%的图像都至少有2个边界框。

训练:第一阶段针对image captioning loss,即文本的下一个预测。将CogVLM-17B在15亿个图像文本对上进行了120k迭代训练,bs为8196,得到base模型;预训练第二阶段是Referring Expression Comprehension和image captioning混合训练,15亿图像-文本对,bs为1024,60k迭代,最后30k把图片尺寸从224提升到490,得到CogVLM Grounding model。REC通过给出对象的文本描述,预测图像中的边界框,以VQA的形式进行训练,即Question:对象在哪里?Answer:[[x0,y0,x1,y1]]。可训练参数为65亿,消耗4096个A100/天。

2.3 alignment

对CogVLM进行微调,使其能够与任何主题自由形式指令相对齐。微调之后的模型为CogVLM-chat。

数据:SFT从LLAVA-INstruct、LRV-INstruction、LLaVAR和内部数据集中收集,共计50w个VQA对。SFT至关重要,LLaVA-Instruct由GPT4生成,手动进行了纠错。

训练:8k迭代,bs为640,lr为10-5,warmup迭代次数为50,为了防止过度拟合数据中的文本答案,使用了较小的学习率来更新语言模型,SFT中除了VIT,所有参数都参与训练。

3.experiments

这篇关于cogvlm:visual expert for large lanuage models的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483018

相关文章

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

速通GPT-3:Language Models are Few-Shot Learners全文解读

文章目录 论文实验总览1. 任务设置与测试策略2. 任务类别3. 关键实验结果4. 数据污染与实验局限性5. 总结与贡献 Abstract1. 概括2. 具体分析3. 摘要全文翻译4. 为什么不需要梯度更新或微调⭐ Introduction1. 概括2. 具体分析3. 进一步分析 Approach1. 概括2. 具体分析3. 进一步分析 Results1. 概括2. 具体分析2.1 语言模型

高精度打表-Factoring Large Numbers

求斐波那契数,不打表的话会超时,打表的话普通的高精度开不出来那么大的数组,不如一个int存8位,特殊处理一下,具体看代码 #include<stdio.h>#include<string.h>#define MAX_SIZE 5005#define LEN 150#define to 100000000/*一个int存8位*/int num[MAX_SIZE][LEN];void

【Visual Studio 报错】未加载 wntdll.pdb(一种可行的解决办法)

调试程序时,会出现下面这个报错 分析原因: 出现未加载 wntdll.pdb 报错大概率是你的指针使用错误 ,比如使用野指针、越界访问、或者堆区空间释放方式错误等。 这里以 堆区空间释放方式错误 为例子 1、堆区开辟的数组空间使用 delete 释放 // 堆区开辟的数组空间使用 delete 释放int* p = new int[10];delete p; 正

查看Excel 中的 Visual Basic 代码,要先设置excel选项

1. excel VB的简单介绍 百度安全验证 2.excel选项设置 excel表格中在选项->自定义功能区域,选择开发工具,visual baisc/查看代码,即可看到代码。 3.excel已经设置,可以直接查看

[VC] Visual Studio中读写权限冲突

前置场景: 编译没有报错,但是运行提示 内存异常: 情景1: 如下代码运行异常,提示引发了异常:写入权限冲突。*** 是 0xFFFFF..... char* str = (char*)malloc(10);str[0] = 0x30;  解决方案:要包含头文件<stdlib.h>  情景2: 在FileA文件调用FileB文件的函数,但是在FileA中却没有声明该B函数的原型

解决Visual C++ 中相互包含头文件的问题

在编MFC应用程序时,经常会遇到头文件相互包含的问题,很是苦恼,于是便求助于强大的CSDN,得到如下答案:   方法一:利用友元类   我一共有两个类,由于要在两个类的头文件里互相应用对方,所以,在每一个类的头文件里面现包含另一个类的头文件,然后在该类的定义中声明另一个类为友元类。如下:    #include "B.h"      class CA: public CDialog

[论文笔记]Making Large Language Models A Better Foundation For Dense Retrieval

引言 今天带来北京智源研究院(BAAI)团队带来的一篇关于如何微调LLM变成密集检索器的论文笔记——Making Large Language Models A Better Foundation For Dense Retrieval。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 密集检索需要学习具有区分性的文本嵌入,以表示查询和文档之间的语义关系。考虑到大语言模