聊聊我眼中愷明大神MAE的成功之處
卷友們好,我是rumor。
這兩天忍不住又卷去看CV領域的論文了,主要是前些日子愷明大神的MAE太過強大,感覺不看會錯過一個億??戳酥蠊徊回撐业钠诖蟮乐梁?,思路太清晰了、太深刻了,給他投光我的幾百個B幣都不為過。
不過,相信很多NLP領域的同學和我的第一反應一樣,聽到CV領域終于出了一個類似BERT的模型,卻內心有一絲絲的疑惑:BERT都出來三年了,CV領域的為什么現(xiàn)在才出來?而明明看起來這么簡單的做法,為什么只有愷明大神成功了?
沒錯,我也有這個疑惑,于是我去翻了一下愷明大神在相關工作提到的iGPT、ViT、BEiT。把這三篇看下來,我才真正領略到了大神思想的高度。
難道之前的工作沒試過提升mask ratio嗎?不是的。
難道之前的工作沒試過用ViT預測pixel嗎?不是的。
而這就是大神的NB之處,明明別人都試過了,覺得不work,而MAE就是能把這兩個核心問題想清楚,然后做出效果。
到底怎么做出來的呢?不急,我來幫大家捋一捋。
iGPT
我們這個故事,要從2020年OpenAI的iGPT講起。OpenAI是一個想把一切GPT化的公司,到了圖像這里,自然的想法就是用GPT來訓一個圖像模型。但是圖像是個三維的數(shù)據(jù)(長x寬x通道),不像文字一樣可以變成一維向量的序列。如果直接把圖像的三維矩陣拼成二維也可以,但這樣數(shù)量就太多了。于是iGPT就想到了一個方法,把圖像馬賽克掉,變成一個個色塊,數(shù)量一下就減少了,可以像NLP一樣愉快地輸入到Transformer了:

解決這個核心難點之后就很愉快了,可以無腦用GPT和BERT啦。
最后實驗下來,BERT在兩個數(shù)據(jù)集的平均表現(xiàn)比GPT差一點點(橙色):

