LLM大模型: blip2多模态大模型原理

news/2024/10/21 17:16:51

    截止目前,图片检索领域最出名的应该是openAI的clip了,分别用bert和vit对text和image做encoder,然后让配对的embedding接近,不配对的embedding拉远,通过这种方法达到text匹配(检索)image的目的!但这种方式只能检索,没法生成text啊(比如对image做适当的description),咋整了?总结一下,单存的clip有如下问题:

  • Model perspective
    • Encoder-based model generation tasks:clip只能retreval,不能generate
    • Encoder-decoder-based model retrieval tasks : 两个都有只能generate,不能retreval
  • Data perspective:
    • The web text-image data contains noise:当年openai训练clip的时候,号称使用了400 million的text-image数据,但这些都来自web,肯定有很多noise,不干净!

     为了解决上述问题,blip诞生了!论文: https://arxiv.org/abs/2201.12086

  1、clip是典型的“双塔”模型:text和image分别用encoder转成embedding,然后计算vector的距离!因为缺乏decoder,所以没法生成text,所以这里就像搭积木一样加上decoder不就行了?看到这里,我想大部分人和我都是这样想的,但是人家salesforce团队

肯定是有高人的,见识和认知都比我这种普通人高多了,他们的网络架构图如下:

  

   (1)image encoder:提取imag的图片信息,可以用vit(其他的image encoder也行),把(batch_size, channel, width,height) 通过conv2d转成(batch_size, w' * h', channel);w' * h' 就是卷据后的宽、高,类比于nlp任务的seq_len;channel类似于nlp任务中token的dimension,这两个都是超参数,可以根据后续的nlp任务设置成合适的大小!

  (2)顺数第二个的text encoder:这是个典型的bert结构,用的是self-attention,并且在text的开头加上了cls标识token。这里最核心的就是Bi self-att了,同时使用token的context得到当前token的embedding!经过了feed forward后,得到了text的embedding,就和image embedding做 ITC Image-Text Contrastive learning了:本质就是二分类。image 和text 经过各自的encoder之后,不进行交互(没有cross attention),独立生成image和text的嵌入(embedding)。接着,模型通过对比学习(contrastive learning)来优化嵌入,使匹配的image和text对的距离更接近,不匹配的对则远离。这种方法有助于模型在全局层面上理解image和text之间的语义关系。这里和Clip没有本质区别!

  在训练时,ITC分错误的样本说明是比较难的,这部分样本可以继续用于训练ITM,让ITM的能力更强

  (3)顺数第三个的image-grounded text encoder:和第二个比,明显多了和image的cross attention,其他和第二个完全一样,为啥还要这么做了?这一步的encoder和上一步的encoder比,最大的差异就是cross attention了,这里是直接把image的embedding融合到text的embedding,所以这里得到的text embedding的信息明显比第一个跟丰富!最重要的是:attention机制找到text和image局部的对应关系(ITC是全局语义关系)这个关系在最后一个LM里面是复用的!最后通过binary cross entropy来计算损失函数!

  (4)最后一个LM,和第三个ITM比,唯一的区别就是把Bi self-att换成了causal self-att,为啥这么变?因为最后一个LM是decoder,目的要输出text token,所以训练的loss自然就是gpt采用的auto regression啦!训练时token只能看到上文,看不到下文,所以下文的token全部都要mask掉!为了提升预训练效率,text encoder和text decoder share除了attention之外的参数,论文原话:In order to perform efficient pre-training while leveraging multi-task learning, the text encoder and text decoder share all parameters except for the SA layers. The reason is that the differences between the encoding and decoding tasks are best captured by the SA layers【颜色相同的模块参数是共享的】;

  2、representation和generative的问题解决了,data的问题怎么办了?clip训练采用了很多web数据,这些数据肯定有很多noise,怎么提升数据质量?最简单粗暴的办法是找人标注,但成本高啊!怎么低成本地获取大量高质量数据了?多年前做传统数据挖掘时,有这样一种方式获取较多的高质量数据:

  • 先人工标注少量数据,能训练模型就行(训练样本一般是参数的5~10倍;比如有100个参数,人工标注500条高质量数据即可),利用这些高质量数据训练模型
  • 用模型做推理预测。对于得分非常高和非常低的样本,其置信度较高,这类样本判断错误的概率较低,所以这类样本直接作为正样本或负样本,继续用于迭代训练模型

  Blip是怎么做的了?如下图:

  • 红色的数据可能有noise,属于弱监督;绿色的数据基本没noise,数据质量高!
  • w是web爬取的,数据有noise;h是human标注的,属于高质量数据

  

  • 先用所有的样本训练MultiModal,包括ITC、ITM和LM;因为所有样本有来自web的noise,所以此时模型的质量并不高
  • 再用{Ih,Th} 这种高质量数据fine - tune ITC和ITM,把这两个classifier的质量提起来!
    • 经过高质量数据fine - tune后,ITC和ITM的分类准确率会大幅提升,此时再用这两个model对低质量的{Iw,Tw}数据做filter,只保留匹配正确的数据,去掉匹配错误的noise,这一步就叫filter!
  • 同理,使用高质量的{Ih,Th} fine-tune decoder模型,提升decoder的质量;
    • 此时用这个decoder对Iw(也就是web爬取的有noise的Image),让decoder生成text(这个叫captioning),取名Ts;这个Ts对不对了?此时不用人工判断,直接用上一步的ITC和ITM去判断。如果是对的,那么这个{Iw,Ts}对就可以放入数据集啦!这个过程叫bootstrapping;

  总结一下:最终的数据集Data set的数据来自三部分:人工标注的Th、ITC和ITM filter的Tw,以及decoder生成并通过filter的Ts!这三部分数据质量相对较高,完成了整个data set的数据清洗!

  3、Blip完成了representation和generative的任务,但缺陷还是有的:

  • 要训练4个model,计算量特别大!
  • 根据scaling law,image-text配对的数据需要较多

  blip的这两个

 

 

 

