五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

MAE 論文逐段精讀【論文精讀】

2021-12-27 14:53 作者:如果我是泡橘子  | 我要投稿

MAE


masked autoencoders are scalable vision leanrners


2021年11月11日提交到arxiv



與之前讀的文章的關(guān)系


transformer

  • 它是一個(gè)純基于注意力機(jī)制的編碼器和解碼器
  • 在機(jī)器翻譯任務(wù)上,它比基于RNN的架構(gòu)要更好一些


BERT

  • 它使用一個(gè)transformer編碼器,拓展到了更一般的NLP任務(wù)上
  • 它使用了完形填空的自監(jiān)督的訓(xùn)練機(jī)制,這樣就不需要使用標(biāo)號(hào),而是通過預(yù)測(cè)一個(gè)句子里面哪些詞不見了,從而獲取對(duì)文本特征抽取的能力
  • BERT極大地?cái)U(kuò)展了transformer的應(yīng)用,可以在一個(gè)大規(guī)模的、沒有標(biāo)號(hào)的數(shù)據(jù)上訓(xùn)練出非常好的模型出來(lái)


ViT

  • 這個(gè)模型可以認(rèn)為就是將transformer用到CV上面
  • 具體來(lái)講,就是將整個(gè)圖片分割成很多個(gè)16*16的小方塊,然后每個(gè)方塊做成一個(gè)次,然后放進(jìn)transformer進(jìn)行訓(xùn)練
  • ViT這篇文章證明:假設(shè)訓(xùn)練數(shù)據(jù)足夠大的時(shí)候比如說(shuō)用1000萬(wàn)或者1億的訓(xùn)練樣本,它相對(duì)于CNN的架構(gòu)來(lái)說(shuō),transformer的架構(gòu)在精度上可能會(huì)更高一點(diǎn)


MAE

  • 可以認(rèn)為是BERT的CV版
  • 它是基于ViT這篇文章,但是它把整個(gè)訓(xùn)練拓展到?jīng)]有標(biāo)號(hào)的數(shù)據(jù)上面,也就是跟BERT一樣通過完形填空來(lái)獲取對(duì)于圖片的理解
  • MAE并不是第一個(gè)將BERT拓展到CV上的工作,但是MAE很有可能是這一系列工作之中未來(lái)影響力最大的一篇(因?yàn)锽ERT這篇文章極大地加速了transformer這個(gè)架構(gòu)在NLP里面的應(yīng)用,所以MAE很有可能使得transformer在CV上的應(yīng)用更加普及)





1、標(biāo)題+作者


masked autoencoder are scalable vision learners


帶掩碼的自編碼器是一個(gè)可拓展的視覺學(xué)習(xí)器

  • scalable:可拓展的
  • vision learner:這里沒有寫成classifier或者其他的東西,因?yàn)樗軌蛴玫降牡胤较鄬?duì)廣一些,他是一個(gè)backbone模型
  • masked:在BERT的時(shí)候,masked language model就是一個(gè)帶掩碼的語(yǔ)言模型(完形填空),這里使用masked來(lái)源于BERT,每次挖掉一些東西然后去預(yù)測(cè)被挖掉的東西
  • autoencoder:在transformer和BERT中,使用的都是encoder,前面沒有加上auto,這里的auto不是自動(dòng)的意思,而是“自”的意思。在機(jī)器學(xué)習(xí)中有一類模型叫做auto自模型,比如自回歸模型,這一大類模型的特點(diǎn)是,標(biāo)號(hào)和樣本(y和x)來(lái)自于同一個(gè)東西(比如說(shuō)在語(yǔ)言模型中,每一次用前面的次去預(yù)測(cè)下一個(gè)詞,每一個(gè)詞、標(biāo)號(hào)、或者y都是來(lái)自同樣的句子里面的詞所以叫做auto)。在NLP中,語(yǔ)言模型是它的一大類模型,所以說(shuō)不說(shuō)auto,大家都是可以理解的,但是在計(jì)算機(jī)視覺中,這樣的任務(wù)比較少,因?yàn)閳D片的標(biāo)號(hào)很少來(lái)自圖片本身,標(biāo)號(hào)很多時(shí)候是文本而圖片是像素,但是編碼器、解碼器在圖片里面用的非常多,所以作者在這里加上了auto,意在指出和計(jì)算機(jī)視覺中其他的encoder相比,這里的標(biāo)號(hào)也就是圖片本身,這樣能跟之前的很多工作區(qū)分開來(lái)


在寫論文的時(shí)候假設(shè)算法特別快的話,就把標(biāo)題放在efficient,假設(shè)做的東西比較大的話,就叫做scalable,二選一


標(biāo)題的模板


什么是一個(gè)好同志

  • zaiGPT系列中,三篇文章使用的都是同樣的句式
  • 這個(gè)句式是一個(gè)非常強(qiáng)有力的句式,它基本上就是將結(jié)論放在了title中,而且這種句式相對(duì)來(lái)講比較客觀,它將工作的結(jié)論濃縮成一句簡(jiǎn)單的話



作者


何凱明

  • ResNet的一作


他們都是來(lái)自facebook的AI研究院(FAIR)


*表示同樣貢獻(xiàn)


project lead:可以認(rèn)為是項(xiàng)目的發(fā)起人或者是管理人,帶領(lǐng)大家做什么樣的想法,然后從公司拿到資源來(lái)做這個(gè)事情。這是比較少見的將作者標(biāo)記為project lead,一般project lead可能是最后一個(gè)作者,大老板





2、摘要


這篇文章展示了masked autoencoder是一個(gè)scalable self-supervised learner for computer vision

  • 這里是標(biāo)題的拓展
  • 同時(shí)寫出了名字MAE


MAE的途徑非常簡(jiǎn)單,隨機(jī)地蓋住圖片中地一些塊,然后再去重構(gòu)這些被蓋住的像素,這個(gè)思想來(lái)自于BERT中的帶掩碼的語(yǔ)言模型,但是不同之處在于patch是來(lái)自圖片的一個(gè)小塊,預(yù)測(cè)的是這個(gè)塊中所有的像素


兩個(gè)核心的設(shè)計(jì)

