国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

這篇具有很好參考價值的文章主要介紹了學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

學習時間:2022.04.10~2022.04.12

3. 卷積神經(jīng)網(wǎng)絡CNN

CNN(Convolutional Neural Networks, ConvNets, 卷積神經(jīng)網(wǎng)絡)是神經(jīng)網(wǎng)絡的一種,是理解圖像內(nèi)容的最佳學習算法之一,并且在圖像分割、分類、檢測和檢索相關任務中表現(xiàn)出色。

3.1 卷積神經(jīng)網(wǎng)絡的概念

3.1.1 什么是CNN?

CNN是一種帶有卷積結構的前饋神經(jīng)網(wǎng)絡,卷積結構可以減少深層網(wǎng)絡占用的內(nèi)存量,其中三個關鍵操作——局部感受野、權值共享、池化層,有效的減少了網(wǎng)絡的參數(shù)個數(shù),緩解了模型的過擬合問題。

卷積層和池化層一般會取若干個,采用卷積層和池化層交替設置,即一個卷積層連接一個池化層,池化層后再連接一個卷積層,依此類推。由于卷積層中輸出特征圖的每個神經(jīng)元與其輸入進行局部連接,并通過對應的連接權值與局部輸入進行加權求和再加上偏置值,得到該神經(jīng)元輸入值,該過程等同于卷積過程,CNN也由此而得名1

**與ANN(Artificial Neural Networks,人工神經(jīng)網(wǎng)絡)的區(qū)別:**上一節(jié)所學習的MLP、BP,就是ANN。ANN通過調(diào)整內(nèi)部神經(jīng)元與神經(jīng)元之間的權重關系,從而達到處理信息的目的。而在CNN中,其全連接層就是就是MLP,只不過在前面加入了卷積層和池化層。

CNN主要應用于圖像識別(計算機視覺,CV),應用有:圖像分類和檢索、目標定位檢測、目標分割、人臉識別、骨骼識別和追蹤,具體可見MNIST手寫數(shù)據(jù)識別、貓狗大戰(zhàn)、ImageNet LSVRC等,還可應用于自然語言處理和語音識別。

3.1.2 為什么要用CNN?

總的來說,是為了解決兩個難題:① 圖像需要處理的數(shù)據(jù)量太大,導致成本很高,效率很低;② 圖像在數(shù)字化的過程中很難保留原有的特征,導致圖像處理的準確率不高。

  • 原因1:圖像很大(全連接BP神經(jīng)網(wǎng)絡的缺點)

補充:圖像的數(shù)據(jù)結構

首先了解:計算機存儲圖片,實際是存儲了一個 W × H × D W×H×D W×H×D的數(shù)組( W , H , D W, H, D W,H,D分別表示寬、高、維數(shù),彩色圖片包含RGB三維<紅、綠、藍三種顏色通道>)。每一個數(shù)字對應一個像素的亮度。

在黑白圖像中,我們只需要一個矩陣。每個矩陣都存儲0到255之間的值。這個范圍是存儲圖像信息的效率(256之內(nèi)的值正好可以用一個字節(jié)表達)和人眼的敏感度(我們區(qū)分有限數(shù)量的相同顏色灰度值)之間的折衷。

目前用于計算機視覺問題的圖像通常為224x224甚至更大,而如果處理彩色圖片則又需加入3個顏色通道(RGB),即224x224x3。

如果構建一個BP神經(jīng)網(wǎng)絡,其要處理的像素點就有224x224x3=150528個,也就是需要處理150528個輸入權重,而如果這個網(wǎng)絡的隱藏層有1024個節(jié)點(這種網(wǎng)絡中的典型隱藏層可能有1024個節(jié)點),那么,僅第一層隱含層我們就必須訓練150528x1024=15億個權重。這幾乎是不可能完成訓練的,更別說還有更大的圖片了。

  • 原因2:位置可變

如果你訓練了一個網(wǎng)絡來檢測狗,那么無論圖像出現(xiàn)在哪張照片中,你都希望它能夠檢測到狗。

如果構建一個BP神經(jīng)網(wǎng)絡,則需要把輸入的圖片“展平”(即把這個數(shù)組變成一列,然后輸入神經(jīng)網(wǎng)絡進行訓練)。但這破壞了圖片的空間信息。想象一下,訓練一個在某個狗圖像上運行良好的網(wǎng)絡,然后為它提供相同圖像的略微移位版本,此時的網(wǎng)絡可能就會有完全不同的反應。

并且,有相關研究表明,人類大腦在理解圖片信息的過程中,并不是同時觀察整個圖片,而是更傾向于觀察部分特征,然后根據(jù)特征匹配、組合,最后得出整圖信息。CNN用類似視覺的方式保留了圖像的特征,當圖像做翻轉,旋轉或者變換位置時,它也能有效的識別出來是類似的圖像。

換句話說,在BP全連接神經(jīng)網(wǎng)絡中,隱含層每一個神經(jīng)元,都對輸入圖片 每個像素點 做出反應。這種機制包含了太多冗余連接。為了減少這些冗余,只需要每個隱含神經(jīng)元,對圖片的一小部分區(qū)域,做出反應就好了。而卷積神經(jīng)網(wǎng)絡,正是基于這種想法而實現(xiàn)的。

3.1.3 人類的視覺原理

深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。

人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細胞發(fā)現(xiàn)邊緣和方向),然后抽象(大腦判定,眼前的物體的形狀,是圓形的),然后進一步抽象(大腦進一步判定該物體是只氣球)。

對于不同的物體,人類視覺也是通過這樣逐層分級,來進行認知的:

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

我們可以看到,在最底層特征基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特征(輪子、眼睛、軀干等),到最上層,不同的高級特征最終組合成相應的圖像,從而能夠讓人類準確的區(qū)分不同的物體。

那么我們可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經(jīng)網(wǎng)絡,較低層的識別初級的圖像特征,若干底層特征組成更上一層特征,最終通過多個層級的組合,最終在頂層做出分類呢?

答案是肯定的,這也是許多深度學習算法(包括CNN)的靈感來源。

通過學習,卷積層可以學習到邊緣(顏色變化的分界線)、斑塊(局部的塊狀區(qū)域)及其他“高級”信息;隨著層次加深,提取的信息(正確地講,是反映強烈的神經(jīng)元)也越來越抽象,神經(jīng)元從簡單的形狀向“高級”信息變化。

3.2 CNN的基本原理

3.2.1 主要結構

CNN主要包括以下結構:

  • 輸入層(Input layer):輸入數(shù)據(jù);
  • 卷積層(Convolution layer,CONV):使用卷積核進行特征提取和特征映射;
  • 激活層:非線性映射(ReLU)
  • 池化層(Pooling layer,POOL):進行下采樣降維;
  • 光柵化(Rasterization):展開像素,與全連接層全連接,某些情況下這一層可以省去;
  • 全連接層(Affine layer / Fully Connected layer,FC):在尾部進行擬合,減少特征信息的損失;
  • 激活層:非線性映射(ReLU)
  • 輸出層(Output layer):輸出結果。

其中,卷積層、激活層和池化層可疊加重復使用,這是CNN的核心結構。

在經(jīng)過數(shù)次卷積和池化之后,最后會先將多維的數(shù)據(jù)進行“扁平化”,也就是把(height,width,channel)的數(shù)據(jù)壓縮成長度為height × width × channel的一維數(shù)組,然后再與FC層連接,這之后就跟普通的神經(jīng)網(wǎng)絡無異了。

3.2.2 卷積層(Convolution layer)

卷積層由一組濾波器組成,濾波器為三維結構,其深度由輸入數(shù)據(jù)的深度決定,一個濾波器可以看作由多個卷積核堆疊形成。這些濾波器在輸入數(shù)據(jù)上滑動做卷積運算,從輸入數(shù)據(jù)中提取特征。在訓練時,濾波器上的權重使用隨機值進行初始化,并根據(jù)訓練集進行學習,逐步優(yōu)化。

