這兩天忍不住又卷去看CV領(lǐng)域的論文了,主要是前些日子愷明大神的MAE太過強(qiáng)大,感覺不看會(huì)錯(cuò)過一個(gè)億。看了之后果然不負(fù)我的期待,大道至簡(jiǎn),思路太清晰了、太深刻了,給他投光我的幾百個(gè)B幣都不為過。
不過,相信很多NLP領(lǐng)域的同學(xué)和我的第一反應(yīng)一樣,聽到CV領(lǐng)域終于出了一個(gè)類似BERT的模型,卻內(nèi)心有一絲絲的疑惑:BERT都出來三年了,CV領(lǐng)域的為什么現(xiàn)在才出來?而明明看起來這么簡(jiǎn)單的做法,為什么只有愷明大神成功了?
沒錯(cuò),我也有這個(gè)疑惑,于是我去翻了一下愷明大神在相關(guān)工作提到的iGPT、ViT、BEiT。把這三篇看下來,我才真正領(lǐng)略到了大神思想的高度。
難道之前的工作沒試過提升mask ratio嗎?不是的。
難道之前的工作沒試過用ViT預(yù)測(cè)pixel嗎?不是的。
而這就是大神的NB之處,明明別人都試過了,覺得不work,而MAE就是能把這兩個(gè)核心問題想清楚,然后做出效果。
到底怎么做出來的呢?不急,我來幫大家捋一捋。
我們這個(gè)故事,要從2020年OpenAI的iGPT講起。OpenAI是一個(gè)想把一切GPT化的公司,到了圖像這里,自然的想法就是用GPT來訓(xùn)一個(gè)圖像模型。但是圖像是個(gè)三維的數(shù)據(jù)(長x寬x通道),不像文字一樣可以變成一維向量的序列。如果直接把圖像的三維矩陣拼成二維也可以,但這樣數(shù)量就太多了。于是iGPT就想到了一個(gè)方法,把圖像馬賽克掉,變成一個(gè)個(gè)色塊,數(shù)量一下就減少了,可以像NLP一樣愉快地輸入到Transformer了:
解決這個(gè)核心難點(diǎn)之后就很愉快了,可以無腦用GPT和BERT啦。
最后實(shí)驗(yàn)下來,BERT在兩個(gè)數(shù)據(jù)集的平均表現(xiàn)比GPT差一點(diǎn)點(diǎn)(橙色):
而且BERT因?yàn)閙ask的方式,存在訓(xùn)練預(yù)測(cè)不一致的問題,OpenAI嘗試對(duì)測(cè)試數(shù)據(jù)隨機(jī)mask 5個(gè)token,最終ImageNet結(jié)果果然上升了一些(紅色)。但還是改變不了OpenAI要用GPT統(tǒng)治一切的事實(shí),這篇文章還是用GPT-2(攤手。
iGPT雖然嘗試過形式與BERT接近的預(yù)訓(xùn)練,但卻連一個(gè)MAE的關(guān)鍵點(diǎn)都沒碰到。其中我覺得問題最大的主要是這個(gè)馬賽克操作,就拿文中貼的例子來看,都被馬賽克成那樣子了,還學(xué)習(xí)什么呢。。。雖然事實(shí)證明還是有效果的,但還是從輸入上就降低了模型的擬合能力。
但別急,這個(gè)問題馬上就被解決了。
第二個(gè)出場(chǎng)的嘉賓,就是紅遍大江南北的Vision Transformer——ViT。
它對(duì)上面問題的解決辦法,就是思想上借鑒了CNN的局部特征抽取,把圖片分割成一個(gè)個(gè)patch,再通過線性映射成一個(gè)類似NLP的token embedding。同時(shí)為了保留位置信息,加上了可學(xué)習(xí)的position embedding。
從ViT開始,CVer們終于可以更優(yōu)雅地使用Transformer了。然而ViT的實(shí)驗(yàn)還是跟傳統(tǒng)CV一樣,進(jìn)行有監(jiān)督的預(yù)訓(xùn)練。為什么不試試MLM呢?其實(shí)他們?cè)囘^了,但效果不好,所以沒重點(diǎn)放出來。
在附錄中,ViT其實(shí)嘗試過三種預(yù)訓(xùn)練方法,首先mask掉50%的patch,然后:
第三種方法真的很接近有木有?。?!然而實(shí)驗(yàn)發(fā)現(xiàn)第三種更差一些,第一種最好,但也比有監(jiān)督的落后4個(gè)點(diǎn)。
看到這里,如果去翻翻MAE的分析實(shí)驗(yàn),就會(huì)發(fā)現(xiàn)MAE mask 50%之后的效果也很好:
怎么辦,就導(dǎo)致我這個(gè)旁觀者很著急。雖然ViT已經(jīng)是很厲害的工作了,如果當(dāng)時(shí)再想想,簡(jiǎn)直神上加神。到底是什么點(diǎn)呢?我們留到MAE再說。
第三位出場(chǎng)的嘉賓是BEiT,微軟今年年中的工作,作者之一是知乎的董力大佬。
BEiT的形式同樣很接近BERT,只不過用了一個(gè)dVAE對(duì)patch進(jìn)行離散化(就像NLP的token也是離散化的)。dVAE需要先在語料上訓(xùn)練出一個(gè)encoder和一個(gè)decoder,encoder用來當(dāng)作tokenizer,把圖像離散化(對(duì)應(yīng)一個(gè)個(gè)patch),然后給Transformer輸入patch,預(yù)測(cè)離散后的圖像,再用decoder還原。
在預(yù)訓(xùn)練階段,最多會(huì)mask 40%的patch(同樣很接近MAE了)。
另外,作者們其實(shí)也試過復(fù)原pixel,但效果會(huì)有1.8%的下降。對(duì)于這個(gè)現(xiàn)象,BEiT給出的猜想是,就像多層CNN一樣,編碼器最終得到的應(yīng)該是一個(gè)更全局、高維的表示,而復(fù)現(xiàn)pixel會(huì)讓后幾層太關(guān)注局部細(xì)節(jié)。
終于輪到MAE出場(chǎng)了,了解了上述幾個(gè)模型的背景,我們?cè)賮砜磹鹈鞔笊裨陂_篇提出的問題:到底是什么原因?qū)е乱曈X和語言用的masked autoencoder不一樣?
核心的三個(gè)點(diǎn)是:
羅馬不是一天建成的,MAE真正成功的點(diǎn),就在于把后兩個(gè)問題想清楚,并且給出了解決方案。
當(dāng)然還有一些細(xì)節(jié),比如:
另外,BEiT和MAE用的預(yù)訓(xùn)練數(shù)據(jù)都是ImageNet-1K,再仔細(xì)看他們的預(yù)訓(xùn)練超參數(shù),不一樣的地方也有很多,但具體造成多大diff還不清楚。
好了,我們的故事接近尾聲了。由于時(shí)間有限,我只看了以上幾篇MAE引用比較的重點(diǎn)工作,肯定還有很多預(yù)訓(xùn)練的嘗試沒有看到,不足之處還請(qǐng)指正。
不同人對(duì)科研的品味都不一樣,我剛?cè)腴TNLP的時(shí)候,恰好是BERT誕生的時(shí)候,記得特別清楚,是18年十月初的一個(gè)周末,我達(dá)摩院的朋友來找我玩,躺我床上刷手機(jī)時(shí),跟我說出了一個(gè)很大的工作。再加上后續(xù)的一系列預(yù)訓(xùn)練進(jìn)展,導(dǎo)致我越來越喜歡大道至簡(jiǎn)的方法。知乎上也有人質(zhì)疑MAE的novelty,而當(dāng)我們真正順著看下來時(shí),卻可以看到MAE是真的多走了一步,深入淺出,最終呈現(xiàn)給大家一個(gè)「這都可以」的結(jié)果。
最后,其實(shí)預(yù)訓(xùn)練模型的價(jià)值,不僅是可以更簡(jiǎn)單、有效的遷移到下游任務(wù),更是它scale的性質(zhì),試想如果增加算力、無監(jiān)督數(shù)據(jù)就能提升效果的話,你對(duì)那個(gè)還未到達(dá)的天花板好不好奇呢?
聯(lián)系客服