而且BERT因為mask的方式,存在訓練預測不一致的問題,OpenAI嘗試對測試數(shù)據(jù)隨機mask 5個token,最終ImageNet結果果然上升了一些(紅色)。但還是改變不了OpenAI要用GPT統(tǒng)治一切的事實,這篇文章還是用GPT-2(攤手。
iGPT雖然嘗試過形式與BERT接近的預訓練,但卻連一個MAE的關鍵點都沒碰到。其中我覺得問題最大的主要是這個馬賽克操作,就拿文中貼的例子來看,都被馬賽克成那樣子了,還學習什么呢。。。雖然事實證明還是有效果的,但還是從輸入上就降低了模型的擬合能力。
但別急,這個問題馬上就被解決了。
ViT
第二個出場的嘉賓,就是紅遍大江南北的Vision Transformer——ViT。
它對上面問題的解決辦法,就是思想上借鑒了CNN的局部特征抽取,把圖片分割成一個個patch,再通過線性映射成一個類似NLP的token embedding。同時為了保留位置信息,加上了可學習的position embedding。

從ViT開始,CVer們終于可以更優(yōu)雅地使用Transformer了。然而ViT的實驗還是跟傳統(tǒng)CV一樣,進行有監(jiān)督的預訓練。為什么不試試MLM呢?其實他們試過了,但效果不好,所以沒重點放出來。
在附錄中,ViT其實嘗試過三種預訓練方法,首先mask掉50%的patch,然后:
只預測patch的mean color 只預測一個馬賽克版的patch 用L2損失預測所有pixel
第三種方法真的很接近有木有?。。∪欢鴮嶒灠l(fā)現(xiàn)第三種更差一些,第一種最好,但也比有監(jiān)督的落后4個點。
看到這里,如果去翻翻MAE的分析實驗,就會發(fā)現(xiàn)MAE mask 50%之后的效果也很好:

怎么辦,就導致我這個旁觀者很著急。雖然ViT已經(jīng)是很厲害的工作了,如果當時再想想,簡直神上加神。到底是什么點呢?我們留到MAE再說。
BEiT
第三位出場的嘉賓是BEiT,微軟今年年中的工作,作者之一是知乎的董力大佬。
BEiT的形式同樣很接近BERT,只不過用了一個dVAE對patch進行離散化(就像NLP的token也是離散化的)。dVAE需要先在語料上訓練出一個encoder和一個decoder,encoder用來當作tokenizer,把圖像離散化(對應一個個patch),然后給Transformer輸入patch,預測離散后的圖像,再用decoder還原。

在預訓練階段,最多會mask 40%的patch(同樣很接近MAE了)。
另外,作者們其實也試過復原pixel,但效果會有1.8%的下降。對于這個現(xiàn)象,BEiT給出的猜想是,就像多層CNN一樣,編碼器最終得到的應該是一個更全局、高維的表示,而復現(xiàn)pixel會讓后幾層太關注局部細節(jié)。
MAE
終于輪到MAE出場了,了解了上述幾個模型的背景,我們再來看愷明大神在開篇提出的問題:到底是什么原因導致視覺和語言用的masked autoencoder不一樣?
核心的三個點是:
結構:CNN天然適合圖像領域,而應用Transformer卻顯得不那么自然,不過這個問題已經(jīng)被ViT解了。再看上面幾篇工作,會發(fā)現(xiàn)相比iGPT的馬賽克、dVAE的離散化來說,patch形態(tài)是對信息損失最少且相對高效的 信息密度:人類的語言太博大精深了,你女朋友的每一句話,都有18層含義。而照片(ImageNet)不一樣,它就那么多信息,兩三個詞就能概括。所以預測的時候,預測patch要比預測詞語容易很多,只需要對周邊的patch稍微有些信息就夠了。所以我們可以放心大膽地mask。這點ViT、BEiT其實也都有,但主要就是最后一點沒有深究 需要一個Decoder:首先,是不是一定要復原pixel呢?我覺得是的,因為圖片信息密度有限,復原pixel這種細粒度信息會讓模型強上加強。那怎么優(yōu)雅地復原呢?BEiT已經(jīng)說過了,在預訓練圖像encoder的時候,太關注細節(jié)就損失了高維抽象能力。所以凱明大神加了一個decoder。到這里分工就很明確了,encoder負責抽取高維表示,decoder則負責細粒度還原
羅馬不是一天建成的,MAE真正成功的點,就在于把后兩個問題想清楚,并且給出了解決方案。

當然還有一些細節(jié),比如:
輸入側直接丟掉mask token,效果+0.7,效率x3.3 預測normalize之后的pixel,效果+0.5 選取數(shù)據(jù)增強策略,效果+0.2
另外,BEiT和MAE用的預訓練數(shù)據(jù)都是ImageNet-1K,再仔細看他們的預訓練超參數(shù),不一樣的地方也有很多,但具體造成多大diff還不清楚。
總結
好了,我們的故事接近尾聲了。由于時間有限,我只看了以上幾篇MAE引用比較的重點工作,肯定還有很多預訓練的嘗試沒有看到,不足之處還請指正。
不同人對科研的品味都不一樣,我剛入門NLP的時候,恰好是BERT誕生的時候,記得特別清楚,是18年十月初的一個周末,我達摩院的朋友來找我玩,躺我床上刷手機時,跟我說出了一個很大的工作。再加上后續(xù)的一系列預訓練進展,導致我越來越喜歡大道至簡的方法。知乎上也有人質疑MAE的novelty,而當我們真正順著看下來時,卻可以看到MAE是真的多走了一步,深入淺出,最終呈現(xiàn)給大家一個「這都可以」的結果。
最后,其實預訓練模型的價值,不僅是可以更簡單、有效的遷移到下游任務,更是它scale的性質,試想如果增加算力、無監(jiān)督數(shù)據(jù)就能提升效果的話,你對那個還未到達的天花板好不好奇呢?
——The ?End——
推薦閱讀
NLP和CV的雙子星,注入Mask的預訓練模型BERT和MAE
【何愷明新作速讀】Masked Autoencoders Are Scalable Vision Learners
如何看待何愷明最新一作論文Masked Autoencoders Are Scalable Vision Learners?


