【论文极速读】 指令微调BLIP:一种对指令微调敏感的Q-Former设计

news2024/10/7 20:29:59
【论文极速读】 指令微调BLIP:一种对指令微调敏感的Q-Former设计
FesianXu 20240330 at Tencent WeChat search team

前言

之前笔者在[1]中曾经介绍过BLIP2,其采用Q-Former的方式融合了多模态视觉信息和LLM,本文作者想要简单介绍一个在BLIP2的基础上进一步加强了图文指令微调能力的工作——InstructBLIP,希望对诸位读者有所帮助。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注明出处,谢谢

∇ \nabla 联系方式:

  • e-mail: FesianXu@gmail.com

  • github: https://github.com/FesianXu

  • github page: https://fesianxu.github.io/

  • 知乎专栏: 计算机视觉/计算机图形理论与应用

  • 微信公众号:机器学习杂货铺3号店


之前我们介绍过BLIP2模型[1],其特点是采用Q-Former的方式在LLM中融合了多模态视觉信息,其中的learnable query可视为是一种软提示词(soft prompt)。如Fig 1. (b)所示,在整个BLIP2体系下,笔者个人认为可视为用学习出来的learnable query结合Q-Former,提炼出视觉表达,而这个视觉表达可视为也是一种软提示词,对参数固定的LLM进行提示,从而在LLM中融入多模态视觉信息。因此这个learnable query作为一种弱提示词是否学习得足够好,是影响后续MLLM表现的一个关键性因素之一。在BLIP2中的视觉特征提取是指令无关的,也即是Q-Former无法感知到不同指令的区别,在不同指令下都只能产出相同的视觉特征,这一点对一些细粒度的指令需求非常不友好。举例来说,一张图片的信息量是很丰富的,而人类在某次对话中的指令则可能只聚焦在这图片中的某个层面的细节上,如Fig 2所示,一个指令去请求模型回答名画的作者亦或是名画的作画细节,对图片视觉特征提取的要求是截然不同的,如果Q-Former无法对不同的指令进行感知,那么其提取出来的视觉特征则很难保证其能很好地满足指令的需求。instructBLIP在这个思考下,对Q-Former进行了改造使得其产出的视觉特征对指令敏感,如Fig 1 (a)所示,具体来说就是令Q-Former的learnable query同时配合指令进行输入,而learnable queryinstruction之间通过自注意力机制进行关联,这样能保证提取的视觉特征具有一定的指令敏感性,这个思路可谓是相当直接。

fig_1

Fig 1. InstructBLIP中采用的指令微调敏感的Q-Former结构 vs BLIP2中采用的指令无关Q-Former设计。

fig_2

Fig 2. 对视觉的不同需求,会对提取出来的视觉特征有着不同的粒度要求。

当然,为了引入更好的指令微调能力,不可避免地需要收集更大范围的指令微调数据,在instructBLIP中,作者汇总了包含了11个任务类别的26个数据集,如Fig 3所示,其中的LLaVa-Instruct-150k则是来自于工作[3]。为了进行更准确的任务迁移能力测试,作者对这26个数据集进行了留内集(held-on set)和留外集(held-out set)的划分(留内集会参与训练,而留外集则作为任务迁移能力的测试,不参与训练),这个划分有一些考虑:

  1. 任务粒度的划分: 作者按照任务粒度进行划分,其中visual reasoning、visual conversation QA、video question answering和image classification任务上都是作为留外集
  2. 数据集内部的划分:在以上提到的其他任务种类上,则在任务本身内进行划分,如image captioning上就将4个数据集划分为了2个留内集和2个留外集。

因此整个训练&测试的流程为:

  1. 在被划分为留内集的数据集本身的训练集中进行指令微调,然后通过这些留内集的验证集或者测试集进行留内验证(held-in evaluation)。
  2. 在留外验证(held-out evaluation)中,根据我们刚才的数据划分,有两种类型:
    • 数据集未被模型使用,但是有相同任务的数据集参与了训练
    • 数据集未被模型使用,同时也无相同任务的数据集参与了训练

