《deep learning》讀書筆記9——卷積神經網絡

定義

卷積是一種特殊的線性運算。
卷積網絡是指那些至少在網絡的一層中使用卷積運算來替代一般的矩陣乘法運算的神經網絡。

什麼是卷積運算

假設我們正在用激光傳感器追蹤一艘宇宙飛船的位置。我們的激光傳感器給出一個單獨的輸出 x(t),表示宇宙飛船在時刻 t 的位置。x 和 t 都是實值的,這意味着我們可以在任意時刻從傳感器中讀出飛船的位置。

現在假設我們的傳感器含有噪聲。爲了得到飛船位置的低噪聲估計,我們對得到的測量結果進行平均。顯然,時間上越近的測量結果越相關,所以我們採用一種加權平均的方法,對於最近的測量結果賦予更高的權值。我們可以採用一個加權函數 w(a) 來實現,其中 a 表示測量結果距當前時刻的時間間隔。如果我們對任意時刻都採用這種加權平均的操作,就得到了對於飛船位置的連續估計函數 s:
在這裏插入圖片描述

這種運算就叫做卷積 (convolution)。卷積運算通常用星號表示:
在這裏插入圖片描述

在我們的例子中,w 必須是一個有效的概率密度函數,否則輸出就不再是一個加權均。另外,w 在參數爲負值時必須爲 0,否則它會涉及到未來,這不是我們能夠做到的。但這些限制僅僅是對我們這個例子來說。通常,卷積被定義在滿足上述積分式的任意函數上,並且也可能被用於加權平均以外的目的。

在卷積神經網絡的術語中,第一個參數(在這個例子中,函數 x)叫做輸 入(input),第二個參數(函數 w)叫做核函數 (kernel function)。輸出有時被稱作特徵映射 (feature map)

在機器學習的應用中,輸入通常是高維數據數組,而核也是由算法產生的高維參數組。我們把這種高維數組叫做張量。因爲輸入與核的每一個元素都分開存儲,我們經常假設在存儲了數據的有限點集以外,這些函數的值都爲零。這意味着在實際操作中,我們可以統一地把無限的求和當作對有限個數組元素的求和來用。

最後,我們有時對多個維度進行卷積運算。例如,如果把二維的圖像 I 作爲輸入,我們也相應的需要使用二維的核 K:
在這裏插入圖片描述

卷積是可交換的 (commutative),我們可以等價地寫作:
在這裏插入圖片描述

(沒懂)↓
通常,下面的公式在機器學習庫中更方便應用,因爲它在 m 和 n 的有效範圍內變化更少。
卷積運算可交換性的出現是因爲我們相對輸入翻轉 (flip) 了核,這意味着當 m增大時,輸入的索引增大,但核的索引相應的減小。翻轉核的唯一目的就是爲了得到可交換性。儘管可交換性在證明時很有用,但在神經網絡的應用中卻不是一個重要的性質。與之不同的是,許多神經網絡庫會實現一個相關的函數,稱爲互相關函數 (cross-correlation),和卷積運算幾乎一樣但是並不翻轉核:
在這裏插入圖片描述
**

許多機器學習的庫使用互相關函數但是叫它卷積。在這本書中我們遵循把兩種運算都叫做卷積的這個傳統,只有在用到核的翻轉時纔會在上下文中特別指明區別。在機器學習中,學習算法會在覈合適的位置學得恰當的值,所以一個基於核翻轉的卷積運算的學習算法所學得的核,是對未進行翻轉的算法學得的核的翻轉。單獨使用卷積運算在機器學習中是很少見的,卷積經常和其他的函數一起使用,無論卷積運算是否翻轉了它的核,這些函數的組合通常是不可交換的。

下面是一個 2 維卷積的例子(核沒有翻轉)。我們限制只對核完全處在圖像中的位置輸出,在一些上下文中稱爲 “有效’’ 卷積。我們用畫有箭頭的盒子來說明輸出張量的左上角元素是如何通過對輸入張量相應的左上角區域使用核進行卷積得到的。

在這裏插入圖片描述

積對應着一個雙重塊循環矩陣 (doubly block circulant matrix)。除了這些元素相等的限制以外,卷積通常對應着一個非常稀疏的矩陣(幾乎所有的元素都爲零)。這是因爲核通常要遠小於輸入的圖像。任何一個使用矩陣乘法但是並不依賴矩陣結構的特殊性質的神經網絡算法,都適用於卷積運算,並且不需要對神經網絡做出大的修改。典型的卷積神經網絡爲了更有效地處理大規模輸入,確實使用了一些專門化的技巧,但這些在理論分析方面並不是嚴格必要的。

在神經網絡中使用卷積運算的動機

卷積運算通過三個重要的思想來幫助改進機器學習系統:
稀疏交互 (sparse interactions)、參數共享 (parameter sharing)、等變表示 (equivariant representations)。另外,卷積提供了一種處理大小可變的輸入的方法。

傳統的神經網絡使用矩陣乘法來建立輸入與輸出的連接關係。其中,參數矩陣的每一個獨立的參數都描述了每一個輸入單元與每一個輸出單元間的交互。這意味着每一個輸出單元與每一個輸入單元都產生交互。然而,卷積神經網絡具 有稀疏交互 (sparse interactions)(也叫做稀疏連接 (sparse connectivity) 或者稀疏權重 (sparse weights))的特徵。這通過使得核的規模遠小於輸入的規模來實現。舉個例子,當進行圖像處理時,輸入的圖像可能包含百萬個像素點,但是我們可以通過只佔用幾十到上百個像素點的核來探測一些小的有意義的特徵,例如圖像的邊緣。這意味着我們需要存儲的參數更少,不僅減少了模型的存儲需求,而且提高了它的統計效率。這也意味着爲了得到輸出我們只需要更少的計算量。這些效率上的提高往往是很顯著的。如果有 m 個輸入和 n 個輸出,那麼矩陣乘法需要 m × n 個參數並且相應算法的時間複雜度爲 O(m × n)(對於每一個例子)。如果我們限制每一個輸出擁有的連接數爲 k,那麼稀疏的連接方法只需要 k × n 個參數以及 O(k × n) 的運行時間。在很多應用方面,只需保持 k 的數量級遠小於 m,就能在機器學習的任務中取得好的表現。

在這裏插入圖片描述
在這裏插入圖片描述在深度卷積網絡中,處在深層的單元可能不直接地與絕大部分輸入連接。
在這裏插入圖片描述

這允許網絡可以通過只描述稀疏交互的基石來高效地描述多個變量的複雜交互。

參數共享 (parameter sharing) 是指在一個模型的多個函數中使用相同的參數。在傳統的神經網絡中,當計算一層的輸出時,權值矩陣的每一個元素只使用一次,當它乘以輸入的一個元素後就再也不會用到了。作爲參數共享的同義詞,我們可以說一個網絡含有綁定的權值 (tied weights),因爲用於一個輸入的權值也會被綁定在其他的權值上。在卷積神經網絡中,核的每一個元素都作用在輸入的每一位置上(除了一些可能的邊界像素,取決於對於邊界的決策設計)。卷積運算中的參數共享保證了我們只需要學習一個參數集合,而不是對於每一位置都需要學習一個單獨的參數集合。這雖然沒有改變前向傳播的時間(仍然是 O(k × n)),但它顯著地把模型的存儲需求降低至 k 個參數,並且 k 通常是遠小於 m 的數量級。因爲 m 和 n 通常規模很接近,k 在實際中相對於 m × n 是很小的。因此,卷積在存儲需求和統計效率方面極大地優於稠密矩陣的乘法運算。

參數共享的實現↓,沒看懂
在這裏插入圖片描述

作爲前兩條原則的一個實際例子,圖9.6說明了稀疏連接和參數共享是如何顯著地提高用於圖像邊緣檢測的線性函數的效率的。
在這裏插入圖片描述

對於卷積,參數共享的特殊形式使得神經網絡層具有對平移等變 (equivariance)的性質。如果一個函數滿足輸入改變,輸出也以同樣的方式改變這一性質,我們就說它是等變 (equivariant) 的。特別地,如果函數 f(x) 與 g(x) 滿足 f(g(x)) = g(f(x)),我們就說 f(x) 對於變換 g 具有等變性。對於卷積來說,如果令 g 是輸入的任意平移函數,那麼卷積函數對於 g 具有等變性。

舉個例子,令 I 表示圖像的明亮度函數(取值爲整數),g 表示圖像函數的變換函數(把一個圖像函數映射到另一個圖像函數的函數)使得 I′ = g(I),其中 I′(x, y) = I(x 1, y)。這個函數把 I 中的每個像素向右移動一格。如果我們先對 I 進行這種變換然後進行卷積操作所得到的結果,與先對 I 進行卷積然後再對輸出使用平移函數 g 得到的結果是一樣的。當處理時間序列數據時,卷積產生一條用來表明輸入中出現不同特徵的某種時間軸。如果我們把輸入中的一個事件向後延時,在輸出中也會有完全相同的表示,只是時間延時了。圖像與之類似,卷積產生了一個 2 維映射來表明某種屬性在輸入的什麼位置出現了。如果我們移動輸入中的對象,它的表示也會在輸出中移動同樣的量。當處理多個輸
入位置時,一些作用在鄰居像素的函數是很有用的。例如在處理圖像時,在卷積神經網絡的第一層進行圖像的邊緣檢測是很有用的相同的邊緣或多或少地散落在圖
像的各處,所以應當對整個圖像進行參數共享
。**但在某些情況下,我們並不希望對
整幅圖進行參數共享。**例如當我們在處理人臉圖像(圖像已經被剪裁成人臉在中心)
時,我們可能會希望在不同的部位探測出不同的特徵(處理人臉上部的網絡需要去
搜尋眉毛,處理人臉下部的網絡就需要去搜尋下巴了)。卷積對其他的一些變換並不是天然等變的,例如對於圖像尺度或者角度的變換,需要其他的一些機制來處理這些變換。最後,一些不能被傳統的由(固定大小的)矩陣乘法定義的神經網絡處理的特殊數據,可能通過卷積神經網絡來處理。

幾乎所有的卷積神經網絡都會用到的操作池化

卷積神經網絡的卷積層通常包含三級(如圖9.7所示)。在第一級中,卷積層並行地進行多個卷積運算來產生一組線性激活函數。在第二級中,非線性的激活函數如整流線性單元函數等作用在第一級中的每一個線性輸出上。這一級有時也被稱爲探測級 (detector stage)。在第三級中,我們使用池化函數 (pooling function) 來更進一步地調整卷積層的輸出。
在這裏插入圖片描述

池化函數使用某一位置的相鄰輸出的總體統計特徵來代替網絡在該位置的輸出。例如,最大池化 (max pooling) 函數 (Zhou and Chellappa, 1988) 給出相鄰矩形區域內的最大值。其他常用的池化函數包括相鄰矩形區域內的平均值、L2 範數以及依靠據中心像素距離的加權平均函數。

不管採用什麼樣的池化函數,當輸入作出少量平移時,池化能幫助我們的表示近似不變 (invariant)。對於平移的不變性是說當我們把輸入平移一微小的量,大多數通過池化函數的輸出值並不會發生改變。

在這裏插入圖片描述

局部平移不變性是一個很重要的性質,尤其是當我們關心某個特徵是否出現而不關心它出現的具體位置時。例如,當判定一張圖像中是否包含人臉時,我們並不需要知道眼睛的具體像素位置,我們只需要知道有一隻眼睛在臉的左邊,有一隻在右邊就行了。但在一些其他領域,保存特徵的具體位置卻很重要。例如當我們想要尋找一個由兩條邊相交而成的拐角時,我們就需要很好地保存邊的位置來判定它們是否相交。

使用池化可以看作是增加了一個無限強的先驗:卷積層學得的函數必須具有對少量平移的不變性。當這個假設成立時,池化可以極大地提高網絡的統計效率。

因爲池化綜合了全部鄰居的反饋,這使得池化單元少於探測單元成爲可能,我們可以通過綜合池化區域的 k 個像素的統計特徵而不是單個像素來實現。
在這裏插入圖片描述

在很多任務中,池化對於處理不同大小的輸入具有重要作用。例如我們想對不同大小的圖像進行分類時,分類層的輸入必須是固定的大小,而這通常通過調整池 化區域的偏置大小來實現,這樣分類層總是能接收到相同數量的統計特徵而不管最初的輸入大小了。例如,最終的池化層可能會輸出四組綜合統計特徵,每組對應着圖像的一個象限,而與圖像的大小無關。

一些理論工作對於在不同情況下應當使用哪種池化函數給出了一些指導。動態地把特徵池化在一起也是可行的,例如,通過針對特定屬性的位置運行聚類算法,這種方法對於每幅圖像產生一個不同的池化區域集合。另一種方法是先學習一個單獨的池化結構,再應用到全部的圖像中。

池化可能會使得一些利用自頂向下信息的神經網絡結構變得複雜,例如玻爾茲曼機和自編碼器。

在這裏插入圖片描述