1. 卷積運算
  • 卷積核(Kernel)

    • 卷積運算是指以一定間隔滑動卷積核的窗口,將各個位置上卷積核的元素和輸入的對應元素相乘,然后再求和(有時將這個計算稱為乘積累加運算),將這個結果保存到輸出的對應位置。卷積運算如下所示:

      對于一張圖像,卷積核從圖像最始端,從左往右、從上往下,以一個像素或指定個像素的間距依次滑過圖像的每一個區(qū)域。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

  • 卷積核大小( f × f f×f f×f)也可以變化,比如 1 × 1 、 5 × 5 1×1、5×5 1×1、5×5等,此時需要根據(jù)卷積核的大小來調(diào)節(jié)填充尺寸(Padding Size)。一般來說,卷積核尺寸取奇數(shù)(因為我們希望卷積核有一個中心,便于處理輸出)。卷積核尺寸為奇數(shù)時,填充尺寸可以根據(jù)以下公式確定: P a d d i n g S i z e = f ? 1 2 Padding Size = \frac{f-1}{2} PaddingSize=2f?1?。

    可以把卷積核理解為權重。每一個卷積核都可以當做一個“特征提取算子”,把一個算子在原圖上不斷滑動,得出的濾波結果就被叫做“特征圖”(Feature Map),這些算子被稱為“卷積核”(Convolution Kernel)。我們不必人工設計這些算子,而是使用隨機初始化,來得到很多卷積核,然后通過反向傳播優(yōu)化這些卷積核,以期望得到更好的識別結果。

  • 填充/填白(Padding)

    • 在進行卷積層的處理之前,有時要向輸入數(shù)據(jù)的周圍填入固定的數(shù)據(jù)(比如0等),使用填充的目的是調(diào)整輸出的尺寸,使輸出維度和輸入維度一致;

      如果不調(diào)整尺寸,經(jīng)過很多層卷積之后,輸出尺寸會變的很小。所以,為了減少卷積操作導致的,邊緣信息丟失,我們就需要進行填充(Padding)。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

  • 步幅/步長(Stride)

    • 即卷積核每次滑動幾個像素。前面我們默認卷積核每次滑動一個像素,其實也可以每次滑動2個像素。其中,每次滑動的像素數(shù)稱為“步長”,步長為2的卷積核計算過程如下;

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

  • 若希望輸出尺寸比輸入尺寸小很多,可以采取增大步幅的措施。但是不能頻繁使用步長為2,因為如果輸出尺寸變得過小的話,即使卷積核參數(shù)優(yōu)化的再好,也會必可避免地丟失大量信息;

  • 如果用 f f f表示卷積核大小, s s s表示步長, w w w表示圖片寬度, h h h表示圖片高度,那么輸出尺寸可以表示為:
    w o u t = w + 2 × P a d d i n g ? S i z e ? f s + 1 h o u t = h + 2 × P a d d i n g ? S i z e ? f s + 1 w_{out} = \frac{w+2×Padding\ Size - f}{s} + 1\\ h_{out} = \frac{h+2×Padding\ Size - f}{s} + 1 wout?=sw+2×Padding?Size?f?+1hout?=sh+2×Padding?Size?f?+1

  • 濾波器(Filter)

    • 卷積核(算子)是二維的權重矩陣;而濾波器(Filter)是多個卷積核堆疊而成的三維矩陣。

      在只有一個通道(二維)的情況下,“卷積核”就相當于“filter”,這兩個概念是可以互換的

    • 上面的卷積過程,沒有考慮彩色圖片有RGB三維通道(Channel),如果考慮RGB通道,那么每個通道都需要一個卷積核,只不過計算的時候,卷積核的每個通道在對應通道滑動,三個通道的計算結果相加得到輸出。即:每個濾波器有且只有一個輸出通道。

      當濾波器中的各個卷積核在輸入數(shù)據(jù)上滑動時,它們會輸出不同的處理結果,其中一些卷積核的權重可能更高,而它相應通道的數(shù)據(jù)也會被更加重視,濾波器會更關注這個通道的特征差異。

  • 偏置

    • 最后,偏置項和濾波器一起作用產(chǎn)生最終的輸出通道。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

多個filter也是一樣的工作原理:如果存在多個filter,這時我們可以把這些最終的單通道輸出組合成一個總輸出,它的通道數(shù)就等于filter數(shù)。這個總輸出經(jīng)過非線性處理后,繼續(xù)被作為輸入饋送進下一個卷積層,然后重復上述過程。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

因此,這部分一共4個超參數(shù):濾波器數(shù)量 K K K,濾波器大小 F F F,步長 S S S,零填充大小 P P P。

2. 卷積的三種模式

其實這三種不同模式是對卷積核移動范圍的不同限制。

  • **Full Mode:**從卷積核和圖像剛相交時開始做卷積,白色部分填0。

  • **Same Mode:**當卷積核中心(K)與圖像的邊角重合時,開始做卷積運算,白色部分填0。可見其運動范圍比Full模式小了一圈。

    注意:這里的same還有一個意思,卷積之后輸出的feature map尺寸保持不變(相對于輸入圖片)。當然,same模式不代表完全輸入輸出尺寸一樣,也跟卷積核的步長有關系。same模式也是最常見的模式,因為這種模式可以在前向傳播的過程中讓特征圖的大小保持不變,調(diào)參師不需要精準計算其尺寸變化(因為尺寸根本就沒變化)。

  • **Valid Mode:**當卷積核全部在圖像里面時,進行卷積運算,可見其移動范圍較Same更小了。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

3. 卷積的本質

本部分主要來源:CNN常用卷積方法一覽 。

追本溯源,我們先回到數(shù)學教科書中來看卷積。在泛函分析中,卷積也叫旋積或者褶積,是一種通過兩個函數(shù) x ( t ) x(t) x(t) h ( t ) h(t) h(t)生成的數(shù)學算子。其計算公式如下:
連 續(xù) 形 式 : x ( t ) h ( t ) ( τ ) = ∫ ? ∞ + ∞ x ( τ ) h ( τ ? t ) d t 離 散 形 式 : x ( t ) h ( t ) ( τ ) = ∑ τ = ? ∞ ∞ x ( τ ) h ( τ ? t ) 連續(xù)形式:x(t)h(t)(τ) = \int^{+∞}_{-∞}x(τ)h(τ-t)dt\\ 離散形式:x(t)h(t)(τ) = \sum^{∞}_{τ=-∞}x(τ)h(τ-t) 續(xù)x(t)h(t)(τ)=?+?x(τ)h(τ?t)dtx(t)h(t)(τ)=τ=??x(τ)h(τ?t)
兩個函數(shù)的卷積就是先將一個函數(shù)進行翻轉(Reverse),然后再做一個平移(Shift),這便是""的含義。而""就是將平移后的兩個函數(shù)對應元素相乘求和。所以卷積本質上就是一個Reverse-Shift-Weighted Summation的操作。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

卷積能夠更好提取區(qū)域特征,使用不同大小的卷積算子能夠提取圖像各個尺度的特征。卷積在信號處理、圖像處理等領域有著廣泛的應用。

3.2.3 池化層(Pooling layer)

池化(Pooling),有的地方也稱匯聚,實際是一個下采樣(Down-sample)過程,用來縮小高、長方向的尺寸,減小模型規(guī)模,提高運算速度,同時提高所提取特征的魯棒性。簡單來說,就是為了提取一定區(qū)域的主要特征,并減少參數(shù)數(shù)量,防止模型過擬合。

池化層通常出現(xiàn)在卷積層之后,二者相互交替出現(xiàn),并且每個卷積層都與一個池化層一一對應。

常用的池化函數(shù)有:平均池化(Average Pooling / Mean Pooling)、最大池化(Max Pooling)、最小池化(Min Pooling)和隨機池化(Stochastic Pooling)等,其中3種池化方式展示如下。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

三種池化方式各有優(yōu)缺點,均值池化是對所有特征點求平均值,而最大值池化是對特征點的求最大值。而隨機池化則介于兩者之間,通過對像素點按數(shù)值大小賦予概率,再按照概率進行亞采樣,在平均意義上,與均值采樣近似,在局部意義上,則服從最大值采樣的準則。

根據(jù)Boureau理論2可以得出結論,在進行特征提取的過程中,均值池化可以減少鄰域大小受限造成的估計值方差,但更多保留的是圖像背景信息;而最大值池化能減少卷積層參數(shù)誤差造成估計均值誤差的偏移,能更多的保留紋理信息。隨機池化雖然可以保留均值池化的信息,但是隨機概率值確是人為添加的,隨機概率的設置對結果影響較大,不可估計。

