OpenAI也有24MB的模型了!人人都用的起CLIP模型,iPhone上也能執行

語言: CN / TW / HK



  新智元報道  

來源:reddit

編輯:LRS

【新智元導讀】24MB的CLIP模型香不香?不要顯示卡,不要大記憶體,一臺手機iPhone就能用!研究人員還順帶解決了CLIP過度關注文字的問題,快來看看怎麼做的。


Transformer的模型動輒以GB論大小,引數量也不斷突破億、十億,這種大模型想要應用在移動端或者給沒有高階顯示卡「平民」玩家使用,也是十分困難。
 
CLIP 是openAI 在今年年初發布的一個多模態模型,能夠從自然語言標註資料中學到有價值的視覺概念,並且和GPT-2/3一樣擁有zero-shot的能力。
 
CLIP的訓練資料包括超過4億個影象文字對,使用256個GPU訓練了2周。雖然這是把屠龍刀,但對執劍人有著超高要求,所以有研究人員就在考慮如何縮減模型的規模,把它能用在更多的地方。
 
這項研究工作在Reddit分享後,直取200贊,聲稱可以在iPhone中使用。
 
 
CLIP模型根據輸入的文字,召回相關的圖片,但它存在一個問題是過度注重圖片中的文字而非語義,例如當輸入為cat(貓)時,把圖片中包含cat相似文字的圖片排序更高。
 
 
下面這個有小貓的圖片反而獲得更低的排序。
 
 
可以看出搜尋詞和影象之間的相似性包括兩方面:
1、影象包含與搜尋詞相似的文字: 我們稱之為文字相似性(textual similarity)
2、影象和搜尋詞的語義含義相似: 我們稱之為語義相似性(semantic similarity)
 
在構建搜尋功能時,人們更傾向於選擇語義相似性而不是文字相似性,但 CLIP 傾向於給文字相似的圖片更高的分數。
 
輸入蜘蛛俠Spider-Man,模型會返回一張蜘蛛Spider的圖片,或者是有Spider文字的圖片。
 
給「蘋果」貼上一個「iPod」標籤,他就真成了一個「iPod」,並且模型認為正確率超過99.7%。
 
 
針對這個問題,有人提出瞭解決方法,就是增加第三個標籤「an apple with a label saying iPod」,這樣就可以讓模型預測正確。
 
 
有網友表示,這個idea可以讓你博士畢業了!
 
但研究人員還有其他更深層次探索的解決方案,假設在共享向量空間中存在一個方向,其中影象的「文字性(textness)」特性變化很大,而「語義」特性保持不變,那麼可以根據找到的這個方向,使用一個向量指向這個方向,並將其新增到所有的影象向量(或文字向量) ,然後對它們進行標準化並計算餘弦相似性,這個向量稱之為textness_bias向量。
 
在進行下一步操作前,消除文字偏差向量的影響。
 
 
並且建立一個新的caption資料集,去除所有純文字的圖片,然後使用模型的權重找出textness bias向量。
 
實驗結果表明,向文字向量新增bias比向影象向量新增bias更有效,並且scale值越大,CLIP 越強調文字的相似性。
 
藉助CLIP的強大功能,可以使用知識蒸餾的方法減小模型的尺寸,CLIP 模型實際上是兩個具有不相交引數集的模型: ViT (將影象轉換為向量)和 Transformer (將文字轉換為向量)模型。
 
研究人員決定對 ViT 模型(精度為 FP32的350MB)進行模型精餾,學生 ViT 模型的大小初步決定小於50MB。
 
建立的學生模型將寬度和層數減少了兩倍,由於不確定header的數量,所以定義了兩個版本,一個與teacher模型中的頭的數量相同,另一個頭的數量是模型的兩倍,這個實驗可以看到增加頭的數量將如何影響模型的效能。
 
 
訓練資料來自不同來源的大約20萬張圖片。大約10個epoch之後,一旦看到一些可信的實驗結果,輸入圖片的大小就增加到了80萬以上。
 
損失函式使用 KLD + L1損失之和對模型進行訓練,在前10個epoch,temperature被設定為4,然後減少到2。
 
最初的 CLIP 是用4億張圖片訓練的。雖然收集如此大規模的影象是不切實際的,但研究人員主要關注標準開源資料集中的影象。為了避免對大量影象的需求,也嘗試過使用 Zero Shot 蒸餾,但是沒有成功。
 
使用 COCO 測試資料集,通過檢視每個搜尋詞的前20個結果來檢視蒸餾後 CLIP 模型的效能。還評估了平均精度(MAP)的基礎上top N 的結果,對於每個搜尋詞,原始的CLIP 和蒸餾後的CLIP的 N的 範圍從10到20。
 
對於 每個N,可以發現 MAP 大約為0.012。如此低的精度表明從原始和蒸餾 CLIP 得到的結果不會有很多共同的結果。
 
雖然這聽起來令人沮喪,但是從蒸餾後的 CLIP 模型得到的結果看起來蒸餾效果確實還是可以的。
 
它們都給出了語義上有意義的結果只是方面不同,快速瀏覽這兩個模型的前20個結果解釋了低 MAP的原因。
 
根據bird搜尋詞,teacher和student模型的召回結果如下所示。雖然召回不同,但都是正確的。這兩個結果都是有意義的,儘管幾乎沒有任何共同的結果。
 
 
 
雖然蒸餾後的 ViT CLIP模型顯示了良好的結果,但是有一些情況下,它的效能比原來的模型有所下降。
 
1、對於未包含在訓練資料集中的情況,它的效能很差: 但這是基於一些觀察的假設,還沒有進行測試來驗證它。例如,對於像 flag 這樣的搜尋詞,它的召回結果不盡如人意。另一個有趣的例子是搜尋詞 flock。這個蒸餾後的模型學會了將數量的概念和 flock 聯絡起來,但是方式錯了。student模型顯示的是大群的動物而不是鳥
 
 
 
2、顏色搜尋的準確率下降,而且也不能做 OCR: 還應該注意到,在進行顏色搜尋時,提取的模型不能執行概念的合成。例如,當搜尋白貓時,提取的模型會返回影象中某處有白色顏色的貓的影象,而不是白貓的影象。最初的模型似乎很好地組合了這些概念。另一個發現是模型無法從影象中讀取文字,這是原始CLIP模型擅長的。研究人員認為這也是由於訓練資料集不包含很多帶有文字的影象導致的。
 
3、它似乎失去了多模態的特性: 搜尋聖誕節或學校這樣的詞,原始CLIP模型返回多模態的結果,如聖誕樹,聖誕帽和聖誕蛋糕和書籍,學校標誌和學校校車。但在蒸餾模型的結果中沒有看到這個屬性。
 
最後得到的學生模型大小為48MB。經過幾個星期的單 P100 GPU 的訓練,模型效果已經可以應用了。隨後作者將模型轉換成 CoreML 格式,將精度降低到 FP16(大小變為只有24 MB) ,發現其效能與 FP32模型相比變化不大。
 
除此之外,在進行影象檢索時,仍然使用 CLIP 中的原始語言模型。
 
蒸餾後的CLIP模型可以在iPhone上執行。
 
但目前程式碼仍未公開,作者表示未來將在GitHub上開原始碼。

參考資料:

https://www.reddit.com/r/MachineLearning/comments/p1o2bd/research_we_distilled_clip_model_vit_only_from/?utm_source=amp&utm_medium=&utm_content=post_body


推薦閱讀

OpenAI 推出 Codex API


點選“閱讀原文”圖書配套資源

本文分享自微信公眾號 - 相約機器人(xiangyuejiqiren)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

「其他文章」