之前筆者在介紹BLIP2的博文[1]中,曾經介紹過采用Q-Former融合視覺語義向量和LLM的方法,BLIP2工作中由于只采用了圖文對(Image-Text Pair)數據,因此其in-context能力欠缺,few-shot效果不佳。而在Flamingo [2] 這個工作中,作者從互聯網數據中收集了大量的圖文交織(Image-Text Interleaving)數據,這為Flamingo提供few-shot、in-context能力提供了基礎保障,雖然Flamingo中采用Perceiver Resampler和Gated cross-attention的方法融合多模態(tài)信息目前不是主流(主流還是Q-Former),但其論文中提到的數據構建方式,模型結構消融實驗等仍然能提供很多有意義的參考。我們接下來開始對Flamingo進行介紹。
Flamingo [2] 和 BLIP2 [3] 都是嘗試將已預訓練好的視覺特征編碼器(如ViT、Resnet等)和已預訓練好的大語言模型(LLama、OPT等)進行結合的工作,從而使得大語言模型可以交織文本和視覺進行輸入(如圖片、視頻等),最終輸出文本,我們稱之為MLLM(多模態(tài)大語言模型),讀者可在博文 [1] 中得到更多相關的背景信息,在此不再累述。Flamingo采用了所謂的感知重采樣(Perceiver Resampler)技術和門控交叉注意力技術(Gated Cross-Attention)進行視覺多模態(tài)信息和LLM的融合,整體結構如Fig 1.所示,其中視覺編碼器和LLM都是固定參數而不在訓練中更新,感知重采樣器將變長的視覺向量轉換成定長的多模態(tài)語義向量,通過門控注意力單元將信息融入固定的LLM中,最終實現輸入中可混合多模態(tài)信息而輸出文本信息。
Fig 1. Flamingo的框架圖,主要由視覺編碼器(vision encoder)、感知重采樣器(perceiver resampler)、LLM和交織在LLM中的門控交叉注意力層(gated xattn-dense)組成。
其中感知重采樣器和門控注意力單元的結構如Fig 2所示,其中的視覺編碼器采用NFNet(NormalizerFree ResNet),作者先在圖文對數據上采用CLIP的方式對NFNet進行預訓練,隨后進行參數固定。如果視覺端輸入是視頻,則按照1 fps進行采樣后將NN幀進行視覺特征提?。ㄈ羰菆D片輸入,則N=1),注意到此時position embedding按照幀粒度組織,即是統(tǒng)一幀的不同patch共用一個position embedding以建模幀間序列信息。爾后對多幀的特征進行展開、拼接,作為transformer的k和v,而采用一個可學習的query向量作為transformer的q輸入,這個思路可參考博文 [1],不在此展開,具體偽代碼可見Code 1。感知重采樣機制的一個好處就是,可以將變長的視頻輸入轉變?yōu)槎ㄩL的輸入,此處定長的輸入長度為64。
門控注意力單元的設計,則是在原先固定的LLM結構的每一層基礎上疊加了門控單元,門控單元由交叉注意力機制和門控結構、FFW交替組成,其中交叉注意力的k和v都是感知重采樣器的輸出,而q則是文本輸入。為了保證在訓練初始階段模型和原先的LLM不至于偏差太遠,作者采用了門控機制,具體來說就是將新層的輸出乘上一個可學習的t,將LLM的原先輸入與其加和,只需要在初始化時候將
即可確保初始化時候和原先LLM無太大偏差。作者對在訓練過程中每一LM層的
變化進行了可視化,見Fig 3.可發(fā)現兩個規(guī)律,第一隨著層數加深,門控值則更大,第二隨著訓練過程,門控值也逐漸變大,這個倒是符合我們的認識,淺層提取基礎特征而深層則更加富有語義信息,因此在深層中的門控更大有利于引入更多的視覺語義信息。
Fig 2. Flamingo中采用的感知重采樣器和門控交叉注意力模型結構。
def perceiver_resampler(
x_f, # The [T, S, d] visual features (T=time, S=space)
time_embeddings, # The [T, 1, d] time pos embeddings.
x, # R learned latents of shape [R, d]
num_layers, # Number of layers
):
"""The Perceiver Resampler model."""
# Add the time position embeddings and flatten.
x_f = x_f + time_embeddings
x_f = flatten(x_f) # [T, S, d] -> [T * S, d]
# Apply the Perceiver Resampler layers.
for i in range(num_layers):
# Attention.
x = x + attention_i(q=x, kv=concat([x_f, x]))
# Feed forward.
x = x + ffw_i(x)
return x
def gated_xattn_dense(
y, # input language features
x, # input visual features
alpha_xattn, # xattn gating parameter – init at 0.
alpha_dense, # ffw gating parameter – init at 0.
):
"""Applies a GATED XATTN-DENSE layer."""
# 1. Gated Cross Attention
y = y + tanh(alpha_xattn) * attention(q=y, kv=x)
# 2. Gated Feed Forward (dense) Layer
y = y + tanh(alpha_dense) * ffw(y)
# Regular self-attention + FFW on language
y = y + frozen_attention(q=y, kv=y)
y = y + frozen_ffw(y)
return y # output visually informed language features
Code 1. 感知重采樣器和門控交叉注意力單元的偽代碼。
Fig 3. 注意力層中和FFW的門控值在不同層的變化趨勢。
說完了模型結構上的改動,我們還需要關注到本工作中的數據構建,在本工作中,作者不僅僅構建了圖文對數據(LTIP),而且還構建了視頻對數據(VTP)和圖文交織數據。圖文交織數據(M3W: Interleaved image and text dataset)指的是圖片和文本進行多次交織組成的數據,圖片會穿插在文本上下文中,而不是簡單的圖文一對一的關系數據。作者通過解析大概4.3千萬個網頁的DOM,構建了圖文交織數據,如Fig 4.所示,圖片穿插在了文章上下文中,而上文和下文可能和該圖片都由語義關聯。
Fig 4. 來自于網頁上的圖文交織數據示例,注意到相關的圖片會穿插在文本之間,上文和下文都可能和該圖片有語義關聯。原網頁來自 [4]。
怎么對圖文交織數據進行建模也是一個值得關注的點,如Fig 5 (b) 所示,一張內嵌到文本中的圖片可能和上文或者下文或者兩者都產生語義關聯,在Flamingo中作者選擇按照概率采樣后續(xù)文本作為成對文本,亦或者反過來選擇前繼文本。從圖文交織數據中可以組成多個成對數據,如Fig 5 (a)所示,此時通過門控交叉注意力單元中的掩膜設置,可以同時對該圖文交織數據中出現的多個成對數據進行建模,具體原理見 [5]。當然,這里對圖文交織數據的應用會比較樸素,只考慮以某個圖片為中心的局部單向語義信息,而沒有考慮到全局信息的建模,相當于還是簡單將圖文交織數據去局部組織圖文對數據進行訓練。
在交叉注意力單元中采用這種方式,雖然一次性只能讓圖片直接關注到一個相關聯的文本,但是通過后續(xù)的LM單元的自注意力模塊,能同時建模任意數量的圖片輸入和文本輸入,實現圖文交織數據作為輸入的對話,當然也就能支持BLIP2所欠缺的few-shot功能了。這里的做法,按照筆者的認識,相當于就是交叉注意力單元只負責建模圖文局部的語義對齊,而圖文交織數據全局的信息對齊則由緊接著的LM完成。
Fig 5. 在Flamingo中應用圖文交織型數據的方法,由于嵌入到文本中的圖片可能和上文、下文產生語義關聯,在本工作中采用按一定概率的方式采樣后續(xù)文本進行應用。
Flamingo的效果從benchmark測試看是能吊打很多few-shot和zero-shot數據集的sota方法的,受限于篇幅筆者不會展開。在文中作者做了很多堅實的消融實驗,去驗證Flamingo的各種設計的效果,如Fig 6.所示,主要對幾點進行了消融:
是否采用全量數據? 特別是對M3W圖文交織數據的有無進行了消融,我們發(fā)現圖文交織數據能提供大約17%的提升。是否采用門控機制?實驗證明采用門控機制能帶來月8%的提升。采用交叉注意力層的頻率?實驗證明每一層都引入門控交叉注意力層效果是最好的。是否采用感知重采樣單元引入視覺信息?實驗證明該設計能帶來約4%的提升。視覺編碼器的選擇同樣對結果影響巨大。是否固定LLM的參數?實驗證明固定LLM反而能帶來最好的效果,而讓LLM隨著訓練一起進行(會采用massive text數據集一起訓練)反而效果會差8%左右,筆者估計是訓練過程需要平衡多個目標導致的,如何讓LLM也能訓練起來可能也是一個值得關注的點。
Fig 6. 對Flamingo的消融實驗。
Reference
[1]. https://blog.csdn.net/LoseInVain/article/details/136013909, 《BLIP2——采用Q-Former融合視覺語義與LLM能力的方法》
[2]. Alayrac, J. B., Donahue, J., Luc, P., Miech, A., Barr, I., Hasson, Y., … & Simonyan, K. (2022). Flamingo: a visual language model for few-shot learning. Advances in Neural Information Processing Systems, 35, 23716-23736. aka Flamingo
[3]. Li, Junnan, Dongxu Li, Silvio Savarese, and Steven Hoi. “Blip-2: Bootstrapping language-image pre-training with frozen image encoders and large language models.” arXiv preprint arXiv:2301.12597 (2023). aka BLIP2
[4]. https://baijiahao.baidu.com/s?id=1761390872940868294&wfr=spider&for=pc
[5]. https://blog.csdn.net/LoseInVain/article/details/119530520