池化操作也有一個類似卷積核一樣東西在特征圖上移動,書中叫它池化窗口3,所以這個池化窗口也有大小,移動的時候有步長,池化前也有填充操作。因此,池化操作也有核大小 f f f、步長 s s s和填充 p p p參數(shù),參數(shù)意義和卷積相同。Max池化的具體操作如下(池化窗口為 2 × 2 2×2 2×2,無填充,步長為 2 2 2):

一般來說,池化的窗口大小會和步長設定相同的值。

池化層有三個特征:

  • 沒有要學習的參數(shù),這和池化層不同。池化只是從目標區(qū)域中取最大值或者平均值,所以沒有必要有學習的參數(shù)。
  • 通道數(shù)不發(fā)生改變,即不改變Feature Map的數(shù)量。
  • 它是利用圖像局部相關性的原理,對圖像進行子抽樣,這樣對微小的位置變化具有魯棒性——輸入數(shù)據(jù)發(fā)生微小偏差時,池化仍會返回相同的結果。

3.2.4 激活層

即使用激活函數(shù),在模型中引入非線性。具體的函數(shù)介紹,可以看第一篇:學習筆記:深度學習(1)——基礎概念和激活函數(shù)。

3.2.5 光柵化

光柵化(Rasterization):為了與傳統(tǒng)的多層感知器MLP全連接,把上一層的所有Feature Map的每個像素依次展開,排成一列。某些情況下這一層可以省去。

光柵化是把頂點數(shù)據(jù)轉換為片元的過程,具有將圖轉化為一個個柵格組成的圖象的作用,特點是每個元素對應幀緩沖區(qū)中的一像素。

3.2.6 全連接層

即接上傳統(tǒng)的神經(jīng)網(wǎng)絡,可以看第二篇:學習筆記:深度學習(2)——BP神經(jīng)網(wǎng)絡。

3.2.7 反向傳播

任何嘗試過從頭編寫自己的神經(jīng)網(wǎng)絡代碼的人都知道,完成正向傳播還沒有完成整個算法流程的一半。真正的樂趣在于你想要進行反向傳播得到時候。

反向傳播的BP算法原理同樣可以看第二篇:學習筆記:深度學習(2)——BP神經(jīng)網(wǎng)絡。

多層感知機反向傳播的數(shù)學推導,主要是用數(shù)學公式來進行表示的,在全連接神經(jīng)網(wǎng)絡中,它們并不復雜,即使是純數(shù)學公式也比較好理解,而卷積神經(jīng)網(wǎng)絡的反向傳播相對比較復雜。

  • 池化層的反向傳播

池化層的反向傳播比較容易理解,我們以最大池化舉例:

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

上圖中,池化后的數(shù)字6對應于池化前的紅色區(qū)域,實際上只有紅色區(qū)域中最大值數(shù)字6對池化后的結果有影響,權重為1,而其它的數(shù)字對池化后的結果影響都為0。假設池化后數(shù)字6位置的誤差為 δ δ δ,反向傳播回去時,紅色區(qū)域中最大值對應的位置誤差即等于 δ δ δ,而其它3個位置對應的誤差為0。

因此,在卷積神經(jīng)網(wǎng)絡最大池化前向傳播時,不僅要記錄區(qū)域的最大值,同時也要記錄下來區(qū)域最大值的位置,方便誤差的反向傳播。

而平均池化就更簡單了,由于平均池化時,區(qū)域中每個值對池化后結果貢獻的權重都為區(qū)域大小的倒數(shù),所以反向傳播回來時,在區(qū)域每個位置的誤差都為池化后誤差除以區(qū)域的大小。

  • 卷積層的反向傳播

雖然卷積神經(jīng)網(wǎng)絡的卷積運算是一個三維張量的圖片和一個四維張量的卷積核進行卷積運算,但最核心的計算只涉及二維卷積,因此我們先從二維的卷積運算來進行分析:

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

如上圖所示,我們求原圖A處的誤差,就先分析,它在前向傳播中影響了下一層的哪些結點。顯然,它只對結點C有一個權重為B的影響,對卷積結果中的其它結點沒有任何影響。因此A的誤差應該等于C點的誤差乘上權重B。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

我們現(xiàn)在將原圖A點位置移動一下,則A點以權重C影響了卷積結果的D點,以權重B影響了卷積結果的E點。那它的誤差就等于D點誤差乘上C加上E點的誤差乘上B。大家可以嘗試用相同的方法去分析原圖中其它結點的誤差,結果會發(fā)現(xiàn),原圖的誤差,等于卷積結果的delta誤差經(jīng)過零填充后,與卷積核旋轉180度后的卷積。

目前的結論還只是基于二維卷積,我們還需要把它推廣到我們卷積神經(jīng)網(wǎng)絡中張量的卷積中去。再回顧一下張量的卷積,后一層的每個通道都是由前一層的各個通道經(jīng)過卷積再求和得到的。第 Ⅰ Ⅰ 層的通道1通過卷積影響了第 Ⅰ + 1 Ⅰ+1 +1層的通道1和通道2,那么求第 Ⅰ Ⅰ 層通道1的誤差時,就應該根據(jù)求得的二維卷積的誤差傳播方式,將第 Ⅰ + 1 Ⅰ+1 +1層通道1和通道2的誤差傳播到第 Ⅰ Ⅰ 層的誤差進行簡單求和即可。

總結卷積神經(jīng)網(wǎng)絡的訓練過程:

  1. 對神經(jīng)網(wǎng)絡進行初始化,定義好網(wǎng)絡結構,設定好激活函數(shù),對卷積層的卷積核 W W W、偏置 b b b進行隨機初試化,對全連接層的權重矩陣 W W W和偏置 b b b進行隨機初始化。
    設置好訓練的最大迭代次數(shù),每個訓練 b a t c h batch batch的大小,學習率 η η η。

  2. 從訓練數(shù)據(jù)中取出一個 b a t c h batch batch的數(shù)據(jù),然后從該 b a t c h batch batch數(shù)據(jù)中取出一個數(shù)據(jù),包括輸入 x x x以及對應的正確標注 y y y。

  3. 將輸入 x x x送入神經(jīng)網(wǎng)絡的輸入端,得到神經(jīng)網(wǎng)絡各層輸出參數(shù) z l z^l zl a l a^l al。

  4. 根據(jù)神經(jīng)網(wǎng)絡的輸出和標注值 y y y計算神經(jīng)網(wǎng)絡的損失函數(shù) L o s s Loss Loss

  5. 計算損失函數(shù) L o s s Loss Loss對輸出層的誤差 δ L δ^L δL。

  6. 利用相鄰層之間誤差的遞推公式求得每一層的誤差:

    • 如果是全連接層: δ l = σ ′ ? z l = ( W l + 1 ) T ? δ l + 1 δ^l = σ'·z^l = (W^{l+1})^T·δ^{l+1} δl=σ?zl=(Wl+1)T?δl+1
    • 如果是卷積層: δ l = σ ′ ? z l = δ l + 1 ? R O T 180 ( w l + 1 ) δ^l = σ'·z^l = δ^{l+1}·ROT180(w^{l+1}) δl=σ?zl=δl+1?ROT180(wl+1);
    • 如果是池化層: δ l = σ ′ ? z l = u p s a m p l e ( δ l + 1 ) δ^l = σ'·z^l = upsample(δ^{l+1}) δl=σ?zl=upsample(δl+1)。
  7. 利用每一層的delta誤差求出損失函數(shù)對該層參數(shù)的導數(shù):

    • 如果是全連接層: ? C ? W l = δ l ( a l ? 1 ) T , ? ? C ? b l = δ l \frac{?C}{?W^l} = δ^l(a^{l-1})^T, \ \frac{?C}{?b^l} = δ^l ?Wl?C?=δl(al?1)T,??bl?C?=δl;
    • 如果是卷積層: ? C ? w l = δ l ? σ ( z l ? 1 ) , ? ? C ? b l = ∑ x ∑ y δ l \frac{?C}{?w^l} = δ^l·σ(z^{l-1}), \ \frac{?C}{?b^l} = \sum_x\sum_yδ^l ?wl?C?=δl?σ(zl?1),??bl?C?=x?y?δl。
  8. 將求得的導數(shù)加到該 b a t c h batch batch數(shù)據(jù)求得的導數(shù)之和上(初始化為0),跳轉到步驟3,直到該 b a t c h batch batch數(shù)據(jù)都訓練完畢。

  9. 利用一個 b a t c h batch batch數(shù)據(jù)求得的導數(shù)之和,根據(jù)梯度下降法對參數(shù)進行更新:

    W l = W l ? η b a t c h _ s i z e ∑ ? C ? W l W^l = W^l - \frac{η}{batch\_size}\sum\frac{?C}{?W^l} Wl=Wl?batch_sizeη??Wl?C? b l = b l ? η b a t c h _ s i z e ∑ ? C ? b l b^l = b^l - \frac{η}{batch\_size}\sum\frac{?C}{?b^l} bl=bl?batch_sizeη??bl?C?。

  10. 跳轉到步驟2,直到達到指定的迭代次數(shù)。

