BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation

Title: BLIP: 引导语言-图像预训练,用于统一的视觉-语言理解和生成 作者: Junnan Li Dongxu Li Caiming Xiong Steven Hoi;Salesforce Research 发表日期:2022.2 github: https://github.com/salesforce/BLIP 该论文试图解决什么问题? 目前已经存在的VLP(Vision-Language Pre-training)模型仅仅在理解类任务(understanding-based tasks)或者生成类任务(generation-based tasks)其中一方面表现优秀。 本文主要解决问题有二。 提出BLIP,一个新的可以灵活迁移到理解类任务和生成类任务的VLP架构。 (CapFilt): 网络爬取的数据有噪声,该方法可以提升数据的质量。 Key Contributions 提出MED(ultimodal mixture of Encoder-Decoder)架构: 可以有效的多任务预训练和迁移学习。 通过三个视觉-语言目标函数实现:imagetext contrastive learning, image-text matching, and imageconditioned language modeling. 提出CapFilt(Captioning and Filtering)方法: 从有噪声的数据训练。captioner模块:输入网络爬取的图片,输出合成的文本描述(caption 任务), filter模块:从合成的图像文本对中删除质量差的数据(noisy captions). Method 模型结构 note: 颜色相同的模块共享参数 主要分为三个模块 Unimodal encoder: 单模态的encoder, 包括图像encoder, 文本encoder Image-grounded text encoder: 通过cross-attention进入视觉信息 Image-grounded text decoder: 用于生成任务 预训练目标函数 Image-Text Contrastive Loss (ITC) 作用:视觉特征空间与文本特征空间对齐(CLIP思想) 实现方式:同一个batch中配对的图像和文本是正样本,不配置的图像和文本是负样本(自已构建正负样本对)。计算cos距离后正样本打高分,负样本打低分。 Image-Text Matching Loss (ITM) 作用:捕获更细粒度的图像文本对齐特征 实现方式:网络最后接一个全连接层做一个二分类任务。note:与ITC不同 Language Modeling Loss (LM) 作用:给定图片生成描述 实现方式:交叉熵 CapFilt 先用网络爬取的数据和人类标注的数据集预训练模型。然后各自(指参数不共享)的finetune captioner模块和filter模块。...

五月 22, 2023 · 1 分钟 · Pan

BLIP-2:Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models

Title: BLIP-2: 用冻结的图像编码模型和大语言模型引导文本-图像预训练 作者: Junnan Li Dongxu Li Silvio Savarese Steven Hoi;Salesforce Research 发表日期:2023.5 github: https://github.com/salesforce/LAVIS/tree/main/projects/blip2 该论文试图解决什么问题? 由于端到端的训练, 预训练视觉-语言模型代价变的非常高昂。这篇论文提出了BLIP-2, 一个通用的、有效的预训练策略: 其从现成的冻结的视觉模型和冻结的大语言模型,引导视觉-语言(vision-language)模型的预训练。该方法解决的跨模态对齐(视觉模型和LLM)问题。 应用:Instructed Zero-shot Image-to-Text Generation 先展示一下BLIP2的强大能力,这是BLIP2最亮眼的地方。 信息检索能力,利用LLM强大的知识库 事实推理能力 开放生成能力 Method 整体架构 两阶段策略,预训练一个轻量级Q-Former模块去连接两种模态的gap。 第一阶段:从一个frozen image encoder中引导vision-language表示学习(representation learning)。 第二阶段:从一个frozen LLM中引导vision-to-language的生成学习(generative learning) 第一个阶段:图片-文本表示学习(vision-language representation learning) note: Q-Former的输出维度Z(32*768)远远小于VIT-L/14(257*1024)的维度 注意三个目标self-attention mask的不同 Q-Former作用:从图片中提取与文本最相关的特征 第二个阶段:图片到文本生成学习(vision-to-language generative pre-training) Q-Former后接入一个全连接层,用于使用LLM的输入。LLM model分为两类,一个像OPT只有Decoder模块,一个像FlanT5既有Encoder又有Decoder模块。 Experiments 在各个视觉-语言任务上的zero-shot能力 zero-shot VQA 参考文献 BLIP2:下一代多模态模型的雏形 多模态学习持续梳理

五月 15, 2023 · 1 分钟 · Pan

LoRA: Low-RanK Adaption Of Large Language Models