上圖是卷積網絡用於分類的架構示例。本圖中使用的具體步幅和深度並不適合實際使用;它們被設計得非常淺以適合頁面。實際的卷積網絡也常常涉及大量的分支,不同於這裏爲簡單起見所使用的鏈式結構。(左) 處理固定大小的圖像的卷積網絡。在卷積層和池化層幾層交替之後,卷積特徵映射的張量被重新整形以展平空間維度。網絡的其餘部分是一個普通的前饋網絡分類器,如第六章所述。(中) 處理大小可變的圖像的卷積網絡,但仍保持全連接的部分。該網絡使用具有可變大小但是數量固定的池的池化操作,以便向網絡的全連接部分提供 576 個單位的固定大小的向量。(右) 沒有任何全連接權重層的卷積網絡。相反,最後的卷積層爲每個類輸出一個特徵映射。該模型可能學習每個類在每個空間位置出現的可能性的映射。將特徵映射進行平均得到的單個值,提供了頂部 softmaxDRAFT 分類器的變量。

卷積與池化作爲一種無限強的先驗

先驗概率分佈 (prior probability distribution) :這是一個模型參數的概率分佈,它刻畫了在我們看到數據之前我們認爲什麼樣的模型是合理的信念。

先驗被認爲是強或者弱取決於先驗中概率密度的集中程度。弱先驗具有較高的熵值,例如方差很大的高斯分佈,這樣的先驗允許數據對於參數的改變具有或多或少的自由性強先驗具有較低的熵值,例如方差很小的高斯分佈,這樣的先驗在決定參數最終取值時起着更加積極的作用

一個無限強的先驗對一些參數的概率置零並且要求禁止對這些參數賦值,無論數據對於這些參數的值給出了多大的支持。我們可以把卷積神經網絡想成和全連接網絡類似,但對於這個全連接網絡的權值有一個無限強的先驗。這個無限強的先驗是說一個隱藏單元的權值必須和它鄰居的權值相等,但在空間中改變。這個先驗也要求除了那些處在隱藏單元空間連續的小的接收域以內的權值外,其餘的權值都爲零。總之,我們可以把卷積的使用當作是對網絡中一層的參數引入了一個無限強的先驗概率分佈。這個先驗是說該層應該學得的函數只包含局部連接關係並且對平移具有等變性。類似的,使用池化也是一個無限強的先驗:每一個單元都具有對少量平移的不變性

當然,把卷積神經網絡當作一個具有無限強先驗的全連接網絡來實現會導致極大的計算浪費。但把卷積神經網絡想成具有無限強先驗的全連接網絡可以幫助我們更好地洞察卷積神經網絡是如何工作的。

其中一個關鍵的洞察是卷積和池化可能導致欠擬合。與任何其他先驗類似,卷積和池化只有當先驗的假設合理且正確時纔有用。如果一項任務依賴於保存精確的空間信息,那麼在所有的特徵上使用池化將會增大訓練誤差。一些卷積神經網絡(Szegedy et al., 2014a) 爲了既獲得具有較高不變性的特徵又獲得當平移不變性不合理時不會導致欠擬合的特徵,被設計成在一些通道上使用池化而在另一些通道上不使用。當一項任務涉及到要對輸入中相隔較遠的信息進行合併時,那麼卷積所需要的先驗可能就不正確了。

另一個關鍵洞察是當我們比較卷積模型的統計學習表現時,只能以基準中的其他卷積模型作爲比較的對象。其他不使用卷積的模型即使我們把圖像中的所有像素點都置換後依然有可能進行學習。對於許多圖像數據集,還有一些分別的基準,有些是針對那些具有置換不變性 (permutation invariant) 並且必須通過學習發現拓撲結構的模型,還有一些是針對設計者將空間關係的知識通過硬編碼給了它們的模型。

神經網絡實踐中用得比較多的幾種卷積函數的變體

當在神經網絡的上下文中討論卷積時,我們通常不是特指數學文獻中使用的那種標準的離散卷積運算。實際應用中的函數略微有些不同。這裏我們詳細討論一下這些差異,並且對神經網絡中用到的函數的一些重要性質進行重點說明。

首先,當我們提到神經網絡中的卷積時,我們通常是指一次特定的運算,而這種運算包含了並行地使用多個卷積。這是因爲帶有單個核的卷積只能提取一種類型的特徵,儘管它作用在多個空間位置上。我們通常希望神經網絡的一層能夠在多個位置提取多種類型的特徵。

