主頁 >  其他 > ResNet詳解與分析

ResNet詳解與分析

2020-09-15 20:16:17 其他

目錄

  • Resnet要解決的是什么問題
  • Residual Block的設計
  • ResNet 網路結構
  • error surface對比
  • Residual Block的分析與改進
  • 小結
  • 參考

博客:博客園 | CSDN | blog

Resnet要解決的是什么問題

ResNets要解決的是深度神經網路的“退化”問題,

什么是“退化”?

我們知道,對淺層網路逐漸疊加layers,模型在訓練集和測驗集上的性能會變好,因為模型復雜度更高了,表達能力更強了,可以對潛在的映射關系擬合得更好,而“退化”指的是,給網路疊加更多的層后,性能卻快速下降的情況,

訓練集上的性能下降,可以排除過擬合,BN層的引入也基本解決了plain net的梯度消失和梯度爆炸問題,如果不是過擬合以及梯度消失導致的,那原因是什么?

按道理,給網路疊加更多層,淺層網路的解空間是包含在深層網路的解空間中的,深層網路的解空間至少存在不差于淺層網路的解,因為只需將增加的層變成恒等映射,其他層的權重原封不動copy淺層網路,就可以獲得與淺層網路同樣的性能,更好的解明明存在,為什么找不到?找到的反而是更差的解?

顯然,這是個優化問題,反映出結構相似的模型,其優化難度是不一樣的,且難度的增長并不是線性的,越深的模型越難以優化,

有兩種解決思路,一種是調整求解方法,比如更好的初始化、更好的梯度下降演算法等;另一種是調整模型結構,讓模型更易于優化——改變模型結構實際上是改變了error surface的形態,

ResNet的作者從后者入手,探求更好的模型結構,將堆疊的幾層layer稱之為一個block,對于某個block,其可以擬合的函式為\(F(x)\),如果期望的潛在映射為\(H(x)\)與其讓\(F(x)\) 直接學習潛在的映射,不如去學習殘差\(H(x) - x\),即\(F(x) := H(x) - x\),這樣原本的前向路徑上就變成了\(F(x) + x\),用\(F(x)+x\)來擬合\(H(x)\)作者認為這樣可能更易于優化,因為相比于讓\(F(x)\)學習成恒等映射,讓\(F(x)\)學習成0要更加容易——后者通過L2正則就可以輕松實作,這樣,對于冗余的block,只需\(F(x)\rightarrow 0\)就可以得到恒等映射,性能不減,

Instead of hoping each few stacked layers directly fit a desired underlying mapping, we explicitly let these layers fit a residual mapping. Formally, denoting the desired underlying mapping as \(H(x)\), we let the stacked nonlinear layers fit another mapping of \(F(x) := H(x) - x\). The original mapping is recast into \(F(x)+x\). We hypothesize that it is easier to optimize the residual mapping than to optimize the original, unreferenced mapping. To the extreme, if an identity mapping were optimal, it would be easier to push the residual to zero than to fit an identity mapping by a stack of nonlinear layers.

—— from Deep Residual Learning for Image Recognition

下面的問題就變成了\(F(x)+x\) 該怎么設計了,

Residual Block的設計

\(F(x)+x\)構成的block稱之為Residual Block,即殘差塊,如下圖所示,多個相似的Residual Block串聯構成ResNet,

3uUio4.png

一個殘差塊有2條路徑\(F(x)\)\(x\)\(F(x)\)路徑擬合殘差,不妨稱之為殘差路徑,\(x\)路徑為identity mapping恒等映射,稱之為”shortcut”,圖中的\(\oplus\)為element-wise addition,要求參與運算的\(F(x)\)\(x\)的尺寸要相同,所以,隨之而來的問題是,

  • 殘差路徑如何設計?
  • shortcut路徑如何設計?
  • Residual Block之間怎么連接?

在原論文中,殘差路徑可以大致分成2種,一種有bottleneck結構,即下圖右中的\(1\times 1\) 卷積層,用于先降維再升維,主要出于降低計算復雜度的現實考慮,稱之為“bottleneck block”,另一種沒有bottleneck結構,如下圖左所示,稱之為“basic block”,basic block由2個\(3\times 3\)卷積層構成,bottleneck block由\(1\times 1\)

