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

【论文极速读】 指令微调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.rhkb.cn/news/296133.html

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

相关文章

docker 安装nginx

一、先查看有没有nginx镜像 docker images 二、发现没有nginx镜像,下载最新镜像 docker pull nginx 三、运行镜像 为了先复制出部分文件,先启动一个临时容器 docker run --name nginx -p 9001:80 -d nginx docker cp nginx:/etc/nginx/conf.d /home/…

HTTP/1.1、HTTP/2、HTTP/3 演变(计算机网络)

HTTP/1.1 相比 HTTP/1.0 提高了什么性能? HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接改善了短连接造成的性能开销。支持管道网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去&#xff0c…

百卓Smart管理平台 importexport.php SQL注入漏洞复现(CVE-2024-27718)

0x01 产品简介 百卓Smart管理平台是北京百卓网络技术有限公司(以下简称百卓网络)的一款安全网关产品,是一家致力于构建下一代安全互联网的高科技企业。 0x02 漏洞概述 百卓Smart管理平台 importexport.php 接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取数据…

基于springboot实现校园周边美食探索及分享平台系统项目【项目源码+论文说明】

基于springboot实现园周边美食探索及分享平台系统演示 摘要 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起,互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域,传统的…

每日一题————P5725 【深基4.习8】求三角形

题目: 题目乍一看非常的简单,属于初学者都会的问题——————————但是实际上呢,有一些小小的坑在里面。 就是三角形的打印。 平常我们在写代码的时候,遇到打印三角形的题,一般简简单单两个for循环搞定 #inclu…

MySQL 学习心得和知识总结(五)|MySQL的一般查询日志(general log)

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

权限提升技术:攻防实战与技巧

本次活动赠书1本,包邮到家。参与方式:点赞收藏文章即可。获奖者将以私信方式告知。 网络安全已经成为当今社会非常重要的话题,尤其是近几年来,我们目睹了越来越多的网络攻击事件,例如公民个人信息泄露,企业…

软件测试学习(一)

1.软件测试的定义 软件是控制计算机硬件工作的工具。 软件基本组成:客服端、服务器、数据库 软件产生过程:需求产生->需求文档->设计效果图->产品开发->产品测试->部署上线 软件测试的定义:使用技术手段来验证软件产品是否…

第四百三十九回

文章目录 1. 概念介绍2. 实现方法3. 示例代码 我们在上一章回中介绍了dart语言中的setter/getter相关的内容,本章回中将介绍局部动态列表.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在正常情况下列表位于整个页面中,而且可以在整个页…

波士顿房价预测案例(python scikit-learn)---多元线性回归(多角度实验分析)

波士顿房价预测案例(python scikit-learn)—多元线性回归(多角度实验分析) 这次实验,我们主要从以下几个方面介绍: 一、相关框架介绍 二、数据集介绍 三、实验结果-优化算法对比实验,数据标准化对比实验&#xff0…

Rredis缓存常见面试题

文章目录 1.什么是缓存穿透,怎么解决2.什么是缓存击穿,怎么解决3.什么是缓存雪崩,怎么解决4.双写一致性问题5.redisson添加的排他锁是如何保证读写、读读互斥的6.为什么不使用延迟双删7.redis做为缓存,数据的持久化是怎么做的8.re…

MySQL的基本操作(超详细)

👨‍💻作者简介:👨🏻‍🎓告别,今天 📔高质量专栏 :☕java趣味之旅 📔(零基础)专栏:MSQL数据库 欢迎🙏点赞&…

ngAlain下使用nz-select与文件上传框出现灵异bug

bug描述 初始化页面,文件上传框无法出现: 但点击一次选择框以后,就会出现: 真的很神奇。。。 下面逐步排查看看是什么原因。 设想一: 选择框与文件框不可同时存在,删掉选择框看看: 还…

创业者的三大法宝:自我进化、自我激励与诚信坚守

一、摘要: 在创业的道路上,每一位创业者都如同航海家,驾驶着自己的船只,在波涛汹涌的大海中探寻成功的彼岸。而在这条充满未知与挑战的旅程中,创业者们需要具备哪些关键的品质和能力呢?京东集团创始人刘强…

搭建电商网站外贸网站用API接口可以实现哪些功能(天猫API接口|京东API接口)

在电商领域,API接口可以实现多种功能,起到连接内外部系统及优化电商业务流程等多种作用,从而来提高电商企业的运营效率。 具体来看,API接口接入可以用来: 商品管理: API接口能够用来获取商品详情等&#…

华为OD面试手撕算法-合并排序数组

题目描述 本题是leetcode一道简单题:合并两个有序数组,但是对于时间和空间复杂度面试官明确给出了限制。 // 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。 // 初始化…

马化腾的电商梦,只能靠它来实现了~

我是王路飞。 腾讯要开始加大对电商的投入力度了, 而这些资源所依托的载体,正是【视频号】。 在2023微信公开课PRO上,视频号团队介绍,2022年总用户使用时长已经超过了朋友圈总用户使用时长的80%。视频号直播的看播时长增长156%…

Windows12安装Docker

环境及工具(文末提供) Docker Desktop Installer.exe (官网) 一、查看windows相关配置 查看是否开启相应的功能,如果没有需要开启,然后重启电脑 打开任务管理器(CTRLSHIFTESC)-&g…

高级IO/多路转接-select/poll(1)

概念背景 IO的本质就是输入输出 刚开始学网络的时候,我们简单的写过一些网络服务,其中用到了read,write这样的接口,当时我们用的就是基础IO,高级IO主要就是效率问题。 我们在应用层调用read&&write的时候&…

Webpack部署本地服务器

Webpack部署本地服务器 目录 Webpack部署本地服务器目的认识模块热替换(HMR)什么是 HMRHMR 通过如下几种方式, 来提高开发的速度如何使用 HMRhost 配置 目的 完成自动编译 常用方式: webpack-dev-server webpack-dev-server 是一个用于开发环境的 Web 服…