另外,輸入通常也不僅僅是實值的網格,而是由一系列向量值的觀測數據構成的網格。例如,一幅彩色圖像在每一個像素點都會有紅綠藍三種顏色的亮度。在多層的卷積神經網絡中,第二層的輸入是第一層的輸出,通常在每個位置包含多個卷積的輸出。當用於圖像時,我們通常把卷積的輸入輸出都看作是 3 維的張量,其中一個索引用於標明不同的通道(例如紅綠藍),另外兩個索引標明在每個通道上的空間座標。軟件實現通常使用批處理模式,所以它們會使用 4 維的張量,第四維索引用於標明批處理中不同的實例,但我們爲簡明起見這裏忽略批處理索引。

因爲卷積神經網絡通常使用多通道的卷積,它們基於的線性運算並不保證一定是可交換的,即使使用了核翻轉也是如此。這些多通道的運算只有當其中的每個運算的輸出和輸入具有相同的通道數時纔是可交換的

在這裏插入圖片描述

這裏對所有的 l,m 和 n 進行求和是對所有(在求和式中)有效的張量索引的值進行求和。在線性代數中,向量的索引通常從1開始,這就是上述公式中-1的由來。但是像 C 或 Python 這類編程語言索引通常從 0 開始,這使得上述公式可以更加簡潔。

我們有時會希望跳過核中的一些位置來降低計算的開銷(相應的代價是提取特徵沒有先前那麼好了)。我們可以把這一過程看作是對卷積函數輸出的下采樣(downsampling)。如果我們只想對輸出的每個方向上的 s 個像素進行採樣,那麼我們可以定義一個下采樣卷積函數 c 使得
在這裏插入圖片描述
我們把 s 稱爲下采樣卷積的步幅 (stride)。當然也可以對每個移動方向定義不同的步幅。
在這裏插入圖片描述
(上) 在單個操作中實現的步幅爲二的卷積。(下)步幅大於一個像素的卷積在數學上等價於單位步幅的卷積隨後下采樣。顯然,涉及下采樣的兩步法在計算上是浪費的,因爲它計算了許多將被丟棄的值。

在任何卷積神經網絡的應用中都有一個重要性質,那就是能夠隱含地對輸入 V用零進行填充 (pad) 使得它加寬。如果沒有這個性質,表示的寬度在每一層就會縮減,縮減的幅度是比核少一個像素這麼多。對輸入進行零填充允許我們對核的寬度和輸出的大小進行獨立的控制。如果沒有零填充,我們就被迫面臨二選一的局面,要麼選擇網絡空間寬度的快速縮減,要麼選擇一個小型的核——這兩種情境都會極大得限制網絡的表示能力。

在這裏插入圖片描述

有三種零填充設定的情況值得注意。
第一種是無論怎樣都不使用零填充的極端情況,並且卷積核只允許訪問那些圖像中能夠完全包含整個核的位置。在 MATLAB中,這稱爲有效 (valid) 卷積。在這種情況下,輸出的所有像素都是輸入中相同數量像素的函數,這使得輸出像素的表示更加規範。然而,輸出的大小在每一層都會縮減。如果輸入的圖像寬度是 m,核的寬度是 k,那麼輸出的寬度就會變成 m- k + 1。**如果卷積核非常大的話縮減率會非常顯著。因爲縮減數大於 0,這限制了網絡中能夠包含的卷積層的層數。**當層數增加時,網絡的空間維度最終會縮減到 1 × 1,這種情況下另外的層就不可能進行有意義的卷積了。
第二種特殊的情況是隻進行足夠的零填充來保持輸出和輸入具有相同的大小。在 MATLAB 中,這稱爲相同 (same) 卷積。在這種情況下,網絡能夠包含任意多的卷積層,只要硬件可以支持,這是因爲卷積運算並沒有改變相關的結構。然而,輸入像素中靠近邊界的部分相比於中間部分對於輸出像素的影響更小。這可能會導致邊界像素存在一定程度的欠表示。
這使得第三種極端情況產生了,在 MATLAB 中稱爲全 (full) 卷積。它進行了足夠多的零填充使得像素在每個方向上恰好被訪問了k次,最終輸出圖像的寬度爲m+k-1次。在這種情況下,輸出像素中靠近邊界的部分相比於中間部分是更少像素的函數。這將導致學得一個在卷積特徵映射的所有位置都表現不錯的單核更爲困難。通常零填充的最優數量(對於測試集的分類正確率)處於 “有效卷積’’ 和 “相同卷積’’ 之間的某個位置。

