本文轉(zhuǎn)自徐飛翔的“圖文多模態(tài)語義融合前的語義對齊——一種單雙混合塔多模態(tài)模型”
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明
雙塔多模態(tài)模型的優(yōu)勢與缺陷
之前在博文[2-4]中曾經(jīng)簡單介紹過一些圖文多模態(tài)模型,分別是WenLan 1.0 [5]和WenLan 2.0 [6]以及CLIP [7],這些多模態(tài)模型在不同的模態(tài)上,都有著各自模態(tài)各自的編碼器。如Fig 1.1所示,CLIP中的圖片編碼器和文本編碼器共同組成了一個雙塔結(jié)構(gòu)模型進(jìn)行損失計(jì)算。雙塔模型在很多業(yè)務(wù)場景有著廣泛應(yīng)用,比如在圖文信息檢索場景中,我們要衡量用戶Query和圖片之間的圖文相關(guān)性。假如圖片編碼器是,文本編碼器是
???,??????而待檢索庫中所有圖片的集合記為
???,那么可以預(yù)先對所有圖片進(jìn)行特征提取,形成圖片的正排(Forward Index)特征并且建庫,記為
,在用戶輸入檢索詞 Q的時候,只需要對Query進(jìn)行文本編碼器的在線計(jì)算,得到文本特征
,然后對待排序的樣本進(jìn)行圖片正排庫取特征,進(jìn)行相關(guān)性計(jì)算(在線計(jì)算余弦距離)就可以判斷候選圖片與Query之間的圖文相關(guān)程度了。利用雙塔模型可以預(yù)先建庫并且在線計(jì)算相關(guān)性的特性,可以很大程度上用空間換時間節(jié)省很多計(jì)算資源,而這也是雙塔模型在搜索系統(tǒng)(不僅僅是圖文搜索)中被廣泛應(yīng)用的原因之一。
Fig 1.1 CLIP中的圖片編碼器和文本編碼器一起組成了雙塔結(jié)構(gòu)。
這個世界沒有銀彈,雙塔模型中的圖片和文本信息不能在線交互的特性決定了其對一些細(xì)致的圖文匹配需求無法滿足。舉個例子,比如去搜索『黑色上衣白色褲子』,那么百度返回的結(jié)果如圖Fig 1.2所示,除去開始三個廣告不計(jì),用紅色框框出來的Top3結(jié)果中有倆結(jié)果都是『白色上衣黑色褲子』,顯然搜索結(jié)果并沒有理解到『黑色上衣』和『白色褲子』這兩個概念,而是單獨(dú)對『黑色』『白色』和『上衣』『褲子』這兩個屬性進(jìn)行了組合,因此才會得到『白色上衣黑色褲子』被排到Top20結(jié)果的情況。
1.2 百度圖搜對于『黑色上衣白色褲子』的搜索結(jié)果。
當(dāng)然讀者可能覺得百度搜索可能不夠可靠,筆者在google圖搜上也進(jìn)行了測試,如Fig 1.3所示,的確大部分結(jié)果都是正確的(如藍(lán)色框所示),但是也有少量的『白色上衣黑色褲子』被排上了Top20結(jié)果(如紅框所示),即便只有幾個誤排,也說明業(yè)界中對于這種細(xì)粒度的多模態(tài)搜索仍然是需要繼續(xù)探索的(讀者可以試試『紅色杯子』這類型的Query,排到Top20的都是很準(zhǔn)確的)。
Fig 1.3 Google圖搜對于『黑色上衣白色褲子』的搜索結(jié)果。
這種多模態(tài)匹配細(xì)粒度結(jié)果不盡人意的原因,很大程度上是雙塔模型中的圖片編碼器和文本編碼器無法在線進(jìn)行交互導(dǎo)致的。可以想象到,我們的圖片編碼器由于是預(yù)先對所有圖片提特征進(jìn)行建庫的,那么就無法對所有屬性的組合都進(jìn)行考慮,必然的就會對一些稀疏的組合進(jìn)行忽略,而傾向于高頻的屬性組合,因此長尾的屬性組合就無法很好地建模。雙塔模型這種特點(diǎn),不僅僅會使得多屬性的Query的檢索結(jié)果傾向于高頻組合,而且還會傾向于圖片中的一些大尺寸物體,比如Fig 1.4中的小黃人尺寸較小,在進(jìn)行特征提取的時候,其在整張圖片中的重要性就有可能被其他大尺寸物體(比如鍵盤和顯示屏等)掩蓋。
Fig 1.4 圖片中的小黃人尺寸較小,特征提取結(jié)果可能會被同圖片中其他大尺寸物體給掩蓋。單塔模型進(jìn)行在線交互
雙塔模型有以上的一些天然的劣勢,此時就需要用單塔交互模型對用戶Query和圖片進(jìn)行在線的交互(當(dāng)然此時模型計(jì)算由于是在線的,受限于計(jì)算資源就只能對粗排的Top20/40等結(jié)果進(jìn)行打分精排了),通過在線交互,細(xì)粒度的圖文匹配能取得更好的結(jié)果,稀疏的屬性組合也能通過在線交互得到合理的打分,而不至于被高頻組合給『吃掉』。雙塔模型一般可以通過大規(guī)模對比學(xué)習(xí),從諸多負(fù)例中挑選出最難的負(fù)例,通過將正例和最難負(fù)例進(jìn)行對比損失優(yōu)化,從而學(xué)習(xí)出表征。但是單塔模型無法像雙塔模型一般進(jìn)行對比學(xué)習(xí)去挑選難負(fù)樣本,因?yàn)殡p塔模型可以通過打分矩陣將 個負(fù)樣本打分和 N 個正樣本打分同時得到,而單塔模型由于需要在線交互,則需要對 N 個Query和 N 個圖片進(jìn)行
??????????次模型計(jì)算,才能得到和雙塔模型一次計(jì)算同樣量級的打分,這個計(jì)算時間代價(jià)太大以至于實(shí)際中無法這樣進(jìn)行訓(xùn)練。對于單塔模型,如Fig 2.1所示,我們一般只能通過平移樣本得到若干個負(fù)樣本,進(jìn)行匹配損失計(jì)算,這樣得到的負(fù)樣本數(shù)量通常都很小,遠(yuǎn)遠(yuǎn)無法達(dá)到雙塔模型的量級,由此構(gòu)造出的負(fù)樣本也往往不夠『難』,導(dǎo)致這樣訓(xùn)練出來的單塔模型語義對齊(Semantic Alignment)能力弱于用大規(guī)模對比學(xué)習(xí)訓(xùn)練出來的雙塔模型。
Fig 2.1 在單塔模型訓(xùn)練時,通過平移樣本構(gòu)造負(fù)樣本。多模態(tài)語義融合前的語義對齊
由此來看,單塔模型擅長的往往是語義融合(Semantic Fusion),而非語義對齊(Semantic Alignment),我們可以考慮用大規(guī)模對比學(xué)習(xí)去進(jìn)行語義對齊,而基于良好的語義對齊用單塔模型去進(jìn)行語義融合。如Fig 3.1所示,語義對齊嘗試找到不同文本實(shí)體(Query Entity)與視覺實(shí)體(Vision Entity)之間的關(guān)聯(lián)關(guān)系,而語義融合嘗試找到復(fù)合實(shí)體的組合關(guān)系。
Fig 3.1 語義對齊去嘗試找到文本實(shí)體與視覺實(shí)體之間的關(guān)聯(lián)關(guān)系;語義融合嘗試找到復(fù)合實(shí)體之間的組合關(guān)系。
文章[1]提出了ALBEF模型(ALign BEfore Fuse,ALBEF),嘗試通過將雙塔模型和單塔模型結(jié)合在一起,通過用雙塔模型去進(jìn)行語義對齊,并且通過雙塔模型進(jìn)行難負(fù)樣本挑選,以備送給單塔模型進(jìn)行更好的語義融合,這個思路理論上可以融合單塔模型和雙塔模型的優(yōu)點(diǎn),而不至于帶來太多的計(jì)算負(fù)擔(dān)。如Fig 3.1所示,ALBEF整個模型主要由BERT組成,其編碼器分為單模態(tài)(Unimodal)編碼器和多模態(tài)(multimodal)編碼器,單模態(tài)編碼器主要由圖像編碼器和文本編碼器組成,其圖像編碼器采用了12層的ViT-B/16模型,而文本編碼器和多模態(tài)編碼器都采用的是6層的 ?模型。通過圖片編碼器,將圖片輸入
編碼成embedding序列
,同樣對于文本輸入
而言,其embedding序列輸出為
??。其預(yù)訓(xùn)練目標(biāo)有兩大類:
語義對齊: 通過單模態(tài)編碼器(其實(shí)就是雙塔模型)進(jìn)行圖文對比學(xué)習(xí)(Image-Text Contrastive Learning)進(jìn)行圖文語義對齊
語義融合:將語義對齊后的圖/文特征在多模態(tài)編碼器中進(jìn)行跨模態(tài)交互,通過Masked Language Model(MLM)和圖文匹配(Image-Text Matching)任務(wù)進(jìn)行圖文語義融合。
Fig 3.1 語義對齊去嘗試找到文本實(shí)體與視覺實(shí)體之間的關(guān)聯(lián)關(guān)系;語義融合嘗試找到復(fù)合實(shí)體之間的組合關(guān)系。語義對齊
語義對齊可以通過雙塔模型的大規(guī)模對比學(xué)習(xí)進(jìn)行,其目標(biāo)是讓圖片-文本對的相似度盡可能的高,也就是,其中的
和
是對[CLS]的線性映射,其將[CLS]特征維度映射到了多模態(tài)共同特征子空間。類似于MoCo [8,9],在ALBEF模型中,作者同樣采用了兩個圖片/文本樣本隊(duì)列和動量圖片/文本編碼器,這兩個隊(duì)列維護(hù)了最近的動量編碼器的 M 個表征(具體維護(hù)過程見博文[8]),這些來自于動量編碼器的特征表示為
和
。那么類似于MoCo中的做法進(jìn)行多模態(tài)打分計(jì)算,如式子(3-1)所示
那么可以定義出圖-文/文-圖相關(guān)性,如式子(3-2)所示,其中的 N??是batch size(這一點(diǎn)是代碼實(shí)現(xiàn),和論文有些偏差[10])
令和
表示真實(shí)的標(biāo)簽,通過交叉熵?fù)p失定義出圖文對比損失(Image-Text Contrastive Loss, ITC)
語義融合
ALBEF模型的底層是雙塔語義對齊,其上層是單塔語義融合,為了實(shí)現(xiàn)語義融合,論文中采用了Masked Language Model(MLM)損失進(jìn)行建模。作者以 15 % 概率將輸入的Token進(jìn)行替代,將其替代為特殊令牌[MASK],令 表示被掩膜后的文本,
??表示對掩膜后的令牌的預(yù)測結(jié)果,而
表示被掩膜令牌的真實(shí)標(biāo)簽,那么MLM目的在于最小化以下交叉熵?fù)p失:
通過MLM損失建模,可以讓多模態(tài)實(shí)體之間不僅語義對齊,而且能找到各個實(shí)體之間的復(fù)合語義關(guān)系,如Fig 3.2所示,MLM損失約束模型去融合不同實(shí)體,挖掘他們之間的多模態(tài)關(guān)系,從而對被掩膜后的實(shí)體做出預(yù)測。
Fig 3.2 MLM損失約束模型去融合不同實(shí)體的語義關(guān)系,從而對被掩膜后的實(shí)體做出預(yù)測。
除了MLM損失,文章中還通過圖文匹配損失(Image-Text Matching,ITM)對難負(fù)樣本進(jìn)行匹配學(xué)習(xí),從而期望模型能夠?qū)﹄y負(fù)樣本有著更好的區(qū)分能力,從而彌補(bǔ)單塔模型無法進(jìn)行難負(fù)樣本選取的缺點(diǎn),以提升多模態(tài)模型的語義對齊和語義融合能力。作者挑選難負(fù)樣本的依據(jù)是根據(jù)雙塔模型的打分,從式子(3-2)中可以挑選出同一個Query下面最為難的Image(打分最高,但卻是預(yù)測錯誤的),也可以挑選出同個Image下最難的Query(論文中是根據(jù)打分大小設(shè)置概率進(jìn)行采樣得到的)。由此可以得到 N 個正例和 2 N 個難負(fù)例構(gòu)成了ITM任務(wù)的輸入,其損失如式子(3-5)所示。
最后的預(yù)訓(xùn)練階段損失由以上三個損失構(gòu)成,如式子(3-6)所示:
動量蒸餾(Momentum Distillation, MoD)
用于預(yù)訓(xùn)練的圖文數(shù)據(jù)大多來自于互聯(lián)網(wǎng) [3],通常都是所謂的弱標(biāo)注數(shù)據(jù)集,文本中可能有些詞語和圖片的實(shí)體是毫無關(guān)系的,圖片也可能包含有文本中完全沒提到的東西。對于ITC損失而言,一個圖片的負(fù)樣本文本也有可能能夠匹配上這個圖片(特別是如果該圖文對數(shù)據(jù)來自于用戶點(diǎn)擊數(shù)據(jù));對于MLM損失而言,被掩膜掉的令牌也許被其他令牌替代也能對圖像進(jìn)行描述(甚至可能更合適)。作者認(rèn)為,在ITC和MLM任務(wù)中采用one-hot標(biāo)簽進(jìn)行訓(xùn)練會對所有的負(fù)例進(jìn)行打壓,而不考慮這些負(fù)例倒底是不是真正的『負(fù)例』。為了解決這個問題,作者提出動量編碼器可以看成是單模態(tài)/多模態(tài)編碼器的一種指數(shù)滑動平均版本(exponential-moving-average),可以通過動量編碼器去生成ITC和MLM任務(wù)的『偽標(biāo)簽』,筆者并沒有特別理解為什么可以通過動量編碼器去生成偽標(biāo)簽,可能這樣做能使得標(biāo)簽更為平滑,而不像one-hot標(biāo)簽一樣吧。總而言之,通過動量編碼器,我們有動量編碼器打分:
將(3-7)中的替代式子(3-2)中的 s ?,我們得到偽標(biāo)簽
,那么
損失定義為:(實(shí)際代碼實(shí)現(xiàn)有些差別,可能要另一篇博文里面去寫了)
類似的, ?損失可以定義為:
讀后感
這篇文章比較復(fù)雜,最近筆者比較忙看了好久才大致看懂些,有些細(xì)節(jié)猜不透的去看了下代碼,發(fā)現(xiàn)代碼實(shí)現(xiàn)好像有些和論文有差別,后續(xù)有空再補(bǔ)充下代碼實(shí)現(xiàn)的閱讀筆記可能會更好些。總體來看,這篇文章結(jié)合了雙塔模型可以進(jìn)行大規(guī)模對比學(xué)習(xí),和單塔模型可以進(jìn)行細(xì)粒度交互的優(yōu)勢,提出了ALBEF模型對多模態(tài)數(shù)據(jù)進(jìn)行語義對齊+語義融合,其思路是值得在業(yè)界進(jìn)行嘗試的。
補(bǔ)充
筆者之前寫這篇博文的時候的確不太理解這里的操作邏輯,后面大概理解了為什么用動量編碼器可以生成所謂『偽標(biāo)簽』,當(dāng)數(shù)據(jù)量比較大的時候,編碼器可能在不同的step下見到同一個文本text與不同類型的圖片的數(shù)據(jù)對。考慮一種情況,文本text描述中存在兩個實(shí)體 鴨子和橙子,在某個數(shù)據(jù)對中{text,imageA}中imageA存在鴨子,而只存在橙子的imageB可能就被認(rèn)為是負(fù)例了;在某個數(shù)據(jù)對{text,imageB}中存在橙子,而只存在鴨子的imageA可能就被視為負(fù)例了。通過動量更新編碼器,可以看成通過一個動量更新的過程中的時間平滑系數(shù),將不同step下遇到的{text,imageA}, {text, imageB}樣本的標(biāo)簽信息都考慮了,因此可以視為時候『偽標(biāo)簽』信息。
Reference
[1]. Li, Junnan, Ramprasaath Selvaraju, Akhilesh Gotmare, Shafiq Joty, Caiming Xiong, and Steven Chu Hong Hoi. “Align before fuse: Vision and language representation learning with momentum distillation.” Advances in Neural Information Processing Systems 34 (2021).
[2]. https://blog.csdn.net/LoseInVain/article/details/121699533
[3]. https://blog.csdn.net/LoseInVain/article/details/120364242
[4]. https://fesian.blog.csdn.net/article/details/119516894
[5]. Huo, Yuqi, Manli Zhang, Guangzhen Liu, Haoyu Lu, Yizhao Gao, Guoxing Yang, Jingyuan Wen et al. “WenLan: Bridging vision and language by large-scale multi-modal pre-training.” arXiv preprint arXiv:2103.06561 (2021).
[6]. Fei, Nanyi, Zhiwu Lu, Yizhao Gao, Guoxing Yang, Yuqi Huo, Jingyuan Wen, Haoyu Lu et al. “WenLan 2.0: Make AI Imagine via a Multimodal Foundation Model.” arXiv preprint arXiv:2110.14378 (2021).
[7]. Radford, A., Kim, J. W., Hallacy, C., Ramesh, A., Goh, G., Agarwal, S., … & Sutskever, I. (2021). Learning transferable visual models from natural language supervision. arXiv preprint arXiv:2103.00020.
[8]. https://fesian.blog.csdn.net/article/details/119515146
[9]. He, K., Fan, H., Wu, Y., Xie, S., & Girshick, R. (2020). Momentum contrast for unsupervised visual representation learning. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 9729-9738).
[10]. https://github.com/salesforce/ALBEF/issues/22