1、非對(duì)稱的encoder-decoder架構(gòu)

  • 雖然是一個(gè)自編碼器架構(gòu),但是實(shí)際上任何模型都有一個(gè)編碼器和一個(gè)解碼器,比如說(shuō)在BERT中的解碼器就是最后一個(gè)全連接輸出層,因?yàn)锽ERT預(yù)測(cè)的東西相對(duì)來(lái)講比較簡(jiǎn)單,所以它的解碼器就是一個(gè)簡(jiǎn)單的全連接層就可以了,但是本文中可能相對(duì)復(fù)雜一點(diǎn),因?yàn)樾枰A(yù)測(cè)一個(gè)塊中所有的像素。
  • 編碼器之作用在可見的patch中,對(duì)于丟掉的patch,編碼器不會(huì)對(duì)它進(jìn)行編碼,這樣能夠節(jié)省一定的計(jì)算時(shí)間
  • 解碼器是一個(gè)比較輕量的解碼器,能夠重構(gòu)原始的圖片

2、如果發(fā)現(xiàn)遮住了大量的塊(比如說(shuō)把75%的塊全部遮?。?,則會(huì)得到一個(gè)非顯然的而且有意義的自監(jiān)督任務(wù)。如果只是遮住幾塊的話,只需要進(jìn)行插值就可以出來(lái)了,模型可能學(xué)不到特別的東西,但是如果將一大半都遮住的話,就會(huì)迫使模型去學(xué)習(xí)一些更好的特征

將上述兩個(gè)設(shè)計(jì)放在一起,可以更有效地訓(xùn)練大的模型

  • 大是說(shuō)構(gòu)造一個(gè)比較有挑戰(zhàn)性的任務(wù),他不是去學(xué)習(xí)一個(gè)很顯然的解
  • 快是說(shuō),對(duì)于被遮住的塊就不看了,假設(shè)蓋住了不去看的話,那么訓(xùn)練量就是之前的1/4,所以能加速3倍或者以上


結(jié)果:只使用ImageNet-1K(100萬(wàn)張圖片)的數(shù)據(jù),在一個(gè)最簡(jiǎn)單的ViT-Huge的模型中(模型來(lái)自ViT這篇文章)能夠得到87.8%的準(zhǔn)確率

  • 在ViT這篇文章的最后一段有提到過怎樣做自監(jiān)督學(xué)習(xí),作者說(shuō)效果并不是很好,所以沒有展開,作者當(dāng)時(shí)的結(jié)論是:用有標(biāo)號(hào)的模型和更大的訓(xùn)練集可以得到很好的效果
  • 這里的挑戰(zhàn)在于,只使用小的數(shù)據(jù)集(ImageNet-1k,100萬(wàn)張圖片),而且是通過自監(jiān)督,就能夠做到跟之前可能效果一樣好的模型了


這個(gè)模型主要是用來(lái)做遷移學(xué)習(xí),它證明了在遷移學(xué)習(xí)的其他任務(wù)上表現(xiàn)也非常好





3、關(guān)鍵圖


對(duì)于計(jì)算機(jī)視覺的文章來(lái)說(shuō),最重要的一張圖就是放在第一頁(yè)右上角的那張


  • 圖一講的是MAE整個(gè)模型的架構(gòu)
  • 輸入一張圖,首先將它切成一個(gè)一個(gè)的小塊,圖中涂成灰色的那些小塊就是被蓋住的部分,從沒有蓋住的部分可以看出,原圖應(yīng)該是一只紅色的鳥
  • 去掉那些被蓋住的塊,剩下的小塊已經(jīng)不太多了,因?yàn)?/4的地方都已經(jīng)被蓋住了
  • 將剩下的小塊放進(jìn)encoder(也就是vit)中,得到每一個(gè)塊對(duì)應(yīng)的特征,然后將其拉長(zhǎng),再把被蓋住的那些塊重新放回到原來(lái)的位置,也就是說(shuō)這個(gè)被拉長(zhǎng)的東西其實(shí)就是原始圖片拉成的一條向量(其中沒有蓋住的部分就填上經(jīng)過vit之后輸出的特征,被蓋住的地方依然是灰色的,這里其實(shí)就是一個(gè)位置信息,沒有其他的可以表示的)
  • 將得到的長(zhǎng)向量輸入到解碼器中,解碼器會(huì)嘗試將里面的像素信息全部重構(gòu)回來(lái),使得最后的target訓(xùn)練出來(lái)就是原始的沒有被掩碼蓋住的圖片
  • 這里的編碼器畫的稍微比解碼器要高一點(diǎn),這里的意思是說(shuō)模型主要的計(jì)算來(lái)自于編碼器,因?yàn)樽钪匾木褪菍?duì)圖片的像素進(jìn)行編碼(編碼器只需要處理沒有被蓋住的圖片,也就是說(shuō)一張圖片其實(shí)只需要看到1/4的像素就行了,這樣可以降低計(jì)算量,transformer的模型計(jì)算量都特別大,如果能夠達(dá)到幾倍的加速,其實(shí)也是很重要的事情),這是在預(yù)訓(xùn)練的時(shí)候所干的事情
  • 如果想用這個(gè)模型來(lái)處理一個(gè)計(jì)算機(jī)任務(wù)的話,就只需要編碼器就夠了,解碼器是不需要的,圖片進(jìn)來(lái)之后不需要對(duì)它做掩碼,直接切成一個(gè)一個(gè)的小塊,然后放進(jìn)vit,就能得到所有塊的特征的表示,這就可以當(dāng)作是輸入圖片的特征表達(dá),然后用來(lái)做所要處理的任務(wù)


  • 圖2演示的是在ImageNet的驗(yàn)證集上通過MAE構(gòu)造出來(lái)的圖片,因?yàn)檫@些圖片是沒有參與訓(xùn)練的,所以只是測(cè)試結(jié)果
  • 每張圖片中,左邊一列演示的是將圖片80%的塊去掉,中間列演示的是MAE構(gòu)造出來(lái)的圖片效果,最右邊一列演示的是原始的真實(shí)的ImageNet'的圖片
  • 第一行第一張圖片里的時(shí)鐘上的指針基本上被遮住了,但是還原的時(shí)候還是基本上將兩個(gè)指針整個(gè)還原出來(lái)了
  • 第二行第一張圖片中車的兩頭都沒有,但是還原的效果跟真實(shí)的車的效果還是非常一致
  • 第三行第一張圖中的狗也是基本上看不出來(lái)狗在什么地方,但是還是能夠大概的還原出來(lái)
  • 這里的重構(gòu)雖然在細(xì)節(jié)上比較模糊,因?yàn)樵紙D片的尺寸也不是很大,但是對(duì)圖片內(nèi)容的重構(gòu)效果還是非常驚人的
  • MAE不一定對(duì)所有圖片的重構(gòu)都有很好的效果,這里可能只是挑選出來(lái)了一些比較好的樣例做了展示。如果想要將任意打碼的圖片還原出來(lái),后續(xù)可能還需要很多工作進(jìn)行改進(jìn)


  • 圖三是在COCO數(shù)據(jù)集上,跟之前的處理完全一樣,只是數(shù)據(jù)集不同,但是效果上來(lái)說(shuō)也是非常驚人


  • 圖四演示的是對(duì)同一張圖片遮蓋不同比例的區(qū)域時(shí)的結(jié)果
  • 最后一列是95%的區(qū)域被蓋住的還原效果