注意到这些数据集本身可能并不是为了指令微调设计的(除了llava-instruct-150k),因此需要构建一些提示词模版(prompt template),在原文中作者构建了10到15个指令提示词模版,如下所示。注意到一些公开数据集中更青睐于短回答,因此在模版构建中使用了类似于"short"或者"briefly"的字眼去减少模型总是生成短答案的风险,当然更好的方法还是应该去收集一些长答案的训练集,笔者觉得也许通过GPT4去扩展/修正短回答也是一种可行的思路?

编号image captioning的任务模版VQA的任务模版VQG的任务模版
1A short image caption:{Question}Given the image, generate a question whose answer is: {Answer}. Question:
2A short image description:Question: {Question}Based on the image, provide a question with the answer: {Answer}. Question:
3A photo of{Question} A short answer to the question isGiven the visual representation, create a question for which the answer is “{Answer}”
4An image that showsQ: {Question} A:From the image provided, craft a question that leads to the reply: {Answer}. Question:
5Write a short description for the imageQuestion: {Question} Short answer:Considering the picture, come up with a question where the answer is: {Answer}.
6Write a description for the photo.Given the image, answer the following question with no more than three words. {Question}Taking the image into account, generate an question that has the answer: {Answer}. Question:
7Provide a description of what is presented in the photo.Based on the image, respond to this question with a short answer: {Question}. Answer:
8Briefly describe the content of the image.Use the provided image to answer the question: {Question} Provide your answer as short as possible:
9Can you briefly explain what you see in the image?What is the answer to the following question? “{Question}”
10Could you use a few words to describe what you perceive in the photo?The question “{Question}” can be answered using the image. A short answer is
11Please provide a short depiction of the picture.
12Using language, provide a short account of the image.
13Use a few words to illustrate what is happening in the picture.

由于训练集混合了多种数据来源,每个数据集的尺度都差别很大,如果均匀混在一起进行训练,在训练一定数量的token情况下,模型会见更多次小规模数据集,这导致模型容易倾向于小数据集的任务,而忽略大规模数据集的任务。为了解决这种问题,作者提出采用数据集规模的方式进行采样,假设 D D D个数据集的尺寸为 { S 1 , ⋯   , S D } \{S_1,\cdots,S_D\} {S1,,SD},那么第 d d d个训练集的采样概率则为 p d = S d ∑ i = 1 D S i p_d = \dfrac{\sqrt{S_d}}{\sum_{i=1}^D \sqrt{S_i}} pd=i=1DSi Sd 。为了减少某些特定任务数据集带来的风险,比如A-OKVQA (是一个多选择的问答任务)就需要手动降低权重,而会手动调高OKVQA数据集的权重。

fig_3

Fig 3. instructBLIP中的指令数据集中采用的原始26个数据集和其属于的不同任务类型分类。其中黄色框表示保留集,白色框表示留外集。

在训练过程中,作者采用BLIP2的checkpoint作为热启,固定了LLM底座和图片编码器,只微调Q-Former的参数,从动机上看,就是想要通过引入指令敏感的能力提高软提示词的效果。作者首先进行了模型zero-shot能力的测试,如Fig 4所示,在留外集上进行测试的结果验证了instructBLIP的领先性,而且在所有测试集上的提升均不少。

fig_5

Fig 4. instructBLIP在zero-shot任务上(留外集)的能力表现。

作者对文中提到的指令敏感Q-Former的引入、指令微调、数据平衡等方式进行了消融实现。首先看到指令微调和多任务训练方式的对比,在多任务训练方式中,数据不进行指令模版的格式化,如Fig 5所示,我们可以发现无论是多任务还是指令微调方式,都在留内集上表现接近,这意味着这两种方式都有同样的输入模式学习效果。但是在留外集上指令微调方式明显优于多任务学习方式,而后者表现与BLIP2基线接近,这意味着指令微调这种方式是加强LLM模型的zero-shot通用能力的关键。

fig_6

Fig 5. 指令微调方式和多任务训练方式在留内集和留外集的平均效果对比。

