編譯 | 言征
作者 | Aksh Garg
備注:發稿前作者已經刪掉原文
出品 | 51CTO技術棧(微信號:blog51cto)
近日,一款Llama3V最近被“先紅后黑”的出了圈。作為全球頂尖研究學府的團隊,身陷“抄襲”中國大模型的泥潭后,火速刪稿刪庫,實屬LLM史上一大“軼事”。
那么這款“Llama3V”究竟長什么樣子,實際基準效果究竟如何?
不得不說,看完作者對于該模型的介紹,大家對于如何訓練出堪比GPT4-o的多模態大模型,心中會多一些干貨。【本篇文章的作者Aksh Garg,是斯坦福大學、Point72 和 Jump 的機器學習研究員。曾就職于特斯拉、SpaceX、DE Shaw。】
1.Llama3V:成本只有500美元效果堪比100倍閉源大模型
Llama3 風靡全球,在幾乎所有基準測試中都優于 GPT3.5,在多個基準測試中也優于 GPT4。隨后,GPT4o 應運而生,憑借其多模態精細度奪回王位。今天,我們發布了一些可以改變這一現狀的東西:Llama3-V,這是有史以來第一個基于 Llama3 構建的多模態模型。作為獎勵,我們的所有訓練費用不到 500 美元。
你可能會問基準如何?我們讓表格說明一切。與 Llava(當前 SOTA 和最受歡迎的多模態理解模型)相比,我們的模型提升了 10-20%。此外,除了 MMMU 之外,我們在所有指標上的表現都與大小為其 100 倍的閉源模型非常相似。
圖片
請查看地址:
???:https://huggingface.co/mustafaaljadery/llama3v/
?Github:https://github.com/mustafaaljadery/llama3v
【當然,作者已經刪庫了】
2.模型架構及工作原理
我們的大部分工程工作都是為了使 Llama3 理解視覺信息。為此,我們使用 SigLIP 模型獲取輸入圖像并將其嵌入到一系列塊嵌入中。然后,這些嵌入通過投影塊與文本標記對齊,投影塊應用兩個自注意力塊將文本和視覺嵌入放在同一平面上。最后,將投影塊中的視覺標記添加到文本標記前面,并將聯合表示傳遞到 Llama3,就像通常一樣。
圖片
Llama3-V 架構:我們使用 SigLIP 將輸入圖像嵌入到補丁中。然后我們用兩個自注意力塊訓練一個投影塊,以對齊我們的文本和視覺標記。
上圖從高層次說明了一切的工作原理。現在,讓我們詳細了解每個階段。
SigLIP:SigLIP(用于語言圖像預訓練的 Sigmoid 損失)是一種與 CLIP 類似的圖像嵌入模型,如下圖所示。但是,與使用對比損失和 softmax 正則化的 CLIP 不同,SigLIP 采用成對 Sigmoid 損失,這允許模型獨立地對每個圖像-文本對進行操作,而無需對批次中的所有對進行全局查看。在高層次上,SigLIP 的視覺編碼器將圖像分割成一系列不重疊的圖像塊,并將它們投影到低維線性嵌入空間中,從而產生一系列塊嵌入。然后,這些塊嵌入經過視覺編碼器,該編碼器應用自注意力來捕獲長距離依賴關系并提取更高級的視覺特征。為了我們的目的,我們直接使用由 Google DeepMind 訓練的原始 SigLIP 模型。
圖片
SigLIP 嵌入的工作原理說明。我們同時訓練圖像和文本解碼器,但在我們的例子中,文本編碼模塊保持不變。與 CLIP 不同,我們最小化 Sigmoid 損失而不是 Softmax 損失,但大多數其他事情保持不變。
與文本嵌入對齊:為了節省計算資源,我們保持 SigLIP 不變。但是,為了將輸出圖像嵌入與 Llama3 中使用的文本嵌入對齊,我們使用了一個額外的投影模塊。與將單個線性層應用于原始圖像嵌入的 Llava 不同,我們改為訓練兩個自注意力塊以更好地捕獲輸入嵌入中的模式,從而生成最終的圖像嵌入向量。
前置圖像標記:對于文本輸入,我們首先使用字節對編碼 (BPE) 詞匯表對文本進行標記,從而生成一系列文本標記。我們通過將這些標記括在特殊的 <text> 和 </text> 標簽中來劃分這些標記。對于來自投影塊的圖像嵌入,我們將每個向量視為單獨的“視覺標記”,并使用 <image> 和 </image> 標簽劃分它們。最后,我們將視覺標記序列前置到文本標記序列,形成傳遞到 Llama3 進行處理的聯合輸入表示。
3.成本是如何打下來的?推理優化
訓練這些模型的成本很高。為了優化計算資源,我們進行了兩項重大優化。第一項是簡單的緩存機制,第二項是在 MPS/MLX 前端。
緩存:SigLIP 模型比 Llama3 小得多。因此,如果我們按順序運行所有內容,則在 SigLIP 運行時,GPU 利用率非常低。此外,我們無法通過增加 SigLIP 上的批處理大小來提高利用率,因為 Llama 會遇到 OOM 錯誤。相反,我們發現我們的 SigLIP 模型保持不變,而是預先計算圖像嵌入。然后,對于預訓練和 SFT,我們直接傳入這些預先計算的圖像嵌入,而不是重新運行 SigLIP 模塊。這不僅使我們能夠增加批處理大小并最大限度地利用我們的 GPU 來運行 SigLIP 模塊,還為我們節省了訓練/推理時間,因為管道的兩個部分可以單獨進行。
MPS/MLX 優化:我們的第二次優化再次源于 SigLIP 相對于 Llama 的較小尺寸。具體來說,由于 SigLIP 適合我們的 Macbook,我們在 MPS 優化的 SigLIP 模型上進行了推理,這使我們能夠實現每秒 32 張圖像的吞吐量 - 讓我們的緩存步驟相對快速地完成。
4.它是如何訓練的
從 SigLIP 預計算嵌入:現在讓我們深入研究預訓練過程的第一步:通過 SigLIP 預計算圖像嵌入。在此步驟中,我們的目標是將圖像傳入 SigLIP 嵌入模型,以獲得圖像的矢量表示或嵌入。
一個技術細節:由于分辨率較高,我們遵循 LLaVA-UHD 采用的方法并執行圖像分割。圖像分割的目的是將圖像分成可變大小的塊或片段,以實現更高效的編碼。這些分割圖像會同時批量處理。
現在讓我們深入了解如何使用 SigLIP 嵌入。我們首先加載 SigLIP 模型和處理器/標記器。然后我們使用處理器預處理提供的輸入圖像。然后我們將預處理后的圖像傳遞給模型。之后,模型輸出圖像-文本對的對數。我們現在繼續將 S 型激活函數應用于對數以獲得概率。我們現在看到圖像嵌入包含在這些概率中。到目前為止,此嵌入捕獲了圖像中的視覺信息。
通過 SigLIP 計算圖像嵌入之后,我們現在開始學習投影矩陣——你也可以將其視為投影層,它通常是線性或前饋層。如上文成分部分所述,投影層將視覺嵌入從其原始空間映射到聯合多模態嵌入空間。具體而言,投影層將學習到的權重矩陣 W_v 應用于視覺嵌入 v 以獲得投影的多模態視覺嵌入 W_v * v。因此,在這個投影步驟之后,視覺和文本嵌入基本上被對齊到一個共同的多模態嵌入空間,允許它們的表示進行交互并組合以用于多模態建模任務,如視覺問答、圖像字幕等。更具體地說,投影層的結果是生成的“潛在信息”。
計算出潛在值后,我們將其作為圖像標記添加到文本標記之前。之所以添加在前面,是因為將圖像放在文本之前,可以讓模型在預訓練期間更容易學習。可以將其想象為具有表示實際圖像的標記,然后具有表示文本中圖像內容的標記:幾乎就像與圖像配對的標題。我們的架構與 LLaVA-UHD 的架構幾乎相同(他們選擇 CLIP-ViT,而我們使用 SigLIP,并且他們與 Vicuna-13B 配合使用),因此我們在下面提供了它們的圖示作為參考:
圖片
現在我們已經確定了預訓練所需的數據,我們可以深入了解它實際上是什么樣子。在預訓練中,我們使用 600,000 個將圖像添加到文本的示例。在此步驟中,我們保持 Llama-3 架構的主要權重不變。
關鍵是我們只想更新投影矩陣的梯度。至關重要的是,我們保持其余權重不變。至此,我們完成了預訓練步驟的流程。這里的關鍵是將嵌入圖像(潛在圖像)與其文本以聯合表示形式對齊,然后預訓練 LLaMA-3 以專注于根據遇到的示例更新投影矩陣。
5.監督微調
在預訓練之后,我們進行監督微調以增強模型的性能。在此步驟中,我們將凍結計算出的嵌入(來自投影層),并將除視覺和投影矩陣之外的所有內容保持凍結狀態。換句話說,如果您查看下圖,紅色組件未凍結,而藍色組件凍結。這旨在用作“指令”微調 - 換句話說,使模型更適合多模態文本輸出。在此階段,我們使用 1M 個示例(7M 個分割圖像)。
圖片
6.總結
- 我們為 Llama3 8B 添加了視覺編碼器
- 與當前開源 SOTA 視覺語言模型 Llava 相比,我們的模型性能提高了 10-20%。
- 我們提供與 GPT4v、Gemini Ultra 和 Claude Opus 等尺寸接近 100 倍* 的模型相當的視覺能力。
- 我們描述了一種高效的流程,用于在不到 500 美元的時間內對模型進行預訓練和指令微調。
【后記】距離ChatGPT發布,一年多已過去,大模型研究者們,再次身處于LLM浪潮的風暴眼中,隨著開源大模型的出現,我們開始看到前所未有的研究速度和成果涌現,也開始看到在這個新領域中伴生著始料未及的“魔幻”劇情。
本文無意于探討開源AI模型的“套殼”、“抄襲”的界定,更多在于討論讓大模型從文本走向視覺多模態,究竟需要哪些步驟、訓練和推理成本都有哪些降低的技巧、需要怎樣的技術活?這些也許是大家更需要的。