4、結(jié)論


簡(jiǎn)單且拓展很好的算法是整個(gè)深度學(xué)習(xí)的核心

  • 簡(jiǎn)單:在vit的基礎(chǔ)上,本文所提出來(lái)的東西相對(duì)來(lái)說(shuō)比較簡(jiǎn)單
  • 拓展性很好:能夠跑比較大的數(shù)據(jù)集
  • 整個(gè)MAE是基于vit,vit是基于transformer,就整個(gè)模型來(lái)說(shuō)當(dāng)然是不簡(jiǎn)單的,每一個(gè)transformer塊中就有很多的東西,然后還要用很多層的transformer堆疊起來(lái),當(dāng)然是一個(gè)比較復(fù)雜的算法
  • 而且擴(kuò)展性好是說(shuō)在很有錢的時(shí)候,當(dāng)然是可以無(wú)限地往里面加數(shù)據(jù),因?yàn)楫吘共恍枰獦?biāo)號(hào)
  • 所以說(shuō)這里的簡(jiǎn)單和拓展性好只是針對(duì)一小群人的


自監(jiān)督學(xué)習(xí)在最近幾年是比較火的,但是在計(jì)算機(jī)視覺中,還是主要靠有標(biāo)號(hào)的數(shù)據(jù)作為訓(xùn)練


這篇文章的工作通過在ImageNet數(shù)據(jù)集上通過自編碼器學(xué)習(xí)到可以媲美有標(biāo)號(hào)的時(shí)候的效果,所以是一個(gè)非常強(qiáng)有力的工作


需要注意到的是圖片和語(yǔ)言之間的一些區(qū)別,因?yàn)楸疚目梢哉J(rèn)為是BERT在計(jì)算機(jī)視覺上的拓展

  • 首先,對(duì)于語(yǔ)言來(lái)說(shuō),一個(gè)詞是一個(gè)語(yǔ)義的單元,它里面所包含的語(yǔ)義信息比較多(這點(diǎn)在vit中已經(jīng)被提出來(lái)了),在圖片中雖然一個(gè)patch也含有一定的語(yǔ)義信息,但它不是語(yǔ)義的分割(也就是說(shuō)這個(gè)patch中并不含有特定的物體,可能含有多個(gè)物體的一小塊,或者是某一個(gè)物體重疊的一塊),但是即使是在這樣的情況下,MAE也能做很復(fù)雜的一些任務(wù)(作者認(rèn)為MAE或者說(shuō)是transformer確實(shí)能夠?qū)W到隱藏的比較好的語(yǔ)義表達(dá))


最后一段講的是broder impacts??

  • 就是說(shuō)如果工作要被出圈的話,那么對(duì)整個(gè)社會(huì)的影響是什么
  • 因?yàn)橹挥昧藞D片本身的信息去進(jìn)行學(xué)習(xí),如果圖片里面有bias(比如說(shuō)傾向于某一些圖片,或者是有一些不那么好的圖片的話,就可呢個(gè)有一些負(fù)面的社會(huì)影響)
  • 這個(gè)模型可以用來(lái)生成不存在的內(nèi)容,因?yàn)樗且粋€(gè)生成模型,它可以用來(lái)生成原始的像素,所以它和GAN一樣確實(shí)可能會(huì)有誤導(dǎo)大家的前提,所以這個(gè)工作如果想用在更多的地方的時(shí)候,一定要去考慮這些潛在的影響


讀到這里,對(duì)這個(gè)工作是在干什么、效果怎么樣就有了一個(gè)比較清晰的了解了,這里可以停下來(lái),如果對(duì)完整的故事感興趣的話,也可以接著往下讀





5、導(dǎo)言


深度學(xué)習(xí)在過去一些年里有飛快的進(jìn)展,但是對(duì)于計(jì)算機(jī)視覺來(lái)講,還是依賴于需要百萬(wàn)級(jí)別的、甚至是更多的帶有標(biāo)注的圖片


在自然語(yǔ)言處理中,自監(jiān)督學(xué)習(xí)已經(jīng)做的非常好了

  • 比如說(shuō)GPT系列是一個(gè)標(biāo)準(zhǔn)的語(yǔ)言模型,BERT是一個(gè)帶掩碼的自編碼模型,這些模型使得在NLP中可以使用沒有標(biāo)注的數(shù)據(jù)訓(xùn)練得到千億級(jí)別的可學(xué)習(xí)參數(shù)的模型


在計(jì)算機(jī)視覺中,使用帶掩碼的自編碼也不是那么新鮮,比如說(shuō)大家用的比較多的denoising autoencoder(就是在一個(gè)圖片中加入很多噪音,然后通過去噪來(lái)學(xué)習(xí)對(duì)這個(gè)圖片的理解),至少在十幾年前就已經(jīng)有相關(guān)的文章了,這一塊中,最新的工作就是基于BERT,最近有很多工作將BERT拓展到計(jì)算機(jī)視覺上面,但是BERT在計(jì)算機(jī)視覺上的應(yīng)用是落后于NLP的


