<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          對 ResNet 本質(zhì)的一些思考

          共 4367字,需瀏覽 9分鐘

           ·

          2021-08-10 18:41

          點擊上方小白學(xué)視覺”,選擇加"星標"或“置頂

          重磅干貨,第一時間送達


          本文作者重新審視了ResNet之所以工作的原因,得出結(jié)論: ResNet 本質(zhì)上就干了一件事:降低數(shù)據(jù)中信息的冗余度。


          最近在總結(jié)完成語義分割任務(wù)的輕量級神經(jīng)網(wǎng)絡(luò)時,看到了 MobileNet V2 中對于 ReLU 層的思考,于是我也回過頭重新審視 ResNet 之所以 work 的本質(zhì)原因。以下是一些個人的見解,如有錯誤,還望及時指正。


          在談及 ResNet 之前,我們先聊聊故事的背景。


          我們知道,在神經(jīng)網(wǎng)絡(luò)中,非線性激活層可以為模型引入了非線性,讓模型具有更強的擬合能力。如果只是單純的線性操作層的疊加,則完全可以等價為一個線性層,這就浪費了深度神經(jīng)網(wǎng)絡(luò)的一身好本領(lǐng)。


          所謂針無兩頭尖,那么非線性激活層會帶來一些什么問題呢?我們以 ReLU 為例來進行說明,其他非線性激活層亦同理。


          首先,最直觀的,從實驗中我們可以注意到一個事實:ReLU 會造成的低維數(shù)據(jù)的坍塌(collapse)。顧名思義,即是說,低維度的 feature 在通過 ReLU 的時候,這個 feature 會像塌方了一樣,有一部分被毀掉了,或者說失去了。能恢復(fù)嗎?能,但是基本無法百分百還原了。


          具體表現(xiàn)出來就是:若是我們對一個 feature,先通過一個給定的變換規(guī)則 T,將它映射到它的 embedding space 中,再在該 embedding space 中,利用一個 ReLU 去處理該 feature,最后再把這個 feature 以同樣的變換規(guī)則(逆方向)給映射回原始空間,我們會發(fā)現(xiàn),這時,這個 feature 已經(jīng)變得連親媽都不認得了。如圖↓



           圖片來自《MobileNetV2: Inverted Residuals and Linear Bottlenecks》


          ReLU 這個東西,其實就是一個濾波器,只不過這個濾波器的作用域不是信號處理中的頻域,而是特征域。那么濾波器又有什么作用呢?維度壓縮,俗話說就是降維啦:如果我們有 m 個 feature 被送入 ReLU 層,過濾剩下 n 個(n<m),這不就是相當(dāng)于對 feature 的維度進行了壓縮,使其從 m 維變?yōu)?nbsp;n 維嘛。


          那么,為什么低維數(shù)據(jù)流經(jīng)非線性激活層會發(fā)生坍塌(信息丟失),而高維數(shù)據(jù)就不會呢?


          打個簡單但不嚴謹?shù)谋确剑捍蠹叶加羞^年搶高鐵票的經(jīng)驗吧?幾個人(維度低)幫你搶一張票,肯定沒有一群人(維度高)幫你搶一張票,成功的概率高啊。幾個人里面,大概率全軍覆沒,沒一個能幫上你忙的。而一群人里面,大概率總有那么一個手速驚人的單身青年,幫你搶到你心心念念的回家票。


          在數(shù)據(jù)上也是一個道理,維度低的 feature,分布到 ReLU 的激活帶上的概率小,因此經(jīng)過后信息丟失嚴重,甚至可能完全丟失。而維度高的 feature,分布到 ReLU 的激活帶上的概率大,雖然可能也會有信息的部分丟失,但是無傷大雅,大部分的信息仍然得以保留。所謂留得青山在,不愁沒柴燒嘛。更何況被 ReLU 截殺的信息,可能只是一些無用游民(冗余信息)。


          那么數(shù)據(jù)的坍塌,是個很嚴重的事嗎?


          那事兒可大了。如果把神經(jīng)網(wǎng)絡(luò)比作一個人的話,你這就是給它的某個部位的血管里,丟了個血栓。


          當(dāng)信息無法流過 ReLU 時,該神經(jīng)元的輸出就會變?yōu)?nbsp;0。而在反向傳播的過程中,ReLU 對 0 值的梯度為 0,即發(fā)生了梯度消失,這將導(dǎo)致神經(jīng)元的權(quán)重?zé)o法再通過梯度下降法進行更新,這種現(xiàn)象被稱為特征退化。所以這個神經(jīng)元相當(dāng)于死掉了,喪失了學(xué)習(xí)能力。我們說,一旦神經(jīng)元的輸出陷入 0 值,就無法恢復(fù)了。

           


          那么,我們應(yīng)該怎么去規(guī)避數(shù)據(jù)的坍塌呢?非線性激活層到底是個什么樣的東西?


          其實,對于一個數(shù)據(jù),利用非線性激活層對其進行激活,其實是從該數(shù)據(jù)的信息中提取出其潛在的稀疏性,但是這種提取的結(jié)果是否正確,就要分情況討論了。


          對于一個 M 維的數(shù)據(jù),我們可以將其看成是在 M 維空間中的一個 M 維流形(manifold)。而其中的有用信息,就是在該 M 維空間中的一個子空間(子空間的維度記為 N 維,N<=M)中的一個 N 維流形。非線性激活層相當(dāng)于壓縮了這個 M 維空間的維度(還記得前面提過的維度壓縮嗎?)。若是該 M 維空間中的 M 維流形本來就不含有冗余信息(M=N),那么再對其進行維度壓縮,必然導(dǎo)致信息的丟失。


          而維度低的數(shù)據(jù)其實就是這么一種情況:其信息的冗余度高的可能性本來就低,如果強行對其進行非線性激活(維度壓縮),則很有可能丟失掉有用信息,甚至丟失掉全部信息(輸出為全 0)。


          與非線性激活層不同的是,線性激活層并不壓縮特征空間的維度。于是,我們得到了一條使用激活層的原則


          1. 對含有冗余信息的數(shù)據(jù)使用非線性激活(如 ReLU),對不含冗余信息的數(shù)據(jù)使用線性激活(如一些線性變換)。

          2. 兩種類型的激活交替靈活使用,以同時兼顧非線性和信息的完整性。

          3. 由于冗余信息和非冗余信息所攜帶的有用信息是一樣多的,因此在設(shè)計網(wǎng)絡(luò)時,對內(nèi)存消耗大的結(jié)構(gòu)最好是用在非冗余信息上。


          根據(jù)以上的原則設(shè)計出來的結(jié)構(gòu),聰明的你想到了什么?ResNet。不得不贊嘆 Kaiming He 的天才,ResNet 這東西,描述起來固然簡單,但是對它的理解每深一層,就會愈發(fā)發(fā)現(xiàn)它的精妙及優(yōu)雅,從數(shù)學(xué)上解釋起來非常簡潔,非常令人信服,而且直切傳統(tǒng)痛點。


          ResNet 本質(zhì)上就干了一件事:降低數(shù)據(jù)中信息的冗余度


          具體說來,就是對非冗余信息采用了線性激活(通過 skip connection 獲得無冗余的 identity 部分),然后對冗余信息采用了非線性激活(通過 ReLU 對 identity 之外的其余部分進行信息提取 / 過濾,提取出的有用信息即是殘差)。

          其中,提取 identity 這一步,就是 ResNet 思想的核心


          從本文的觀點來看,因為從數(shù)據(jù)中拿掉了非冗余信息的 identity 部分,會導(dǎo)致余下部分的信息冗余度變高。這就像從接近飽和的溶液中移走了一部分溶質(zhì),會使得剩下的溶液的飽和度降低,一個道理。


          在這里也引用一下其他的一些觀點,方便大家可以從一個更全面的角度去看這個問題:


          從特征復(fù)用的觀點來看,提取 identity 部分,可以讓網(wǎng)絡(luò)不用再去學(xué)習(xí)一個 identity mapping(雖然是一樣的東西,但是畢竟又要從頭學(xué)起,講真,換你來試試,這其實真的不容易學(xué)到),而是直接學(xué)習(xí) residual。這就輕松愉快多了:站在巨人的肩膀上,做一點微小的工作什么的...


          既然說了 ResNet 解決的痛點,也順便多說幾句它帶來的好處:


          1. 由于 identity 之外的其余部分的信息冗余度較高,因此在對其使用 ReLU 進行非線性激活時,丟失的有用信息也會較少,ReLU 層輸出為 0 的可能性也會較低。這就降低了在反向傳播時 ReLU 的梯度消失的概率,從而便于網(wǎng)絡(luò)的加深,以大大地發(fā)揮深度網(wǎng)絡(luò)的潛能。

          2. 特征復(fù)用能加快模型的學(xué)習(xí)速度,因為參數(shù)的優(yōu)化收斂得快(從 identity 的基礎(chǔ)上直接學(xué)習(xí)殘差,總比從頭學(xué)習(xí)全部來得快)。


          最后是兩個小 tips:


          1. 如果一個信息可以完整地流過一個非線性激活層,則這個非線性激活層對于這個信息而言,相當(dāng)于僅僅作了一個線性激活。

          2. 解決由非線性激活導(dǎo)致的反向傳播梯度消失的竅門,就是要提高進行非線性激活的信息的冗余度。


          如果您覺得本文對您有所幫助,請高抬貴手點個贊~


          下載1:OpenCV-Contrib擴展模塊中文版教程
          在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學(xué)視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 41
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美激情人妻少妇中文字幕视频在线 | 美女草逼 | 国产精品不卡一卡二卡三卡四卡 | 学生妹一区二区三区四区 | 老汉色老汉首页aV亚洲 |