3K34c8.png

shortcut路徑大致也可以分成2種,取決于殘差路徑是否改變了feature map數量和尺寸,一種是將輸入\(x\)原封不動地輸出,另一種則需要經過\(1\times 1\)卷積來升維 or/and 降采樣,主要作用是將輸出與\(F(x)\)路徑的輸出保持shape一致,對網路性能的提升并不明顯,兩種結構如下圖所示,

https://d2l.ai/chapter_convolutional-modern/resnet.html

至于Residual Block之間的銜接,在原論文中,\(F(x)+x\)經過\(ReLU\)后直接作為下一個block的輸入\(x\)

對于\(F(x)\)路徑、shortcut路徑以及block之間的銜接,在論文Identity Mappings in Deep Residual Networks中有更進一步的研究,具體在文章后面討論,

ResNet 網路結構

ResNet為多個Residual Block的串聯,下面直觀看一下ResNet-34與34-layer plain net和VGG的對比,以及堆疊不同數量Residual Block得到的不同ResNet,

https://arxiv.org/abs/1512.03385

https://arxiv.org/abs/1512.03385

ResNet的設計有如下特點:

  • 與plain net相比,ResNet多了很多“旁路”,即shortcut路徑,其首尾圈出的layers構成一個Residual Block;
  • ResNet中,所有的Residual Block都沒有pooling層,降采樣是通過conv的stride實作的
  • 分別在conv3_1、conv4_1和conv5_1 Residual Block,降采樣1倍,同時feature map數量增加1倍,如圖中虛線劃定的block;
  • 通過Average Pooling得到最終的特征,而不是通過全連接層;
  • 每個卷積層之后都緊接著BatchNorm layer,為了簡化,圖中并沒有標出;

ResNet結構非常容易修改和擴展,通過調整block內的channel數量以及堆疊的block數量,就可以很容易地調整網路的寬度和深度,來得到不同表達能力的網路,而不用過多地擔心網路的“退化”問題,只要訓練資料足夠,逐步加深網路,就可以獲得更好的性能表現,

下面為網路的性能對比,

38EfB9.png

error surface對比

上面的實驗說明,不斷地增加ResNet的深度,甚至增加到1000層以上,也沒有發生“退化”,可見Residual Block的有效性,ResNet的動機在于認為擬合殘差比直接擬合潛在映射更容易優化,下面通過繪制error surface直觀感受一下shortcut路徑的作用,圖片截自Loss Visualization,

http://www.telesens.co/loss-landscape-viz/viewer.html

可以發現:

  • ResNet-20(no short)淺層plain net的error surface還沒有很復雜,優化也會很困難,但是增加到56層后復雜程度極度上升,對于plain net,隨著深度增加,error surface 迅速“惡化”
  • 引入shortcut后,error suface變得平滑很多,梯度的可預測性變得更好,顯然更容易優化

Residual Block的分析與改進

論文Identity Mappings in Deep Residual Networks進一步研究ResNet,通過ResNet反向傳播的理論分析以及調整Residual Block的結構,得到了新的結構,如下

https://arxiv.org/abs/1603.05027

注意,這里的視角與之前不同,這里將shortcut路徑視為主干路徑,將殘差路徑視為旁路,

新提出的Residual Block結構,具有更強的泛化能力,能更好地避免“退化”,堆疊大于1000層后,性能仍在變好,具體的變化在于

  • 通過保持shortcut路徑的“純凈”,可以讓資訊在前向傳播和反向傳播中平滑傳遞,這點十分重要,為此,如無必要,不引入\(1\times 1\)卷積等操作,同時將上圖灰色路徑上的ReLU移到了\(F(x)\)路徑上,
  • 在殘差路徑上,將BN和ReLU統一放在weight前作為pre-activation,獲得了“Ease of optimization”以及“Reducing overfitting”的效果,

下面具體解釋一下,

\(h(x_l)\)為shortcut路徑上的變換,\(f\)為addition之后的變換,原Residual Block中\(f=ReLU\)\(h\)\(f\)均為恒等映射時,可以得到任意兩層\(x_L\)\(x_l\)之間的關系,此時資訊可以在\(x_l\)\(x_L\)間無損直達,如下前向傳播中的\(x_l\)以及反向傳播中的\(1\)