作者嘗試回答了:是什么使得這種帶掩碼的自編碼模型在計(jì)算機(jī)視覺和自然語(yǔ)言處理上不一樣?

  • 第一個(gè)觀點(diǎn)是說(shuō):直到最近以前,計(jì)算機(jī)視覺都是使用卷積神經(jīng)網(wǎng)路絡(luò)(就是在一張圖片上面,使用一個(gè)卷積窗口,不斷地平滑它來(lái)匯聚這些像素上面的信息以及進(jìn)行模式識(shí)別),卷積窗口使得不便于將這種mask的東西放進(jìn)去,因?yàn)樵趖ransformer中,一個(gè)mask是一個(gè)詞,而這個(gè)詞是一個(gè)特定的詞,它會(huì)一直保留下來(lái),跟別的詞區(qū)分開來(lái)。但是在卷積上面做掩碼就是將一塊圖片給蓋住(比如說(shuō)就是將它的像素?fù)Q成某一個(gè)特定的值),但是卷積窗口在圖片上滑動(dòng)的時(shí)候其實(shí)是無(wú)法區(qū)分這個(gè)邊界的,因?yàn)樗鼰o(wú)法將被蓋住的這一個(gè)特定的東西給拎出來(lái),所以導(dǎo)致這個(gè)掩碼信息在后面的時(shí)候難以還原出來(lái)到底是什么,因?yàn)椴缓眉尤胛恢镁幋a(這里是比較奇怪的在transformer中加位置編碼是因?yàn)樽⒁饬C(jī)制無(wú)法擁有位置信息,但是卷積是自帶位置信息的,就是說(shuō)在卷積窗口不斷平移的時(shí)候,是沒有必要加入位置信息進(jìn)去的),作者說(shuō)其實(shí)這一塊現(xiàn)在也不是問題了,因?yàn)樽罱膙it的工作已經(jīng)使得transformer能夠很好地運(yùn)用在計(jì)算機(jī)視覺上面了,所以這個(gè)問題應(yīng)該是之前有的但是現(xiàn)在不會(huì)再有了
  • 第二個(gè)觀點(diǎn)是是說(shuō):信息的密度有點(diǎn)不太一樣,在自然語(yǔ)言中,一個(gè)詞就是一個(gè)語(yǔ)義的實(shí)體(比如說(shuō)字典中一個(gè)詞的解釋就是很長(zhǎng)的一片),所以一句話中很難去去掉幾個(gè)詞(比如完形填空也不是一件簡(jiǎn)單的事情)。但是在圖片中會(huì)有所不同,因?yàn)閳D片中每個(gè)像素是比較冗余的,取決于相機(jī)的分辨率有多大,所以如果是簡(jiǎn)單地去掉一個(gè)塊的話,去掉的這一塊很有可能可以通過鄰居的像素值進(jìn)行插值還原出來(lái)。作者在這里提出了一個(gè)簡(jiǎn)單的想法:把非常高比率的一些隨機(jī)的塊去掉,這樣的話極大地降低了圖片的冗余性,因?yàn)橐粋€(gè)塊和它邊上的很多塊都被去掉了,那么在很遠(yuǎn)的地方的塊跟這個(gè)塊的關(guān)系就不那么冗余了,這樣的話就創(chuàng)造了一個(gè)非常有挑戰(zhàn)性的任務(wù),而且使得整個(gè)模型會(huì)去看全局的信息,而不是僅僅關(guān)注于學(xué)一個(gè)局部的模型將這些像素的值進(jìn)行插值好就可以了(在圖2和圖4中展示了在ImageNet和COCO數(shù)據(jù)集上MAE差值出來(lái)的圖片的效果,它確實(shí)是可以通過一些局部的一些很稀疏的塊得到全局圖片的重構(gòu))
  • 第三個(gè)觀點(diǎn)是說(shuō):關(guān)于自編碼器的解碼器,在計(jì)算機(jī)視覺中,需要還原到輸入,也就是原始的像素,它相對(duì)來(lái)說(shuō)是一個(gè)比較低層次的一些表示。但是在NLP中,需要還原的是詞,也就是說(shuō)預(yù)測(cè)的內(nèi)容是所缺失的詞,詞相對(duì)來(lái)說(shuō)在語(yǔ)義層面上比較高一點(diǎn),所以在NLP中,比如說(shuō)在BERT中,使用一個(gè)最簡(jiǎn)單的全連接層就能還原出所要的那些詞,也就是對(duì)標(biāo)號(hào)進(jìn)行預(yù)測(cè)。但是在機(jī)器視覺中,因?yàn)橐€原的是比較低層次一點(diǎn)的像素,所以一個(gè)MLP可能是不夠的(在圖片分類、目標(biāo)檢測(cè)等任務(wù)上,輸出層,也就是解碼器,就是一個(gè)全連接層就夠了,但是在一些比較復(fù)雜的任務(wù),比如說(shuō)語(yǔ)義分割當(dāng)中,對(duì)每個(gè)像素做像素級(jí)別的輸出的話,通常來(lái)說(shuō),就不是簡(jiǎn)單地使用一個(gè)全連接層了,而是很有可能就是使用一個(gè)卷積神經(jīng)網(wǎng)絡(luò),而且是一個(gè)轉(zhuǎn)置的神經(jīng)網(wǎng)絡(luò)來(lái)做一個(gè)比較大的解碼器)

基于以上這些分析,作者就提出了MAE,實(shí)際上是有這兩個(gè)想法

第一個(gè)想法是隨機(jī)遮住大量的輸入的塊,然后去重構(gòu)這些被遮住的像素信息

第二個(gè)想法是使用一個(gè)非對(duì)稱的編碼器和解碼器的機(jī)制

  • 非對(duì)稱是說(shuō)編碼器看到的和解碼器看到的東西是不一樣的,這里編碼器只看到那些可見的塊,解碼器拿到編碼器的輸出之后,就去重構(gòu)那些被遮擋住的塊
  • 為什么使用這些非對(duì)稱的架構(gòu),因?yàn)榇罅康膲K都被遮住了,這樣的話編碼器只用看可見的那些塊,可以極大地減輕計(jì)算的開銷,也可以使得內(nèi)存更大一點(diǎn)



