溫馨提示:
本篇文章已同步至"AI專題精講" InstructBLIP:邁向具備指令微調能力的通用視覺語言模型
摘要
大規模的預訓練與instruction tuning在構建通用語言模型方面已取得顯著成效。然而,構建通用的視覺-語言模型仍然具有挑戰性,因為附加的視覺輸入帶來了豐富的輸入分布和任務多樣性。盡管視覺-語言預訓練已經被廣泛研究,視覺-語言instruction tuning仍然缺乏深入探索。本文基于預訓練的BLIP-2模型,開展了一項系統而全面的視覺-語言instruction tuning研究。我們收集了26個公開可用的數據集,涵蓋多種任務和能力,并將其轉換為instruction tuning格式。此外,我們引入了一個instruction-aware的Query Transformer,用于提取與給定指令相匹配的信息特征。在13個held-in數據集上訓練后,InstructBLIP在13個held-out數據集上實現了最先進的zero-shot性能,顯著優于BLIP-2和更大的Flamingo模型。我們的模型在個別下游任務上進行finetune時也達到了最優性能(例如,在帶圖像上下文的ScienceQA問題上達到了90.7%的準確率)。此外,我們通過定性分析展示了InstructBLIP相比同時期多模態模型的優勢。所有InstructBLIP模型均已開源。
1 引言
人工智能(AI)研究的一個長期愿景是構建一個能夠解決用戶指定的任意任務的單一模型。在自然語言處理(NLP)領域,instruction tuning [46, 7]被證明是實現這一目標的有希望的方法。通過在由自然語言指令描述的多種任務上對大型語言模型(LLM)進行finetune,instruction tuning使得模型能夠遵循任意指令。近年來,instruction-tuned的LLM也被應用于視覺-語言任務。例如,BLIP-2 [20]有效地將凍結的instruction-tuned LLM適配于理解視覺輸入,并展現了初步的圖像到文本生成任務中的指令遵循能力。
相比NLP任務,視覺-語言任務由于來自不同領域的附加視覺輸入而更加多樣化。這對一個旨在泛化至多種視覺-語言任務(包括訓練中未見任務)的統一模型提出了更大挑戰。以往的大多數工作可以歸為兩類方法。第一類方法是多任務學習 [6, 27],將各種視覺-語言任務統一為相同的輸入-輸出格式。然而,我們通過實驗證明(見表4),缺少指令的信息會導致這種方法在未見數據集和任務上的泛化能力較差。第二類方法 [20, 4]是在預訓練LLM基礎上擴展視覺組件,并利用圖像字幕數據訓練這些視覺組件。然而,這類數據過于有限,難以實現對超越視覺描述的視覺-語言任務的廣泛泛化。
為了解決上述挑戰,本文提出了InstructBLIP,這是一種視覺-語言instruction tuning框架,使得通用模型可以通過統一的自然語言接口解決多種視覺-語言任務。InstructBLIP使用多樣化的instruction數據對多模態LLM進行訓練。具體而言,我們以預訓練的BLIP-2模型為起點,該模型由圖像編碼器、LLM以及連接兩者的Query Transformer(Q-Former)組成。在instruction tuning過程中,我們對Q-Former進行finetune,而保持圖像編碼器和LLM凍結。
本論文的關鍵貢獻如下:
-
我們對視覺-語言instruction tuning進行了系統而全面的研究。我們將26個數據集轉換為instruction tuning格式,并將其分為11類任務。我們使用13個held-in數據集進行instruction tuning,使用13個held-out數據集進行zero-shot評估。此外,我們在任務級別上保留了4個完整的任務類別用于zero-shot評估。詳盡的定量和定性結果展示了InstructBLIP在視覺-語言zero-shot泛化方面的有效性。
-
我們提出了一種instruction-aware視覺特征提取機制,這是一種新的機制,可以根據給定的指令進行靈活且信息豐富的特征提取。具體而言,文本指令不僅被傳遞給凍結的LLM,也被輸入給Q-Former,從而Q-Former可以從凍結的圖像編碼器中提取與指令相關的視覺特征。此外,我們提出了一種平衡采樣策略,以在不同數據集之間同步學習進度。
-
我們基于兩類LLM評估并開源了一系列InstructBLIP模型:1)FlanT5 [7],一種從T5 [34] finetuned而來的encoder-decoder型LLM;2)Vicuna [2],一種從LLaMA [41] finetuned而來的decoder-only型LLM。InstructBLIP模型在多種視覺-語言任務上實現了最先進的zero-shot性能。此外,作為下游任務的模型初始化,InstructBLIP模型在finetuning時也達到了最優性能。
2 視覺-語言指令調優
InstructBLIP 旨在應對 vision-language instruction tuning 中的獨特挑戰,并對模型在未見數據和任務上的泛化能力提升進行系統研究。本節首先介紹 instruction tuning 數據的構建方式,然后闡述訓練與評估協議。接著,從模型和數據兩個角度出發,詳細說明兩種提升 instruction tuning 效果的技術。最后,給出實現細節。
2.1 任務與數據集
為了在保證 instruction tuning 數據多樣性的同時兼顧其可獲取性,我們收集了一套全面的、公開可用的 vision-language 數據集,并將其轉化為 instruction tuning 格式。如圖 2 所示,最終的集合涵蓋了 11 個任務類別和 26 個數據集,包括圖像描述(image captioning)[23, 3, 51],圖像描述與閱讀理解結合任務(image captioning with reading comprehension)[38],視覺推理(visual reasoning)[16, 24, 29],圖像問答(image question answering)[11, 12],基于知識的圖像問答(knowledge-grounded image question answering)[30, 36, 28],結合閱讀理解的圖像問答(image question answering with reading comprehension)[31, 39],圖像問題生成(image question generation,改編自 QA 數據集),視頻問答(video question answering)[47, 49],視覺對話問答(visual conversational question answering)[8],圖像分類(image classification)[18],以及 LLaVA-Instruct-150K [25]。我們在附錄 C 中提供了每個數據集的詳細描述和統計信息。
針對每個任務,我們精心設計了 10 到 15 個不同的自然語言 instruction 模板。這些模板作為構建 instruction tuning 數據的基礎,明確描述了任務及其目標。對于那些本身偏向生成簡短回答的公開數據集,我們在其對應的部分 instruction 模板中加入了“short”、“briefly”等詞語,以降低模型固定生成簡短輸出的過擬合風險。對于 LLaVA-Instruct-150K 數據集,我們沒有額外加入 instruction 模板,因為其本身已是 instruction 格式。全部 instruction 模板列表見附錄 D。
2.2 訓練和評估協議
為了確保訓練和 zero-shot 評估中有足夠的數據和任務,我們將這 26 個數據集劃分為 13 個 held-in 數據集和 13 個 held-out 數據集,分別在圖 2 中以黃色和白色標注。我們使用 held-in 數據集的訓練集進行 instruction tuning,并利用其驗證集或測試集進行 held-in 評估。
對于 held-out 評估,我們的目標是理解 instruction tuning 如何提升模型在未見數據上的 zero-shot 表現。我們定義了兩種類型的 held-out 數據:1)訓練過程中模型未接觸的數據集,但其任務類型在 held-in 集合中出現過;2)訓練過程中完全未接觸的數據集及其相關任務。第一類 held-out 評估面臨的挑戰在于 held-in 與 held-out 數據集之間的數據分布偏移。對于第二類情況,我們完全保留了一些任務未用于訓練,包括視覺推理(visual reasoning)、視頻問答(video question answering)、視覺對話問答(visual conversational QA)和圖像分類(image classification)。
為避免數據污染,我們對數據集進行了精心篩選,確保任何評估數據不會出現在 held-in 訓練集合中。instruction tuning 過程中,我們將所有 held-in 訓練集混合,并對每個數據集均勻采樣其 instruction 模板。模型使用標準的語言建模損失進行訓練,以根據 instruction 直接生成響應。此外,對于包含場景文字的任務數據集,我們在 instruction 中加入 OCR tokens 作為補充信息。
2.3 基于指令的視覺特征提取
現有的 zero-shot 圖像到文本生成方法(包括 BLIP-2)在提取視覺特征時不考慮 instruction,因此無論任務為何,輸入到 LLM 的都是一組靜態視覺表示。相比之下,instruction-aware 的視覺模型可以根據任務指令調整自身,從而生成更有利于當前任務的視覺表示。如果我們期望對于同一張圖像的任務指令會有顯著變化,那么這種方式顯然更具優勢。
我們在圖 3 中展示了 InstructBLIP 的架構。類似于 BLIP-2 [20],InstructBLIP 使用一個 Query Transformer(即 Q-Former)從凍結的圖像編碼器中提取視覺特征。Q-Former 的輸入包括一組 K 個可學習的查詢嵌入(query embeddings),這些嵌入通過交叉注意力與圖像編碼器的輸出進行交互。Q-Former 的輸出是一組 K 個編碼后的視覺向量(每個查詢嵌入對應一個),這些向量經過線性投影后被送入凍結的 LLM。與 BLIP-2 一樣,Q-Former 在 instruction tuning 之前需通過圖像-文本數據完成兩階段預訓練。第一階段中,Q-Former 與凍結圖像編碼器一同用于 vision-language 表示學習;第二階段中,將 Q-Former 的輸出適配為用于文本生成的軟視覺提示(soft visual prompts),此時 LLM 仍處于凍結狀態。在預訓練完成后,我們在 instruction tuning 階段對 Q-Former 進行微調,此時 LLM 接收來自 Q-Former 的視覺編碼和任務指令作為輸入。
在 BLIP-2 的基礎上,InstructBLIP 提出了一個 instruction-aware 的 Q-Former 模塊,該模塊將指令文本 token 作為額外輸入。指令通過 Q-Former 的自注意力層與查詢嵌入進行交互,從而促進任務相關圖像特征的提取。由此,LLM 接收到有助于執行指令的視覺信息。我們通過實驗證明(見表 2),instruction-aware 的視覺特征提取在 held-in 和 held-out 的評估中都帶來了顯著的性能提升。
2.4 平衡訓練數據集
由于訓練數據集數量眾多,且各數據集規模差異顯著,若直接對它們進行均勻混合,可能導致模型對小數據集過擬合、對大數據集欠擬合。為緩解該問題,我們提出按數據集大小的平方根比例進行采樣。一般地,設有 DD 個數據集,大小為 {S1,S2,…,SD}\{ S _ { 1 } , S _ { 2 } , \ldots , S _ { D } \}{S1?,S2?,…,SD?},訓練期間從數據集 dd 采樣的概率為:pd=Sd∑i=1DSi.\begin{array} { r } { p _ { d } = \frac { \sqrt { S _ { d } } } { \sum _ { i = 1 } ^ { D } \sqrt { S _ { i } } } . } \end{array}pd?=∑i=1D?Si??Sd???.?
在此基礎上,我們對某些數據集的權重進行了手動調整以優化訓練過程。這種調整是合理的,因為盡管一些數據集規模相近,但由于任務本身的差異,其訓練難度和所需訓練強度也不相同。具體來說,我們降低了包含多項選擇題的 A-OKVQA 的權重,同時提高了需要生成開放式文本答案的 OKVQA 的權重。表 2 顯示,該平衡數據集采樣策略在 held-in 評估和 held-out 泛化方面均提升了整體性能。
2.5 推理方法
在推理階段,我們針對不同數據集采用了兩種略有不同的生成方法。在大多數數據集(如圖像描述和開放式 VQA)上,我們直接用指令微調后的模型進行生成,然后將其輸出與真實答案對比以計算指標。而對于分類和多項選擇的 VQA 任務,我們遵循以往工作的方法 [46, 22, 21],采用詞匯排名的方式。具體來說,我們仍然提示模型生成答案,但將其輸出詞匯限制在候選列表中。然后計算每個候選答案的對數似然值,選擇值最大的作為最終預測結果。
該排名方法應用于 ScienceQA、IconQA、A-OKVQA(多項選擇)、HatefulMemes、Visual Dialog、MSVD 和 MSRVTT 數據集。此外,對于二分類任務,我們將正負類別擴展為一組更通用的 verbalizer(語言標記),以利用自然文本中的詞頻(例如,將正類擴展為 yes 和 true,負類擴展為 no 和 false)。
對于視頻問答任務,我們從每段視頻中均勻采樣四幀圖像。每幀圖像分別通過圖像編碼器和 Q-Former 處理,提取出的視覺特征再拼接后輸入到 LLM。
溫馨提示:
閱讀全文請訪問"AI深語解構" InstructBLIP:邁向具備指令微調能力的通用視覺語言模型