如Fig 6所示,作者在不同的LLM底座(FlanT5和Vicuna-7B)下,进行了去除指令敏感Q-Former和数据均衡策略的消融试验,试验证明这两者对性能的提升都是关键性的,其中指令敏感Q-Former的去除,在依赖于空间视觉推断的ScienceQA和时间视觉推断的iVQA任务上性能损失最大,这意味着引入指令敏感Q-Former模块的确能够提取更适合该指令下的图像视觉特征。

fig_7

Fig 6. 对指令敏感的Q-Former模块引入和数据均衡方式的消融试验。

总得来看,本文的贡献点主要是:

  1. 针对图文多模态的指令微调任务,设计了指令敏感的Q-Former模块,可以提取指令敏感的视觉特征。
  2. 针对图文多模态的指令微调任务,收集了一个由多个公开数据集组成的指令微调数据集。
  3. 采用一种数据均衡方式协调了数据集中的尺度大小不一的问题,提高了训练稳定性。

Reference

[1]. https://blog.csdn.net/LoseInVain/article/details/136013909, 《BLIP2——采用Q-Former融合视觉语义与LLM能力的方法》

[2]. Dai, Wenliang, Junnan Li, Dongxu Li, Anthony Meng Huat Tiong, Junqi Zhao, Weisheng Wang, Boyang Li, Pascale N. Fung, and Steven Hoi. “Instructblip: Towards general-purpose vision-language models with instruction tuning.” Advances in Neural Information Processing Systems 36 (2024). aka InstructBLIP

[3]. Liu, Haotian, Chunyuan Li, Qingyang Wu, and Yong Jae Lee. “Visual instruction tuning.” Advances in neural information processing systems 36 (2024). aka llava

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

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

相关文章

Docker基础系列之TLS和CA认证

Docker基础系列之TLS和CA认证 文章目录 Docker基础系列之TLS和CA认证1. 引言2. 初识TLS和CA3. 开启TLS和CA认证3.1 生成证书3.2 配置TLS 4. 参考和感谢 1. 引言 我们日常工作当中会遇到这些需求: 监控Docker容器在idea开发工具中连接Docker,直接发布至…

电脑端手机配置检测工具推荐与使用指南

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具,用户可以全面了解手机的硬件和操作系统信息,包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中,了解手机的配置信息对于开发和测试人员非常重要…

C语言内存函数(超详解)

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 点击主页:optimistic_chen和专栏:c语言, 创作不易,大佬们点赞鼓…

Gradle 使用详解

目录 一. 前言 二. 下载与安装 2.1. 下载 2.2. 配置环境变量 2.3. 配置镜像 2.3.1. 全局设置 2.3.2. 项目级设置 三. Gradle 配置文件 3.1. build.gradle 3.2. settings.gradle 3.3. gradle.properties 3.4. init.d 目录 3.5. buildSrc 目录 四. Java Library 插…

[flask]请求全局钩子

flask从入门到精通之钩子、异常、context、jinjia模板、过滤器 - 异步非阻塞 - 博客园 (cnblogs.com) 参考的这个博客,但有一个需要注意的是,最新版本的flask不知道是不是更新了还是怎么了,他的before_first_request不见了,如果继…

17.应用负载压力测试

早些点,下午题考,最近几年出现的少; 备考较为简单;历年真题相似度高; 主要议题: 1.负载压力测试概述 注意这些测试细微的差别; 负载测试和压力测试的方法比较相似,但是目的不同&a…

科研学习|论文解读——情感对感知偶然信息遭遇的影响研究(JASIST,2022)

原文题目 Investigating the impact of emotions on perceiving serendipitous information encountering 一、引言 serendipity一词最初是由霍勒斯沃波尔创造的,他将其定义为“通过意外和睿智发现你并不追求的事物”。信息研究中大多数现有的偶然性定义从几个角度看…

LeetCode 第391场周赛个人题解

目录 哈沙德数 原题链接 思路分析 AC代码 换水问题 II 原题链接 思路分析 AC代码 交替子数组计数 原题链接 思路分析 AC代码 最小化曼哈顿距离 原题链接 思路分析 AC代码 哈沙德数 原题链接 思路分析 签到题,不说了 AC代码 class Solution:def s…