\[\begin{aligned}\mathbf{y}_{l}&= h\left(\mathbf{x}_{l}\right)+\mathcal{F}\left(\mathbf{x}_{l}, \mathcal{W}_{l}\right) \\ \mathbf{x}_{l+1}&=f\left(\mathbf{y}_{l}\right) \\\mathbf{x}_{l+1}&=\mathbf{x}_{l}+\mathcal{F}\left(\mathbf{x}_{l}, \mathcal{W}_{l}\right) \\\mathbf{x}_{L}&=\mathbf{x}_{l}+\sum_{i=l}^{L-1} \mathcal{F}\left(\mathbf{x}_{i}, \mathcal{W}_{i}\right) \\\frac{\partial \mathcal{E}}{\partial \mathbf{x}_{l}}=\frac{\partial \mathcal{E}}{\partial \mathbf{x}_{L}} \frac{\partial \mathbf{x}_{L}}{\partial \mathbf{x}_{l}}&=\frac{\partial \mathcal{E}}{\partial \mathbf{x}_{L}}\left(1+\frac{\partial}{\partial \mathbf{x}_{l}} \sum_{i=l}^{L-1} \mathcal{F}\left(\mathbf{x}_{i}, \mathcal{W}_{i}\right)\right)\end{aligned} \]

反向傳播中的這個\(1\)具有一個很好的性質,任意兩層間的反向傳播,這一項都是\(1\),可以有效地避免梯度消失和梯度爆炸,如果\(h\)\(f\)不是恒等映射,就會讓這一項變得復雜,若是令其為一個大于或小于1的scale因子,反向傳播連乘后就可能導致梯度爆炸或消失,層數越多越明顯,這也是ResNet比highway network性能好的原因,需要注意的是,BN層解決了plain net的梯度消失和爆炸,這里的1可以避免short cut 路徑上的梯度消失和爆炸,

shortcut路徑將反向傳播由連乘形式變為加法形式,讓網路最終的損失在反向傳播時可以無損直達每一個block,也意味著每個block的權重更新都部分地直接作用在最終的損失上,看上面前向傳播的公式,可以看到某種ensemble形式,資訊雖然可以在任意兩層之間直達,但這種直達其實是隱含的,對某個block而言,它只能看到加法的結果,而不知道加法中每個加數是多數,從資訊通路上講尚不徹底——由此也誕生了DenseNet

對于殘差路徑的改進,作者進行了不同的對比實驗,最終得到了將BN和ReLU統一放在weight前的full pre-activation結構

https://arxiv.org/abs/1603.05027

小結

ResNet的動機在于解決“退化”問題,殘差塊的設計讓學習恒等映射變得容易,即使堆疊了過量的block,ResNet可以讓冗余的block學習成恒等映射,性能也不會下降,所以,網路的“實際深度”是在訓練程序中決定的,即ResNet具有某種深度自適應的能力,

深度自適應能解釋不會“退化”,但為什么可以更好?

通過可視化error surface,我們看到了shortcut的平滑作用,但這只是結果,背后的根由是什么?

也許徹底搞懂ResNet還需要進一步地研究,但已有很多不同的理解角度,

  • 微分方程的角度,A Proposal on Machine Learning via Dynamical Systems
  • ensemble的角度,Residual Networks Behave Like Ensembles of Relatively Shallow Networks
  • 資訊/梯度通路的角度,Identity Mappings in Deep Residual Networks
  • 類比泰勒展開、類比小波……

通過不同側面嘗試解釋,能獲得對ResNet更深刻更全面的認識,限于篇幅,本文不再展開,以上,

PS:實際是筆者還沒整理出清晰完整的思路(逃

參考

  • paper: Deep Residual Learning for Image Recognition
  • paper: Identity Mappings in Deep Residual Networks
  • Loss Visualization
  • blog: ResNet, torchvision, bottlenecks, and layers not as they seem
  • code: pytorch-resnet
  • Residual Networks (ResNet)
  • code: resnet-1k-layers/resnet-pre-act.lua

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/49915.html

標籤:其他

上一篇:AB實驗人群定向HTE模型5 - Meta Learner

下一篇:淺析word2vec(一)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more