實(shí)驗(yàn)結(jié)果


在有了MAE的預(yù)訓(xùn)練之后,就可以訓(xùn)練一個(gè)vit large和huge,只使用ImageNet-1K的數(shù)據(jù),也就是說(shuō)只使用100萬(wàn)的圖片使得能夠訓(xùn)練出在vit中要使用100倍大小以上的訓(xùn)練數(shù)據(jù)才能做出來(lái)的效果,而且這個(gè)地方是不用標(biāo)號(hào)的


而且在遷移學(xué)習(xí)上的效果也是很好的,通過這樣預(yù)訓(xùn)練出來(lái)的模型在物體檢測(cè)、實(shí)例分割、語(yǔ)義分割上效果都非常好,所以這樣的話,就能夠得到跟NLP類似的效果。也就是說(shuō)在大量的沒有標(biāo)號(hào)的數(shù)據(jù)上,通過自監(jiān)督學(xué)習(xí)訓(xùn)練出來(lái)的模型在遷移學(xué)習(xí)上效果也是非常不錯(cuò)的


到這里導(dǎo)言就已經(jīng)結(jié)束了,作者寫了整整兩頁(yè),這是一個(gè)非常長(zhǎng)的導(dǎo)言,原因有兩個(gè):

  • 一是因?yàn)樽髡呤褂昧舜罅康膱D片,這些圖片是非常占地方的,但是對(duì)于計(jì)算機(jī)視覺來(lái)講,有很多圖片也是一個(gè)加分項(xiàng)
  • 二是因?yàn)樽髡呤褂昧艘环N問問題、回答問題、再引出想法的寫法,這種寫法是非常好的,如果不這么寫而就是按照一般的將摘要擴(kuò)充一下的寫法的話,基本上就只能得到導(dǎo)言的最后兩段話


仔細(xì)觀察的話會(huì)發(fā)現(xiàn)作者其實(shí)沒有提供更多的技術(shù)細(xì)節(jié),這些東西比較簡(jiǎn)單,在摘要中已經(jīng)講得很清楚了,如果在導(dǎo)言中再重復(fù)一下的話,整個(gè)故事就不那么流暢了。所以作者采用了回到更本質(zhì)的問題:將BERT從NLP用到CV的時(shí)候會(huì)有什么問題,然后列出了三個(gè)問題,一一作答之后再引出MAE這個(gè)算法,也就是說(shuō)作者江整個(gè)算法為什么要設(shè)計(jì)成這個(gè)樣子的原因講清楚了,這是一種非常推薦的寫法

  • 對(duì)一篇論文來(lái)講,不僅應(yīng)該要講做的是什么、是怎么做的,更多的是要講清楚為什么需要這么做,也就是要講清楚對(duì)這個(gè)問題的一些動(dòng)機(jī),如果沒有這些動(dòng)機(jī)的話,這篇論文很有可能就變成一篇技術(shù)報(bào)告了(雖然之前講的不是這么寫的,比如AlexNet那篇文章就是講的是做了些什么,然后得出了怎樣的結(jié)果,但是他確實(shí)不代表一般的寫作一般的寫作一定要講清楚為什么)





6、相關(guān)工作


帶掩碼的語(yǔ)言模型



自編碼器在視覺中的應(yīng)用

  • MAE其實(shí)也是一種形式上的帶去噪的自編碼,因?yàn)閷D片中的某一塊遮住,就等于是在圖片中加入了很多噪音,但是它跟傳統(tǒng)的DAE(Denoising autoencoder)不太一樣,因?yàn)樗吘故腔赩iT,基于整個(gè)transformer架構(gòu)



帶掩碼的編碼器在計(jì)算機(jī)視覺中的應(yīng)用

  • 本文不是第一個(gè)做這個(gè)工作的,之前已經(jīng)有很多工作了。比如說(shuō)iGPT就是GPT在image上的應(yīng)用;ViT的論文在最后一段也講了怎樣用BERT來(lái)訓(xùn)練模型;另外還有BEiT,它也是BERT在image上的應(yīng)用,它和MAE的不同之處在于,它對(duì)每一個(gè)patch都給了一個(gè)離散標(biāo)號(hào),更接近于BERT,但是在MAE中直接還原的是原始的像素信息



自監(jiān)督學(xué)習(xí)

比如最近一兩年特別火的contrast learning,它在這一塊主要使用的是數(shù)據(jù)增強(qiáng),而MAE所用的和它不一樣



相關(guān)工作中提到了四個(gè)領(lǐng)域,提到的文章還是比較多的,但是本文并沒有特別地講MAE跟它們的不同點(diǎn)是什么,特別是跟iGPT和BEiT這兩篇文章的區(qū)別

  • 寫作時(shí),建議在寫相關(guān)工作的時(shí)候,盡量將那些特別相關(guān)的工作和自己工作的不同之處寫出來(lái),而不要讓大家去猜





7、MAE模型


MAE是一個(gè)簡(jiǎn)單的自編碼器

  • 自編碼器看到了部分的觀察的數(shù)據(jù),然后用它來(lái)重構(gòu)完整的原始信號(hào),它跟所有的編碼器一樣,它是將觀察到的信號(hào)映射到一個(gè)latnet representation(潛表示)中,這個(gè)潛表示可以認(rèn)為是語(yǔ)義空間上的表示,然后再通過解碼器將這個(gè)潛表示用來(lái)重構(gòu)出原始的信號(hào)
  • 這個(gè)自編碼器跟經(jīng)典的自編碼器不太一樣,它是一個(gè)非對(duì)稱的結(jié)構(gòu),因?yàn)榫幋a器只看到可見的那些塊,不可見的塊它就看不到了,用來(lái)節(jié)省開銷



掩碼是如何工作的

  • 和vit一樣,將整個(gè)圖片割成一塊一塊的,每一塊作為一個(gè)patch,也就是作為一個(gè)詞
  • 在采樣的時(shí)候,隨機(jī)的均勻的采樣一些出來(lái)進(jìn)行保留,剩下的全部用掩碼蓋住,文中將這種方法叫做隨機(jī)采樣。關(guān)鍵技術(shù)在于只采樣少量的塊出來(lái),然后剩下的全部蓋住,這樣采樣少量的塊,使得它們的冗余度不是很高,這樣的話,任務(wù)就不是那么簡(jiǎn)單(不會(huì)說(shuō)是用簡(jiǎn)單的插值就能解決問題了)



編碼器

  • 其實(shí)就是一個(gè)vit,沒有做任何改動(dòng),但是它只作用于可見的那些塊中,具體的做法跟vit是一樣的:將每一塊拿出來(lái),然后做線性的投影,再加上位置信息,這樣就做成一個(gè)詞進(jìn)去了
  • 但是不一樣的是,如果這一塊被蓋住的話就不會(huì)進(jìn)去了。所以如果有25%被選中,那么進(jìn)入vit的話就只有25%的樣本,這樣的話就可以降低計(jì)算量



解碼器

  • 因?yàn)橐貥?gòu)被蓋住的塊的像素信息,所以它需要看到所有的塊,包括沒有被蓋住的塊(雖然沒有被蓋住,但是已經(jīng)通過編碼器將它表示成了潛表示)和被蓋住的塊(沒有進(jìn)入編碼器)
  • 解碼器是對(duì)這些所有的塊,通過共享的可以學(xué)到的向量來(lái)表示,也就是說(shuō)每一個(gè)被蓋住的塊都表示成同樣的向量,這個(gè)向量的值是可以通過學(xué)習(xí)得到的
  • 解碼器其實(shí)就是另外一個(gè)transformer,所以需要加入位置信息,不然就無(wú)法區(qū)分它對(duì)應(yīng)的到底是哪一個(gè)是掩碼(這里有一點(diǎn)不確定:要不要對(duì)那些編碼器輸出的潛表示也加上位置信息,因?yàn)樗鼈兤鋵?shí)已經(jīng)加上過一次了,那么這個(gè)地方要不要再加上一次?
  • 解碼器主要只在預(yù)訓(xùn)練的時(shí)候使用,當(dāng)將模型用于做一些別的任務(wù)的時(shí)候,解碼器是不需要的,只需要用編碼對(duì)一個(gè)圖片進(jìn)行編碼就可以了,這樣的話比較靈活,想用什么東西,就可以用什么東西
  • 這里采用的是一個(gè)相對(duì)來(lái)說(shuō)比較小的解碼器的架構(gòu),使得它的計(jì)算開銷相對(duì)于編碼器來(lái)說(shuō),不到它的1/10



怎樣重構(gòu)出原始的像素

  • 在解碼器的最后一層是一個(gè)線性層。如果所切割成的一塊中是16*16的像素的話,那么這個(gè)線性層就會(huì)投影到長(zhǎng)為256的這樣一個(gè)維度,拿到這個(gè)投影之后,再將它reshape成所要的16*16,就能還原出原始的像素信息了
  • 損失函數(shù)使用的是MSE,就是說(shuō)預(yù)測(cè)和原始的真正的像素相減再平方,和BERT一樣,只在被蓋住的那些塊上面使用MSE,那些沒有被蓋住的塊,因?yàn)檩斎胍呀?jīng)看到了整個(gè)像素信息,所以就不在上面做損失了
  • 也可以對(duì)要預(yù)測(cè)的像素值做一次normalization,就是說(shuō)對(duì)每一個(gè)塊里面的像素使它的均值變?yōu)?、方差變?yōu)?,使得在數(shù)值上更加穩(wěn)定一點(diǎn)(這里并沒有寫清楚在預(yù)測(cè)的時(shí)候怎么辦,在訓(xùn)練的時(shí)候當(dāng)然知道標(biāo)號(hào)的那些東西,當(dāng)然可以把均值和方差算出來(lái),但是預(yù)測(cè)的時(shí)候呢



簡(jiǎn)單實(shí)現(xiàn)

  • 首先生成了一些token列,token列就是一個(gè)一個(gè)的patch拿過來(lái)之后做一次線性的投影,再加上位置信息
  • 接下來(lái)將這些序列隨機(jī)打亂,然后將最后一塊拿掉,因?yàn)殡S機(jī)打亂,把頭部保存下來(lái),就等價(jià)于是把頭部均勻的、沒有重置的將里面的東西采樣出來(lái),所以如果是采樣25%的話就隨機(jī)shuffle一下,然后將前25%留下來(lái),后面的丟掉就行了,這樣就完成了隨機(jī)采樣
  • 在解碼的時(shí)候,要在后面附上跟以前長(zhǎng)度一樣的掩碼的詞源mask tokens,它就是一個(gè)可以學(xué)習(xí)的向量,當(dāng)然也要加上位置信息,然后再把它重新unshuffle一下還原到原來(lái)的順序,這樣的話,在算誤差的時(shí)候跟之前那個(gè)原始的沒有被做過任何操作的patches是能夠一一對(duì)應(yīng)起來(lái)的
  • 要加上位置信息(這里還是有一個(gè)疑惑:這個(gè)位置信息要不要對(duì)編碼器那邊來(lái)的也給加上,還是說(shuō)從編碼器出來(lái)的那些潛表達(dá)可以寄跳過加位置信息這個(gè)步驟)
  • 這里主要是說(shuō)通過這樣的shuffle和unshuffle使得不需要任何的稀疏操作,在實(shí)現(xiàn)起來(lái)是非??斓?,也不影響后面所有的vit的操作



相對(duì)于前面來(lái)說(shuō),這里面補(bǔ)充了一些細(xì)節(jié)

  • 解碼器
  • 怎樣還原出原始的像素信息
  • 在實(shí)現(xiàn)上,隨機(jī)采樣是如何實(shí)現(xiàn)的





8、實(shí)驗(yàn)


在ImageNet-1K數(shù)據(jù)集(100萬(wàn)張數(shù)據(jù)集)上先做自監(jiān)督的預(yù)訓(xùn)練,就是不用標(biāo)號(hào),只把圖片拿過來(lái),然后再在同樣的數(shù)據(jù)集上做有標(biāo)號(hào)的監(jiān)督訓(xùn)練


這里有兩種做法

一個(gè)是做end to end的微調(diào):允許該整個(gè)模型所有的可學(xué)習(xí)的參數(shù)

第二個(gè)是linear probing:只允許改最后一層的線性輸出層


在驗(yàn)證集上報(bào)告top1的精度,所使用的是中心剪裁的24*24的圖片,基線用的是vit large(vit-l/16,16表示的是圖片塊是16*16的),vit-l是一個(gè)非常大的模型,比ResNet大很多,它很容易o(hù)verfitting


下圖表格中比較的是三種情況

  • 第一個(gè)是使用vit論文中所有的東西在ImageNet-1k上訓(xùn)練出來(lái)的結(jié)果,這個(gè)結(jié)果不是很穩(wěn)定,然后作者再在上面根據(jù)之前的論文做了一些改進(jìn),加入了一些比較強(qiáng)的正則化(在附錄的A2中有詳細(xì)的解釋),加入之后使得訓(xùn)練效果比較好,從72.5提升到了82.5
  • 在vit文章中所講的是模型需要很大很大的數(shù)據(jù)才可以,但是后來(lái)大家發(fā)現(xiàn),如果加入合適的正則項(xiàng)的話,其實(shí)在小一點(diǎn)的數(shù)據(jù)集(比如說(shuō)ImageNet-1k)上也是能夠訓(xùn)練出來(lái)的
  • 最后一個(gè)是說(shuō)先使用MAE做預(yù)訓(xùn)練,然后再在ImageNet上做微調(diào),這時(shí)候就不需要訓(xùn)練完整的200個(gè)epoches,只需要50個(gè)就可以了??梢园l(fā)現(xiàn)從82.5提升到了84.9
  • 因?yàn)閿?shù)據(jù)集并沒有發(fā)生變化(預(yù)訓(xùn)練和后面的微調(diào)都是用的ImageNet),這就表示MAE能夠純從圖片上也能學(xué)到不錯(cuò)的信息,使得后面有所提升



主結(jié)果


下圖中表一展示的是各種ablation study

  • 表a講的是解碼器的深度(需要用到多少個(gè)transformer塊),這里有1、2、4、8、12這幾種選擇。第一列是所有可以學(xué)習(xí)的權(quán)重都跟著調(diào),第二列表示只調(diào)最后一個(gè)線性層,可以發(fā)現(xiàn)前面一種方式雖然比較貴,但是效果會(huì)好很多,而且在塊里面,這個(gè)地方顯示的是使用8塊比較好,對(duì)于全部調(diào)的話好像關(guān)系并不是很大,都是84左右,但是如果只調(diào)最后一層的話,用深一點(diǎn)的會(huì)比較好
  • 表b講的是解碼器的寬度(每個(gè)token表示成一個(gè)多長(zhǎng)的向量),這里發(fā)現(xiàn)512比較好
  • 表c講的是在編碼器中要不要加入被蓋住的那些塊,結(jié)果顯示,不加入被蓋住的那些塊,精度反而更高一些,而且計(jì)算量更少(以不加作為基線的話,加進(jìn)去的計(jì)算量是不加的3.3倍),所以本文采用的是非對(duì)稱的架構(gòu),不僅是在性能上更好,在精度上也更好一些
  • 表d講的是在重構(gòu)的時(shí)候的目標(biāo),最簡(jiǎn)單的就是對(duì)每個(gè)像素使用MSE,這里是加了normalization,就是將每一個(gè)塊中的均值和方差分別變成0和1,發(fā)現(xiàn)效果不錯(cuò)。pca是做一次降維,最后一個(gè)其實(shí)是BEiT的做法(通過vit把每一塊映射到一個(gè)離散的token上面,能夠像BERT一樣做預(yù)測(cè)),從表中可以發(fā)現(xiàn),在fine-tune的話,值都是差不多的,所以在值差不多的情況下,當(dāng)然是傾向于使用更簡(jiǎn)單的辦法
  • 表e講的是如何做數(shù)據(jù)增強(qiáng)。none表示什么都不做,第二行表示只裁剪(固定大?。谌斜硎景凑针S機(jī)的大小裁剪,最后一行表示再加上一些顏色的變化。從表中可以發(fā)現(xiàn),做簡(jiǎn)單的隨即大小的裁剪,效果就已經(jīng)很不錯(cuò)了,所以作者說(shuō)MAE對(duì)于數(shù)據(jù)的增強(qiáng)不那么敏感
  • 表f講的是如何采樣,哪一些塊需要被蓋住。第一行表示的是隨機(jī)采樣,其實(shí)還有一塊一塊地采樣,或者是按照格子來(lái)進(jìn)行采樣,但是最后發(fā)現(xiàn)隨機(jī)采樣這種做法最簡(jiǎn)單,效果也最好



下圖是對(duì)以上表中結(jié)果的展開

  • 上圖表示的是使用不同的掩碼率的時(shí)候的效果
  • 掩碼率越大,不管是對(duì)fine-tune也好,還是對(duì)于只調(diào)最后一層來(lái)講也好,效果都是比較好的
  • 特別是只調(diào)最后一層的話,對(duì)掩碼率相對(duì)來(lái)講更加敏感一點(diǎn)



下表表示的是訓(xùn)練時(shí)間

  • 表中使用vit-large而且解碼器只使用一層transformer塊的時(shí)候,精度也是不錯(cuò)的,時(shí)間是最小的,和之前把所有的帶掩碼的塊全部拿過來(lái)而且使用比較的解碼器的時(shí)候相比,加速是3.7倍
  • 如果是vit-huge的話,加速時(shí)間也是比較多的
  • 絕對(duì)時(shí)間:這里使用的是128個(gè)TPU v3的core,而且使用的是tensorflow實(shí)現(xiàn)(這里比較有意思的是作者是facebook的人,這里使用的是tensorflow,而且使用的是TPU),訓(xùn)練的時(shí)間是10個(gè)小時(shí)
  • 這里可能是因?yàn)槭褂昧藅ensorflow和TPU,所以MAE并沒有公布代碼



下圖表示采用不同的掩碼采樣策略的區(qū)別

  • 第一列表示的是隨機(jī)采樣
  • 第二列表示的是盡量按一塊一塊的來(lái)切
  • 第三列表示的是盡量按照格點(diǎn)來(lái)切
  • 通過圖中可以發(fā)現(xiàn),隨機(jī)采樣的效果比較好,而且比較簡(jiǎn)單,實(shí)現(xiàn)上也不難