3.2.8 CNN的特點

卷積神經(jīng)網(wǎng)絡相比于其他傳統(tǒng)神經(jīng)網(wǎng)絡的特殊性主要在于權值共享局部連接兩個方面。

補充:卷積仍是線性變換(來源:什么是深度學習的卷積?):

盡管上文已經(jīng)講解了卷積層的機制,但我們還無法解釋為什么卷積可以進行縮放,以及它在圖像數(shù)據(jù)上的處理效果為什么會那么好。假設我們有一個4×4的輸入,目標是把它轉換成2×2的輸出。

這時,如果我們用的是前饋網(wǎng)絡,我們會把這個4×4的輸入重新轉換成一個長度為16的向量,然后把這16個值輸入一個有4個輸出的密集連接層中。下面是這個層的權重矩陣W:

雖然卷積的卷積核操作看起來很奇怪,但它仍然是一個帶有等效變換矩陣的線性變換。如果我們在重構的4×4輸入上使用一個大小為3的卷積核K,那么這個等效矩陣會變成:

可以發(fā)現(xiàn),整個卷積仍然是線性變換,但與此同時,它也是一種截然不同的變換。相比前饋網(wǎng)絡的64個參數(shù),卷積得到的9個參數(shù)可以多次重復使用。由于權重矩陣中包含大量0權重,我們只會在每個輸出節(jié)點看到選定數(shù)量的輸入(卷積核的輸入)。

而更高效的是,卷積的預定義參數(shù)可以被視為權重矩陣的先驗。當我們使用預訓練模型進行圖像分類時,我們可以把預先訓練的網(wǎng)絡參數(shù)作為當前的網(wǎng)絡參數(shù),并在此基礎上訓練自己的特征提取器。這會大大節(jié)省時間。

從這個意義上講,雖然同為線性變換,卷積相比前饋網(wǎng)絡的優(yōu)勢就可以被解釋了。和隨機初始化不同,使用預訓練的參數(shù)允許我們只需要優(yōu)化最終全連接層的參數(shù),這意味著更好的性能。而大大削減參數(shù)數(shù)量則意味著更高的效率。

1. 局部連接/連接剪枝/稀疏連接(Sparse Connectivity)

1962年,Hubel和Wiesel4研究生物神經(jīng)學里面的視覺分層結構而提出感受野的概念,大腦皮層的視覺神經(jīng)元就是基于局部區(qū)域刺激來感知信息的。局部區(qū)域連接的思想就是受啟發(fā)于視覺神經(jīng)元的結構。

在傳統(tǒng)的神經(jīng)網(wǎng)絡結構中,神經(jīng)元之間的連接是全連接的,即n-1層的神經(jīng)元與n層的所有神經(jīng)元全部連接,所以輸出的任何一個單元,都要受輸入的所有的單元的影響,這樣無形中會對圖像的識別效果大打折扣;但是在卷積神經(jīng)網(wǎng)絡中,輸出圖像中的任何一個單元,只跟輸入圖像的一部分有關系,連接數(shù)成倍的減少,相應的參數(shù)也會減少。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

2. 權值共享/參數(shù)共享(Parameters Sharing)

本部分主要來源:卷積神經(jīng)網(wǎng)絡綜述。

1998年,LeCun5發(fā)布了LeNet-5網(wǎng)絡架構,權值共享這個詞最開始是由LeNet-5模型提出來的。雖然現(xiàn)在大多數(shù)人認為,2012年的AlexNet網(wǎng)絡6是深度學習的開端,但是CNN的開端可以追溯到LeNet-5模型。LeNet-5模型的幾個特性在2010年初的卷積神經(jīng)網(wǎng)絡研究中被廣泛的使用,其中一個就是權值共享。

在卷積神經(jīng)網(wǎng)絡中,卷積層中的卷積核(或稱之為濾波器)類似于一個滑動窗口,在整個輸入圖像中以特定的步長來回滑動,經(jīng)過卷積運算之后,從而得到輸入圖像的特征圖,這個特征圖就是卷積層提取出來的局部特征,而這個卷積核是共享參數(shù)的。在整個網(wǎng)絡的訓練過程中,包含權值的卷積核也會隨之更新,直到訓練完成。

  • 什么是權值共享?
    • 其實權值共享就是整張圖片在使用同一個卷積核內(nèi)的參數(shù)。比如一個331的卷積核,這個卷積核內(nèi)9個的參數(shù)被整張圖片共享,而不會因為圖像內(nèi)位置的不同而改變卷積核內(nèi)的權系數(shù)。說的再通俗一點,就是用一個卷積核不改變其內(nèi)權系數(shù)的情況下卷積處理整張圖片。
    • 當然,CNN中每一個卷積層不會只有一個卷積核的,這樣說只是為了方便解釋。
  • 權值共享的優(yōu)點?
    • 權值共享的卷積操作保證了每一個像素都有一個權重系數(shù),只是這些系數(shù)被整個圖片共享,因此大大減少了卷積核中參數(shù)量,降低了網(wǎng)絡的復雜度;
    • 傳統(tǒng)的神經(jīng)網(wǎng)絡和機器學習方法需要對圖像進行復雜的預處理提取特征,將得到特征再輸入到神經(jīng)網(wǎng)絡中。而加入卷積操作就可以利用圖片空間上的局部相關性,自動的提取特征;
    • 同樣,由于filter的參數(shù)共享,即使圖片進行了一定的平移操作,我們照樣可以識別出特征,這叫做 “平移不變性”。因此,模型就更加穩(wěn)健了。
  • 為什么卷積層會有多個卷積核?
    • 因為權值共享意味著每一個卷積核只能提取到一種特征,為了增加CNN的表達能力,需要設置多個卷積核。但是,每個卷積層中卷積核/濾波器的個數(shù)是一個超參數(shù)。
3. 感受野(Receptive Field)——CNN的可視化

無論是什么CNN架構,它們的基本設計就是不斷壓縮圖像的高和寬,同時增加通道數(shù)量,也就是深度。局部性影響的是臨近層的輸入輸出觀察區(qū)域,而感受野決定的則是整個網(wǎng)絡原始輸入的觀察區(qū)域

**感受野(Receptive Field)**的定義是卷積神經(jīng)網(wǎng)絡每一層輸出的特征圖(feature map)上的像素點在輸入圖片上映射的區(qū)域大小。即:神經(jīng)網(wǎng)絡中神經(jīng)元“看到的”輸入?yún)^(qū)域,在卷積神經(jīng)網(wǎng)絡中,feature map上某個元素的計算受輸入圖像上某個區(qū)域的影響,這個區(qū)域即該元素的感受野。再通俗點的解釋是,特征圖上的一個點對應輸入圖上的區(qū)域,如圖所示。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

把stride調(diào)整為2后,卷積得到的輸出大大縮小。這時,如果我們在這個輸出的基礎上做非線性激活,然后再上面再加一個卷積層,有趣的事就發(fā)生了。相比正常卷積得到的輸出,3×3卷積核在這個步幅卷積輸出上的感受野更大。如下圖所示:

這是因為它的原始輸入?yún)^(qū)域就比正常卷積的輸入?yún)^(qū)域大,這種感受野的擴大允許卷積層將低級特征(線條、邊緣)組合成更高級別的特征(曲線、紋理),正如我們在mixed3a層中看到的那樣。而隨著我們添加更多Stride層,網(wǎng)絡會顯示出更多高級特征,如mixed4a、mixed5a。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