在一些情況下,我們並不一定真正想用卷積,而只是用一些局部連接的網絡層(LeCun, 1986, 1989)。在這種情況下,我們的多層感知機對應的鄰接矩陣是相同的,但每一個連接都有它自己的權重,用一個 6 維的張量 W 來表示。W 的索引分別是:輸出的通道 i,輸出的行 j 和列 k,輸入的通道 l,輸入的行偏置 m 和列偏置 n。局部連接層的線性部分可以表示爲
在這裏插入圖片描述
這有時也被稱爲非共享卷積 (unshared convolution),因爲它和帶有一個小核的離散卷積運算很像,但並不橫跨位置來共享參數。

在這裏插入圖片描述

當我們知道每一個特徵都是一小部分空間的函數而不是整個空間的特徵時,局部連接層是很有用的。例如,如果我們想要辨別一張圖片是否是人臉圖像時,我們只需要去尋找嘴是否在圖像的下部中央部分即可。

使用那些連接被更進一步限制的卷積或者局部連接層也是有用的,例如,限制每一個輸出的通道 i 僅僅是輸入通道 l 的一部分的函數時。實現這種情況的一種通用方法是使輸出的前 m 個通道僅僅連接到輸入的前 n 個通道,輸出的接下來的 m個通道僅僅連接到輸入的接下來的 n 個通道,以此類推。
在這裏插入圖片描述

對少量通道間的連接進行建模允許網絡使用更少的參數,這降低了存儲的消耗以及提高了統計效率,並且減少了前向和反向傳播所需要的計算量。這些目標的實現並沒有減少隱藏單元的數目。

拼貼卷積(tiled convolution)對卷積層和局部連接層進行了折衷。這裏並不是對每一個空間位置的權重集合進行學習,我們學習一組核使得當我們在空間移動時它們可以循環利用。這意味着在近鄰的位置上擁有不同的過濾器,就像局部連接層一樣,但是對於這些參數的存儲需求僅僅會增長常數倍,這個常數就是核的集合的大小,而不是整個輸出的特徵映射的大小。

局部連接層與拼貼卷積層都和最大池化有一些有趣的關聯:這些層的探測單元都是由不同的過濾器驅動的。如果這些過濾器能夠學會探測相同隱含特徵的不同變換形式,那麼最大池化的單元對於學得的變換就具有不變性(如圖9.9所示)。卷積層對於平移具有內置的不變性。

實現卷積神經網絡時採用除卷積以外的一些其他運算通常也是必須的。爲了實現學習,必須在給定輸出的梯度時能夠計算核的梯度。在一些簡單情況下,這種運算可以通過卷積來實現,但在很多我們感興趣的情況下,包括步幅大於1 的情況,並不具有這樣的性質。

回憶一下卷積是一種線性運算,所以可以表示成矩陣乘法的形式(如果我們首先把輸入張量變形爲一個扁平的向量)。涉及到的矩陣是卷積核的函數。這個矩陣是稀疏的並且核的每個元素都複製給矩陣的很多個元素。這種觀點能夠幫助我們導出卷積神經網絡需要的很多其他運算。

通過卷積定義的矩陣轉置的乘法就是這樣一種運算。這種運算用於通過卷積層反向傳播誤差的導數,所以它在訓練多於一個隱藏層的卷積神經網絡時是必要的。如果我們想要從隱藏層單元重構可視化單元時,同樣的運算也是需要的。重構可視化單元是本書第三部分的模型廣泛用到的一種運算,這些模型包括自編碼器、RBM和稀疏編碼等等。構建這些模型的卷積化的版本都要用到轉置化卷積。就像核梯度的運算,這種輸入梯度運算在某些情況下可以用卷積來實現,但在一般情況下需要用到第三種運算來實現。必須非常小心地來使這種轉置運算和前向傳播過程相協調。轉置運算返回的輸出的大小取決於三個方面零填充的策略、前向傳播運算的步幅和前向傳播的輸出映射的大小。在一些情況下,不同大小的輸入通過前向傳播過程能夠得到相同大小的輸出映射,所以必須明確地告知轉置運算原始輸入的大小。

這三種運算——卷積、從輸出到權重的反向傳播和從輸出到輸入的反向傳播——對於訓練任意深度的前饋卷積網絡,以及訓練帶有(基於卷積的轉置的)重構函數的卷積網絡,這三種運算都足以計算它們所需的所有梯度

