本文作者重新審視了ResNet之所以工作的原因,得出結(jié)論:ResNet本質(zhì)上就干了一件事:降低數(shù)據(jù)中信息的冗余度。
最近在總結(jié)完成語(yǔ)義分割任務(wù)的輕量級(jí)神經(jīng)網(wǎng)絡(luò)時(shí),看到了MobileNetV2中對(duì)于ReLU層的思考,于是我也回過(guò)頭重新審視ResNet之所以work的本質(zhì)原因。以下是一些個(gè)人的見(jiàn)解,如有錯(cuò)誤,還望及時(shí)指正。
在談及ResNet之前,我們先聊聊故事的背景。
我們知道,在神經(jīng)網(wǎng)絡(luò)中,非線性激活層可以為模型引入了非線性,讓模型具有更強(qiáng)的擬合能力。如果只是單純的線性操作層的疊加,則完全可以等價(jià)為一個(gè)線性層,這就浪費(fèi)了深度神經(jīng)網(wǎng)絡(luò)的一身好本領(lǐng)。
所謂針無(wú)兩頭尖,那么非線性激活層會(huì)帶來(lái)一些什么問(wèn)題呢?我們以ReLU為例來(lái)進(jìn)行說(shuō)明,其他非線性激活層亦同理。
首先,最直觀的,從實(shí)驗(yàn)中我們可以注意到一個(gè)事實(shí):ReLU 會(huì)造成的低維數(shù)據(jù)的坍塌(collapse)。顧名思義,即是說(shuō),低維度的feature在通過(guò)ReLU的時(shí)候,這個(gè)feature會(huì)像塌方了一樣,有一部分被毀掉了,或者說(shuō)失去了。能恢復(fù)嗎?能,但是基本無(wú)法百分百還原了。
具體表現(xiàn)出來(lái)就是:若是我們對(duì)一個(gè)feature,先通過(guò)一個(gè)給定的變換規(guī)則T,將它映射到它的embeddingspace中,再在該embeddingspace中,利用一個(gè)ReLU去處理該feature,最后再把這個(gè)feature以同樣的變換規(guī)則(逆方向)給映射回原始空間,我們會(huì)發(fā)現(xiàn),這時(shí),這個(gè)feature已經(jīng)變得連親媽都不認(rèn)得了。如圖↓
圖片來(lái)自《MobileNetV2:InvertedResidualsandLinearBottlenecks》
ReLU這個(gè)東西,其實(shí)就是一個(gè)濾波器,只不過(guò)這個(gè)濾波器的作用域不是信號(hào)處理中的頻域,而是特征域。那么濾波器又有什么作用呢?維度壓縮,俗話說(shuō)就是降維啦:如果我們有m個(gè)feature被送入ReLU層,過(guò)濾剩下n個(gè)(n
那么,為什么低維數(shù)據(jù)流經(jīng)非線性激活層會(huì)發(fā)生坍塌(信息丟失),而高維數(shù)據(jù)就不會(huì)呢?
打個(gè)簡(jiǎn)單但不嚴(yán)謹(jǐn)?shù)谋确剑捍蠹叶加羞^(guò)年搶高鐵票的經(jīng)驗(yàn)吧?幾個(gè)人(維度低)幫你搶一張票,肯定沒(méi)有一群人(維度高)幫你搶一張票,成功的概率高啊。幾個(gè)人里面,大概率全軍覆沒(méi),沒(méi)一個(gè)能幫上你忙的。而一群人里面,大概率總有那么一個(gè)手速驚人的單身青年,幫你搶到你心心念念的回家票。
在數(shù)據(jù)上也是一個(gè)道理,維度低的feature,分布到ReLU的激活帶上的概率小,因此經(jīng)過(guò)后信息丟失嚴(yán)重,甚至可能完全丟失。而維度高的feature,分布到ReLU的激活帶上的概率大,雖然可能也會(huì)有信息的部分丟失,但是無(wú)傷大雅,大部分的信息仍然得以保留。所謂留得青山在,不愁沒(méi)柴燒嘛。更何況被ReLU截殺的信息,可能只是一些無(wú)用游民(冗余信息)。
那么數(shù)據(jù)的坍塌,是個(gè)很嚴(yán)重的事嗎?
那事兒可大了。如果把神經(jīng)網(wǎng)絡(luò)比作一個(gè)人的話,你這就是給它的某個(gè)部位的血管里,丟了個(gè)血栓。
當(dāng)信息無(wú)法流過(guò)ReLU時(shí),該神經(jīng)元的輸出就會(huì)變?yōu)?。而在反向傳播的過(guò)程中,ReLU對(duì)0值的梯度為0,即發(fā)生了梯度消失,這將導(dǎo)致神經(jīng)元的權(quán)重?zé)o法再通過(guò)梯度下降法進(jìn)行更新,這種現(xiàn)象被稱為特征退化。所以這個(gè)神經(jīng)元相當(dāng)于死掉了,喪失了學(xué)習(xí)能力。我們說(shuō),一旦神經(jīng)元的輸出陷入0值,就無(wú)法恢復(fù)了。
那么,我們應(yīng)該怎么去規(guī)避數(shù)據(jù)的坍塌呢?非線性激活層到底是個(gè)什么樣的東西?
其實(shí),對(duì)于一個(gè)數(shù)據(jù),利用非線性激活層對(duì)其進(jìn)行激活,其實(shí)是從該數(shù)據(jù)的信息中提取出其潛在的稀疏性,但是這種提取的結(jié)果是否正確,就要分情況討論了。
對(duì)于一個(gè)M維的數(shù)據(jù),我們可以將其看成是在M維空間中的一個(gè)M維流形(manifold)。而其中的有用信息,就是在該M維空間中的一個(gè)子空間(子空間的維度記為N維,N<=M)中的一個(gè)?N?維流形。非線性激活層相當(dāng)于壓縮了這個(gè)?M?維空間的維度(還記得前面提過(guò)的維度壓縮嗎?)。若是該?M?維空間中的?M?維流形本來(lái)就不含有冗余信息(M=N),那么再對(duì)其進(jìn)行維度壓縮,必然導(dǎo)致信息的丟失。
而維度低的數(shù)據(jù)其實(shí)就是這么一種情況:其信息的冗余度高的可能性本來(lái)就低,如果強(qiáng)行對(duì)其進(jìn)行非線性激活(維度壓縮),則很有可能丟失掉有用信息,甚至丟失掉全部信息(輸出為全0)。
與非線性激活層不同的是,線性激活層并不壓縮特征空間的維度。于是,我們得到了一條使用激活層的原則:
對(duì)含有冗余信息的數(shù)據(jù)使用非線性激活(如ReLU),對(duì)不含冗余信息的數(shù)據(jù)使用線性激活(如一些線性變換)。
兩種類型的激活交替靈活使用,以同時(shí)兼顧非線性和信息的完整性。
由于冗余信息和非冗余信息所攜帶的有用信息是一樣多的,因此在設(shè)計(jì)網(wǎng)絡(luò)時(shí),對(duì)內(nèi)存消耗大的結(jié)構(gòu)最好是用在非冗余信息上。
根據(jù)以上的原則設(shè)計(jì)出來(lái)的結(jié)構(gòu),聰明的你想到了什么?ResNet。不得不贊嘆KaimingHe的天才,ResNet這東西,描述起來(lái)固然簡(jiǎn)單,但是對(duì)它的理解每深一層,就會(huì)愈發(fā)發(fā)現(xiàn)它的精妙及優(yōu)雅,從數(shù)學(xué)上解釋起來(lái)非常簡(jiǎn)潔,非常令人信服,而且直切傳統(tǒng)痛點(diǎn)。
ResNet本質(zhì)上就干了一件事:降低數(shù)據(jù)中信息的冗余度。
具體說(shuō)來(lái),就是對(duì)非冗余信息采用了線性激活(通過(guò)skipconnection獲得無(wú)冗余的identity部分),然后對(duì)冗余信息采用了非線性激活(通過(guò)ReLU對(duì)identity之外的其余部分進(jìn)行信息提取/過(guò)濾,提取出的有用信息即是殘差)。
其中,提取 identity 這一步,就是 ResNet 思想的核心。
從本文的觀點(diǎn)來(lái)看,因?yàn)閺臄?shù)據(jù)中拿掉了非冗余信息的identity部分,會(huì)導(dǎo)致余下部分的信息冗余度變高。這就像從接近飽和的溶液中移走了一部分溶質(zhì),會(huì)使得剩下的溶液的飽和度降低,一個(gè)道理。
在這里也引用一下其他的一些觀點(diǎn),方便大家可以從一個(gè)更全面的角度去看這個(gè)問(wèn)題:
從特征復(fù)用的觀點(diǎn)來(lái)看,提取identity部分,可以讓網(wǎng)絡(luò)不用再去學(xué)習(xí)一個(gè)identitymapping(雖然是一樣的東西,但是畢竟又要從頭學(xué)起,講真,換你來(lái)試試,這其實(shí)真的不容易學(xué)到),而是直接學(xué)習(xí)residual。這就輕松愉快多了:站在巨人的肩膀上,做一點(diǎn)微小的工作什么的...
既然說(shuō)了ResNet解決的痛點(diǎn),也順便多說(shuō)幾句它帶來(lái)的好處:
由于identity之外的其余部分的信息冗余度較高,因此在對(duì)其使用ReLU進(jìn)行非線性激活時(shí),丟失的有用信息也會(huì)較少,ReLU層輸出為0的可能性也會(huì)較低。這就降低了在反向傳播時(shí)ReLU的梯度消失的概率,從而便于網(wǎng)絡(luò)的加深,以大大地發(fā)揮深度網(wǎng)絡(luò)的潛能。
特征復(fù)用能加快模型的學(xué)習(xí)速度,因?yàn)閰?shù)的優(yōu)化收斂得快(從identity的基礎(chǔ)上直接學(xué)習(xí)殘差,總比從頭學(xué)習(xí)全部來(lái)得快)。
最后是兩個(gè)小tips:
如果一個(gè)信息可以完整地流過(guò)一個(gè)非線性激活層,則這個(gè)非線性激活層對(duì)于這個(gè)信息而言,相當(dāng)于僅僅作了一個(gè)線性激活。
解決由非線性激活導(dǎo)致的反向傳播梯度消失的竅門,就是要提高進(jìn)行非線性激活的信息的冗余度。
如果您覺(jué)得本文對(duì)您有所幫助,請(qǐng)高抬貴手點(diǎn)個(gè)贊~
接下來(lái)會(huì)填之前語(yǔ)義軟分割的坑和圖神經(jīng)網(wǎng)絡(luò)的坑,還有一些雜七雜八的:如姿態(tài)估計(jì)網(wǎng)絡(luò)啦、deepSLAM啦、視覺(jué)跟蹤網(wǎng)絡(luò)啦、VQA啦...最近光忙著看paper和寫筆記了,有空再整理后發(fā)上來(lái)。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103724 -
冗余
+關(guān)注
關(guān)注
1文章
112瀏覽量
20715 -
resnet
+關(guān)注
關(guān)注
0文章
13瀏覽量
3323
原文標(biāo)題:對(duì) ResNet 本質(zhì)的一些思考
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
為什么做一件事或者學(xué)習(xí)FPGA每隔一段時(shí)間就會(huì)感覺(jué)遇到瓶頸呢?
[原創(chuàng)]每天做好一件事
什么叫做“每天6件事”,如何落實(shí)“每天6件事”
學(xué)習(xí)C2000,大學(xué)里最值得干的一件事
干貨-背鉆工藝,超高速信號(hào)電路板必須要做的一件事!
提高電源冗余度的結(jié)構(gòu)分析

小米神話被華為OV聯(lián)手打敗,只因?yàn)槔总姵W鲞@三件事
超冗余度桁架機(jī)械臂的容錯(cuò)逆運(yùn)動(dòng)學(xué)仿真_趙普
10年專注一件事,OPPO品牌獲年輕用戶認(rèn)可
什么叫冗余度
馬云從企業(yè)家到師者的決然轉(zhuǎn)身,教會(huì)給了人們的第一件事
希捷就只做了一件事兒,對(duì)此,你怎么看?
如何正確看待人工智能時(shí)代的發(fā)展
江波龍電子丨商業(yè)往事第69話:每一件事都可以有策略

評(píng)論