通過檢測低級特征,并使用它們來檢測更高級別的特征,使其在視覺層次結構中向前發(fā)展,最終能夠檢測到整個視覺概念,如面部,鳥類,樹木等。這就是卷積在圖像數(shù)據(jù)上如此強大、高效的一個原因。

感受野的具體計算可以參考:[徹底搞懂感受野的含義與計算](https://www.cnblogs.com/shine-lee/p/12069176.html#:~:text=感受野(Receptive,Field),指的是神經(jīng)網(wǎng)絡中神經(jīng)元“看到的”輸入?yún)^(qū)域,在卷積神經(jīng)網(wǎng)絡中,feature map上某個元素的計算受輸入圖像上某個區(qū)域的影響,這個區(qū)域即該元素的感受野。)。

3.2.9 CNN泛化能力提高技巧

  • 增加神經(jīng)網(wǎng)絡深度;

  • 修改激活函數(shù),使用較多的是ReLU激活函數(shù);

  • 調(diào)整權重初始化技術,一般來說,均勻分布初始化效果較好;

  • 調(diào)整batch大小(數(shù)據(jù)集大?。?;

  • 擴展數(shù)據(jù)集(data augmentation),可以通過平移、旋轉圖像等方式擴展數(shù)據(jù)集,使學習效果更好;

  • 采取正則化;

  • 采取Dropout方法避免過擬合。

3.3 CNN的類型綜述

本綜述將最近的 CNN 架構創(chuàng)新分為七個不同的類別,分別基于空間利用、深度、多路徑、寬度、特征圖利用、通道提升和注意力[^12]。

通過 1989 年 LeCun 處理網(wǎng)格狀拓撲數(shù)據(jù)(圖像和時間系列數(shù)據(jù))的研究,CNN 首次受到關注。CNN 被視為理解圖像內(nèi)容的最好技術之一,并且在圖像識別、分割、檢測和檢索相關任務上表現(xiàn)出了當前最佳性能。CNN 的成功引起了學界外的注意。在產(chǎn)業(yè)界,如谷歌、微軟、AT&T、NEC 和 Facebook 這樣的公司都設立了研究團隊來探索 CNN 的新架構。目前,圖像處理競賽中的大多數(shù)領跑者都會采用基于深度 CNN 的模型。

自 2012 年以來,關于 CNN 架構的不同創(chuàng)新被提出來。這些創(chuàng)新可分為參數(shù)優(yōu)化、正則化、結構重組等。但是據(jù)觀察,CNN 網(wǎng)絡的性能提升應主要歸功于處理單元的重構和新模塊的設計。

自 AlexNet 在 ImageNet 數(shù)據(jù)集上展現(xiàn)出了非凡的性能后,基于 CNN 的應用變得越來越普及。類似地,Zeiler 和 Fergus 介紹了特征分層可視化的概念,這改變了用深度架構(如 VGG)在簡單的低空間分辨率中提取特征的趨勢。如今,大多數(shù)新架構都是基于 VGG 引入的簡單原則和同質化拓撲構建的。

另一方面,谷歌團隊引入了一個非常著名的關于拆分、轉換和合并的概念,稱為 Inception 模塊。初始塊第一次使用了層內(nèi)分支的概念,允許在不同空間尺度上提取特征。2015 年,為了訓練深度 CNN,Resnet 引入的殘差連接概念變得很有名,并且,后來的大多數(shù)網(wǎng)絡像 Inception-ResNet,WideResNet,ResNext 等都在使用它。與此類似,一些像 WideResnet、Pyramidal Nets、Xception 這樣的架構都引入了多層轉換的概念,通過額外的基數(shù)和增加的寬度來實現(xiàn)。因此,研究的重點從參數(shù)優(yōu)化和連接再次調(diào)整,轉向了網(wǎng)絡架構設計(層結構)。這引發(fā)了許多像通道提升、空間和通道利用、基于注意力的信息處理等新的架構概念。

自 1989 年至今,CNN 架構已經(jīng)有了很多不同的改進。CNN 中的所有創(chuàng)新都是通過深度和空間相結合實現(xiàn)的。根據(jù)架構修改的類型,CNN 可以大致分為 7 類:基于空間利用、深度、多路徑、寬度、通道提升、特征圖利用和注意力的CNN。深度 CNN 架構的分類如圖所示。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

3.3.1 基于空間利用的CNN

CNN 有大量參數(shù),如處理單元數(shù)量(神經(jīng)元)、層數(shù)、濾波器大小、步幅、學習率和激活函數(shù)等。由于 CNN 考慮輸入像素的鄰域(局部性),可以使用不同大小的濾波器來探索不同級別的相關性。因此,在 2000 年初,研究人員利用空間變換來提升性能,此外,還評估了不同大小的濾波器對網(wǎng)絡學習率的影響。不同大小的濾波器封裝不同級別的粒度;通常,較小的濾波器提取細粒度信息,而較大的濾波器提取粗粒度信息。這樣,通過調(diào)整濾波器大小,CNN 可以在粗粒度和細粒度的細節(jié)上都表現(xiàn)很好。

基于空間利用(Spatial Exploitation based)的CNN有:LeNet、Alenet、ZefNet、VGG、GoogleNet等。

1. LeNet-5(20c90s)

LeNet是最早推動深度學習領域發(fā)展的卷積神經(jīng)網(wǎng)絡之一。這項由Yann LeCun7完成的開創(chuàng)性工作自1988年以來多次成功迭代之后被命名為LeNet-5。(該模型基本同上述介紹)

卷積層塊里的基本單位是卷積層后接平均池化層。每個卷積層都使用5×5的窗口,并在輸出上使用Sigmoid激活函數(shù),用來識別圖像里的空間模式,如線條和物體局部(第一個卷積層輸出通道數(shù)為6,第二個卷積層輸出通道數(shù)則增加到16);平均池化層則用來降低卷積層對位置的敏感性,對卷積層輸出的結果進行采樣,壓縮圖像尺寸大小。卷積層由兩個這樣的基本單位重復堆疊構成。

全連接層塊含3個全連接層。其中的向量全部展開成一維向量,一維向量與權重向量進行點積運算,在加上一個偏置,通過激活函數(shù)后輸出,得到新的神經(jīng)元輸出。它們的神經(jīng)元個數(shù)分別是120、84和10,其中10為輸出的類別個數(shù),也是輸出層。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

2. AlexNet(2012)

2012年,Alex Krizhevsky等6發(fā)布了 AlexNet,它是提升了深度和廣度版本的LeNet,并在2012年以巨大優(yōu)勢贏得了ImageNet大規(guī)模視覺識別挑戰(zhàn)賽(ILSVRC)。這是基于之前方法的重大突破,目前 CNN 的廣泛應用都要歸功于AlexNet。

AlexNet首次證明了學習到的特征可以超越??設計的特征,它有以下四點特征:

  • 8層變換,其中有5層卷積和2層全連接隱藏層,以及1個全連接輸出層;
  • 將sigmoid激活函數(shù)改成了更加簡單的ReLU激活函數(shù),降低了模型的計算復雜度,模型的訓練速度也提升了幾倍;
  • Max池化,避免平均池化的模糊化效果。同時采用重疊池化,提升特征的豐富性;
  • 用Dropout來控制全連接層的模型復雜度:通過Dropout技術在訓練過程中將中間層的一些神經(jīng)元隨機置為0,使模型更具有魯棒性,也減少了全連接層的過擬合;
  • 引入數(shù)據(jù)增強(Data Augmentation),如圖像平移、鏡像、翻轉、裁剪、改變灰度和顏色變化,從而進一步擴大數(shù)據(jù)集來緩解過擬合。
    學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇
3. GoogLeNet(2014)

2014年 ILSVRC 獲獎者是 Google 的 Szegedy 等8人的卷積網(wǎng)絡。其主要貢獻是開發(fā)了一個初始模塊(Inception),該模塊大大減少了網(wǎng)絡中的參數(shù)數(shù)量(4M,而AlexNet有60M)。

LeNet、AlexNet和VGG都是先以由卷積層構成的模塊充分抽取空間特征,再以由全連接層構成的模塊來輸出分類結果。與它們?nèi)N模型不同,GoogLeNet模型由如下的Inception基礎塊組成,Inception塊相當于?個有4條線路的子網(wǎng)絡,該結構將CNN中常用的卷積( 1 × 1 , ? 3 × 3 , ? 5 × 5 1×1,\ 3×3,\ 5×5 1×1,?3×3,?5×5)、池化操作(3x3)堆疊在一起,一方面增加了網(wǎng)絡的寬度,另一方面也增加了網(wǎng)絡對尺度的適應性。它通過不同窗口形狀的卷積層和最?池化層來并行抽取信息,并使用 1 × 1 1×1 1×1卷積層減少通道數(shù)從而降低模型復雜度。它的參數(shù)比AlexNet少了12倍,而且GoogleNet的準確率更高。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

4. VGGNet(2014)

2014年ILSVRC亞軍是名為VGGNet的網(wǎng)絡,由Simonyan等人9開發(fā)。其主要貢獻在于證明了網(wǎng)絡深度(層數(shù))是影響性能的關鍵因素。它使用了小卷積核,用卷積深度替代了卷積核大小。

VGG模型用具有小卷積核的多個卷積層替換一個具有較大卷積核的卷積層,如用大小均為 3 × 3 3×3 3×3卷積核的3層卷積層代替一層具有 7 × 7 7×7 7×7卷積核的卷積層,這種替換方式減少了參數(shù)的數(shù)量,而且也能夠使決策函數(shù)更具有判別性。接上一個步幅為 2 2 2、窗口形狀為 2 × 2 2×2 2×2的最大池化層,使得卷積層保持輸入的高和寬不變,而池化層則對其減半。

  • 2個 3 × 3 3×3 3×3相當于1個 5 × 5 5×5 5×5
  • 3個 3 × 3 3×3 3×3相當于1個 7 × 7 7×7 7×7;
  • 1 × 1 1×1 1×1的卷積層可視為非線性變換。

實驗結果表明,當權值層數(shù)達到16-19層時,模型的性能能夠得到有效的提升。最常見的是VGG16和VGG19模型。其中VGG16網(wǎng)絡結構如下:

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

VGG模型通過增加層數(shù),提高模型的深度明顯提高了模型的性能,但也同時存在著梯度爆炸和梯度消失的現(xiàn)象無法解決;另外,模型也存在著退化問題,即模型的深度達到20層后,在增加深度模型的能力反而下降。

3.3.2 基于深度的CNN

深度 CNN 架構基于這樣一種假設:隨著深度的增加,網(wǎng)絡可以通過大量非線性映射和改進的特征表示更好地逼近目標函數(shù)。網(wǎng)絡深度在監(jiān)督學習的成功中起了重要作用。理論研究已表明,深度網(wǎng)絡能夠以指數(shù)方式比淺層網(wǎng)絡更有效地表示特定的 20 個函數(shù)類型。2001 年,Csáji 表示了通用近似定理,指出單個隱藏層足夠逼近任何函數(shù),但這需要指數(shù)級的神經(jīng)元,因而通常導致計算上行不通。在這方面,Bengio 和 elalleau 認為更深的網(wǎng)絡有潛力在更少的成本下保持網(wǎng)絡的表現(xiàn)能力。2013 年,Bengio 等人通過 實證表明,對于復雜的任務,深度網(wǎng)絡在計算和統(tǒng)計上都更有效。在 2014-ILSVR 競賽中表現(xiàn)最佳的 Inception 和 VGG 則進一步說明,深度是調(diào)節(jié)網(wǎng)絡學習能力的重要維度。

一旦特征被提取,只要其相對于其他位置的近似位置被保留,其提取位置就變得沒那么重要了。池化或下采樣(如卷積)是一種有趣的局部操作。它總結了感受野附近的類似信息,并輸出了該局部區(qū)域內(nèi)的主要反應。作為卷積運算的輸出結果,特征圖案可能會出現(xiàn)在圖像中的不同位置。

基于深度(Depth based)的CNN有:Highway Networks、ResNet、Inception V3/V4、Inception-ResNet、ResNext等。

ResNets(2015)

何凱明等10人開發(fā)的殘差網(wǎng)絡是2015年ILSVRC的冠軍。ResNets是迄今為止最先進的卷積神經(jīng)網(wǎng)絡模型,并且是大家在實踐中使用卷積神經(jīng)網(wǎng)絡的默認選擇(截至2016年5月)。ResNets采用殘差網(wǎng)絡(Residual Networks,ResNet)來解決梯度消失的問題。

ResNet的主要特點是跨層連接,它通過引入捷徑連接技術(shortcut connections)將輸入跨層傳遞并與卷積的結果相加。在ResNet中只有一個池化層,它連接在最后一個卷積層后面。ResNet使得底層的網(wǎng)絡能夠得到充分訓練,準確率也隨著深度的加深而得到顯著提升。將深度為152層的ResNet用于LSVRC-15的圖像分類比賽中,它獲得了第1名的成績。在該文獻中,還嘗試將ResNet的深度設置為1000,并在CIFAR-10圖像處理數(shù)據(jù)集中驗證該模型。

ResNe通過恒等映射的形式解決了VGGNet的退化問題:

殘差的思想就是去掉相同的主體部分,從而突出微小的變化,改變后輸出變化對權重的調(diào)整作用更大,所以效果更好。

若將輸入設為X,將某一有參網(wǎng)絡層設為H,那么以X為輸入的此層的輸出將為H(X)。一般的CNN網(wǎng)絡如Alexnet/VGG等會直接通過訓練學習出參數(shù)函數(shù)H的表達,從而直接學習X -> H(X)。而殘差學習則是致力于使用多個有參網(wǎng)絡層來學習輸入、輸出之間的參差即F(X) = H(X) - X,即學習X -> F(X)+ X。其中X這一部分為直接的identity mapping(恒等映射),而F(X) = H(X) - X 則為有參網(wǎng)絡層要學習的輸入與輸出之間的殘差。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

越深的網(wǎng)絡的層數(shù)能夠提取到輸入圖像越豐富的的特征表示。但是對于之前的非殘差網(wǎng)絡,簡單地增加深度會導致梯度彌散或梯度爆炸的問題,而ResNet模型成功的解決了網(wǎng)絡深度的問題,ResNet模型可以變得很深,目前已有的甚至超過1000層。研究和實驗表明,加深的殘差網(wǎng)絡能夠比簡單疊加層生產(chǎn)的深度網(wǎng)絡更容易優(yōu)化,并且因為深度的增加,模型的效果也得到了明顯提升。一種ResNet的網(wǎng)絡結構如下圖所示。

學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇

3.3.3 基于多路徑的CNN

深度網(wǎng)絡的訓練頗具挑戰(zhàn)性,這也是近來很多深度網(wǎng)絡研究的主題。深度 CNN 為復雜任務提供了高效的計算和統(tǒng)計。但是,更深的網(wǎng)絡可能會遭遇性能下降或梯度消失/爆炸的問題,而這通常是由增加深度而非過擬合造成的。梯度消失問題不僅會導致更高的測試誤差,還會導致更高的訓練誤差。為了訓練更深的網(wǎng)絡,多路徑或跨層連接的概念被提出。多路徑或捷徑連接可以通過跳過一些中間層,系統(tǒng)地將一層連接到另一層,以使特定的信息流跨過層??鐚舆B接將網(wǎng)絡劃分為幾塊。這些路徑也嘗試通過使較低層訪問梯度來解決梯度消失問題。為此,使用了不同類型的捷徑連接,如零填充、基于投影、dropout 和 1x1 連接等。

基于多路徑(Multi-Path based)的CNN有:Highway、ResNet、DenseNet等。

3.3.4 基于寬度的多連接CNN

2012 至 2015 年,網(wǎng)絡架構的重點是深度的力量,以及多通道監(jiān)管連接在網(wǎng)絡正則化中的重要性。然而,網(wǎng)絡的寬度和深度一樣重要。通過在一層之內(nèi)并行使用多處理單元,多層感知機獲得了在感知機上映射復雜函數(shù)的優(yōu)勢。這表明寬度和深度一樣是定義學習原則的一個重要參數(shù)。Lu 等人和 Hanin & Sellke 最近表明,帶有線性整流激活函數(shù)的神經(jīng)網(wǎng)絡要足夠寬才能隨著深度增加保持通用的近似特性。并且,如果網(wǎng)絡的最大寬度不大于輸入維度,緊致集上的連續(xù)函數(shù)類無法被任意深度的網(wǎng)絡很好地近似。因此,多層堆疊(增加層)可能不會增加神經(jīng)網(wǎng)絡的表征能力。與深度架構相關的一個重要問題是,有些層或處理單元可能無法學習有用的特征。為了解決這一問題,研究的重點從深度和較窄的架構轉移到了較淺和較寬的架構上。

基于寬度的多連接(Width based Multi-Connection)CNN有:WideResNet、Pyramidal Net、Xception、Inception Family等。

3.3.5 基于(通道)特征圖開發(fā)的CNN

CNN 因其分層學習和自動特征提取能力而聞名于 MV 任務中。特征選擇在決定分類、分割和檢測模塊的性能上起著重要作用。傳統(tǒng)特征提取技術中分類模塊的性能要受限于特征的單一性。相較于傳統(tǒng)技術,CNN使用多階段特征提取,根據(jù)分配的輸入來提取不同類型的特征(CNN 中稱之為特征圖)。但是,一些特征圖有很少或者幾乎沒有目標鑒別作用。巨大的特征集有噪聲效應,會導致網(wǎng)絡過擬合。這表明,除了網(wǎng)絡工程外,特定類別特征圖的選取對改進網(wǎng)絡的泛化性能至關重要。在這一部分,特征圖和通道會交替使用,因為很多研究者已經(jīng)用通道這個詞代替了特征圖。

基于(通道)特征圖(Feature Map Exploitation based)開發(fā)的CNN有:Squeeze and Excitation、Competitive Squeeze and Excitation等。

3.3.6 基于(輸入)通道利用的CNN

圖像表征在決定圖像處理算法的性能方面起著重要作用。圖像的良好表征可以定義來自緊湊代碼的圖像的突出特征。在不同的研究中,不同類型的傳統(tǒng)濾波器被用來提取單一類型圖像的不同級別信息。這些不同的表征被用作模型的輸入,以提高性能。CNN 是一個很好的特征學習器,它能根據(jù)問題自動提取鑒別特征。但是,CNN 的學習依賴于輸入表征。如果輸入中缺乏多樣性和類別定義信息,CNN 作為鑒別器的性能就會受到影響。為此,輔助學習器的概念被引入到 CNN 中來提升網(wǎng)絡的輸入表征。

基于(輸入)通道利用(Channel Exploitation based)的CNN有:Channel Boosted CNN using TL等。

3.3.7 基于注意力的CNN

不同的抽象級別在定義神經(jīng)網(wǎng)絡的鑒別能力方面有著重要的作用。除此之外,選擇與上下文相關的特征對于圖像定位和識別也很重要。在人類的視覺系統(tǒng)中,這種現(xiàn)象叫做注意力。人類在一次又一次的匆匆一瞥中觀察場景并注意與上下文相關的部分。在這個過程中,人類不僅注意選擇的區(qū)域,而且推理出關于那個位置的物體的不同解釋。因此,它有助于人類以更好的方式來抓取視覺結構。類似的解釋能力被添加到像 RNN 和 LSTM 這樣的神經(jīng)網(wǎng)絡中。上述網(wǎng)絡利用注意力模塊來生成序列數(shù)據(jù),并且根據(jù)新樣本在先前迭代中的出現(xiàn)來對其加權。不同的研究者把注意力概念加入到 CNN 中來改進表征和克服數(shù)據(jù)的計算限制問題。注意力概念有助于讓 CNN 變得更加智能,使其在雜亂的背景和復雜的場景中也能識別物體。

基于注意力(Attention based)的CNN有:Residual Attention Neural Network、Convolutional Block Attention、Concurrent Squeeze and Excitation等。

3.3.8 補充:PyTorch-Networks

?對于各種CNN模型,已經(jīng)有人將它們都進行了PyTorch實現(xiàn):https://github.com/shanglianlm0525/PyTorch-Networks。此外,該項目也實現(xiàn)了12種CNN模型:https://github.com/BIGBALLON/CIFAR-ZOO。?

該系列的卷積神經(jīng)網(wǎng)絡實現(xiàn)包含了9大主題,有:典型網(wǎng)絡、輕量級網(wǎng)絡、目標檢測網(wǎng)絡、語義分割網(wǎng)絡、實例分割網(wǎng)絡、人臉檢測和識別網(wǎng)絡、人體姿態(tài)識別網(wǎng)絡、注意力機制網(wǎng)絡、人像分割網(wǎng)絡。

1. 典型網(wǎng)絡(Classical network)
  • 典型的CNN包括:AlexNet、VGG、ResNet、InceptionV1、InceptionV2、InceptionV3、InceptionV4、Inception-ResNet。
2. 輕量級網(wǎng)絡(Light weight)
  • 輕量級網(wǎng)絡包括:GhostNet、MobileNets、MobileNetV2、MobileNetV3、ShuffleNet、ShuffleNet V2、SqueezeNet Xception MixNet GhostNet。
    • MobileNet 由谷歌在 2017 年提出,是一款專注于在移動設備和嵌入式設備上的輕量級CNN神經(jīng)網(wǎng)絡,并迅速衍生出v1 v2 v3 三個版本;相比于傳統(tǒng)CNN網(wǎng)絡,在準確率小幅降低的前提下,大大減小模型參數(shù)和運算量。
    • 其主要思想不再是提高模型的深度和寬度,而是改變卷積的方式,把標準卷積層換成深度可分離卷積,即把卷積分為深度卷積和逐點卷積兩個步驟,在保證模型準確率的前提下,大大降低了模型的運算量。改進前、后的卷積過程對比如下:
      學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇
3. 目標檢測網(wǎng)絡(Object Detection)
  • 目標檢測網(wǎng)絡包括:SSD、YOLO、YOLOv2、YOLOv3、FCOS、FPN、RetinaNet Objects as Points、FSAF、CenterNet FoveaBox。
    • 以 YOLO 系列為例,YOLO(You Only Look Once)是一種基于深度神經(jīng)網(wǎng)絡的對象識別和定位算法,其最大的特點是運行速度很快,可以用于實時系統(tǒng)。目前 YOLOv3 應用比較多。
      學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇
4. 語義分割網(wǎng)絡(Semantic Segmentation)
  • 語義分割網(wǎng)絡包括:FCN、Fast-SCNN、LEDNet、LRNNet、FisheyeMODNet。
    • 以 FCN 為例,F(xiàn)CN 誕生于 2014 的語義分割模型先驅,主要貢獻為在語義分割問題中推廣使用端對端卷積神經(jīng)網(wǎng)絡,使用反卷積進行上采樣。FCN 模型非常簡單,里面全部是由卷積構成的,所以被稱為全卷積網(wǎng)絡,同時由于全卷積的特殊形式,因此可以接受任意大小的輸入。
      學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇
5. 實例分割網(wǎng)絡(Instance Segmentation)
  • 實例分割網(wǎng)絡包括:PolarMask。
6. 人臉檢測和識別網(wǎng)絡(commit VarGFaceNet)
  • 人臉檢測和識別網(wǎng)絡包括:FaceBoxes、LFFD、VarGFaceNet。
7. 人體姿態(tài)識別網(wǎng)絡(Human Pose Estimation)
  • 人體姿態(tài)識別網(wǎng)絡包括:Stacked Hourglass、Networks Simple Baselines、LPN。
8. 注意力機制網(wǎng)絡(Attention)
  • 注意力機制網(wǎng)絡包括:SE Net、scSE、NL Net、GCNet、CBAM。
9. 人像分割網(wǎng)絡(Portrait Segmentation)
  • 人像分割網(wǎng)絡包括:SINet。

3.4 CNN的局限

雖然CNN所具有的這些特點使其已被廣泛應用于各種領域中,但其優(yōu)勢并不意味著目前存在的網(wǎng)絡沒有瑕疵。

如何有效地訓練層級很深的深度網(wǎng)絡模型仍舊是一個有待研究的問題。盡管圖像分類任務能夠受益于層級較深的卷積網(wǎng)絡,但一些方法還是不能很好地處理遮擋或者運動模糊等問題。

注:文中所使用的所有圖像和動畫均屬于其各自的作者。

  1. 周飛燕, 金林鵬, 董軍. 卷積神經(jīng)網(wǎng)絡研究綜述[J]. 計算機學報, 2017, 40(6): 1229-1251. ??

  2. Boureau Y L, Bach F, LeCun Y, et al. Learning mid-level features for recognition[J]. 2010. ??

  3. 《深度學習入門基于Python的理論與實現(xiàn)》 ??

  4. Hubel D H, Wiesel T N. Receptive fields, binocular interaction and functional architecture in the cat’s visual cortex[J]. The Journal of physiology, 1962, 160(1): 106-154. ??

  5. LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324. ??

  6. Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105. https://www.aminer.cn/archive/imagenet-classification-with-deep-convolutional-neural-networks/53e9a281b7602d9702b88a98 ?? ??

  7. https://arxiv.org/abs/1901.06032 ??

  8. Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 1-9. ??

  9. Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014. ??

  10. He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778. ??文章來源地址http://www.zghlxwxcb.cn/news/detail-438945.html

到了這里,關于學習筆記:深度學習(3)——卷積神經(jīng)網(wǎng)絡(CNN)理論篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 深度學習03-卷積神經(jīng)網(wǎng)絡(CNN)

    深度學習03-卷積神經(jīng)網(wǎng)絡(CNN)

    CNN,即卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network),是一種常用于圖像和視頻處理的深度學習模型。與傳統(tǒng)神經(jīng)網(wǎng)絡相比,CNN 有著更好的處理圖像和序列數(shù)據(jù)的能力,因為它能夠自動學習圖像中的特征,并提取出最有用的信息。 CNN 的一個核心特點是卷積操作,它可以在圖像上進

    2024年02月05日
    瀏覽(25)
  • 深度學習入門(三):卷積神經(jīng)網(wǎng)絡(CNN)

    深度學習入門(三):卷積神經(jīng)網(wǎng)絡(CNN)

    給定一張圖片,計算機需要模型判斷圖里的東西是什么? (car、truck、airplane、ship、horse) CONV:卷積計算層,線性乘積求和 RELU:激勵層,激活函數(shù) POOL:池化層,取區(qū)域平均或最大(MAX POOL) PC:全連接層 對CNN來說,它是一塊一塊進行對比的,“小塊”稱之為Features特征。

    2024年02月11日
    瀏覽(37)
  • 深度學習入門教學——卷積神經(jīng)網(wǎng)絡CNN

    深度學習入門教學——卷積神經(jīng)網(wǎng)絡CNN

    1、應用領域 檢測任務 分類與檢索 超分辨率重構 2、卷積網(wǎng)絡與傳統(tǒng)網(wǎng)咯的區(qū)別 傳統(tǒng)神經(jīng)網(wǎng)絡和卷積神經(jīng)網(wǎng)絡都是用來 提取特征 的。 神經(jīng)網(wǎng)絡: 可以將其看作是一個二維的。 卷積神經(jīng)網(wǎng)絡: 可以將其看作是一個三維的。 ?3、整體框架 該層主要是對原始圖像數(shù)據(jù)進行預處

    2024年02月10日
    瀏覽(25)
  • 【深度學習_TensorFlow】卷積神經(jīng)網(wǎng)絡(CNN)

    【深度學習_TensorFlow】卷積神經(jīng)網(wǎng)絡(CNN)

    這篇文章的行文思路如下: 先根據(jù)視頻了解卷積和卷積神經(jīng)網(wǎng)絡的整體框架 接著了解卷積神經(jīng)網(wǎng)絡構建過程中的一些重要操作,包括內(nèi)積、填充、池化。 然后介紹卷積層如何實現(xiàn)。 最后用卷積神經(jīng)網(wǎng)絡的開山之作(LeNet-5)來進行上手練習。 最近學習信號與系統(tǒng)的時候,了

    2024年02月07日
    瀏覽(97)
  • 【深度學習】最強算法之:卷積神經(jīng)網(wǎng)絡(CNN)

    【深度學習】最強算法之:卷積神經(jīng)網(wǎng)絡(CNN)

    小屌絲 :魚哥, 看下這個流程圖,我沒看明白 小魚 :啥流程圖。 小屌絲 :你看,就是這個。 小魚 :嗯,不錯,不錯。 小屌絲 :能不能給我講一講這個? 小魚 :你要了解CNN ? 小屌絲 :CNN 是? 小魚 :…你這… 深度學習知道嗎? 小屌絲 :知道啊 小魚 :你都知道深度

    2024年04月09日
    瀏覽(27)
  • 【深度學習】6-4 卷積神經(jīng)網(wǎng)絡 - CNN的實現(xiàn)

    【深度學習】6-4 卷積神經(jīng)網(wǎng)絡 - CNN的實現(xiàn)

    CNN的實現(xiàn) 網(wǎng)絡的構成是“Convolution - ReLU - Pooling -Affine - ReLU - Affine - Softmax”,我們將它實現(xiàn)為名為 SimpleConvNet 的類。 首先來看一下 SimpleConvNet的初始化( init ),取下面這些參數(shù)。 input_dim——輸入數(shù)據(jù)的維度:(通道,高,長) conv_param——卷積層的超參數(shù)(字典)。字典的

    2024年02月10日
    瀏覽(28)
  • 深度學習入門——卷積神經(jīng)網(wǎng)絡CNN基本原理+實戰(zhàn)

    深度學習入門——卷積神經(jīng)網(wǎng)絡CNN基本原理+實戰(zhàn)

    ? 卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)是深度學習技術中最基礎的網(wǎng)絡結構,模擬人腦工作,具備強大的特征學習能力。CNN結構主要由兩部分組成:特征提取部分和分類部分color{blue}{特征提取部分和分類部分}特征提取部分和分類部分。特征提取部分網(wǎng)絡將執(zhí)行一系列

    2024年01月21日
    瀏覽(37)
  • 文本分類系統(tǒng)Python,基于深度學習CNN卷積神經(jīng)網(wǎng)絡

    文本分類系統(tǒng)Python,基于深度學習CNN卷積神經(jīng)網(wǎng)絡

    文本分類系統(tǒng),使用Python作為主要開發(fā)語言,通過TensorFlow搭建CNN卷積神經(jīng)網(wǎng)絡對十余種不同種類的文本數(shù)據(jù)集進行訓練,最后得到一個h5格式的本地模型文件,然后采用Django開發(fā)網(wǎng)頁界面,實現(xiàn)用戶在界面中輸入一段文字,識別其所屬的文本種類。 在我們的日常生活和工作中

    2024年02月08日
    瀏覽(93)
  • 深度學習實戰(zhàn)——卷積神經(jīng)網(wǎng)絡/CNN實踐(LeNet、Resnet)

    深度學習實戰(zhàn)——卷積神經(jīng)網(wǎng)絡/CNN實踐(LeNet、Resnet)

    ??? ? 憶如完整項目/代碼詳見github: https://github.com/yiru1225 (轉載標明出處 勿白嫖 star for projects thanks) 本系列博客重點在深度學習相關實踐(有問題歡迎在評論區(qū)討論指出,或直接私信聯(lián)系我)。 第一章??深度學習實戰(zhàn)——不同方式的模型部署(CNN、Yolo)_如何部署cnn_

    2023年04月11日
    瀏覽(26)
  • 深度學習:使用卷積神經(jīng)網(wǎng)絡CNN實現(xiàn)MNIST手寫數(shù)字識別

    深度學習:使用卷積神經(jīng)網(wǎng)絡CNN實現(xiàn)MNIST手寫數(shù)字識別

    本項目基于pytorch構建了一個深度學習神經(jīng)網(wǎng)絡,網(wǎng)絡包含卷積層、池化層、全連接層,通過此網(wǎng)絡實現(xiàn)對MINST數(shù)據(jù)集手寫數(shù)字的識別,通過本項目代碼,從原理上理解手寫數(shù)字識別的全過程,包括反向傳播,梯度下降等。 卷積神經(jīng)網(wǎng)絡是一種多層、前饋型神經(jīng)網(wǎng)絡。從功能上

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包