一般來說,在卷積層從輸入到輸出的變換中我們不僅僅只用線性運算。我們一般也會在進行非線性運算前,對每個輸出加入一些偏置項。這樣就產生了如何在偏置項中共享參數的問題。對於局部連接層,很自然地對每個單元都給定它特有的偏置,對於拼貼卷積,也很自然地用與核一樣的拼貼模式來共享參數。對於卷積層來說,通常的做法是在輸出的每一個通道上都設置一個偏置,這個偏置在每個卷積映射的所有位置上共享。然而,如果輸入是已知的固定大小,也可以在輸出映射的每個位置學習一個單獨的偏置。分離這些偏置可能會稍稍降低模型的統計效率,但同時也允許模型來校正圖像中不同位置的統計差異。例如,當使用隱含的零填充時,圖像邊緣的探測單元接收到較少的輸入,因此需要較大的偏置。

如何在多種不同維數的數據上使用卷積運算

結構化輸出

卷積神經網絡可以用於輸出高維的結構化對象,而不僅僅是預測分類任務的類標籤或迴歸任務的實數值。通常這個對象只是一個張量,由標準卷積層產生。例如,
在這裏插入圖片描述

經常出現的一個問題是輸出平面可能比輸入平面要小,如圖9.13所示。
在這裏插入圖片描述

用於對圖像中單個對象分類的常用結構中,網絡空間維數的最大減少來源於使用大步幅的池化層。爲了產生與輸入大小相似的輸出映射,我們可以避免把池化放在一起(Jain et al., 2007)。另一種策略是單純地產生一張低分辨率的標籤網格(Pinheiro and Collobert, 2014, 2015)。最後,原則上可以使用具有單位步幅的池化操作

對圖像逐個像素標記的一種策略是先產生圖像標籤的原始猜測,然後使用相鄰像素之間的交互來修正該原始猜測。重複這個修正步驟數次對應於在每一步使用相同的卷積,該卷積在深層網絡的最後幾層之間共享權重(Jain et al., 2007)。這使得在層之間共享參數的連續的卷積層所執行的一系列運算,形成了一種特殊的循環神經網絡(Pinheiro and Collobert, 2014, 2015)。圖9.17給出了這樣一個循環卷積網絡的結構。
在這裏插入圖片描述

一旦對每個像素都進行了預測,可以使用各種方法來進一步處理這些預測,以便獲得圖像在區域上的分割(Briggman et al., 2009; Turaga et al., 2010; Farabet et al.,
2013)。一般的想法是假設大片相連的像素傾向於對應着相同的標籤。圖模型可以描
述相鄰像素間的概率關係。或者,卷積網絡可以被訓練來最大化地近似圖模型的訓練目標(Ning et al., 2005; Thompson et al., 2014)。

數據類型

卷積神經網絡使用的數據通常包含多個通道,每個通道是時間或空間中某一點的不同觀測量。參見表9.1來了解具有不同維數和通道數的數據類型的例子。
在這裏插入圖片描述

到目前爲止,我們僅討論了訓練和測試數據中的每個樣例都有相同的空間維度的情況。卷積網絡的一個優點是它們還可以處理具有變化的空間尺度的輸入。這些類型的輸入不能用傳統的基於矩陣乘法的神經網絡來表示。這提供了使用卷積網絡的令人信服的理由,即使當計算成本和過擬合也不是主要問題時。

例如,考慮一組圖像的集合,其中每個圖像具有不同的高度和寬度。目前還不清楚如何用固定大小的權重矩陣對這樣的輸入進行建模。卷積就可以很直觀的應用核依據輸入的大小簡單地被使用不同次,並且卷積運算的輸出也相應地放縮。卷積可以被視爲矩陣乘法,相同的卷積核爲每種大小的輸入引入了一個不同大小的雙重塊循環矩陣。有時,網絡的輸出允許和輸入一樣具有可變的大小,例如如果我們想要爲輸入的每個像素分配一個類標籤。在這種情況下,不需要進一步的設計工作。在其他情況下,網絡必須產生一些固定大小的輸出,例如,如果我們想要爲整個圖像指定單個類標籤。在這種情況下,我們必須進行一些額外的設計步驟,例如插入一個池化層,池化區域的大小要與輸入的大小成比例,以便保持固定數量的池化輸出。這種策略的一些例子可以參見圖9.11。

