前言
本文一开始是属于此文《图像生成(AI绘画)的发展史:从CLIP、BLIP、InstructBLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion(含ControlNet详解)》的,后独立成本文
第一部分 从CLIP、BLIP1、BLIP2到InstructBLIP
1.1 CLIP:基于对比文本-图像对的预训练方法
1.1.1 CLIP的原理结构
我第一次见识到CLIP这个论文的时候(对应论文为:Learning Transferable Visual Models From Natural Language Supervision,作者为Alec Radford等人),当时的第一反应是,特么也太强悍了..
CLIP由OpenAI在2021年1月发布
- 通过超大规模模型预训练提取视觉特征,进行图片和文本之间的对比学习 (简单粗暴理解就是发微博/朋友圈时,人喜欢发一段文字然后再配一张或几张图,CLIP便是学习这种对应关系)
- 且预训练好之后不微调直接推理 (即zero-shot,用见过的图片特征去判断没见过的图片的类别,而不用下游任务训练集进行微调)
使得在ImageNet数据集上,CLIP模型在不使用ImageNet数据集的任何一张图片进行训练的的情况下,最终模型精度能跟一个有监督的训练好的ResNet-50打成平手 (在ImageNet上zero-shot精度为76.2%,这在之前一度被认为是不可能的)
为了训练CLIP,OpenAI从互联网收集了共4个亿的文本-图像对,论文称之为WIT(Web Image Text,WIT质量很高,而且清理的非常好,其规模相当于JFT-300M,这也是CLIP如此强大的原因之一,后续在WIT上还孕育出了DALL-E模型)
其训练过程如下图所示:
- 如下图的第一步所示,CLIP的输入是一对对配对好的的图片-文本对(比如输入是一张狗的图片,对应文本也表示这是一只狗),这些文本和图片分别通过Text Encoder和Image Encoder输出对应的特征。然后在这些输出的文字特征和图片特征上进行对比学习
假如模型输入的是对图片-文本对,那么这
对互相配对的图像–文本对是正样本(上图输出特征矩阵对角线上标识蓝色的部位),其它
对样本都是负样本,这样模型的训练过程就是最大化
个正样本的相似度,同时最小化
个负样本的相似度
Text Encoder可以采用NLP中常用的text transformer模型
而Image Encoder可以采用常用CNN模型或者vision transformer等模型
相似度是计算文本特征和图像特征的余弦相似性cosine similarity
之后,CLIP可以直接实现zero-shot的图像分类,即不需要任何训练和微调,其实现zero-shot分类只需要简单的两步,如下第2、3点所示 - 根据任务的分类标签构建每个类别的描述文本:A photo of {label},然后将这些文本送入Text Encoder得到对应的文本特征,如果类别数目为n,那么将得到n个文本特征
- 将要预测的图像送入Image Encoder得到图像特征,然后与n个文本特征计算缩放的余弦相似度(和训练过程保持一致),然后选择相似度最大的文本对应的类别作为图像分类预测结果
进一步地,可以将这些相似度看成logits,送入softmax后可以到每个类别的预测概率
以下是对应的伪代码
# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - 输入图片维度
# T[n, l] - 输入文本维度,l表示序列长度# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter# 分别提取图像特征和文本特征
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]# 对两个特征进行线性投射,得到相同维度的特征d_e,并进行l2归一化,保持数据尺度的一致性
# 多模态embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)# 计算缩放的余弦相似度:[n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)# symmetric loss function
labels = np.arange(n) # 对角线元素的labels
loss_i = cross_entropy_loss(logits, labels, axis=0) # image loss
loss_t = cross_entropy_loss(logits, labels, axis=1) # text loss
loss = (loss_i + loss_t)/2 # 对称式的目标函数
2021年10月,Accomplice发布的disco diffusion,便是第一个结合CLIP模型和diffusion模型的AI开源绘画工具,其内核便是采用的CLIP引导扩散模型(CLIP-Guided diffusion model)
且后续有很多基于CLIP的一系列改进模型,比如Lseg、GroupViT、ViLD、GLIP
1.1.2 CLIP匹配的一个示例
如果让你把下图左侧三张图和右侧三句话配对,你可以轻松完成这个连线。但对 AI 来说,图片就是一系列像素点,文本就是一串字符,要完成这个工作可不简单。
原因在于
- 这需要 AI 在海量「文本-图片」数据上学习图片和文本的匹配。图中绿色方块是「图片潜在空间」的 N 张图片,紫色方块是「文本潜在空间」的 N 句描述语
CLIP会努力将对应的 I1与T1(蓝色方块)匹配,而不是 I1与 T2 (灰色方块)匹配 - 当 AI 能成功完成这个连线,也就意味着 AI 建立了「文字潜在空间」到「图片潜在空间」的对应关系,这样才能通过文字控制图片的去噪过程,实现通过文字描述得到图像的生成
1.2 BLIP1:ViT + BERT ——通过encoder-decoder统一理解与生成任务
随着AI的迅速发展,多模态日渐成为一种趋势,而「Vision-Language Pre-training (VLP) + Fine-tuning => Zero Shot / Few Shot」的模式是快速解决多下游任务的一个好的模式,VLP 是这个模式的开端,所以对于 VLP 的相关研究也很多
BLIP 是一个新的 VLP 架构,可以灵活、快速的应用到下游任务,如:图像-文本检索、图像翻译、以及 VQA 等
简单来讲,BLIP的主要特点是结合了encoder和decoder,形成了统一的理解和生成多模态模型。再利用BLIP进行后续工作的时候,既可以使用其理解的能力(encoder),又可以利用其生成的能力(decoder),拓展了多模态模型的应用
1.2.1 BLIP的模型结构
CLIP 采用了 image-encoder (ViT / ResNet) & text-encoder (transformer),然后直接拿 图片特征 和 文本特征 做余弦相似度对比,得到结果,而BLIP 的做法要复杂挺多
如下图所示,为了预训练一个同时具有理解和生成能力的统一模型,BLIP模型主要由4个部分组成,从左至右分别是
- 上图第1部分:视觉编码器Image Encoder(ViT)——提取图片特征
视觉编码器本质就是 ViT 的架构:将输入图像分割成一个个的 Patch 并将它们编码为一系列 Image Embedding,并使用额外的 [CLS] token 来表示全局的图像特征 - 上图第2部分:文本编码器Text Encoder(BERT)——提取文本特征
文本编码器就是 BERT 的架构,其中 [CLS] token 附加到文本输入的开头以总结句子,作用是提取文本特征与第1部分的图像特征做对比学习
在这个过程中会训练一个对比学习目标函数 (Image-Text Contrastive Loss, ITC)
ITC 作用于第1部分的视觉编码器(ViT)和第2部分的文本编码器(BERT),目标是对齐视觉和文本的特征空间,方法是使得正样本图文对的相似性更大,负样本图文对的相似性更低,在 ALBEF 里面也有使用到。作者在这里依然使用了 ALBEF 中的动量编码器,它的目的是产生一些伪标签,辅助模型的训练
为方便对比,把BLIP的模型结构图再贴一遍
- 上图第3部分:视觉文本编码器Image-grounded Text Encoder(变种 BERT)——BERT中插入交叉注意层,从而针对图片特征和文本特征做二分类
视觉文本编码器的具体做法是在文本编码器比如BERT的每个transformer block的自注意(Bi Self-Att)层和前馈网络(Feed Forward)之间额外插入一个交叉注意(Cross-Attention),以引入视觉特征,作用是根据 ViT 给的图片特征和文本输入做二分类,所以使用的是编码器,且注意力部分是双向的 Self-Attention,且添加一个额外的 [Encode] token,作为图像文本的联合表征
在这个过程中则训练一个图文匹配目标函数 (Image-Text Matching Loss, ITM)
ITM 作用于第1部分的视觉编码器和第3部分的视觉文本编码器,是一个二分类任务,目标是学习图像文本的联合表征,使用一个分类头来预测 image-text pair 的 正匹配 还是 负匹配,目的是学习 image-text 的多模态表示,调整视觉和语言之间的细粒度对齐,作者在这里依然使用了 ALBEF 中的 hard negative mining 技术
- 上图第4部分:视觉文本解码器Image-grounded Text Decoder(变种 BERT)——根据图片特征和文本特征做文本生成
视觉文本解码器使用 Cross-Attention,作用是根据 ViT 给的图片特征和文本输入做文本生成的任务,所以使用的是解码器,且将 上图第3部分的 Image-grounded Text Encoder 结构中的 Bi Self-Att 替换为 Causal Self-Att,目标是预测下一个 token,且添加一个额外的 [Decode] token 和结束 token,作为生成结果的起点和终点
一个需要注意的点是:相同颜色的部分是参数共享的,即视觉文本编码器和视觉文本解码器共享除 Self-Attention 层之外的所有参数。每个 image-text 在输入时,image 部分只需要过一个 ViT 模型,text 部分需要过3次文本模型
过程中训练一个语言模型目标函数 (Language Modeling Loss, LM)
毕竟由于BLIP 包含解码器,用于生成任务。既然有这个任务需求,那就意味着需要一个针对于生成任务的语言模型目标函数,LM 作用于第1部分的视觉编码器和第4部分的视觉文本解码器,目标是根据给定的图像以自回归方式来生成关于文本的描述。与 VLP 中广泛使用的 MLM 损失(完形填空)相比,LM 使模型能够将视觉信息转换为连贯的字幕
1.2.2 BLIP的字幕与过滤器方法CapFiltg
上述整个过程中,有一个不可忽略的问题,即高质量的人工注释图像-文本对(例如,COCO) 因为成本高昂所以数量不多
- CLIP 的数据来源于 Web 上爬来的 图像-文本对
,所以数据集很容易扩充的很大,而且采用 对比学习的方式,基本属于自监督了,不太需要做数据标注;
- BLIP 改进了 CLIP 直接从 Web 取数据 噪声大 的缺点,提出了 Captioning and Filtering (CapFilt) 模块,这个模块就是用来 减小噪声、丰富数据的,主要包括两个模块:即字幕与过滤器方法CapFilt (Captioning and Filtering)
如下图所示
CapFilt 方法包含两个模块:
- 字幕器 Captioner:相当于给一张网络图片,生成字幕。它是一个视觉文本解码器(对应于上述BLIP模型结构的第4部分),在 COCO数据集上使用 LM 目标函数微调,对给定图像的文本进行解码,从而实现给定网络图片
,Captioner 生成字幕
的效果
- 过滤器 Filter:过滤掉噪声图文对image-text pair,它是一个视觉文本编码器(对应于上述BLIP模型结构的第3部分),看文本是否与图像匹配,在 COCO 数据集上使用 ITC 和 ITM 目标函数微调
Filter 删除原始 Web 文本和合成文本
中的嘈杂文本,如果 ITM 头将其预测为与图像不匹配,则认为文本有噪声
最后,将过滤后的图像-文本对与人工注释对相结合,形成一个新的数据集,作者用它来预训练一个新的模型
下图展示了被过滤器接受和拒绝的文本可视化(绿色 文本是被 filter 认可的,而 红色 文本是被 filter 拒绝的)
1.3 BLIP2:Q-Former连接视觉模型CLIP ViT-G/14和语言模型FLAN-T5
1.3.0 两阶段训练:先做视觉-语言的表示学习,后做视觉到语言的生成学习
为了实现与冻结的单模态模型的有效视觉语言对齐,23年1月,来自Salesforce Research的研究者提出了一种查询Transformer(即Query Transformer,或Q-Former)
下图是BLIP-2的模型结构「论文地址:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models」
其视觉侧和文本侧分别使用预训练的CLIP ViT-G/14模型和FLAN-T5模型(从T5微调来的编码器-解码器LLM),仅中间的起桥接作用的Q-Former参与训练「如此,让BLIP-2的训练数据量仅129M,16卡A100训练9天」
其中的Q-Former 是一种轻量级的Transformer,且训练阶段分为表示学习、和生成学习两个阶段
- 在第一个预训练的「视觉-语言的表示学习」阶段(连接到一个冻结的图像编码器,并使用图像-文本对进行预训练)
该阶段强制Q-Former学习与文本最相关的视觉表示——使用一组可学习的查询向量从冻结的图像编码器中提取视觉特征
它作为冻结图像编码器与冻结LLM之间的information bottleneck,将最有用的信息传递给后续模块 - 在第二个预训练的「视觉到语言生成学习」阶段,通过将Q-Former的输出连接到一个冻结的LLM来进行从视觉到语言的生成学习
比如下图是用于VQA微调的模型架构,首先,将问题作为条件提供给Q-Former,以便提取的图像特征与问题更加相关,其次,LLM接收Q-Former的输出和问题作为输入,最后预测答案
1.3.1 第一阶段:Q-Former中的视觉Transformer从ViT中提取与文本最相关的图像特征
总之,Q-Former作为一个可训练的模块,用于弥合冻结图像编码器和冻结大语言模型(LLM)之间的差距,它从图像编码器中提取固定数量的输出特征,与输入图像的分辨率无关
如图2所示,Q-Former由两个共享相同自注意力层的Transformer子模块组成:
- 一个与冻结图像编码器交互的图像Transformer用于视觉特征提取
作者创建了一定数量的可学习查询嵌入作为图像Transformer的输入。这些查询通过自注意力层相互作用,并通过交叉注意力层(插入在每隔一个Transformer块中)与冻结的图像特征交互
且受BLIP (Li et al., 2022) 的启发,作者联合优化三个共享相同输入格式和模型参数的预训练目标。每个目标采用不同的查询与文本之间的注意力屏蔽策略来控制它们的交互(见上图图2的右侧)
- 图文对比学习(Image-Text Contrastive Learning-ITC)
旨在对齐图像表示和文本表示,使其互信息最大化。它通过将正对的图文相似性与负对的相似性进行对比来实现这一目标
即将图像Transformer输出的查询表示与从文本Transformer中提取的文本表示
对齐,其中 t是[CLS] token的输出token
由于Z包含多个输出嵌入(每个查询一个),作者首先计算每个查询输出和之间的成对相似性,然后选择最高的作为图像-文本相似性
为了避免信息泄露,他们采用单模态的自注意力掩码,其中查询和文本不能相互看到。由于使用了冻结的图像编码器,与端到端方法相比,可以在每个GPU上放置更多样本。因此,使用批内负样本,而不是BLIP中的动量队列
- 图像-文本生成(Image-grounded Text Generation-ITG)
损失用于训练Q-Former,在给定输入图像作为条件的情况下生成文本。由于Q-Former的架构不允许冻结的图像编码器与文本token直接交互,因此,生成文本所需的信息必须首先由查询(query)提取,然后通过自注意力层传递给文本token
因此,查询被迫提取能够全面反映文本信息的视觉特征。具体而言,作者使用一种多模态因果自注意掩码来控制查询(query)与文本的交互方式,类似于UniLM(Dong等人,2019)中使用的掩码
查询之间可以相互关注,但不能关注文本token。每个文本token可以关注所有查询以及其之前的文本token。且还用新的[DEC] token替换了[CLS] token,作为第一个文本token,以指示解码任务- 图文匹配(Image-Text Matching-ITM)
旨在学习图像与文本表示之间的细粒度对齐关系
这是一个二分类任务,模型需要预测图文对是正样本(匹配)还是负样本(不匹配)
且使用双向自注意力掩码,使所有查询和文本能够相互关注。输出的查询嵌入Z因此捕获多模态信息。且将每个输出查询嵌入输入到一个二分类线性分类器中以获得一个logit,并对所有查询的logit取平均,作为最终的匹配分数
其采用来自Li等人(2021; 2022)提出的难负样本挖掘策略来构建具有信息量的负样本对
- 一个文本Transformer,可以同时作为文本编码器和文本解码器
这些查询嵌入还可以通过相同的自注意力层与文本交互
根据预训练任务的不同,应用不同的自注意力掩码来控制查询与文本的交互。比如用BERTbase的预训练权重初始化Q-Former,而交叉注意力层是随机初始化的「Q-Former总共包含188M参数。注意,这些查询被视为模型参数」
具体而言,作者使用了32 个查询,每个查询的维度为768(与Q-Former 的隐藏维度相同),且用Z 表示输出的查询表示。Z (32 × 768) 的大小远小于冻结图像特征的大小(例如,ViT-L/14 的257 × 1024)。这种瓶颈架构与预训练目标相结合,迫使查询提取与文本最相关的视觉信息
1.3.2 第二阶段:从冻结的LLM中引导生成视觉到语言的学习
在生成预训练阶段,作者将 Q-Former(连接上冻结的图像编码器)与一个冻结的大语言模型LLM连接,以利用LLM的生成语言能力
- 如图 3所示,他们使用一个全连接(FC)层将输出查询嵌入 Z 线性投影到与 LLM 的文本嵌入相同的维度
然后将投影后的查询嵌入预置到输入文本嵌入之前。它们作为软视觉提示,基于Q-Former 提取的视觉表示来调整 LLM - 由于Q-Former已被预训练为提取与语言相关的视觉表征,因此它有效地充当了information bottleneck,只向LLM传递最有用的信息,同时过滤掉无关的视觉信息。这减少了LLM进行视觉-语言对齐的负担,从而缓解了灾难性遗忘问题
且作者对两种类型的大型语言模型进行了实验:基于解码器的LLM和基于编码器-解码器的LLM
- 对于基于解码器的LLM,通过语言建模损失进行预训练,其中冻结的LLM需要在Q-Former生成的视觉表征条件下生成文本
- 对于基于编码器-解码器的LLM,通过前缀语言建模损失进行预训练,将一段文本分为两部分
前缀文本与视觉表示连接后作为输入提供给LLM的编码器
后缀文本则作为LLM解码器的生成目标
1.3.3 模型预训练的相关设置:预训练数据、冻结的图像编码器与LLM
第一,对于预训练数据
作者使用与BLIP相同的预训练数据集
- 总共包含129M张图像,包括COCO (Lin et al.,2014)、Visual Genome (Krishna et al., 2017)、CC3M (Sharma et al., 2018)、CC12M (Changpinyoet al., 2021)、SBU (Ordonez et al., 2011),以及来自LAION400M数据集 (Schuhmann et al., 2021) 的115M张图像
- 采用CapFilt方法 (Li et al., 2022)为网络图像生成合成的标题
具体来说,使用 BLIP large 描述模型生成 10 个描述,然后根据 CLIP ViT-L/14 模型生成的图像 - 文本相似度对合成描述和原始网络描述进行排序。每张图片保留排名前两位的描述作为训练数据,并在每次预训练步骤中随机抽取一个
第二,对于预训练的图像编码器和大语言模型
在冻结的图像编码器上,作者探索了两种最先进的预训练视觉转换器模型:
- 来自CLIP(Radford等人,2021)的ViT-L/14
- 来自EVA-CLIP(Fang等人,2022)的ViT-g/14
且他们移除了ViT的最后一层,并使用了倒数第二层的输出特征:由此 带来了略微更好的性能
对于冻结的语言模型,作者探索了
- 无监督训练的OPT模型家族(Zhang等人,2022)用于基于解码器的大语言模型
- 以及指令训练的FlanT5模型家族(Chung等人,2022)用于基于编码器-解码器的大语言模型
第三,对于预训练设置
- 作者在第一阶段预训练25万步,在第二阶段预训练8万步。且在第一阶段对ViT-L/ViT-g使用2320/1680的批量大小,在第二阶段对OPT/FlanT5使用1920/1520的批量大小
- 另,在预训练过程中,作者将冻结的ViT和LLM的参数转换为FP16,但对FlanT5使用BFloat16。结果发现,与使用32位模型相比,性能没有下降
- 由于使用冻结模型,预训练比现有的大规模VLP方法更具计算友好性
例如,使用一台16-A100(40G)机器,我们最大的模型(包含ViT-g和FlanT5-XXL)在第一阶段需要不到6天,在第二阶段需要不到3天
顺带说下
- 后来的LLAVA仅通过一个projection layer将CLIP ViT-L/14和Vicuna语言模型缝合在一起,训练数据仅用了595K图文对以及158K指令微调数据
- miniGPT4则是在复用BLIP-2的vision encoder + Q-Former的基础上,通过一层project layer缝合了Vicuna语言模型,训练数据仅用了5M的图文对数据+3.5K的指令微调数据
1.4 InstructBLIP:BLIP-2的指令微调版,增强了BLIP-2的指令遵循能力
1.4.1 InstructBLIP的结构及其对BLIP-2的改造
InstructBLIP 「其对应的的论文为《InstructBLIP: Towards General-purpose Vision-Language Models with Instruction Tuning》」
- 其与BLIP-2 [20]类似的是 ,InstructBLIP也使用了一个查询变换器(Query Transformer,或Q-Former)从一个冻结的图像编码器中提取视觉特征
- 但不同于BLIP-2「在提取视觉特征时采用了一种与指令无关的方法。这导致无论任务如何,都会有一组静态的视觉表示被输入到语言模型中,即BLIP-2, take an instruction-agnostic approach when extracting visual features. That results in a set of static visual representations beingfed into the LLM, regardless of the task」
InstructBLIP作为一个指令感知的视觉模型可以根据任务指令进行调整,并生成最适合当前任务的视觉表示「即In contrast, an instruction-aware vision model can adapt to the task instruction and produce visual representations most conducive to the task at hand.」
毕竟如果对于相同的输入图像,而预计任务指令会有很大差异,那么这显然是更好的
那怎么做到呢?核心在于InstructBLIP 提出了一个支持指令的 Q-former 模块——说白了,本质就是对Q-Former做了专门的指令微调,过程中图像编码器和LLM是被冻结不变的
具体而言
- 如上图右侧所示,Q-Former的输入包含一组K个可学习的查询嵌入,且将指令文本token作为额外输入
首先,用户提供的指令instruction 通过 Q-Former 的自注意力层 与查询嵌入query embedding做自注意力交互,从而促进提取与任务指令相关的图像特征
其次,这些(查询)嵌入通过交叉注意力与图像编码器的输出Image Embeddings交互- 如上图中侧所示,Q-Former的输出由K个编码的视觉向量组成,每个查询嵌入对应一个视觉向量,这些向量随后通过线性投影并输入到冻结的LLM中
且与BLIP-2一样,Q-Former使用图像-字幕数据进行两阶段的预训练
- 第一阶段使用冻结的图像编码器对 Q-Former 进行预训练,以进行视觉语言表示学习
The first stage pretrains the Q-Former with the frozen image encoder forvision-language representation learning.- 第二阶段将Q-Former的输出适配为软视觉提示,用于冻结的大型语言模型LLM的文本生成
The second stage adapts the output of Q-Former as soft visual prompts for text generation with a frozen LLM .在预训练之后,通过指令微调对Q-Former进行微调,其中LLM接收来自Q-Former的视觉编码和任务指令作为输入
1.4.2 实现细节:视觉编码器ViT-g/14 + 语言模型FlanT5/Vicuna
首先,在架构上
得益于 BLIP-2 模块化架构设计所提供的灵活性,使得可以快速适配模型到各种大型语言模型
在InstructBLIP的实验中,作者采用了4种不同的 BLIP-2 变体,这些变体使用相同的图像编码器(ViT-g/14 [10]),但冻结了不同的 LLM,包括
- FlanT5-XL-3B
FlanT5 [7] 是一种基于编码器-解码器 Transformer T5 [34] 的指令调优模型 - FlanT5-XXL-11B
- Vicuna-7B
Vicuna[2] 是一种基于 LLaMA [41] 的仅解码器 Transformer 指令调优模型
在视觉语言指令调优过程中,作者从预训练的 BLIP-2 检查点初始化模型,并且仅微调 Q-Former 的参数,同时保持图像编码器和 LLM 冻结状态
由于原始 BLIP-2 模型不包括Vicuna 的检查点,故使用与 BLIP-2 相同的过程对 Vicuna 进行预训练 - Vicuna-13B
其次,对于训练和超参数
- 作者使用LAVIS 库[19] 进行实现、训练和评估。所有模型均经过指令微调,最多进行60K 步,并在每3 K 步验证模型性能
- 对于每个模型,选择一个最佳的检查点,并用于所有数据集的评估
且分别为3B、7B 和11/13B 模型采用192、128 和64 的批量大小
使用AdamW [26] 优化器,其中β1 = 0.9, β2 = 0.999,权重衰减为0.05 - 此外,在最初的1,000 步中应用学习率的线性预热,从10−8 增加到10−5,随后使用余弦衰减,最低学习率为0
- 所有模型均使用16 块Nvidia A100 (40G) GPU 进行训练,并在1.5 天内完成
1.5(选读) MiniGPT4:基于LLaMA微调的Vicuna + BLIP2 + 线性投影层
MiniGPT-4具有许多类似于GPT-4所展示的功能,如详细的图像描述生成和从手写草稿创建网站,以及根据给定图像编写灵感的故事和诗歌,为图像中显示的问题提供解决方案,比如教用户如何根据食物照片烹饪等
1.5.1 模型结构
miniGPT4的模型架构由一个语言模型拼接一个视觉模型,最后加一个线性投影层来对齐,具体而言
-
它先是使用基于LLaMA微调的小羊驼Vicuna,作为语言解码器
-
在视觉感知方面,采用了与BLIP-2相同的预训练视觉组件(该组件由EVA-CLIP[13]的ViT- G/14和Q-Former组成)
-
再之后,增加了一个单一的投影层,将编码的视觉特征与语言模型小羊驼对齐,并冻结所有其他视觉和语言组件
1.5.2 模型训练:预训练(500万图像文本对)-微调
训练上,还是经典的预训练-微调模式
- 在整个预训练过程中,无论是预训练的视觉编码器还是LLM都保持冻结状态,只有线性投影层被预训练。具体是使用Conceptual Caption、SBU和LAION的组合数据集来训练我们的模型,历经2万个训练步骤,批大小为256,覆盖了大约500万对图像-文本,整个过程花费大约10小时,且使用的4个A100 (80GB) gpu
- 然而,简单地将视觉特征与LLM对齐不足以训练出像聊天机器人那样具有视觉会话能力的高性能模型,并且原始图像-文本对背后的噪声可能导致语言输出不连贯。因此,我们收集了另外3500个高质量对齐的图像-文本对,用设计好的会话模板进一步微调模型(只需要400个训练步骤,批量大小为12,使用单个A100 GPU最终7分钟即可完成),以提高生成语言的自然度及其可用性
// 待更