前言
本文一開始是屬于此文《圖像生成(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分鐘即可完成),以提高生成語言的自然度及其可用性
// 待更