深度學習讀書筆記:DeepLearningBook
Chapter 9 Convolutional Networks(卷積神經網路)
- 卷積網路僅僅是在其至少一個層中使用卷積代替一般矩陣乘法的神經網路。
The Convolution Operation
- The convolution operation is typically denoted with an asterisk:
- 在卷積網路術語中,卷積的第一個引數(在本例中為函式x)通常稱為 輸入 ,第二個引數(在本例中為函式w)作為 核心 。 輸出 有時稱為 特徵對映(feature map) 。
- 在機器學習應用中, 輸入 通常是多維資料陣列,並且 核心 通常是由學習演算法調整的多維引數陣列。
- 我們將這些多維陣列稱為 張量(tensors) 。
- 這意味著在實踐中,我們可以實現無限求和作為對有限數量的陣列元素的求和。
- 二維卷積:
two-dimensional kernel K 卷積是可交換的,這意味著我們可以等價地寫,但這樣會帶來 kernel-flipping
後一種會更更容易用機器學習庫來實現。 - 許多神經網路庫實現了一個稱為互相關(cross-correlation)的相關函式,它與卷積相同,但是沒有翻轉(flipping)核心:
- 卷積的一個例子:
- 離散卷積可以被看作是乘以矩陣的乘法。
- Toeplitz矩陣:常對角矩陣(又稱特普利茨矩陣)是指每條左上至右下的對角線均為常數的矩陣,不論是正方形或長方形的。
- 在二維中,雙塊迴圈矩陣(doubly block circulant matrix)對應於卷積。
- 卷積通常對應於非常稀疏的矩陣。
- 任何與矩陣乘法一起作用並且不依賴於矩陣結構的特定屬性的神經網路演算法都應該與卷積一起工作,這樣就不需要對神經網路的任何進一步的改變。
Motivation
卷積利用三個重要的想法,可以幫助改進機器學習系統:
- 稀疏的連線(sparse interactions)
- 引數共享(parameter sharing)
- 等值表示(equivariant representations)
- 此外卷積可以處理各種大小輸入。
Sparse Interactions:這是通過使核心小於輸入來實現的。
- 我們需要儲存更少的引數,這既減少了模型的記憶體需求,又提高了其統計效率。
- 計算輸出需要更少的操作。
- 在深卷積網路中,較深層中的單元可以與輸入的較大部分間接互動,This allows the network to efficiently describe complicated interactions between many variables by constructing such interactions from simple building blocks that each only sparse interactions.
- Sparse connectivity, viewed from below
- Sparse connectivity, viewed from above
- 在卷積網路的較深層中的單元的接收場大於在淺層中的單元的接收場。這意味著即使卷積網路中的直接連線非常稀疏,更深層中的單元也可以間接地連線到所有或大部分輸入影象。
Parameter sharing:引數共享是指對模型中的多個函式使用相同的引數。
- 也可以叫 Tied Weights(捆綁權值),因為應用於一個輸入的權重的值與在其他地方應用的權重的值有關。
- 在卷積神經網路中,卷積核中的每一個元素都會在input中的每一個位置使用。
- 在儲存器要求和統計效率方面,卷積比密集矩陣乘法顯著更有效。
* 黑色箭頭表示在卷積模型中3元素核的中心元素的使用。
Equivariant:說一個函式是等變的意味著如果輸入改變,輸出以相同的方式改變。
- 一個函式f(x)與函式g 等變 如果f(g(x)) = g(f(x)).
- 當處理時間序列資料時,這意味著卷積產生一種時間線,顯示輸入中不同特徵的出現。
- This is useful for when we know that some function of a small number of neighboring pixels is useful when applied to multiple input locations.
- 卷積不是自然地等同於一些其他變換,例如影象的尺度或旋轉的變化。
卷積是描述在整個輸入上應用小的區域性區域的相同線性變換的變換的非常有效的方式。
Pooling
卷積網路的一個典型層由三個階段組成:
- 在第一階段,該層並行執行幾個卷積以產生一組線性啟用(linear activation)。
- 在第二階段,每個線性啟用通過非線性啟用函式,例如整流線性啟用函式。這一階段成為 detector stage.
- 在第三階段,我們使用池化函式(pooing function)來進一步修改層的輸出。
pooling function是用附近的彙總統計來替換特定位置的網路的輸出。
在所有情況下,池化有助於使表示變得對於相對於 輸入的小平移 幾乎不變(invariant)。
如果我們更關心某些特徵是否存在而不是完全在哪裡,那麼本地變換的不變性可以是非常有用的屬性。
池的使用可以被視為新增一個無限強的先驗,層所學習的函式必須對小的變換是不變的。
- 如果我們在單獨的引數化的卷積輸出上進行赤化,則特徵可以學習到對哪一種變換進行不變。
- 利用卷積和pooling的卷積網路架構:
Convolution and Pooling as an Infinitely Strong Prior
- 弱先驗是具有高熵的先驗分佈,例如具有高方差的高斯分佈。
- 強先驗具有非常低的熵,例如具有低方差的高斯分佈。這樣的先驗在確定引數在哪裡結束方面起更積極的作用。
- 總的來說,我們可以認為卷積可以用來為一個層的引數引入一個無限強的先驗概率分佈。
- 同樣,池的使用是保證每個單位對小的變換保持不變性的無限強的先驗。
但是將卷積網視為具有無限強的先驗的完全連線的網路可以給我們一些關於卷積網如何工作的見解。
- 一個關鍵的見解是卷積和池化可能導致欠擬合。
- 從這個觀點的另一個關鍵的見解是,我們應該只比較卷積模型與統計學習效能基準中的其他卷積模型。對於許多影象資料集,對於排列不變的模型存在單獨的基準,並且必須通過學習發現拓撲的概念,以及具有由他們的設計者硬編碼到其中的空間關係的知識的模型。
Variants of the Basic Convolution Function
首先,當我們在神經網路的上下文中提到卷積時,我們通常實際上意味著一種由許多卷積應用並行組成的操作。
- 這是因為單個核心的卷積只能提取一種特徵,雖然在許多空間位置。 通常我們希望我們網路的每一層都能在許多位置提取多種特徵。
此外,輸入通常不僅僅是是一個網格的真是資料,反而是向量值的觀測網格。
這些多通道操作可交換,僅當每個操作具有與輸入通道相同數量的輸出通道。
- 我們可能想跳過核心的一些位置,以減少計算成本,我們可以認為這是下采樣全卷積函式的輸出。
如果我們只想對輸出中每個方向的每s個畫素進行取樣,那麼我們可以定義下采樣卷積函式c:
我們將s稱為這個下采樣卷積的步幅。 也可以為每個運動方向定義一個單獨的步幅。零填充:
- 任何卷積網路實現的一個基本特徵是具備隱含地對輸入V進行零填充以便使其更寬的能力。
- 零填充輸入允許我們獨立地控制核心寬度和輸出的大小。
- 沒有零填充,我們被迫選擇快速縮小網路的空間範圍並且使用小核心 - 這兩個方案,顯著地限制了網路的表達力。
三種zero-padding的情況:
- valid convolution
- same convolution
- full convolution
Unshared convolution
- Tiled convolution:在卷積層和本地連線層之間提供了折中。我們不是在每個空間位置學習一組獨立的權重,而是學習一組核心,從而我們在空間移動時旋轉核心。
這三個操作做夠計算所有訓練一個前向卷積網路需要的梯度,以及基於卷積的轉置來訓練具有重建函式的卷積網路。
- 卷積
- 從輸出到權值反向傳播
- 從輸出到輸入反向傳播
Structured Outputs
- 卷積網路可以用於輸出高維度的結構化物件,而不僅僅是預測分類任務的類標籤或迴歸任務的實際值。
- Pixel labeling:畫素標記
- 迴圈週期卷積網路(recurrent convolutional network):
Data Types
與卷積網路一起使用的資料通常由幾個通道組成,每個通道是在空間或時間的某個點觀察不同的量。
- 卷積網路的一個優點是它們還可以處理具有變化的空間範圍的輸入。
- 有時,網路的輸出允許具有 可變大小以及輸入 ,例如如果我們想要為輸入的每個畫素分配類標籤。 在這種情況下,不需要額外的設計工作了 。
- 在其他情況下,網路必須產生一些固定大小的輸出,例如,如果我們要為整個影象分配單個類標籤。 在這種情況下,我們必須進行一些額外的設計步驟 ,例如插入一個池化層,其池區域的大小與輸入的大小成比例,以 保持固定數量 的池化輸出。
Efficient Convolution Algorithms
- 現代卷積網路應用通常涉及包含超過一百萬個單元的網路。
- 卷積等效於使用傅立葉變換將輸入和核心兩者轉換到頻域,執行兩個訊號的逐點乘法,並使用逆傅立葉變換轉換回到時域。
- 當核心是可分離的,原始的卷積是效率低下的。
- 設計更快的執行卷積或近似卷積的方法,而不損害模型的準確性是一個活躍的研究領域。
Random or Unsupervised Features
- 通常,卷積網路訓練中最昂貴的部分是學習特徵。
- 降低卷積網路訓練成本的一種方式是使用未以受監督方式訓練的特徵。
有三種不需要監督學習來獲得卷積核心的策略:
- 一個是簡單地 隨機初始化 它們。
- 另一個是用手設計它們,例如通過設定每個核心以在特定方向或尺度檢測邊緣。
- 最後,可以使用無監督標準來學習核心。
隨機濾波器在卷積網路中通常工作得很好
- 一個折中的方法是學習特徵,但使用: 每個梯度步驟不需要完全正向和反向傳播的 方法。 與多層感知器一樣,我們使用 貪婪層式預訓練 ,獨立地訓練第一層,然後從第一層提取一次所有特徵,然後利用這些特徵隔離的訓練第二層,等等。
- 不是一次訓練整個卷積層,我們可以訓練一個小補丁的模型,如用k-means。 然後,我們可以使用來自這個patch-based的模型的引數來定義卷積層的核心。
- 今天,大多數卷積網路以純粹監督的方式訓練,在每次訓練迭代中使用通過整個網路的完全正向和反向傳播。
The Neuroscientific Basis for Convolutional Networks
Convolutional Networks and the History of Deep Learning
- 為了處理一維,順序資料,我們接下來轉向神經網路框架的另一個強大的專業化: 迴圈神經網路(Recurrent neural networks) 。