从动力学角度看优化算法:为什么SimSiam不退化?
?PaperWeekly 原創(chuàng) ·?作者|蘇劍林
單位|追一科技
研究方向|NLP、神經(jīng)網(wǎng)絡(luò)
自 SimCLR [1] 以來(lái),CV 中關(guān)于無(wú)監(jiān)督特征學(xué)習(xí)的工作層出不窮,讓人眼花繚亂。這些工作大多數(shù)都是基于對(duì)比學(xué)習(xí)的,即通過(guò)適當(dāng)?shù)姆绞綐?gòu)造正負(fù)樣本進(jìn)行分類學(xué)習(xí)的。
然而,在眾多類似的工作中總有一些特立獨(dú)行的研究,比如 Google 的 BYOL [2] 和最近的 SimSiam [3],它們提出了單靠正樣本就可以完成特征學(xué)習(xí)的方案,讓人覺(jué)得耳目一新。但是沒(méi)有負(fù)樣本的支撐,模型怎么不會(huì)退化(坍縮)為一個(gè)沒(méi)有意義的常數(shù)模型呢?這便是這兩篇論文最值得讓人思考和回味的問(wèn)題了。
其中 SimSiam 給出了讓很多人都點(diǎn)贊的答案,但筆者覺(jué)得 SimSiam 也只是把問(wèn)題換了種說(shuō)法,并沒(méi)有真的解決這個(gè)問(wèn)題。筆者認(rèn)為,像 SimSiam、GAN 等模型的成功,很重要的原因是使用了基于梯度的優(yōu)化器(而非其他更強(qiáng)或者更弱的優(yōu)化器),所以不結(jié)合優(yōu)化動(dòng)力學(xué)的答案都是不完整的。在這里,筆者嘗試結(jié)合動(dòng)力學(xué)來(lái)分析 SimSiam 不會(huì)退化的原因。
SimSiam
在看 SimSiam 之前,我們可以先看看 BYOL,來(lái)自論文 Bootstrap your own latent: A new approach to self-supervised Learning [4]?,其學(xué)習(xí)過(guò)程很簡(jiǎn)單,就是維護(hù)兩個(gè)編碼器 Student 和 Teacher,其中 Teacher 是 Student 的滑動(dòng)平均,Student 則又反過(guò)來(lái)向 Teacher 學(xué)習(xí),有種“左腳踩右腳”就可以飛起來(lái)的感覺(jué)。示意圖如下:
▲ BYOL示意圖
而 SimSiam 則來(lái)自論文 Exploring Simple Siamese Representation Learning [5]?,它更加簡(jiǎn)單,直接把 BYOL 的滑動(dòng)平均去掉了:
▲?SimSiam示意圖
事實(shí)上,SimSiam 相當(dāng)于將 BYOL 的滑動(dòng)平均參數(shù) 設(shè)置為 0 了,這說(shuō)明 BYOL 的滑動(dòng)平均不是必須的。為了找出算法中的關(guān)鍵部分,SimSiam 還做了很多對(duì)比實(shí)驗(yàn),證實(shí)了 stop_gradient 算子以及 predictor 模塊 是 SimSiam 不退化的關(guān)鍵。為了解釋這個(gè)現(xiàn)象,SimSiam 提出了該優(yōu)化過(guò)程實(shí)際上相當(dāng)于在交替優(yōu)化:
其中 x 代表訓(xùn)練樣本而 代表數(shù)據(jù)擴(kuò)增。這部分內(nèi)容網(wǎng)上已有不少解讀,直接讀原論文也不困難,因此就不詳細(xì)展開(kāi)了。
動(dòng)力學(xué)分析
然而,筆者認(rèn)為,將 SimSiam 算法的理解轉(zhuǎn)換成 的交替優(yōu)化的理解,只不過(guò)是換了種說(shuō)法,并沒(méi)有作出什么實(shí)質(zhì)的回答。因?yàn)楹苊黠@,目前 也存在退化解,模型完全可以讓所有的 都等于同一個(gè)向量,然后 輸出同一個(gè)常數(shù)向量。不回答 的交替優(yōu)化為什么不退化,那也等于沒(méi)有回答問(wèn)題。
下面筆者將列舉出自認(rèn)為是 SimSiam 不退化的關(guān)鍵因素,并且通過(guò)一個(gè)簡(jiǎn)單的例子表明回答不退化的原因需要跟動(dòng)力學(xué)結(jié)合起來(lái)。當(dāng)然,筆者這部分的論述其實(shí)也是不完整的,甚至是不嚴(yán)謹(jǐn)?shù)?#xff0c;只是拋磚引玉地給出一個(gè)新的視角。
2.1 深度圖像先驗(yàn)
首先,很早之前人們就發(fā)現(xiàn)一個(gè)隨機(jī)初始化的 CNN 模型就可以直接用來(lái)提取視覺(jué)特征,效果也不會(huì)特別差,該結(jié)論可以追溯到 2009 年的論文 What is the best multi-stage architecture for object recognition? [6]?,這可以理解為 CNN 天然具有處理圖像的能力。
后來(lái)這個(gè)特性被起了一個(gè)高大上的名字,稱為“深度圖像先驗(yàn)”,出自論文 Deep Image Prior [7]?,里邊做了一些實(shí)驗(yàn),表明從一個(gè)隨機(jī)初始化的 CNN 模型出發(fā),不需要任何監(jiān)督學(xué)習(xí),就可以完成圖像補(bǔ)全、去噪等任務(wù),進(jìn)一步確認(rèn)了 CNN 天然具有處理圖像的能力這個(gè)特性。
按照筆者的理解,“深度圖像先驗(yàn)”源于三點(diǎn):
1. 圖像的連續(xù)性,是指圖像本身就可以直接視為一個(gè)連續(xù)型向量,而不需要像 NLP 那樣要學(xué)習(xí)出 Embedding 層出來(lái),這意味著我們用“原始圖像 +K 鄰近”這樣簡(jiǎn)單粗暴的方法就可以做很多任務(wù)了;
2. CNN的架構(gòu)先驗(yàn),指的是 CNN 的局部感知設(shè)計(jì)確實(shí)很好地模擬了肉眼的視覺(jué)處理過(guò)程,而我們所給出的視覺(jué)分類結(jié)果也都是基于我們的肉眼所下的結(jié)論,因此兩者是契合的;
3. 良好的初始化,這不難理解,再好的模型配上全零初始化了估計(jì)都不會(huì) work,之前的文章從幾何視角來(lái)理解模型參數(shù)的初始化策略 [8] 也簡(jiǎn)單討論過(guò)初始化方法,從幾何意義上來(lái)看,主流的初始化方法都是一種近似的“正交變換”,能盡量地保留輸入特征的信息。
2.2 不退化的動(dòng)力學(xué)
還是那句話,深度圖像先驗(yàn)意味著一個(gè)隨機(jī)化的 CNN 模型就是一個(gè)不是特別差的編碼器了,于是我們接下來(lái)要做的事情無(wú)非可以歸結(jié)為兩點(diǎn):往更好地方向?qū)W、不要向常數(shù)退化。
往更好地方向?qū)W,就是通過(guò)人為地設(shè)計(jì)一些先驗(yàn)信號(hào),讓模型更好地融入這些先驗(yàn)知識(shí)。SimSiam、BYOL 等讓同一張圖片做兩種不同的數(shù)據(jù)擴(kuò)增,然后兩者對(duì)應(yīng)的特征向量盡量地相似,這便是一種好的信號(hào)引導(dǎo),告訴模型簡(jiǎn)單的變換不應(yīng)當(dāng)影響我們對(duì)視覺(jué)理解,事實(shí)上,這也是所有對(duì)比學(xué)習(xí)方法所用的設(shè)計(jì)之一。
不同的則是在“不要向常數(shù)退化”這一點(diǎn)上,一般的對(duì)比學(xué)習(xí)方法是通過(guò)構(gòu)造負(fù)樣本來(lái)告訴模型哪些圖片的特征不該相近,從而讓模型不退化;但是 SimSiam、BYOL 不一樣,它們沒(méi)有負(fù)樣本,實(shí)際上它們是通過(guò)將模型的優(yōu)化過(guò)程分解為兩個(gè)同步的、但是快慢不一樣的模塊來(lái)防止退化的。還是以 SimSiam 為例,它的優(yōu)化目標(biāo)可以寫為:
然后用梯度下降來(lái)優(yōu)化,對(duì)應(yīng)的動(dòng)力學(xué)方程組是:
上式已經(jīng)注明了有無(wú) stop_gradient 算子所帶來(lái)的差別。簡(jiǎn)單來(lái)說(shuō),如果添加了 stop_gradient 算子,那么 就少了第二項(xiàng),這時(shí)候 和 都共同包含因子 ,由于 更靠近輸出層,并且初始化的 也是一個(gè)不差的編碼器,因此開(kāi)始學(xué)習(xí)的時(shí)候, 會(huì)被優(yōu)化得更快,越靠近輸入層的優(yōu)化得越慢。
也就是說(shuō), 是快動(dòng)力學(xué)部分, 則是慢動(dòng)力學(xué)部分,那么相對(duì)而言, 會(huì)更快速地收斂到 0,這意味著 會(huì)很快地變得很小,由于 也包含 這一項(xiàng),所以 跟著變得小,在它退化之前,推動(dòng)它退化的力都已經(jīng)微乎其微了,也就不會(huì)退化了。
相反,如果有第二項(xiàng) (不管是補(bǔ)充上它還是只保留它),那么就相當(dāng)于添加了一個(gè)“快速通道”,使得它變?yōu)榭焖夙?xiàng),就算 ,但由于第二項(xiàng)在,還會(huì)繼續(xù)推動(dòng)著它退化。
舉個(gè)簡(jiǎn)單的具體例子,我們考慮:
簡(jiǎn)單起見(jiàn)這里的 都是標(biāo)量,對(duì)應(yīng)動(dòng)力學(xué)方程是:
假設(shè) (隨便選的),那么兩者的演變是:
▲?停掉第二個(gè)θ的梯度▲?不停掉第二個(gè)θ的梯度
可以看到,停掉第二個(gè) 的梯度后, 和 的方程是相當(dāng)一致的, 迅速趨于 1,同時(shí) 穩(wěn)定到了一個(gè)非 0 值(意味著沒(méi)退化)。相當(dāng),如果補(bǔ)充上 的第二項(xiàng),或者干脆只保留第二項(xiàng),結(jié)果都是 迅速趨于 0,而 則無(wú)法趨于 1 了,這意味著主導(dǎo)權(quán)被 占據(jù)了。
這個(gè)例子本身沒(méi)多大說(shuō)服力,但是它簡(jiǎn)單地揭示了動(dòng)力學(xué)的變化情況:
predictor()的引入使得模型的動(dòng)力學(xué)分為了兩大部分,stop_gradient 算子的引入則使得 encoder 部分()的動(dòng)力學(xué)變慢,并且增強(qiáng)了 encoder 與 predictor 的同步性,這樣一來(lái),predictor 以“迅雷不及掩耳之勢(shì)”擬合了目標(biāo),使得 encoder 還沒(méi)來(lái)得及退化,優(yōu)化過(guò)程就停止了。
看近似展開(kāi)
當(dāng)然,詮釋千萬(wàn)種,皆是“馬后炮”,真正牛的還是發(fā)現(xiàn)者,我們充其量也就是蹭掉熱度而已。這里再多蹭一下,分享筆者從另外一個(gè)視角看的 SimSiam。文章開(kāi)頭說(shuō)了,SimSiam 論文提出了通過(guò)目標(biāo)(1)的交替優(yōu)化來(lái)解釋 SimSiam,這個(gè)視角就是從目標(biāo)(1)出發(fā),進(jìn)一步深究一下它不退化的原因。
如果固定 ,那么對(duì)于目標(biāo)(1)來(lái)說(shuō),很容易解出 的最優(yōu)值為:
代入(1),就得到優(yōu)化目標(biāo)為:
我們假定 是“小”的向量,那么在 x 處做一階展開(kāi)得到 :
其中 是同一張圖片在所有數(shù)據(jù)擴(kuò)增手段下的平均結(jié)果,注意它通常不等于 x。類似地,如果是不加 stop_gradient 也不加 predictor 的 SimSiam,那么損失函數(shù)近似為:
在式(8)中,每個(gè) 減去了 ,可以證明這個(gè)選擇能使得損失函數(shù)最小;而在式(9)中,每個(gè) 減去的是另一個(gè)擴(kuò)增結(jié)果 ,會(huì)導(dǎo)致?lián)p失函數(shù)本身和估計(jì)的方差都大大增大。
那是不是意味著,不加 stop_gradient、不加 predictor 會(huì)失敗的原因,是因?yàn)樗膿p失函數(shù)以及方差過(guò)大呢?注意到在一階近似下有 ,那如果優(yōu)化目標(biāo)換成:
是不是就不會(huì)退化了?筆者也沒(méi)有驗(yàn)證過(guò),不得而知,正在研究相關(guān)內(nèi)容的讀者不妨驗(yàn)證一下。這里還引申出一個(gè)相關(guān)的問(wèn)題,經(jīng)過(guò)這樣訓(xùn)練好的編碼器,究竟用 還是 作為特征好呢?
當(dāng)然,這部分的討論都是建立在“ 是小的向量”這個(gè)假設(shè)的基礎(chǔ)上的,如果它不成立,那么這一節(jié)內(nèi)容就是白說(shuō)了。
文末小結(jié)
本文試圖從動(dòng)力學(xué)角度給出筆者對(duì) BYOL、SimSiam 算法不退化的理解,很遺憾,寫到一半的時(shí)候發(fā)現(xiàn)之前頭腦中構(gòu)思的一些分析無(wú)法自圓其說(shuō)了,于是刪減了一些內(nèi)容,并補(bǔ)充了一個(gè)新的角度,盡量讓文章不“爛尾”,至于求精,那是說(shuō)不上了。權(quán)當(dāng)筆記分享在此,如有不當(dāng)之處,還望讀者海涵斧正。
參考文獻(xiàn)
[1] https://arxiv.org/abs/2002.05709
[2] https://arxiv.org/abs/2006.07733
[3] https://arxiv.org/abs/2011.10566
[4] https://arxiv.org/abs/2006.07733
[5] https://arxiv.org/abs/2011.10566
[6] https://ieeexplore.ieee.org/document/5459469
[7] https://arxiv.org/abs/1711.10925
[8] https://kexue.fm/archives/7180
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識(shí)的人。
總有一些你不認(rèn)識(shí)的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵(lì)高校實(shí)驗(yàn)室或個(gè)人,在我們的平臺(tái)上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)習(xí)心得或技術(shù)干貨。我們的目的只有一個(gè),讓知識(shí)真正流動(dòng)起來(lái)。
?????來(lái)稿標(biāo)準(zhǔn):
? 稿件確系個(gè)人原創(chuàng)作品,來(lái)稿需注明作者個(gè)人信息(姓名+學(xué)校/工作單位+學(xué)歷/職位+研究方向)?
? 如果文章并非首發(fā),請(qǐng)?jiān)谕陡鍟r(shí)提醒并附上所有已發(fā)布鏈接?
? PaperWeekly 默認(rèn)每篇文章都是首發(fā),均會(huì)添加“原創(chuàng)”標(biāo)志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請(qǐng)單獨(dú)在附件中發(fā)送?
? 請(qǐng)留下即時(shí)聯(lián)系方式(微信或手機(jī)),以便我們?cè)诰庉嫲l(fā)布時(shí)和作者溝通
????
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁(yè)搜索「PaperWeekly」
點(diǎn)擊「關(guān)注」訂閱我們的專欄吧
關(guān)于PaperWeekly
PaperWeekly 是一個(gè)推薦、解讀、討論、報(bào)道人工智能前沿論文成果的學(xué)術(shù)平臺(tái)。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號(hào)后臺(tái)點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結(jié)
以上是生活随笔為你收集整理的从动力学角度看优化算法:为什么SimSiam不退化?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AI框架你只会调包,这种想法很危险!
- 下一篇: 如何理解 Graph Convoluti