参考:

1、https://arxiv.org/abs/2301.12597   BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models

2、https://github.com/salesforce/LAVIS/tree/main/projects/blip2   

3、https://www.bilibili.com/video/BV1ff421q7sC?spm_id_from=333.788.videopod.episodes&vd_source=241a5bcb1c13e6828e519dd1f78f35b2&p=3  

4、https://mp.weixin.qq.com/s/csqFAkjziwx34aAxKj9-gQ  视频、图像、文本,只需基于下一个Token预测:智源Emu3发布,验证多模态模型新范式

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

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

相关文章

发那科机器人R2000iC控制柜常见故障类型

发那科机器人维修R2000iC控制柜常见故障类型 电源故障: 发那科机器人R2000iC控制柜不能正常供电,可能是由于电源线路损坏、保险丝烧断、电源模块故障或电压不稳定等原因造成。 通信故障: 控制柜与上层控制器或其他设备之间的通信中断,导致机器人不能接收指令或无法与其他设…

TS学习笔记(三)

TS语言继承了JS的类型设计,js将值分为8中类型:boolean、string、number、undefined、null、symbol、bigint、object。 注意,上面所有类型的名称都是小写字母,首字母大写的Number、String、Boolean等在js语言都是内置对象,而不是类型名称。bigint与number类型并不兼容const…

jdk8u20 链子分析

jdk8u20 链子分析 在 JDK7u21 中反序列化漏洞修补方式是在 AnnotationInvocationHandler 类对type属性做了校验,原来的payload就会执行失败。但在8u20中可以用 BeanContextSupport 类对这个修补方式进行绕过,所以说其实 jdk8u20 就是对 jdk7u21 的绕过。 链子分析 可以看到在高…

Meta 最新 SPIRIT-LM:语音文本无缝转换还能懂情绪;字节回应实习生破坏大模型训练:网传损失不实丨 RTE 开发者日报

开发者朋友们大家好:这里是「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑的…

通义灵码实践教程——编码使用实践

点击此处,立即下载通义灵码!https://tongyi.aliyun.com/lingma/ 通义灵码最佳使用实践参考 通义灵码是JetBrains或VSCode集成开发环境(IDE)中嵌入的一款智能开发助手工具,旨在通过人工智能技术简化软件开发过程,提升开发效率。本文将介绍在开发过程中如何深度体验多种辅助…

通义灵码实践教程——单元测试

通义灵码加持的单元测试实践 本文首先讲述了什么是单元测试、单元测试的价值、一个好的单元测试所具备的原则,进而引入如何去编写一个好的单元测试,通义灵码是如何快速生成单元测试的。 什么是单元测试? 单元测试是一种软件测试方法,通过编写代码来验证应用程序中最小的可测…

2024秋软工实践 银河战舰队展示与选题报告

作业所属课程 班级的链接作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13290作业的目标 开发一个基于LLM大模型接口的软件,为传统的软件赋予全新的体验和功能。团队名称 银河战舰团队成员学号-名字 102202129-林伟宏 102202131-林鑫 102202109-木合塔拉提 10…

geojson的下载与展示

下载地址:https://datav.aliyun.com/portal/school/atlas/area_selecto 展示地址:https://l7editor.antv.antgroup.com/