3月31号总结

java学习 一.面向对象之多态 什么是多态: 多态是在继承/实现情况下的一种现象。表现为对象多态、行为多态。 对象多态:一个对象可以有多种身份,比如一个人,可以是一个父亲,一个老师,或者等等。 行为多…

“‘悦’向新生,与‘榕’同行” 悦榕集团海外酒店中国区巡演圆满收官

三十周年盛会如约而至,来自25家海外酒店及地产代表亮相上海、深圳、成都3城 【中国上海,2024年3月29日】值此悦榕集团成立30周年之际,悦榕集团海外酒店中国区路演活动于上海、成都、深圳三地举行,旗下25家海外酒店和集团海外地产代…

Ch2 Posix IPC

2.1 概述 三种IPC均使用路径名进行标识。路径名既可以是系统中的实际路径名,也可不是,两者的不一致性可能带来移植性问题。 2.2 IPC名字 2.3 创建与打开IPC通道 2.4 IPC权限

milvus knowhere源码编译测试

简介 Knowhere 是 Milvus 的核心向量执行引擎,集成了Faiss、Hnswlib和Annoy等多个向量相似度搜索库。 编译环境 操作系统: Ubuntu 22.04.4 gcc/g:11.4.0 cmake: 3.27.7 安装依赖 apt install build-essential libopenblas-dev libaio-dev python3-dev python…

备考ICA----Istio实验12---配置双向TLS Istio Ingress Gateway实验

备考ICA----Istio实验12—配置双向TLS Istio Ingress Gateway实验 本实验部分配置延续上个Istio实验11 1. 重新配置secret 重新配置secret使其带有ca证书可以验证客户端证书是否合法 先删除原有secret,再配置新的secret # 删除原tls类型的secret kubectl -n istio-system d…

第四十六周:文献阅读+itransfomer

目录 摘要 Abstract 文献阅读:ITtransformer——转置transformer对时间序列预测的实用性 现有问题 提出方法 方法论 研究实验 实验目的 数据集 基线模型 实验结果 研究贡献 模型代码 总结 摘要 本周阅读的文献《Inverted Transformers are Effective…

海康威视【管理员】账号密码泄露【附Poc】

「企业介绍」 海康威视成立于2001年, 是一家专注技术创新的科技公司 ,在安防、智能物联领域耕耘二十余年,业务覆盖全球150多个国家和地区。公司致力于将物联感知、人工智能、大数据技术服务于千行百业,引领智能物联新未来&#x…

【Python】——变量名的命名规则

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

2024长三角快递物流高质量创新发展论坛

2024长三角快递物流高质量创新发展论坛暨 2024长三角快递物流供应链与技术装备展览会(杭州) 2024年7月8-10日 | 杭州国际博览中心 指导单位:浙江省邮政管理局 中国快递协会 主办单位:浙江省快递行业协会 联合主办:上…

【医学嵌入模型】中文医疗文本处理大模型 PCL-MedBERT

中文医疗文本处理大模型 PCL-MedBERT 提出背景对ELECTRA限制的深入分析eHealth的创新方法实体识别关系抽取 总结 最近再做医学项目,需要从文本中抽取医学概念和关系,通用模型的抽取效果还可以。 但还想找医学嵌入模型,能够更准确地从文本中识…

python---基础(一)

文章目录 前言1.对象的基本组成2.变量和常量2.1.变量的声明2.2.常量_链式赋值_系列解包赋值2.2.1.常量是不是真的常量?2.2.2.链式赋值2.2.3.系列解包赋值 3.内置数据类型_基本算数运算符3.1四种内置数据类型3.2.基本运算符3.3.divmod() 前言 这几年,随着…

Wasm初上手

总之也是为了扩宽技术面吧。。。我也不知道为什么就想试试了,就酱。 参考阅读:极客时间《WebAssembly入门课》 安装wasm的编译器Emscripten。Emscripten 是一个“源到源”语言编译器工具集,这个工具集可以将 C/C 代码编译成对应 JavaScript 代…