Title: LoRA: 大语言模型的低秩适配 作者: {edwardhu, yeshe, phwallis, zeyuana, yuanzhil, swang, luw, wzchen}@microsoft.com yuanzhil@andrew.cmu.edu 发表日期:2021.10 该论文试图解决什么问题? 提出一个大模型的低秩适配方法去解决全量微调大模型时候需要全量更新模型参数、显存占用很大的问题。 Key Contributions 对于不同的下游任务,大模型的参数是共享的,变化的只不过是LoRA方法新引入的参数(即B、A参数矩阵)。所以如果有比较多的下游任务,大模型参数只需要保存一份,切换任务的时候也只需要切换一下B、A矩阵即可。大大减少了模型存储的空间和任务切换时候的负载 LoRA方法可以使训练更有效(耗时减少)、减少3倍的显存使用。因为不用保存原始大模型参数的梯度。eg,GPT-3训练需要1.2T显存,使用LoRA方法显存只需要350G左右 不增加推理耗时(上面已经提到) 可以和其他的适配方法结合,比如prefix-tuning Abstract & Introduction & Method NLP模型使用的一个通用范式是先选择一个大的在通用数据集上训练的预训练模型,然后再在一个特定任务上做fine-tune。 但是如果做全量的fine-tune,就要更新模型所有的参数。比如GPT-3有1750亿的参数。fine-tune需要更新1750亿的参数,这个操作是昂贵的。本文提出一个名为LoRA(Low-Rank Adaption)的方法:freeze 预训练模型的参数,在原有的模型结构中插入低秩分解矩阵(rank decomposition matrices). 该方法可以极大的减少模型的训练参数。 方法示意图如下 右边橙色的为新引入的可训练的低秩矩阵,其它的为原始模型的参数。数学表达可能更清楚一点。原始模型的前向过程表达为 $$h = W_0x$$, 修改后的前向过程如下: $$h = W_0x+\Delta Wx=W_0x+BAx$$ LoRA核心的方法就是改公式。在模型保存的时候可以将$W_0+\Delta W$保存(即加起来),所以改方法不会增加模型的推理耗时 Experiments 与不同适配方法在GLUE上的对比 在GPT-3上的适配效果对比 不同方法加大可训练参数量效果对比 Transformer结构为例,LoRA加到哪里更有效? 参数总量不变(秩r改变),加的地方不一样。实验表明加到$W_q$,$W_v$上效果更好 r是不是越大越好? 实验表明,r并不是越大效果越好,对于一些任务,r=4就足够了(取1效果也不错)。对于这个结论论文有一些说明,大致的意思就是r=4的时候,参数量已经够要学习的信息了,再打也是无非是引入冗余的信息罢了。这里解析的可以有失偏颇,感兴趣的参见原文为好。 CONCLUSION AND FUTURE WORK 关于未来的工作方向。 LoRA可以和其他迁移方法结合 fine-tuning或者LoRA背后的机制是不清楚的,如何将在预训练的时候学习到的特征迁移到下游任务?作者认为LoRA比full fine-tuning做更好。 作者将LoRA添加到参数矩阵,是通过穷尽、实验的方式,有没有更好的指导原则? 既然LoRA可以通过添加一个低秩的矩阵就可以取到好的效果,那么原始的参数矩阵是不是也可以降低一下秩?。 第4点确实是一个比较好、且重要的研究方向。

五月 9, 2023 · 1 分钟 · Pan

PCA

preliminary 特征值与特征向量 设A为n阶实方阵,如果存在某个数$\lambda$及某个n维非零列向量$x$,使得$Ax=\lambda x$,则称$\lambda$是方阵A的一个特征值,$x$是方阵A的属于特征值的一个特征向量。 特征值与特征向量求解 $$Ax = \lambda x, x\not ={0} \\ \iff (A- \lambda E)x=0, x\not ={0} \\ \iff |A-\lambda E|=0 $$ 其中$|A-\lambda E|$称为特征多项式。 注:n阶方阵一定存在n个特征根(可能存在复根和重根) 协方差矩阵 假设存在一个m大小数据集,每个样本的特征维度为n。那么这个数据集可以表示为$X_{n * m}$, 其中每一列表示一个样本,每一行表示随机变量x的m个观察值。n行表示有n个随机变量。我们用 $K=(x_1, x_2, …,x_n)$表示这个随机变量序列,则这个变量序列的协方差矩阵为: $$C=(c_{ij})_{n * n}=\left[\begin{matrix} cov(x_1, x_1) & cov(x_1, x_2) & … &cov(x_1, x_n)\\ cov(x_2, x_1) & cov(x_2, x_2) & … &cov(x_2, x_n)\\ .& .& …& .\\ .& .& …& .\\ cov(x_n, x_1) & cov(x_n, x_2) & … &cov(x_n, x_n)\\ \end{matrix}\right]$$...

十二月 10, 2022 · 1 分钟 · pan

mysql innodb中的四种事务隔离级别

mysql innodb中的四种事务隔离级别 本文以实验的形式展示mysql Innodb引擎的四种事务隔离级别的影响。 四种隔离级别 隔离级别 脏读(Dirty Read) 脏读(Dirty Read) 幻读(Phantom Read) 未提交读(Read uncommitted) 可能 可能 可能 已提交读(Read committed) 不可能 可能 可能 可重复读(Repeatable read) 不可能 不可能 可能 可串行化(Serializable ) 不可能 不可能 不可能 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读) 可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 详细说明 以下表(test)解释各个隔离级别,只有两个字段,一个id,一个account 插入测试数据 关闭mysql自动提交和设置隔离级别 查看是否开启自动提交 show variables like 'autocommit'; 打开或关闭自动提交 set autocommit = 1;//打开 set autocommit = 0;//关闭 查看数据库隔离级别 select @@tx_isolation;//当前会话隔离级别 select @@global.tx_isolation;//系统隔离级别 设置数据库隔离级别(当前会话) SET session transaction isolation level read uncommitted; SET session transaction isolation level read committed; SET session transaction isolation level REPEATABLE READ; SET session transaction isolation level Serializable; 未提交读(Read uncommitted) 关闭自动提交、设置对应隔离级别,开启两个会话,下面不在赘述...

十月 6, 2022 · 2 分钟 · Pan