卷積神經網絡(CNN)


卷積神經網絡(CNN

1.1二維卷積層

       卷積神經網絡是含有卷積層的神經網絡,均使用最常見的二維卷積層,它有高和寬兩個空間維度,常用來處理圖像數據。

1.1.1二維互相關運算

       在二維卷積層中,一個二維輸入數組和一個二維核數組通過互相關運算輸出一個二維數組。

       輸入一個高和寬均為3的二維數組,核數組的高和寬均為2,核數組在卷積計算中又稱卷積核或過濾器,卷積核窗口(卷積窗口)的形狀取決於卷積核的高和寬。

 

1.1.2二維卷積層

        二維卷積層將輸入和卷積核做互相關運算,並加上一個標量偏差來得到輸出。卷積層的模型參數包括卷積核與標量偏差。在訓練模型時,通常先對卷積核隨機初始化,然后不斷迭代卷積核與偏差。

卷積窗口形狀為p x q的卷積層稱為p x q卷積層,說明卷積核的高和寬分別為p和q。

1.1.3圖像中物體邊緣檢測

       卷積層的簡單應用:檢測圖像中物體的邊緣,即找到像素變化的位置。卷積層可以通過重復使用卷積核有效的表征局部空間。

1.1.4通過數據學習核數組

       例子:使用物體邊緣檢測中的輸入數據x,輸出數據y,來構造核數組k。首先構造一個卷積層,將卷積核初始化成隨機數組,在每一次迭代中,使用平方誤差來比較Y和卷積層的輸出,然后計算梯度來更新權重。

1.15特征圖和感受野

       特征圖:二維卷積層輸出的二維數組可以看做是輸入在空間維度(寬和高)上某一級的表征。

       感受野:影響元素x的前向計算的所有可能輸入區域(可能大於輸入的實際尺寸)叫做x的感受野。

1.2填充和步幅

       假設輸入形狀是卷積核窗口形狀是,輸出形狀是,所以卷積層的輸出形狀有輸入形狀和卷積核窗口形狀決定。

1.2.1填充

       填充:指在輸入高和寬兩側填充元素(通常是0元素)。

  卷積神經網絡經常使用奇數的高和寬的卷積核,如1,3,5和7,所以兩端上的填充個數相等。對任意的二維數組X,設它的第i行第j列的元素為X[i,j]。當兩端上的填充個數相等,並使輸入和輸出具有相同的高和寬時,輸出Y[i,j]是由輸入X[i,j]為中心的窗口同卷積核進行互相關計算得到的。

       當卷積核的高和寬不同時,通過設置高和寬上不同的填充數使輸出和輸入具有相同的高和寬。

1.2.2步幅

       卷積窗口從輸入數組的最左上方開始,按從左到右,從上往下的順序,依次在輸入數組上滑動。將每次滑動的行數和列數稱為步幅。

 

1.3多輸入通道和多輸出通道

       彩色圖像在高和寬2個維度外還有RGB(紅、綠、藍)3個顏色通道。假設彩色圖像的高和寬分別是h和w(像素),那么它可以表示為一個3 X h X w的多維數組。將大小為3的這一維稱為通道維。

1.3.1多輸入通道

     當輸入數據含多個通道時,需要構造一個輸入通道數與輸入數據的通道數相同的卷積核,從而能夠與含多通道的輸入數據做互相關運算。假設輸入數據的通道數為,那么卷積核的輸入通道數同樣為。設卷積核窗口的形狀為,卷積核只包含一個形狀為的二維數組。當時,為每個輸入通道各分配一個形狀為的核數組。把這個數組在輸入通道維上連結,得到一個形狀維的卷積核。由於輸入和卷積核各有個通道,在各個通道上對輸入的二維數組和卷積核的二維數組做互相關運算,再將這個個互相關運算的二維輸出按通道相加,得到一個二維數組。

       下圖,在每個通道上,二維輸入數組與二維核數組做互相關運算,再按通道相加,得到輸出。

1.3.2多輸出通道

       當輸入通道有多個時,因為我們對各個通道的結果做了累加,所以無論輸入通道數是多少,輸出通道數總是1。設卷積核輸入通道數和輸出通道數分別為,高和寬分別為。如果希望得到含多個通道的輸出,我們可以為每個輸出通道分別創建形狀為的核數組。將它們在輸出通道維上連結,卷積核的形狀。每個輸出通道上的結果由卷積核在該輸出通道上的核數組與整個輸入數組計算而來。

1.3.3  1 x 1卷積層

       卷積窗口形狀為的多通道卷積層。通常稱為1x1卷積層,並將其中的卷積運算稱為1x1卷積。1x1卷積失去卷積層可以識別高和寬維度上相鄰元素構成的模式的功能。1x1卷積的主要計算發生在通道維上。

 

       使用多通道可以拓展卷積層的模型參數。

       假設將通道維當做特征維,將高和寬維度上的元素當成數據樣本,那么1x1卷積層的作用與全連接層等價。

       1x1卷積層通常用來調整網絡層之間的通道數,並控制模型復雜度。

1.4池化層

       池化層,它的提出是為了緩解卷積層對位置的過度敏感性。

1.4.1二維最大池化層和平均池化層

       池化層每次對輸入數據的一個固定形狀窗口(又稱池化窗口)中的元素計算輸出。池化層直接計算池化窗口內元素的最大值或者平均值。該運算也分別叫做最大池化或平均池化。在二維最大池化中,池化窗口從輸入數組的最左上方開始,按從左到右,從上往下的順序,依次在數組上滑動。當池化窗口移動到某一位置時,窗口中的輸入子數組的最大值,即輸出數組中相應位置的元素。

 

   二維平均池化的工作原理與二維最大池化類似,但將最大運算符替換成平均運算符。池化窗口形狀為的池化層稱為池化層,其中的池化運算叫做池化。

1.4.2填充和步幅

       同卷積層一樣,池化層也可以在輸入的高和寬兩側的填充並調整窗口的移動步幅來改變輸出形狀。池化層填充和步幅與卷積層填充和步幅的工作機制一樣。

1.4.3多通道

       在處理多通道輸入數據時,池化層對每個輸入通道分別池化,池化層的輸出通道數與輸入通道數相等。

1.5卷積神經網絡(LeNet

       卷積神經網絡就是含卷積層的網絡。

1.5.1  LetNet模型

       LetNet分為卷積層塊和全連接層塊兩個部分。

       卷積層塊里的基本單位是卷積層后接最大池化層:卷積層用來識別圖像里的空間模式,如線條和物體局部,最大池化層用來降低卷積層對位置的敏感性。卷積層塊由兩個這樣的基本單位重復堆疊構成。

       在卷積層中,每個卷積層都使用5x5的窗口,並在輸出上使用sigmoid激活函數。第一個卷積層輸出通道數為6,第二個卷積層輸出通道數則增加到16。這是因為第二個卷積層比第一個卷積層的輸入的高和寬要小,所以增加輸出通道使兩個卷積層的參數尺寸類似。卷積層塊的兩個最大池化層的窗口形狀均為2x2,且步幅為2。由於池化窗口與步幅形狀相同,池化窗口在輸入上每次滑動所覆蓋的區域互不重疊。

       卷積層塊的輸出形狀為(批量大小,通道,高,寬),當卷積層塊的輸出傳入全連接層時,全連接層會將小批量中每個樣本變平。即全連接層的輸入形狀將變成二維,其中第一維是小批量中的樣本,第二維是每個樣本變平后的向量表示,且向量長度為通道,高和寬的乘積。全連接層塊含3個全鏈接層,它們的輸出個數分別是120、84和10,其中10為輸出的類別個數。

       LetNet交替使用卷積層和最大池化層后接全連接層來進行圖像分類。

1.6深度卷積神經網絡(AlexNet

       神經網絡可以直接基於圖像的原始像素進行分類,這種稱為端到端的方法。

1.6.1  AlexNet

       AlexNet與LetNet的區別:

       第一,與相對較小的LexNet相比,AlexNet包含8層變換,其中有5層卷積和2層全連接層隱藏層,以及1個全連接輸出層。

       AlexNet第一層中的卷積窗口形狀是11x11,ImageNet圖像的物體占用更多的像素,所以需要更大的卷積窗口來捕獲物體。第二層中的卷積窗口形狀減小到5x5,之后全采用3x3。第一、第二和第五個卷積層之后都使用了窗口形狀為3x3、步幅為2的最大池化層。最后一個卷積層的時兩個輸出個數為4096的全連接層。

       第二,AlexNet將sigmoid激活函數改成了更簡單的ReLU激活函數。當sigmoid激活函數輸出極限接近0或1時,這些區域的梯度幾乎為0,從而造成反向傳播無法繼續更新部分模型參數,而ReLU激活函數在正區間的梯度恆為1。

       第三,AlexNet通過丟棄法來控制全連接層的模型復雜度。而LeNet並沒有使用丟棄法。

       第四,AlexNet引入了大量的圖像增廣,如翻轉、裁剪和顏色變化,從而進一步擴大數據集來緩解過擬合。

       AlexNet和LetNet結構類似,但使用了更多的卷積層和更大的參數空間來擬合大規模數據集ImageNet。它是淺層神經網絡和深度神經網絡的分界線。

1.7使用重復元素的網絡(VGG

1.7.1  VGG

       VGG塊的組成規律是:連續使用數個相同的填充為1、窗口形狀為3x3的卷積層后接上一個步幅為2、窗口形狀為2x2的最大池化層。卷積層保持輸入的高和寬不變,而池化層則對其減半。使用vgg_block函數來實現這個基礎的VGG塊,它可以指定卷積層的數量num_convs和輸出通道數num_channels。

1.7.2  VGG網絡

       與AlexNet和LeNet一樣,VGG網絡由卷積層模塊后接全連接層模塊構成。卷積層模塊串聯數個vgg_biock,其超參數由變量conv_rach定義。該變量指定了每個VGG塊里卷積層個數和輸出通道數,全連接層則跟AlexNet中的一樣。

       VGG這種高和寬減半以及通道翻倍的設計使得多數卷積層都有相同的模型參數尺寸和計算復雜度。

1.8網絡中的網絡(NiN

       網絡中的網絡(NiN),它提出了一個思路,即串聯多個由卷積層和“全連接”層構成的小網絡來構建一個深層網絡。

1.8.1  NiN

  卷積層的輸入和輸出通常是四維數組(樣本,通道,高,寬),而全連接層的輸入和輸出則通常是二維數組(樣本,特征)。如果想在全連接層后再接上卷積層,則需要將全連接層的輸出變換為四維。1x1卷積層可以看成全連接層,其中空間維度(高和寬)上的每個元素相當於樣本,通道相當於特征。因此,NiN使用1x1卷積層來替代全連接層,從而使空間信息能夠自然傳遞到后面的層中去。

   NiN塊是NiN中的基礎塊,它由一個卷積層加兩個充當全連接層的1x1卷積層串聯而成。其中第一個卷積層的超參數可以自行設置,而第二個和第三個卷積層的超參數一般是固定的。

 1.8.2  NiN模型

  NiN使用卷積窗口形狀分別為11x11、5x5和3x3的卷積層,相應的輸出通道數也與AlexNet中的一致。每個NiN塊后接一個步幅為2、窗口形狀為3x3的最大池化層。

  除使用NiN塊以外,NiN還有一個設計與AlexNet顯著不同:NiN去掉了AlexNet最后的3個全連接層,使用了輸出通道數等於標簽類別數的NiN塊,然后使用全局平均池化層對每個通道中所有元素求平均並直接用於分類。這里的全局平均池化層即窗口形狀等於輸入空間維形狀的平均池化層。NiN的這個設計的好處是可以顯著減小模型參數尺寸,從而緩解過擬合。

  NiN重復使用由卷積層和代替全連接層的1x1卷積層構成的NiN塊來構建深層網絡。

1.9含並行連結的網絡(GoogLeNet

1.9.1  nception

  GoogLeNet中的基礎卷積塊叫做Inception塊。

 

   Inception塊里有4條並行的線路,前3條分別是1x1、3x3和5x5的卷積層來抽取不同空間尺寸下的信息,其中中間2個線路會對輸入先做1x1卷積來減少輸入通道數,以降低模型復雜度。第四條線路則使用3x3最大池化層,后接1x1卷積層來改變通道數。4條線路都使用了合適的填充來使輸入與輸出的高和寬一致。最后將每條線路的輸出在通道維上連結,並輸入接下來的層中去。

  Inception塊中可以自定義的超參數是每個層的輸出通道數,我們以此來控制模型復雜度。

1.9.2GoogLeNet模型

  GoogLeNet跟VGG一樣,在主體卷積部分中使用5個模塊,每個模塊之間使用步幅為2的3x3最大池化層來減小輸出高寬。

  第一個模塊使用一個64通道的7x7卷積層。

  第二個模塊使用2個卷積層:首先是64通道的1x1卷積層,然后是將通道增大3倍的3x3卷積層。它對應Inception塊中的第二條線路。

  第三個模塊串聯2個完整的Inception塊。

  第四個模塊串聯了5個Inception塊。

  第五個模塊的后面緊跟輸出層,該模塊同NiN一樣使用全局平均池化層來將每個通道的高和寬變成1。最后將輸出變成二維數組后接上一個輸出個數為標簽類別數的全連接層。

  Inception塊相當於一個有4條線路的子網絡,它通過不同窗口形狀的卷積層和最大池化層來並行抽取信息,並使用1x1卷積層減少通道數從而降低模型復雜度。

  GoogLeNet將多個設計精細的Inception塊和其它層串聯起來,其中Inception塊的通道數分配之比是在ImageNet數據集上通過大量的實驗得到的。

  GoogLeNet和它的后繼者們一度是ImageNet上最高效的模型之一:在類似的測試精度下,它們的計算復雜度往往更低。

1.10批量歸一化

  在訓練模型時,批量歸一化利用小批量上的均值和標准差,不斷調整神經網絡中間輸出,從而使整個神經網絡在各層的中間輸出的數值更穩定。

1.10.1批量歸一化層

  對全連接層做批量歸一化

  通常,我們將批量歸一化層置於全連接層中的仿射變換和激活函數之間。設全連接層的輸入為u,權重參數和偏差分別為W和b,激活函數為。設批量歸一化的運算符為BN,那么,使用批量歸一化的全連接層的輸出為,其中批量歸一化輸入x由仿射變換得到。

  考慮一個由m個樣本組成的小批量,仿射變換的輸出為一個新的小批量B=。它們正是批量歸一化層的輸入。對於小批量B任意樣本,批量歸一化層的輸出同樣是d維向量,並由以下幾步求得。首先,小批量B求均值和方差:,,其中的平方計算是按元素平方。接下來,使用元素開方和按元素除法對標准化:,是一個很小的數,保證分母大於0。在標准化的基礎上,批量歸一化層引入了兩個可以學習的模型參數,拉伸參數和偏移參數。這兩個參數和形狀相同,皆為d維向量,它們與分別按元素乘法和加法計算:,至此,我們得到了的批量歸一化的輸出。

  對卷積層做批量歸一化

   對卷積層來說,批量歸一化發生在卷積計算之后,應用激活函數之前。如果卷積計算輸出多個通道,我們需要對這些通道的輸出分別做批量歸一化,且每個通道都擁有獨立的拉伸和偏移參數,並均為標量。設小批量中有m個樣本,在單個通道上,假設卷積計算輸出的高和寬分別為p和q。我們需要對該通道中m x p x q個元素的均值和方差。

  預測時的批量歸一化

  將訓練好的模型用於預測時,我們希望模型對於任意輸入都有確定的輸出。因此,單個樣本的輸出不應取決於批量歸一化所需要的隨機小批量中的均值和方差。一種常用的方法是通過移動平均估算整個訓練數據集的樣本均值和方差,並在預測時使用它們得到確定的輸出。

  使用批量歸一化層的LeNet

小結:

  在訓練模型時,批量歸一化利用小批量上的均值和標准差,不斷調整神經網絡的中間輸出,從而使整個神經網絡在各層的中間輸出的數值更穩定。

  對全連接層和卷積層做批量歸一化的方法稍有不同。

  批量歸一化層和丟棄層一樣,在訓練模式和預測模式的計算結果是不一樣的。

  Gluon提供的BatchNorm類使用起來簡單、方便。

1.11 殘差網絡(ResNet

1.11.1殘差塊

  設輸入為x,假設我們希望學出的理想映射為,作為激活函數的輸入,左圖虛線框中的部分需要直接擬合出該映射,而右圖虛線框中的部分則需要擬合出有關恆等映射的殘差映射。只需將右圖虛線框內上方的加權運算(如仿射)的權重和偏差參數學成0,那么即為恆等映射。實際中,當理想映射接近於恆等映射時,殘差映射也易於捕捉恆等映射的細微波動。右圖是ResNet的基礎塊,即殘差塊。在殘缺塊中,輸入可通過跨層的數據線路更快的向前傳播。

 

   設輸入為x,假設圖中最上方激活函數輸入的理想映射為,左圖虛線框中的部分需要直接擬合出該映射,而右圖虛線框中的部分需要擬合出有關恆等映射的殘差映射,ResNet沿用了VGG全3x3卷積層的設計。殘差塊里首先有2個有相同輸出通道數的3x3卷積層。每個卷積層后接一個批量歸一化層和ReLU激活函數。然后將輸入跳過這兩個卷積層運算后直接加在最后的ReLU激活函數前。這樣的設計要求兩個卷積層的輸出與輸入形狀一樣,從而可以相加。如果想改變通道數,許引入一個額外的1x1卷積層來將輸入變換成需要的形狀后再做相加運算。

1.11.2  ResNet模型

  ResNet的前兩層跟之前介紹的GoogLeNet中的一樣:在輸出通道數為64、步幅為2的7x7卷積層后接步幅為2的3x3的最大池化層。不同之處在於ResNet每個卷積層后增加的批量歸一化層。

  GoogLeNet在后面接了4個由Inception塊組成的模塊,ResNet則使用4個由殘缺塊組成的模塊,每個模塊使若干個同樣的輸出通道數的殘缺塊,第一個模塊的通道數同輸入通道數一致。由於之前已經使用了步幅為2的最大池化層,所以無需減小高和寬,之后的每個模塊在第一個殘缺塊里將上一個模塊的通道數翻倍,並將高和寬減半。

  最后,與GoogLeNet一樣,加入全局平均池化層后接上全連接層輸出。

  通過配置不同的通道數和模塊里的殘缺塊數可以得到不同的ResNet模型。

  殘缺塊通過跨層的數據通道從而能夠訓練出有效的深度神經網絡。

1.12稠密連接網絡(DenseNet

  稠密連接網絡(DenseNet)與ResNet的主要區別:

   圖中將部分前后相鄰的運算抽象為模塊A和模塊B,與ResNet的主要區別在於,DenseNet里模塊B的輸出不是像ResNet那樣和模塊A的輸出相加,而是在通道維上連結。這樣模塊A的輸出可以直接傳入模塊B后面的層。在這個設計里,模塊A直接跟模塊B后面的所有層連接在一起。這也是它被稱為“稠密連接的原因。

  DenseNet的主要構建模塊是稠密塊和過渡層。前者定義了輸入和輸出是如何連結的,后者則用來控制通道數,使之不過大。

1.12.1稠密塊

  稠密塊由多個conv_block組成,每塊使用相同的輸出通道數。但在前向計算時,我們將每塊的輸入和輸出在通道維上連結。

  卷積塊的通道數控制了輸出通道數相對於輸入通道數的增長,因此也被稱為增長率。

1.12.2過渡層

  由於每個稠密塊都會帶來通道數的增加,使用過多則會帶來過於復雜的模型。過渡層用來控制模型復雜度。它通過1x1卷積層來減小通道數,並使用步幅為2的平均池化層減半高和寬,從而進一步降低模型復雜度。

1.12.3   DenseNet模型

  我們來構造DenseNet模型,DenseNet首先使用同ResNet一樣的單卷積層和最大池化層。DenseNet使用的是4個稠密模塊。

  在跨層連接上,不同於ResNet中將輸入與輸出相加,DenseNet在通道維上連結輸入與輸出。

  DenseNet的主要構建模塊是稠密塊和過渡層。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM