第九章 卷積網路 (開篇引言)
2017-04-14
Convolutional Networks
https://www.youtube.com/watch?v=51cO6Kv37p4
重點摘要: 卷積神經網路 (Convolutional Neural Network, CNN),有時也叫做卷積網路 (convolutional network),是一類專門用來處理具有類似網格結構的數據的神經網路。例如,時間序列數據(可以認為是在時間軸上規律採樣形成的一維網格)和圖像數據(可以看作是二維的像素網格)。卷積網路在諸多應用領域都表現優異。「卷積神經網路」一詞表明該網路使用了卷積 (convolution) 這種數學運算。卷積是一種特殊的線性運算。卷積網路是指那些至少在網路的一層中使用卷積運算來替代一般矩陣乘法運算的神經網路。 本章將首先說明什麼是卷積運算,接著解釋在神經網路中使用卷積運算的動機。然後介紹池化 (pooling),這是一種幾乎所有的卷積網路都會用到的操作。通常來說,卷積神經網路中用到的卷積運算和其他領域(例如工程領域以及純數學領域)中的定義並不完全一致。我們會對神經網路實踐中廣泛應用的幾種卷積函數的變體進行說明。也會說明如何在多種不同維數的數據上使用卷積運算,之後討論使得卷積運算更加高效的一些方法。
Q: 什麼是卷積神經網路 (CNN)?它主要用於處理什麼類型的數據?
A: 卷積神經網路 (CNN) 是一類專門設計用來處理具有類似網格結構的數據的神經網路。最常見的例子是圖像數據(可以看作是二維像素網格),以及時間序列數據(可以看作是一維網格)。
Q: 「卷積網路」這個名稱來源於什麼?它與傳統神經網路在運算上有什麼主要區別?
A: 「卷積網路」這個名稱來源於它在網路的至少一層中使用了卷積 (convolution) 這種數學運算。 與傳統神經網路(如全連接網路)的主要區別在於,傳統神經網路通常使用一般的矩陣乘法來進行層與層之間的線性變換,而卷積網路則使用卷積運算作為其主要的線性運算方式。
Q: 本章除了卷積運算本身,還會介紹卷積網路中的哪個常用操作?
A: 本章還會介紹池化 (pooling) 操作,這是一種幾乎所有卷積網路都會用到的操作,通常用於降低特徵圖的維度和增加感受野。
9.1 卷積運算
重點摘要:
在通常形式中,卷積是對兩個實變函數的一種數學運算。如果我們有一個一維信號輸入 x(t)
和一個濾波器(或核函數)w(a)
,它們的卷積 s(t) = (x * w)(t)
定義為:
s(t) = ∫ x(a)w(t-a)da
(公式 9.1)
在機器學習的應用中,輸入通常是多維數組的數據,而核通常是由學習算法優化得到的多維數組的參數。這些多維數組被稱為張量。
對於離散的二維圖像 I
和二維核 K
,卷積定義為:
S(i,j) = (I * K)(i,j) = Σ_m Σ_n I(m,n)K(i-m, j-n)
(公式 9.4)
卷積運算是可交換的。在機器學習庫中,通常實現的是互相關 (cross-correlation) 運算,它與卷積非常相似,但不對核進行翻轉:
S(i,j) = (I ☆ K)(i,j) = Σ_m Σ_n I(i+m, j+n)K(m,n)
(公式 9.6)
許多機器學習庫將互相關函數稱為卷積,儘管嚴格來說它們不同。由於核是學習得到的,這種差異通常不重要。互相關運算可以通過等效的、涉及稀疏 Toeplitz 矩陣(或雙塊循環矩陣)的矩陣乘法來實現。
Q: 什麼是卷積運算?請給出其在一維連續信號和二維離散圖像上的定義。
A: 卷積運算是對兩個函數(一個通常被視為輸入信號,另一個被視為濾波器或核)產生第三個函數(表示一個函數經過另一個函數「滑動」後的加權平均)的一種數學運算。
- 一維連續信號: 如果
x(t)
是輸入信號,w(a)
是核函數,它們的卷積s(t) = (x * w)(t)
定義為:s(t) = ∫_{-∞}^{∞} x(a)w(t-a)da
(積分遍及a
) - 二維離散圖像: 如果
I
是輸入圖像,K
是核,它們的卷積S(i,j) = (I * K)(i,j)
定義為:S(i,j) = Σ_m Σ_n I(m,n)K(i-m, j-n)
(求和遍及所有可能的m
和n
)
Q: 卷積運算具有什麼重要的數學性質?
A: 卷積運算具有可交換性 (commutativity),即 x * w = w * x
。這意味著我們可以翻轉輸入和核的角色,結果仍然相同。
Q: 機器學習庫中通常實現的「卷積」運算在數學上更準確地應該被稱為什麼?它與嚴格定義的卷積有何不同?
A: 機器學習庫中通常實現的「卷積」運算在數學上更準確地應該被稱為互相關 (cross-correlation)。
它與嚴格定義的卷積的不同之處在於,互相關運算不對核進行翻轉 (flip)。
* 卷積: S(i,j) = Σ_m Σ_n I(m,n)K(i-m, j-n)
(注意 K
的索引是 i-m, j-n
)
* 互相關: S(i,j) = Σ_m Σ_n I(i+m, j+n)K(m,n)
(注意 I
的索引是 i+m, j+n
)
或者等價地,互相關可以寫成 S(i,j) = Σ_m Σ_n I(m,n)K(m-i, n-j)
(如果將求和中心對準輸出)。
由於在神經網路中,核的參數是通過學習得到的,所以核是否被翻轉通常並不影響模型的學習能力,只是學習到的核的權重會相應地不同。因此,出於實現的簡便性,許多庫直接實現互相關並稱之為卷積。
9.2 動機
重點摘要: 卷積運算通過三個重要的思想來幫助改進機器學習系統:稀疏交互 (sparse interactions)、參數共享 (parameter sharing) 和等變表示 (equivariant representations)。
- 稀疏交互 (或稀疏連接、稀疏權重): 在傳統神經網路中,每個輸出單元與所有輸入單元交互(通過矩陣乘法)。卷積網路則具有稀疏交互的特性,這是通過使核的大小遠小於輸入的大小來實現的。例如,處理圖像時,輸入可能有數百萬像素,但我們可能檢測只占據幾十或幾百像素的有用特征,如邊緣。這意味著我們只需要存儲更少的參數,提高了模型的統計效率,並且計算量也更小。一個輸出單元的感受野 (receptive field) 是指輸入中影響該輸出單元的部分。
- 參數共享: 指在一個模型的不同部分使用相同的參數。在卷積網路中,核的每個元素都被應用於輸入的每個位置(通過滑動核)。這意味著用於在一個位置檢測邊緣的參數,也被用於在另一個位置檢測邊緣。這極大地減少了模型的參數數量,並提高了統計效率。傳統神經網路如果大小為
m
個輸入和n
個輸出,則有m x n
個參數;如果使用大小為k
的核進行卷積,則只有k
個可學習的參數(如果核是一維的且通道數為1)。 - 等變表示 (Equivariant Representations): 對於卷積,參數共享的特殊形式使得網路具有對輸入平移的等變性。如果輸入發生平移,輸出中的表示也會以相同的方式平移。如果一個函數
f(x)
滿足f(g(x)) = g(f(x))
,則稱f
對變換g
是等變的。對於卷積,如果g
是一個平移函數,那麼卷積函數對g
是等變的。這意味著模型在輸入的不同位置檢測到相同的特征時,會產生相似的激活模式,只是位置不同。
Q: 卷積網路利用了哪些核心思想來改進機器學習系統?
A: 卷積網路主要利用了三個核心思想:
- 稀疏交互 (Sparse Interactions) / 稀疏連接 (Sparse Connectivity): 每個輸出單元只與輸入的一個局部區域(感受野)相連接,而不是與所有輸入單元相連。
- 參數共享 (Parameter Sharing): 同一個濾波器(核)的參數在輸入的不同位置是共享的,即用相同的濾波器去掃描整個輸入。
- 等變表示 (Equivariant Representations): 由於參數共享,如果輸入發生平移,輸出中的表示也會以相同的方式平移。
Q: 什麼是「稀疏交互」?它在卷積網路中是如何實現的?它有什麼好處?
A: 「稀疏交互」是指在神經網路中,一個輸出單元的計算只依賴於輸入單元的一個小子集,而不是所有輸入單元。 在卷積網路中,這是通過使用遠小於輸入尺寸的卷積核 (kernel) 來實現的。當卷積核在輸入上滑動時,每個輸出特徵圖上的單元只由輸入圖像中一個與核大小相同的局部區域(稱為該輸出單元的感受野 receptive field)計算得到。 好處包括: * 減少參數數量: 由於連接是局部的,模型需要學習的參數數量大大減少。 * 提高統計效率: 模型更容易從有限的數據中學習,因為它專注於學習局部模式。 * 降低計算成本: 每個輸出的計算量減少。
Q: 什麼是「參數共享」?它在卷積網路中是如何體現的?它為什麼能顯著減少模型參數數量?
A: 「參數共享」是指在模型的不同部分使用相同的參數集。 在卷積網路中,這是通過讓同一個卷積核(濾波器)在整個輸入數據的不同空間位置上重複使用來體現的。也就是說,用於檢測輸入某個位置的特定模式(例如,一個垂直邊緣)的權重,也被用於檢測輸入其他所有位置的相同模式。 它能顯著減少模型參數數量,因為我們不需要為輸入的每個位置都學習一套獨立的檢測相同模式的權重。無論輸入圖像有多大,一個特定濾波器的參數數量只取決於濾波器本身的大小,而不是輸入的大小。
Q: 什麼是「等變表示」?卷積運算對什麼樣的變換具有等變性?這對模型學習有什麼意義?
A: 如果一個函數 f
對於一個變換 g
滿足 f(g(x)) = g(f(x))
,那麼我們說函數 f
對變換 g
具有等變性 (equivariance)。
卷積運算對平移 (translation) 變換具有等變性。這意味著如果我們將輸入圖像平移一定的距離,那麼卷積的輸出(特徵圖)也會被平移相同的距離,而特徵圖的模式本身不會改變(除了邊界效應)。
這對模型學習的意義是:
* 位置無關的特征檢測: 模型可以在圖像的不同位置檢測到相同的特征,而不需要為每個位置單獨學習檢測器。例如,一旦模型學會了識別貓的耳朵,它就能在圖像的任何位置識別出貓的耳朵。
* 提高泛化能力: 模型更容易將在一個位置學到的知識泛化到其他位置。
9.3 池化
重點摘要: 一個典型的卷積網路層通常包含三個階段:
- 卷積階段: 執行多個並行卷積,產生一組線性激活。
- 檢測器階段 (Detector Stage): 對線性激活應用一個非線性激活函數(如 ReLU)。
- 池化階段 (Pooling Stage): 修改輸出,使其對輸入的微小變換具有不變性。 池化 (Pooling) 函數使用某一位置的相鄰輸出的總體統計特征來替代網路在該位置的輸出。例如,最大池化 (max pooling) (Zhou and Chellappa, 1988) 報告矩形鄰域內的最大輸出。其他常用的池化函數包括平均池化、L2 范數池化,或基於離中心像素距離的加權平均池化。 池化的主要作用是使表示對於輸入的微小變化(如平移)具有一定程度的不變性 (invariance)。如果輸入發生微小的平移,池化後的輸出通常保持不變(或變化很小)。這有助於模型識別一個對象,即使它在圖像中的確切位置發生了微小變化。 池化還有助於減少表示的維度(下採樣),從而減少後續層的計算量和參數數量,並有助於擴大更高層的感受野。圖 9.8, 9.9, 9.10 展示了池化的不變性和不同池化策略。
Q: 一個典型的卷積網路層通常包含哪三個階段?
A: 通常包含三個階段:
- 卷積階段 (Convolution Stage): 網路執行多個並行的卷積操作(使用不同的濾波器)來產生一組線性激活(即特徵圖)。
- 檢測器階段 (Detector Stage): 對卷積階段產生的線性激活應用一個逐元素的非線性激活函數(例如 ReLU, sigmoid, tanh)。
- 池化階段 (Pooling Stage): 對檢測器階段的輸出進行降採樣或匯總操作,以引入一定程度的局部平移不變性並減小表示的維度。
Q: 什麼是池化 (pooling) 操作?它的主要目的是什麼?
A: 池化操作是一種對神經網路(特別是卷積網路)中特徵圖進行降採樣或匯總的過程。它通常作用於特徵圖的一個小的局部鄰域(池化窗口),並用該鄰域內值的某個匯總統計量來替代這個鄰域的輸出。 主要目的包括: 1. 引入局部平移不變性 (Local Translation Invariance): 使得模型對輸入的微小平移不那麼敏感。如果在池化窗口內的主要特征發生微小平移但仍位於窗口內,池化後的輸出可能保持不變(如最大池化)或變化很小。 2. 降低表示的維度 (Dimensionality Reduction / Downsampling): 池化通常會減小特徵圖的空間尺寸,從而減少後續層的參數數量和計算量。 3. 擴大感受野 (Increasing Receptive Field): 由於降採樣,後續卷積層的濾波器在原始輸入圖像上對應的感受野會變得更大。 4. 增強表示的魯棒性: 通過對局部區域進行匯總,可以減少對精確位置的依賴,提高對噪聲或微小變形的魯棒性。
Q: 請列舉幾種常見的池化操作。
A: 常見的池化操作包括:
- 最大池化 (Max Pooling): 在池化窗口內取所有值的最大值作為輸出。
- 平均池化 (Average Pooling): 在池化窗口內取所有值的平均值作為輸出。
- L2 范數池化 (L2-Norm Pooling): 計算池化窗口內所有值的 L2 范數作為輸出。
- 加權平均池化 (Weighted Average Pooling): 根據離窗口中心的距離對窗口內的值進行加權平均。
- 隨機池化 (Stochastic Pooling): 根據池化窗口內激活值的機率分布進行隨機採樣。
- 全局池化 (Global Pooling): 例如全局平均池化 (Global Average Pooling, GAP) 或全局最大池化 (Global Max Pooling, GMP),它們將整個特徵圖縮減為單個值(或每個通道一個值),常用於在網路末端替代全連接層。
Q: 池化操作如何幫助實現對輸入微小變換的不變性?
A: 池化操作通過對特徵圖的局部區域進行匯總來實現不變性。以最大池化為例,如果在一個池化窗口內,最強的激活(最大值)對應於某個特定的局部模式,那麼只要這個模式在輸入圖像中發生微小的平移,但其最強激活仍然位於同一個池化窗口內並保持為最大值,那麼最大池化的輸出就不會改變。這使得模型對這種微小平移具有不變性。平均池化等其他池化操作也具有類似的(儘管可能程度稍弱的)平滑或不變性效果。
由於後續的章節涉及到更具體的卷積網路技術和細節,我將繼續為每個主要小節提供摘要和 Q&A。
9.4 卷積與池化作為一種無限強的先驗
重點摘要: 可以將卷積和池化視為在神經網路中引入了關於數據的無限強的先驗 (infinitely strong prior)。
- 卷積的先驗:
- 局部連接: 特徵是局部的。
- 平移等變性: 如果一個模式出現在圖像的一個部分,它也可能出現在圖像的任何其他部分(參數共享)。
- 池化的先驗:
- 局部平移不變性: 特徵的精確位置不如其相對位置重要。一個檢測到的特征在小範圍內的平移不應改變分類結果。 無限強的先驗是指,如果數據不滿足這些先驗假設,模型將無法學習。例如,如果一個任務需要處理像素的絕對位置信息(如識別圖像中心是否有特定物體,而不管物體是什麼),那麼具有大量池化的卷積網路可能表現不佳。 然而,在許多情況下,這些先驗與現實世界的數據(如自然圖像)的特性非常吻合,因此卷積網路非常有效。當先驗與數據不完全匹配時,模型仍然可以學習補償,例如,更高層的單元可以學習對位置更敏感的表示。
Q: 如何理解「卷積和池化作為一種無限強的先驗」這句話?
A: 「無限強的先驗」意味著這些操作(卷積和池化)將某些假設硬編碼 (hard-coded) 到了模型的架構中。如果數據的真實生成過程完全不符合這些假設,那麼模型幾乎不可能學習到好的解,因為模型的結構本身就阻止了它去考慮那些與先驗相悖的可能性。模型對這些先驗的「信念」是無限強的,無法通過學習來完全改變。 例如: * 卷積的參數共享 強加了一個先驗,即在圖像不同位置檢測相同局部模式的參數應該是相同的。如果數據的真實模式是高度位置依賴的(即不同位置的相同視覺模式需要用不同的參數來檢測),那麼這個先驗就會成為一個很強的約束。 * 池化的局部平移不變性 強加了一個先驗,即一個特征的精確位置在一個小鄰域內是不重要的。如果任務恰好需要依賴於特征的精確位置,這個先驗就會有害。
Q: 卷積操作引入了哪些關於數據的先驗假設?
A: 卷積操作主要引入了以下關於數據的先驗假設:
- 局部性 (Locality) / 稀疏交互 (Sparse Interactions): 假設有意義的特征可以從輸入數據的局部區域中提取出來。一個輸出特征只依賴於輸入的一個小的局部鄰域(感受野)。
- 平移等變性 (Translation Equivariance) / 參數共享 (Parameter Sharing): 假設在輸入數據的不同空間位置上檢測相同局部模式的統計特性是相似的。因此,可以用相同的濾波器(共享參數)去掃描整個輸入,從而在不同位置檢測相同的模式。
Q: 池化操作引入了哪些關於數據的先驗假設?
A: 池化操作主要引入了以下關於數據的先驗假設:
- 局部平移不變性 (Local Translation Invariance): 假設一個被檢測到的特征在一個小的局部區域內的精確位置是不重要的,重要的是該特征是否存在於這個區域內。例如,最大池化意味著我們只關心這個區域內是否存在一個強的激活,而不關心這個強激活的確切像素位置。
- 特徵的匯總性: 假設可以通過對局部區域內的特征進行某種匯總(如取最大值、平均值)來得到一個有用的、更魯棒的表示,同時可以減少數據的維度。
Q: 在什麼情況下,卷積和池化引入的這些強先驗可能不適用或有害?
A: 當數據的真實生成過程或任務需求與這些先驗假設相悖時,它們可能不適用或有害。例如:
- 需要精確位置信息的任務: 如果任務的目標是判斷一個物體是否出現在圖像的特定絕對位置(例如,圖像中心的數字識別),那麼池化操作引入的平移不變性可能會丟失關鍵的位置信息。
- 全局結構比局部模式更重要的任務: 如果數據中的重要模式是全局性的,而不是由局部模式組合而成,那麼過於依賴局部卷積和池化可能不是最優的。
- 非平移不變的模式: 如果數據中相同視覺模式在不同位置具有不同的含義或需要用不同的方式處理(即不滿足平移等變性),那麼卷積的參數共享就可能不合適。
- 數據量極其巨大且多樣化: 如果有足夠多的數據能夠覆蓋所有可能的變換,模型也許可以自己學習到這些不變性,而不需要硬編碼的先驗。然而,在實踐中,這些先驗通常能帶來巨大的統計效率提升。
後續章節涉及到更具體的卷積網路技術和歷史,我將繼續為每個主要小節提供摘要和 Q&A。
9.5 基本卷積函數的變體
重點摘要:
在神經網路的上下文中,卷積通常指的是多個並行執行的、作用於多個輸入通道和產生多個輸出通道的離散卷積操作。
一個典型的卷積層的計算涉及一個四維的核張量 K
和一個四維的輸入張量 V
。如果 K
的維度是 (輸出通道數 m, 輸入通道數 n, 核高度 k_h, 核寬度 k_w)
,V
的維度是 (批量大小 b, 輸入通道數 n, 輸入高度 i_h, 輸入寬度 i_w)
,那麼輸出的特徵圖 Z
的維度將是 (批量大小 b, 輸出通道數 m, 輸出高度 o_h, 輸出寬度 o_w)
。
輸出 Z_{i,j,k}
(第 i
個樣本,第 j
個輸出通道,在 (k,l)
位置的激活) 的計算公式為:
Z_{i,j,k,l} = Σ_{m,n,p} V_{i,m, (j-1)s+n, (k-1)s+p} K_{l,m,n,p}
(類似公式 9.7,但更通用地考慮了步幅 s
和多通道)
其中 s
是步幅 (stride)。除了標準的卷積,還有一些重要的變體:
- 步幅 (Stride): 卷積核在輸入上滑動的步長。大於 1 的步幅可以實現下採樣。
- 填充 (Padding): 在輸入的邊界周圍添加額外的像素(通常是零填充),以控制輸出特徵圖的空間尺寸,並允許核在邊緣區域進行有效的卷積。常見的填充策略有 “valid”(不填充,輸出尺寸會縮小)和 “same”(填充使得輸出尺寸與輸入尺寸相同,如果步幅為1)。
- 非共享卷積 (Unshared Convolution) / 局部連接層 (Locally Connected Layer): 類似於卷積,但每個空間位置使用一組獨立的、不共享的權重。它具有稀疏交互,但沒有參數共享。
- 平鋪卷積 (Tiled Convolution): 介於標準卷積和局部連接層之間。它將輸入劃分為多個「塊 (tiles)」,在每個塊內使用一組共享的權重,但不同塊之間的權重是獨立的。這允許模型學習到一些空間變化的模式,同時仍然利用一定程度的參數共享。
Q: 在神經網路的卷積層中,輸入、核(濾波器)和輸出通常是什麼樣的數據結構(張量維度)?
A:
- 輸入
V
: 通常是一個四維張量,其維度可以表示為(批量大小, 輸入通道數, 輸入高度, 輸入寬度)
。例如,一批 RGB 圖像的輸入張量,輸入通道數為 3。 - 核 (Kernel / Filter)
K
: 也是一個四維張量,其維度可以表示為(輸出通道數, 輸入通道數, 核高度, 核寬度)
。輸出通道數決定了該卷積層產生多少個不同的特徵圖。輸入通道數必須與輸入數據的通道數匹配。 - 輸出
Z
: 經過卷積操作後產生的特徵圖,也是一個四維張量,其維度可以表示為(批量大小, 輸出通道數, 輸出高度, 輸出寬度)
。輸出高度和寬度取決於輸入大小、核大小、步幅和填充。
Q: 什麼是卷積的「步幅 (stride)」?它如何影響輸出特徵圖的大小?
A: 卷積的「步幅」是指卷積核在輸入數據上滑動時,每次移動的像素數量(在水平和垂直方向上)。
- 如果步幅為 1,核每次移動一個像素。
- 如果步幅大於 1(例如,步幅為 2),核每次移動多個像素。 步幅會影響輸出特徵圖的空間尺寸。較大的步幅會導致輸出特徵圖的尺寸比輸入尺寸更小,實際上實現了一種下採樣 (downsampling) 的效果。
Q: 什麼是卷積的「填充 (padding)」?它有哪些常見的策略,各自有什麼效果?
A: 卷積的「填充」是指在輸入數據的邊界周圍添加額外的像素(通常填充值為零,稱為零填充, zero-padding)。
常見的填充策略及其效果:
1. 有效填充 (Valid Padding) / 無填充 (No Padding):
* 效果: 不進行任何填充。卷積核只能在完全位於輸入圖像內的位置進行操作。這會導致輸出特徵圖的空間尺寸比輸入尺寸小。具體來說,如果輸入寬度為 i_w
,核寬度為 k_w
,步幅為 s
,則輸出寬度約為 (i_w - k_w) / s + 1
。
2. 相同填充 (Same Padding):
* 效果: 進行適當的零填充,使得當步幅為 1 時,輸出特徵圖的空間尺寸與輸入特徵圖的空間尺寸相同。這有助於保持特徵圖的空間維度在網路中傳播時不至於過快縮小,並允許卷積核更好地處理圖像邊緣的像素。
3. 全填充 (Full Padding):
* 效果: 進行足夠的零填充,使得輸入圖像中的每個像素都至少作為卷積核中心一次。這會導致輸出特徵圖的尺寸比輸入尺寸大。這種策略在信號處理中較為常見,在深度學習的卷積網路中較少直接使用。
Q: 什麼是非共享卷積 (unshared convolution) 或局部連接層 (locally connected layer)?它與標準卷積有何不同?
A: 非共享卷積(或局部連接層)是一種介於標準卷積和全連接層之間的層類型。
- 與標準卷積的不同:
- 參數共享: 標準卷積在整個輸入空間中使用共享的卷積核參數。
- 非共享卷積/局部連接層: 它仍然保持了局部連接的特性(即每個輸出單元只與輸入的一個局部區域相連),但它不進行參數共享。也就是說,輸入的不同空間位置使用獨立的、不共享的濾波器權重。 可以將其視為在輸入的每個局部感受野上都應用一個獨立的小型全連接層。
- 優缺點:
- 優點: 比全連接層參數少(因為連接是局部的),比標準卷積層具有更強的表達能力(因為權重不共享,可以學習到位置相關的特征)。
- 缺點: 參數數量遠多於標準卷積層,更容易過擬合,計算成本也更高。
Q: 什麼是平鋪卷積 (tiled convolution)?它如何平衡標準卷積和局部連接層的特性?
A: 平鋪卷積是一種介於標準卷積(完全參數共享)和局部連接層(完全無參數共享)之間的折中方案。
- 工作原理: 它將輸入劃分為多個「平鋪塊 (tiles)」。在每個平鋪塊內部,使用一組共享的卷積核。但是,不同的平鋪塊之間可以使用不同的卷積核組。 可以看作是在輸入的不同宏觀區域使用不同的濾波器組,但在每個宏觀區域內部則進行參數共享。
- 平衡特性:
- 它比標準卷積具有更強的表達能力,因為它允許模型學習到一些隨空間位置變化的模式(即不同平鋪塊的模式可能不同)。
- 它比局部連接層具有更少的參數和更好的統計效率,因為在每個平鋪塊內部仍然存在參數共享。 平鋪卷積試圖在模型的表達能力和參數效率之間取得一個較好的平衡。
9.6 結構化輸出
重點摘要: 卷積網路可以用於產生高維的結構化輸出,而不僅僅是分類標籤。例如,在圖像分割任務中,網路需要為輸入圖像的每個像素預測一個類別標籤,輸出與輸入具有相同的空間網格結構。 當使用卷積網路進行結構化輸出時,通常需要仔細設計網路架構,以確保輸出具有期望的空間維度和結構。這可能涉及到:
- 避免或限制池化操作: 以保持空間解析度。
- 使用上採樣 (upsampling) 或反卷積 (deconvolution / transposed convolution): 將低解析度的特徵圖放大到期望的輸出解析度。
- 跳躍連接 (Skip Connections): 例如在 U-Net 架構中,將編碼器部分的淺層特徵圖與解碼器部分的深層特徵圖相結合,有助於恢復在下採樣過程中損失的空間細節。
Q: 卷積網路除了用於分類任務(輸出單個類別標籤),還可以用於哪些需要「結構化輸出」的任務?請舉例說明。
A: 「結構化輸出」是指模型的輸出不是一個簡單的標量或類別標籤,而是一個具有內部結構的複雜對象,例如一個序列、一個網格、一棵樹或一個圖。 卷積網路可以用於以下需要結構化輸出的任務: 1. 圖像分割 (Image Segmentation): * 語義分割 (Semantic Segmentation): 為輸入圖像中的每個像素分配一個類別標籤(例如,將像素分類為「道路」、「天空」、「汽車」、「行人」等)。輸出是一個與輸入圖像大小相同的標籤圖。 * 實例分割 (Instance Segmentation): 在語義分割的基礎上,進一步區分同一類別的不同實例(例如,識別出圖像中的每一輛獨立的汽車)。 2. 對象檢測 (Object Detection): 在圖像中定位不同對象的位置(通常用邊界框表示)並識別其類別。輸出是一系列邊界框及其對應的類別標籤。 3. 圖像標註 (Image Captioning): 為輸入圖像生成一段描述性的文本。輸出是一個詞語序列。 4. 圖像超解析度 (Image Super-Resolution): 將低解析度圖像轉換為高解析度圖像。輸出是一個高解析度圖像。 5. 圖像風格轉換 (Image Style Transfer): 將一張內容圖像的風格轉換為另一張風格圖像的風格。輸出是一張新的風格化圖像。 6. 深度估計 (Depth Estimation): 從單張或多張圖像中估計場景的深度信息。輸出是一個深度圖。
Q: 在設計用於結構化輸出任務(如圖像分割)的卷積網路時,需要考慮哪些架構上的調整以保持或恢復輸出的空間結構?
A:
- 避免或減少池化/下採樣: 池化操作會減小特徵圖的空間解析度。對於需要像素級預測的任務,過多的池化會導致空間信息的損失。因此,可能需要使用步幅為 1 的卷積,或者完全避免池化,或者使用「空洞卷積/擴張卷積 (atrous/dilated convolution)」來在不降低解析度的情況下擴大感受野。
- 使用上採樣 (Upsampling) / 反卷積 (Deconvolution / Transposed Convolution): 在網路的後續部分(通常稱為解碼器或上採樣路徑),需要將編碼器部分產生的低解析度但語義信息豐富的特徵圖逐步上採樣回原始輸入圖像的解析度。反卷積(或更準確地說是轉置卷積)是一種可以學習的上採樣方法。也可以使用更簡單的插值方法(如雙線性插值)進行上採樣,然後再接卷積層。
- 跳躍連接 (Skip Connections): 為了彌補在編碼器下採樣過程中損失的空間細節信息,並幫助梯度更好地流動,通常會引入從編碼器部分的淺層(高解析度、低級別特征)到解碼器部分的對應深層(經過上採樣後解析度恢復的、高級別特征)的跳躍連接。U-Net 是一個廣泛使用這種跳躍連接的圖像分割架構。這些連接將低級別的精細紋理和邊緣信息與高級別的語義信息相結合,有助於產生更精確的分割結果。
9.7 數據類型
重點摘要: 卷積網路處理的數據通常包含多個通道,每個通道是在時間或空間中某一點的某種觀測。
- 時間序列數據 (1D): 例如,音頻信號在每個時間點有一個幅值(單通道),或者金融數據在每個時間點有多個指標(多通道)。
- 圖像數據 (2D): 例如,灰度圖像在每個像素位置有一個亮度值(單通道),彩色圖像(如 RGB)在每個像素位置有三個顏色通道的值(多通道)。
- 視頻數據 (3D 或更高維): 可以看作是圖像幀的時間序列。一個視頻片段在每個時間點的每個像素位置都有顏色通道的值。如果使用 3D 卷積,核也會有時間維度。
- 體積數據 (3D): 例如,醫學成像(如 CT、MRI 掃描)產生的是三維體積數據,每個體素有一個值(單通道或多通道,如果有多種成像模式)。 卷積運算可以自然地推廣到處理這些不同維度的多通道數據。核的輸入通道數必須與輸入數據的通道數匹配,而核的輸出通道數則決定了該卷積層產生多少個輸出特徵圖(通道)。
Q: 卷積網路可以處理哪些不同類型的數據?請結合「通道 (channel)」的概念進行說明。
A: 卷積網路可以處理多種類型的具有網格結構的數據,並且能夠處理多通道輸入。
- 時間序列數據 (1D 數據):
- 單通道: 例如,一段音頻信號,每個時間點有一個幅值。
- 多通道: 例如,加速度計數據,每個時間點有 x, y, z 三個方向的加速度值(3個通道);或者股票市場數據,每個時間點有開盤價、收盤價、最高價、最低價、成交量等多個指標(多個通道)。
- 圖像數據 (2D 數據):
- 單通道: 例如,灰度圖像,每個像素位置只有一個亮度值。
- 多通道: 例如,彩色 RGB 圖像,每個像素位置有紅色 (R)、綠色 (G)、藍色 (B) 三個通道的值。醫學圖像也可能有多個通道,對應不同的成像模態。
- 視頻數據 (通常視為 2D 圖像序列或 3D 數據):
- 可以將視頻看作是一系列圖像幀在時間維度上的序列。每一幀都是一個多通道的圖像(例如 RGB)。如果使用 2D CNN 逐幀處理,然後用 RNN 處理時間序列;或者直接使用 3D CNN,其卷積核也具有時間維度,可以直接在 (高度, 寬度, 時間) 的網格上操作。
- 體積數據 (3D 數據):
- 例如,醫學 CT 或 MRI 掃描產生的數據是三維的體素網格,每個體素有一個值(例如,組織密度)。如果有多種掃描序列或成像模式,也可以是多通道的。3D CNN 可以直接處理這種體積數據。 「通道」指的是在網格的每個空間(或時間)位置上,有多少個不同的觀測值或特征。卷積操作能夠自然地處理多通道輸入,並產生多通道輸出。
9.8 高效的卷積算法
重點摘要: 儘管卷積運算在概念上很直觀,但其直接實現(特別是在多個輸入輸出通道、大圖像和多個濾波器時)計算成本可能很高。有許多算法旨在提高卷積的計算效率。
- 基於傅里葉變換的卷積: 根據卷積定理,兩個函數的卷積的傅里葉變換等於它們各自傅里葉變換的乘積。因此,可以通過以下步驟計算卷積:
- 對輸入和核進行傅里葉變換 (FFT)。
- 在頻域中進行逐元素相乘。
- 對結果進行傅里葉逆變換 (IFFT)。 這種方法在核較大時可能比直接卷積更快,但對於深度學習中常用的小核(如 3x3, 5x5)和特定的硬件(如 GPU),其優勢可能不明顯,且可能引入額外的數值精度問題或內存開銷。
- 其他快速卷積算法: 如 Winograd 算法、Strassen 算法(用於矩陣乘法,而卷積可以轉換為矩陣乘法)等,它們試圖通過更少的乘法操作來計算卷積。這些算法通常在特定的核大小和硬件上才能發揮最佳效果。 現代深度學習框架(如 TensorFlow, PyTorch)的底層庫(如 cuDNN, MIOpen)通常會根據輸入大小、核大小、硬件特性等自動選擇或實現最優的卷積算法。
Q: 除了直接按照定義滑動卷積核進行計算,還有哪些方法可以更高效地計算卷積?請簡述基於傅里葉變換的方法。
A:
- 基於傅里葉變換的卷積:
- 原理: 利用卷積定理,該定理指出「時域(或空域)的卷積等於頻域的乘積」。
- 步驟: a. 對輸入數據(例如圖像)和卷積核都進行快速傅里葉變換 (FFT),將它們轉換到頻域。 b. 在頻域中,將它們的傅里葉變換結果進行逐元素的點乘。 c. 對點乘的結果進行快速傅里葉逆變換 (IFFT),得到原始卷積的結果。
- 優缺點: 對於較大的卷積核,這種方法在理論上可以減少計算複雜度(從 O(N²k²) 到 O(N²logN),其中 N 是圖像邊長,k 是核邊長)。但在深度學習中,常用的卷積核通常較小(如 3x3, 5x5),並且現代 GPU 對直接卷積進行了高度優化,因此基於 FFT 的卷積在這些情況下不一定更快,反而可能因為 FFT 本身的開銷、數據轉換的開銷以及數值精度問題而變得不那麼有吸引力。此外,它通常需要對輸入和核進行適當的零填充以處理循環卷積的問題。
- Winograd 算法: 一種通過更少的乘法操作來計算小卷積核(如 2x2, 3x3 作用於小的輸入塊)的算法。它在許多現代深度學習庫中被用於加速小核卷積。
- 將卷積轉換為矩陣乘法 (im2col/kn2row + GEMM):
- 原理: 可以通過重新排列輸入數據的局部塊(im2col 操作,將每個感受野區域拉平成一個列向量)和卷積核的權重(kn2row 操作,將每個濾波器拉平成一個行向量),將卷積運算轉換為一個大規模的通用矩陣乘法 (GEMM) 操作。
- 優勢: 現代 CPU 和 GPU 都對 GEMM 操作進行了高度優化,因此這種方法可以利用這些優化庫(如 BLAS, cuBLAS)來實現高效的卷積計算。這是許多深度學習框架中實現卷積的常用底層方法。
9.9 隨機或無監督的特征
重點摘要: 在卷積網路的背景下,一種有趣的策略是使用隨機初始化且固定的卷積核,或者通過無監督學習(如 K-均值聚類、稀疏編碼、RBM、自編碼器)從未標註數據中學習卷積核,然後將這些預訓練好的或隨機的核作為固定的特征提取器,只訓練網路的後續部分(如全連接分類層)。
- 優點:
- 減少訓練成本: 如果大部分卷積層的權重是固定的,那麼需要訓練的參數數量會大大減少。
- 利用未標註數據: 無監督預訓練可以從大量未標註數據中學習有用的低級特征。
- 缺點:
- 性能可能不如端到端訓練: 隨機核或未針對特定監督任務優化的無監督核可能不如通過端到端反向傳播學習到的核那麼有效。 儘管端到端的有監督訓練通常能達到最佳性能,但在某些資源受限或標註數據稀缺的情況下,使用隨機或無監督特征仍然是一種可行的策略,或者可以作為一個較好的初始化。
Q: 什麼是使用「隨機或無監督特征」的卷積網路策略?它是如何工作的?
A: 這種策略是指不對卷積網路的所有層(特別是早期的卷積層)的權重進行端到端的監督學習,而是:
- 隨機特征: 將卷積層的濾波器(核)的權重隨機初始化(例如,從某個固定的機率分佈中採樣),然後在整個訓練過程中保持這些權重固定不變。這些固定的隨機濾波器作為一種通用的特征提取器。
- 無監督特征: 首先在大量未標註的圖像數據上使用無監督學習算法(例如,K-均值聚類作用於圖像塊、稀疏編碼、自編碼器、RBM)來學習一組濾波器。然後,將這些通過無監督學習得到的濾波器作為卷積層的固定權重。 在這兩種情況下,只有網路的後續部分(例如,更深層的卷積層、全連接層或最終的分類器)的權重是通過監督學習(基於標註數據)進行訓練的。
Q: 使用隨機或無監督特征的策略有哪些潛在的優點和缺點?
A:
- 潛在優點:
- 減少訓練成本和複雜性: 如果大部分卷積層的權重是固定的,那麼需要通過梯度下降學習的參數數量會大大減少,從而可能加速訓練過程並降低對計算資源的需求。
- 利用未標註數據 (對於無監督特征): 無監督預訓練可以從大規模的、易於獲取的未標註數據中學習到一些通用的、有用的低級和中級圖像特征,這些特征可能對後續的監督任務有益,尤其是在標註數據稀缺的情況下。
- 簡化模型設計: 在某些情況下,可以作為一種快速搭建原型或評估後續層設計的方法。
- 潛在缺點:
- 性能可能受限: 隨機生成的濾波器或者通過與目標監督任務無直接關聯的無監督任務學習到的濾波器,其提取的特征可能不如通過端到端的、針對特定監督任務優化的濾波器那麼有效和具有判別性。因此,最終模型的性能可能會低於完全監督訓練的模型。
- 次優的特征表示: 固定的特征提取器可能無法適應特定任務的細微差別。
- 無監督學習本身的挑戰: 有效地進行無監督特征學習本身也是一個具有挑戰性的研究課題。
9.10 卷積網路的神經科學基礎
重點摘要: 卷積網路的設計在很大程度上受到了對哺乳動物視覺系統(特別是初級視覺皮層 V1)的研究的啟發。
- Hubel 和 Wiesel 的經典工作 (1959, 1962, 1968): 他們的研究發現貓和猴子的 V1 區域的神經元對視野中的特定局部朝向的邊緣或條紋具有選擇性響應。這些神經元的感受野是局部的。
- 簡單細胞 (Simple Cells) 和複雜細胞 (Complex Cells):
- 簡單細胞: 對特定位置、特定朝向的刺激反應最強。其響應可以大致用線性濾波器(類似 Gabor 濾波器)後加一個非線性閾值來建模。
- 複雜細胞: 也對特定朝向的刺激有選擇性,但其響應在一個較小的局部區域內對刺激的確切位置不那麼敏感(具有一定的平移不變性)。複雜細胞的響應可以被認為是對多個簡單細胞(具有相同朝向偏好但在感受野內位置略有不同)的響應進行某種形式的池化(例如,取最大值)。
- 層次化處理: 視覺信息在視覺皮層中是層次化處理的,從 V1 區域的簡單特征(邊緣、角點)到更高層次的視覺區域(如 V2, V4, IT 皮層)的更複雜的形狀和對象表示。 卷積網路的架構(局部感受野的卷積層、非線性激活、池化層、多層堆疊)在概念上與視覺皮層的這些特性有一定的對應關係。例如,卷積濾波器類似於簡單細胞的感受野,池化操作類似於複雜細胞實現的局部不變性,而網路的深度則對應於視覺通路的層次化處理。 Gabor 濾波器 (公式 9.16) 是一種在數學上能夠很好地模擬 V1 簡單細胞感受野特性的函數。
Q: 卷積神經網路的設計受到了哺乳動物視覺系統的哪些關鍵發現的啟發?
A: 主要受到了以下關鍵發現的啟發:
- 局部感受野 (Local Receptive Fields): David Hubel 和 Torsten Wiesel 的研究表明,初級視覺皮層 (V1) 中的神經元只對視野中的一個小的局部區域內的刺激做出響應。這啟發了 CNN 中卷積核只作用於輸入的局部區域。
- 朝向選擇性 (Orientation Selectivity): V1 中的許多神經元(稱為簡單細胞和複雜細胞)對特定朝向的邊緣或條紋刺激反應最強。這啟發了 CNN 中的濾波器學習檢測特定的局部模式,如邊緣。
- 簡單細胞 (Simple Cells) 和複雜細胞 (Complex Cells):
- 簡單細胞: 對刺激的精確位置和朝向敏感。這類似於 CNN 中卷積層的線性濾波操作加非線性激活。
- 複雜細胞: 對刺激的朝向敏感,但在一個小範圍內對其精確位置不敏感(具有局部平移不變性)。這啟發了 CNN 中的池化操作。
- 層次化處理 (Hierarchical Processing): 視覺信息在視覺皮層中是逐級處理的,從低級別的簡單特征(如 V1 中的邊緣)到高級別的複雜特征和對象表示(如在 IT 皮層中)。這啟發了 CNN 的多層堆疊架構。
Q: 什麼是簡單細胞 (simple cell) 和複雜細胞 (complex cell)?它們在視覺信息處理中各自扮演什麼角色?它們與 CNN 中的哪些操作相對應?
A:
- 簡單細胞:
- 角色: 主要檢測視野中特定位置、特定朝向的簡單視覺刺激,如亮條、暗條或邊緣。它們的感受野通常可以被劃分為興奮性區域和抑制性區域。
- 對應 CNN 操作: 類似於卷積層中的線性濾波操作(卷積核可以被看作是匹配特定模式的模板)後接一個非線性激活函數。
- 複雜細胞:
- 角色: 也對特定朝向的刺激有選擇性,但與簡單細胞不同,它們的響應在一個較大的感受野內的局部區域對刺激的確切位置不那麼敏感,即具有一定的局部平移不變性。它們通常接收來自多個具有相似朝向偏好但在感受野內位置略有不同的簡單細胞的輸入。
- 對應 CNN 操作: 類似於池化 (pooling) 操作(特別是最大池化)。池化操作通過對一個局部區域內的特征激活進行匯總(如取最大值),來實現對微小平移的不變性。
Q: Gabor 濾波器與 V1 簡單細胞的感受野有什麼關係?
A: Gabor 濾波器是一種在數學上被廣泛用於模擬哺乳動物初级視覺皮層 (V1) 中簡單細胞感受野響應特性的函數。Gabor 濾波器本質上是一個高斯包絡下的正弦平面波,它具有局部性(由高斯包絡決定)、朝向選擇性(由正弦波的方向決定)和空間頻率選擇性(由正弦波的頻率決定)的特性,這些特性與實驗觀察到的 V1 簡單細胞的感受野特性非常吻合。在早期的計算機視覺和一些 CNN 研究中,Gabor 濾波器有時被用作手工設計的或初始化的特征提取器。
9.11 卷積網路與深度學習的歷史
重點摘要: 卷積網路在深度學習的歷史中扮演了至關重要的角色,並且是最早成功應用的深度模型之一。
- 早期工作 (Neocognitron): Fukushima (1980) 提出的 Neocognitron 被認為是現代卷積網路的一個重要前身,它已經包含了類似於卷積和下採樣(池化)的思想。
- LeCun 等人的工作 (1989, 1998 - LeNet): Yann LeCun 及其合作者在 20 世紀 80 年代末和 90 年代對卷積網路的發展做出了奠基性的貢獻。他們將反向傳播算法成功應用於訓練卷積網路,並開發了著名的 LeNet-5 架構,用於手寫數字識別(如支票讀取),取得了商業上的成功。LeNet 架構已經具備了現代 CNN 的許多核心組件:卷積層、池化層、全連接層。
- 沉寂與復興: 在 20 世紀 90 年代末和 21 世紀初,由於支持向量機 (SVM) 等其他機器學習方法的興起以及訓練深度網路的困難,卷積網路的研究相對沉寂。然而,隨著計算能力的增強(特別是 GPU 的出現)、更大規模標註數據集(如 ImageNet)的出現以及深度學習訓練技術的進步(如更好的優化算法、正則化方法),卷積網路在 2010 年左右開始迎來復興。
- ImageNet 競賽的突破 (AlexNet - 2012): Krizhevsky, Sutskever, and Hinton (2012) 開發的 AlexNet 模型在 2012 年的 ImageNet 大規模視覺識別挑戰賽 (ILSVRC) 中取得了遠超傳統方法的突破性成果,這被認為是深度學習(特別是卷積網路)在計算機視覺領域取得主導地位的里程碑事件。AlexNet 使用了更深的卷積網路結構、ReLU 激活函數、Dropout 正則化,並在 GPU 上進行了高效訓練。
- 後續發展: 自 AlexNet 以來,卷積網路的架構不斷演進,出現了許多更深、更複雜、性能更好的模型,如 VGG, GoogLeNet (Inception), ResNet, DenseNet 等,它們在各種計算機視覺任務上持續刷新記錄。 卷積網路是第一個能夠使用反向傳播進行有效訓練的深度網路之一。
Q: 誰被認為是現代卷積網路的主要奠基人之一?他們開發的哪個早期 CNN 架構非常著名?
A: Yann LeCun 及其合作者被認為是現代卷積網路的主要奠基人之一。他們開發的 LeNet-5 架構非常著名,主要用於手寫數字識別任務(例如,應用於銀行的支票自動讀取系統)。
Q: 什麼事件被認為是卷積網路(和深度學習)在計算機視覺領域取得主導地位的里程碑?哪個模型在其中扮演了關鍵角色?
A: 2012 年的 ImageNet 大規模視覺識別挑戰賽 (ILSVRC) 被認為是卷積網路(和深度學習)在計算機視覺領域取得主導地位的里程碑事件。 由 Alex Krizhevsky, Ilya Sutskever, 和 Geoffrey Hinton 開發的 AlexNet 模型在該競賽中以遠超傳統計算機視覺方法的巨大優勢獲勝,極大地推動了深度學習和卷積網路的普及與發展。
Q: AlexNet 模型相較於早期的 LeNet 架構,引入了哪些重要的改進或特性,使其能夠在 ImageNet 這樣的大規模數據集上取得成功?
A: AlexNet 相較于 LeNet 引入了以下重要的改進或特性:
- 更深的網絡結構: AlexNet 比 LeNet 更深,包含了更多的卷積層和全連接層,使其具有更強的表達能力。
- 使用 ReLU 激活函數: 替換了傳統的 sigmoid 或 tanh 激活函數。ReLU 能夠加速訓練收斂並在一定程度上緩解梯度消失問題。
- 使用 Dropout 正則化: 在全連接層中使用了 Dropout 來防止過擬合,這對於在 ImageNet 這樣的大規模數據集上訓練大型模型至關重要。
- 數據增強: 採用了多種數據增強技術(如圖像平移、翻轉、顏色抖動)來擴大訓練數據集,提高模型的泛化能力。
- 在 GPU 上進行高效訓練: 利用 GPU 的並行計算能力來加速大型卷積網路的訓練過程,使得在 ImageNet 這樣的大規模數據集上進行訓練成為可能。
- 局部響應歸一化 (Local Response Normalization, LRN): 雖然現在較少使用,但在當時被認為有助於提高性能。
- 重疊池化 (Overlapping Pooling): 使用的池化窗口的步幅小於窗口大小,使得相鄰的池化窗口之間存在重疊。