下圖顯示的是預(yù)訓(xùn)練的輪數(shù)和最后再做微調(diào)的精度的對(duì)比

  • 圖中可以看到,在ImageNet-1k上訓(xùn)練1000個(gè)數(shù)據(jù)輪的話,能夠看到精度的提升,這也是一個(gè)非常不錯(cuò)的性質(zhì),說(shuō)明在一直訓(xùn)練的情況下,過擬合也不是特別嚴(yán)重(1000輪其實(shí)是非常多的,一般在ImageNet上訓(xùn)練200輪就差不多了)



4.1講的是不同的超參數(shù)下的結(jié)果


下表展示的是跟前面一些工作相比,基本上MAE的效果是最好的



下圖表示的是和vit里面的結(jié)果相比

  • 圖中的十字表示的是vit在JFT這個(gè)3億個(gè)標(biāo)號(hào)的圖片數(shù)據(jù)集上的效果
  • 實(shí)線指的是ImageNet-1K,也就是JFT數(shù)據(jù)集1/300數(shù)據(jù)的效果,可以發(fā)現(xiàn)這兩根線是非常接近的,雖然有一點(diǎn)區(qū)別但是區(qū)別不大。當(dāng)然這并不是一個(gè)很公平的比較,因?yàn)镴FT數(shù)據(jù)集所包括的類數(shù)遠(yuǎn)遠(yuǎn)大于ImageNet,而且它們很多是一些google自己所關(guān)注的目標(biāo),而ImageNet很多都是一些貓貓狗狗的圖片,而且比的話也是在ImageNet數(shù)據(jù)集上比,所以JFT多了很多標(biāo)號(hào)不那么一樣的圖片,也許在這個(gè)地方看上去效果不那么明顯,但是如果把驗(yàn)證集換到一個(gè)跟ImageNet不那么相似的數(shù)據(jù)集上可能差距會(huì)大一點(diǎn)
  • 當(dāng)然,這里主要比較的是算法而不是數(shù)據(jù)集



4.3講的是輸入到底調(diào)多少層比較好


之前可以看到,如果能將整個(gè)編碼器里面所有的層進(jìn)行微調(diào)和只調(diào)最后一層,它們的效果差別是非常大的,前者的效果要好很多


微調(diào)的時(shí)候,到底調(diào)多少層是有講究的,調(diào)的越少當(dāng)然越快,但是通常精度也就越差,調(diào)的越多,就越慢但是精度會(huì)越好


  • 上圖中,x軸表示的是有多少個(gè)transformer塊要被調(diào),y軸表示的是精度
  • 從什么都不調(diào),到簡(jiǎn)單地只調(diào)最后一層開始,再調(diào)到4、5層的時(shí)候基本上精度就可以回來(lái)了,而且后面也是比較平坦的,這表示底部那些層學(xué)到的東西稍微是比較低層次一點(diǎn),在換另外一個(gè)任務(wù)的時(shí)候也不需要變化太多,但是上面的層還是和任務(wù)比較相關(guān)的,最好還是做一些調(diào)整



第五章講的是遷移學(xué)習(xí)的效果


下圖中的表四和表五做的是COCO數(shù)據(jù)集上的目標(biāo)檢測(cè)和分割

  • 從表四中可以發(fā)現(xiàn)用MAE當(dāng)作主干網(wǎng)絡(luò)之后效果是最好的


表六表示的是和當(dāng)還是像BEiT那樣用dVAE學(xué)出來(lái)的標(biāo)號(hào)重構(gòu)原始的像素相比的結(jié)果

  • 從表中可以發(fā)現(xiàn)二者的差別是非常少的,因?yàn)橹貥?gòu)原始像素的方式很多,所以所用的方法當(dāng)然越簡(jiǎn)單越好





9、評(píng)論


MAE的算法還是非常簡(jiǎn)單的,就是利用vit來(lái)做和BERT一樣的自監(jiān)督學(xué)習(xí),vit已經(jīng)做了類似的事情了,但是本文在此基礎(chǔ)之上提出了兩點(diǎn)

  • 第一點(diǎn)是需要蓋住更多的塊,使得剩下的那些塊,塊與塊之間的冗余度沒有那么高,這樣整個(gè)任務(wù)就變得復(fù)雜一點(diǎn)
  • 第二個(gè)是使用一個(gè)transformer架構(gòu)的解碼器,直接還原原始的像素信息,使得整個(gè)流程更加簡(jiǎn)單一點(diǎn)
  • 第三個(gè)是加上vit工作之后的各種技術(shù),使得它的訓(xùn)練更加魯棒一點(diǎn)

以上三點(diǎn)加起來(lái),使得MAE能夠在ImageNet-1k數(shù)據(jù)集上使用自監(jiān)督訓(xùn)練的效果超過了之前的工作


從寫作上來(lái)說(shuō),這篇文章非常簡(jiǎn)單,但是故事性寫的非常好。從前面導(dǎo)言中為什么MAE要這么做,以及后面非常詳細(xì)的數(shù)據(jù)顯示了整個(gè)MAE中所有可以調(diào)的超參數(shù)到底是什么意思


簡(jiǎn)單的想法、非常好的結(jié)果、詳細(xì)的實(shí)驗(yàn),共同決定了這是一個(gè)非常高質(zhì)量的工作





----end----

MAE 論文逐段精讀【論文精讀】的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
湛江市| 修水县| 花莲市| 秦皇岛市| 隆安县| 祁阳县| 文水县| 安丘市| 庆元县| 深泽县| 公主岭市| 治多县| 呈贡县| 广州市| 巴林右旗| 鄂托克前旗| 宁海县| 青铜峡市| 襄樊市| 客服| 阜康市| 会理县| 奉化市| 威海市| 内乡县| 舟曲县| 来安县| 碌曲县| 富锦市| 阳山县| 凤山市| 都安| 利辛县| 水富县| 静乐县| 高淳县| 来凤县| 凯里市| 库车县| 寿阳县| 双流县|