注意,使用卷積處理可變尺寸的輸入僅對具有尺寸可變的輸入纔有意義,因爲它們包含對相同種類的事物的不同量的觀察——時間上不同長度的記錄,空間上不同寬度的觀察等。如果輸入具有可變尺寸,卷積是沒有意義的,因爲它可以選擇性地包括不同種類的觀察。例如,如果我們正在處理大學申請,並且我們的特徵包括成績和標準化測試分數,但不是每個申請人都進行了標準化測試,則使用相同的權重來對成績特徵和測試分數特徵進行卷積是沒有意義的。

使得卷積運算更加高效的一些方法

卷積等效於使用 Fourier變換將輸入與核都轉換到頻域,執行兩個信號的逐點相乘,並使用 Fourier逆變換轉換回時域。對予某些問題大小,這可能比離散型卷積的樸素實現更快。

在這裏插入圖片描述

設計更快的執行卷積或近似卷積,而不損害模型準確性的方法,是一個活躍的研究領域。甚至僅提高前向傳播效率的技術也是有用的,因爲在商業環境中,通常部署網絡比訓練網絡還要耗資源

隨機或無監督的特徵

通常,卷積網絡訓練中最昂貴的部分是學習特徵。輸出層通常相對便宜,因爲在通過若干層池化之後作爲該層輸入的特徵的數量較少。當使用梯度下降執行有監督訓練時,每個梯度步驟需要完整的運行前向傳播和反向傳播通過整個網絡。減少卷積網絡訓練成本的一種方式是使用那些不是通過有監督方式訓練的特徵

三種基本策略不通過有監督訓練而得到卷積核。其中一個是簡單地隨機初始化它們。另一個是手動設計它們,例如設置每個核在一個特定的方向或尺度來檢測邊緣。最後,可以使用無監督的標準來學習核。例如,Coates et al. (2011) 將k均值聚類算法應用於小圖像塊,然後使用每個學得的中心作爲卷積核。第三部分描述了更多的無監督學習方法。使用無監督標準學習特徵,允許它們的確定與位於網絡結構頂層的分類層相分離。然後只需提取一次全部訓練集的特徵,構造用於最後一層的新訓練集。假設最後一層類似邏輯迴歸或者SVM,那麼學習最後一層通常是凸優化問題

隨機過濾器經常在卷積網絡中表現得出乎意料得好 Jarrett et a.(2000;Saxeeta(2011; Pinto et al.(20); Cox and Pinto(2011) Saxe et al.(201)說明,由卷積和隨後的池化組成的層,當賦予隨機權值時,自然地變得具有頻率選擇和平移不變性。他們認爲這提供了一種廉價的方法來選擇卷積網絡的結構:首先通過僅訓練最後一層來評估幾個卷積網絡結構的性能,然後選擇最好的結構並使用更昂貴的方法來訓練整個網絡

一箇中間方法是學習特徵,但是使用一些特殊的方法,這些方法不需要在每個梯度步驟中都進行完整的前向和反向傳播。與多層感知機一樣,我們使用貪心逐層式預訓練,獨立地訓練第一層,然後從第一層提取所有特徵一次,然後用那些特徵隔離訓練第二層,以此類推。第八章描述瞭如何實現有監督的貪心逐層預訓練,第三部分將此擴展到了無監督的範疇。卷積模型的貪心逐層預訓練的經典模型是卷積深度信念網絡( llee et a2,2009)。卷積網絡爲我們提供了相對於多層感知機更進一步採用預訓練策略的機會。不是一次訓練整個卷積層,我們可以訓練一小塊模型,就像 Coateseta.(2011)使用k均值做的那樣。然後,我們可以用來自這個小塊模型的參數來定義卷積層的核。這意味着使用無監督學習來訓練卷積網絡並且在訓練的過程中完全不使用卷積是可能的。使用這種方法,我們可以訓練非常大的模型,並且只在推理期間產生高計算成本( Ranzato et al,2007c; J Jarrett et al,2009b; Kavukcuoglu et al,2010; Coates et al,2013)。這種方法從2007年到2013年流行,當時標記的數據集很小,並且計算能力更有限。如今,大多數卷積網絡以純粹有監督的方式訓練,在每次訓練迭代中使用通過整個網絡的完整的前向和反向傳播。

與其他無監督預訓練的方法一樣,使用這種方法的一些好處仍然難以說清。無監督預訓練可以提供一些相對於有監督訓練的正則化,或者它可以簡單地允許我們訓練更大的結構,因爲它的學習規則減少了計算成本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章