15 分鐘吃透核心:卷積 / 池化 / 全連接 + 六大經典模型對比
卷積神經網絡(Convolutional Neural Network,簡稱CNN)是一種深度學習模型,專門用于處理和分析視覺數據,在圖像識別、目標檢測等任務中表現尤為出色。
然而,CNN的架構因其固有的復雜性和快速演進的特性,往往難以掌握。
在本文中,將詳細介紹標準CNN架構及CNN家族中的各類模型,并拆解其核心組成部分,包括:
- 卷積層
- 池化層
- 全連接層
同時講解步長(stride)、卷積核(kernel)、池化(pooling)等關鍵概念。
什么是卷積神經網絡(CNN)
卷積神經網絡(CNN) 是一種特殊類型的神經網絡,其設計靈感來源于人類大腦的視覺皮層。
與傳統神經網絡將圖像視為扁平像素數組的處理方式不同,CNN采用分層結構,通過學習從邊緣、曲線等簡單模式到復雜物體、紋理的特征,逐步構建對視覺數據的理解。
其核心功能是通過多層帶神經元的網絡結構,自適應地從輸入數據中學習空間特征層次。
下圖展示了標準CNN架構在圖像分類任務中的工作流程:
圖A: 標準CNN架構
CNN的架構由一系列圖層組成,每個圖層執行特定操作以提取和轉換特征。
在下一部分中,將從“卷積塊”開始講解——卷積塊是CNN中用于從輸入圖像中檢測獨特特征的核心組件。
卷積塊
卷積塊(Convolutional Block)是CNN的基礎構建單元,由一組用于從輸入數據中提取特征的圖層組成。
如圖A所示,這些卷積塊相互堆疊,構成CNN架構的核心部分。
下圖詳細展示了一個標準卷積塊的結構,包含1個卷積層(橙色區域)和1個池化層(綠色區域):
圖B_含單個濾波器的標準卷積塊架構
盡管不同CNN架構中卷積塊的具體圖層可能存在差異,但標準卷積塊通常包含:
- 1個或多個卷積層
- 1個池化層
卷積層
卷積層是卷積塊的核心,負責檢測輸入數據中的特定特征。
如圖B所示,卷積層的架構包含濾波器(filter) 、批量歸一化(batch normalization) 和非線性激活函數(non-linear activation) 三個部分。
其中,濾波器由多個卷積核(kernel,即小型數值矩陣) 組成,通過執行卷積運算(convolutional operation) ,將輸入數據中的特定特征突出顯示為特征圖(feature maps) 。
隨后,卷積層對這些特征圖應用批量歸一化和非線性激活函數,再將處理后的結果傳遞給池化層。
卷積運算
卷積運算是一個“元素級乘法-求和”過程,幫助網絡識別邊緣、紋理、形狀等特征。
圖B中的架構使用了含3個3×3卷積核的單個濾波器——這是因為輸入數據具有3個深度維度(深度維度數量與卷積核數量必須保持一致)。
每個3×3卷積核包含9個權重矩陣作為其參數,因此:
- 單個卷積核的參數數量:9個權重
- 單個濾波器的參數數量:3個卷積核 × 9個權重 = 27個權重 + 1個偏置項(bias term)= 共28個可學習模型參數
這些模型參數會在訓練過程中不斷優化。
濾波器
濾波器由卷積核組成,濾波器的數量直接影響輸出特征圖的深度。
例如,2個不同的濾波器會生成2個不同的特征圖,最終形成深度為2的輸出:
圖C. 含兩個濾波器的標準卷積塊架構
在圖C中,由于卷積層使用了2個濾波器,生成了2個特征圖,因此池化層最終輸出2個激活圖(activation maps) 。
每個激活圖中都包含高度激活的神經元(圖C中的粉色單元格),激活程度取決于該激活圖所捕捉的特征類型。
由此可見,使用更多濾波器能讓網絡從輸入數據中捕捉更多樣化的特征,這對于識別現實世界物體等變異性較高的任務尤為適用。
但另一方面,增加濾波器數量會顯著增加可學習模型參數的數量:
- 圖B(1個濾波器) :每個卷積層含28個參數
- 圖C(2個濾波器) :每個卷積層含56個參數
參數增加會導致:
- 訓練時間延長
- 內存占用增加
- 過擬合(overfitting)風險上升
因此,在CNN架構設計中,找到“濾波器數量”與“模型性能/效率”的平衡是關鍵。
卷積運算的數學表達式
卷積運算的過程是:卷積核在輸入數據上滑動(或“卷積”),將卷積核中的數值與當前覆蓋的圖像塊(image patch)的對應像素值相乘,再將所有乘積結果求和,最終得到特征圖中的單個數值。
若將輸入數據表示為I,卷積核表示為K(其中M為卷積核的高度維度,N為寬度維度,例如圖B中M=N=3),當前像素坐標表示為(i, j),則該過程的數學表達式為:
圖片
其中:
(I ? K):特征圖(輸入圖像I與卷積核K通過互相關運算(cross-correlation) 得到的卷積結果)(i, j):當前像素的坐標I:輸入數據(矩陣),I(i, j)表示第i行、第j列像素的數值K:卷積核矩陣(維度為M×N)K(m, n):卷積核第m行、第n列的權重值(對應圖B中的w?至w?)
例如,下圖展示了使用索貝爾卷積核(sobel kernel) (一種二維卷積核)執行的卷積運算:
圖D 索貝爾卷積核的卷積運算過程
在圖D中,卷積運算首先對初始的3組坐標(i, j)= (1, 1)至(i, j) = (1, 3)執行計算。
在實際應用中,該過程會對輸入I中所有可能的坐標組重復執行,最終生成完整的特征圖。
步長(stride) 和填充(padding) 是決定卷積核需處理多少組坐標的關鍵參數。
步長與填充
步長(stride) 指卷積核在輸入矩陣上滑動時每次移動的像素數。
在圖D中,步長設置為1,即卷積核每次計算后向右移動1個像素。
盡管步長為2或更大的情況并不常見,但步長越大,最終輸出特征圖的尺寸越小。
填充(padding) 是在輸入圖像邊緣添加額外像素的技術,主要用于:
- 保留空間維度:卷積運算會縮小輸出特征圖的尺寸,通過在輸入圖像邊緣添加像素,可使輸出尺寸等于或大于輸入尺寸。
- 避免邊緣信息丟失:圖像邊緣的像素僅被卷積核處理少數幾次,而中心像素會被多次處理。填充能確保所有像素被平等處理,避免重要邊緣信息的丟失。
默認的填充設置是有效填充(valid padding,也稱“無填充”) :不在輸入圖像邊緣添加任何像素,卷積核僅在輸入圖像的有效區域內滑動,最終輸出尺寸小于輸入尺寸。
與之相對,零填充(zero padding) 是一種常用的填充方式,即在圖像邊緣添加數值為0的像素。
零填充的常見策略包括:
- Same填充(Same Padding):添加恰好足夠的零像素,使輸出特征圖的尺寸與輸入完全相同。填充量會根據卷積核尺寸和步長自動計算。
- Full填充(Full Padding):在圖像邊緣添加大量零像素,確保輸入圖像的每個像素(包括角落像素)都能成為卷積核的中心。這種方式會使輸出尺寸大于輸入尺寸。
在圖D中,為簡化演示,采用了有效填充(無填充)。
若應用零填充,輸入數據將呈現為圖D’ 的形式,卷積核會在這些填充區域上滑動以執行卷積運算:
圖D :含零填充的輸入數據
最后,二維卷積核生成的輸出尺寸O可通過以下公式計算:
圖片
其中:
O:輸出特征圖的尺寸(高度或寬度)n:輸入數據的尺寸(高度或寬度)f:卷積核的尺寸p:填充量(邊緣添加的像素數)s:步長
以圖D’ 為例,已知參數如下:
n = 6(輸入尺寸)f = 3(卷積核尺寸)p = 0(有效填充)或p = 1(Same填充)s = 1(步長)
則不同填充策略下的輸出尺寸計算如下:
- 有效填充(
p=0):O = ((6 - 3 + 0) / 1) + 1 = 4→ 小于輸入尺寸n=6 - Same填充(
p=1):O = ((6 - 3 + 2) / 1) + 1 = 6→ 等于輸入尺寸n=6 - Full填充(
p=3,此處需調整p以滿足Full填充邏輯):O = ((6 - 3 + 6) / 1) + 1 = 9→ 大于輸入尺寸n=6
這些計算結果清晰展示了填充對輸出尺寸的影響。
批量歸一化
部分卷積塊會在激活函數之前加入批量歸一化(Batch Normalization,簡稱BN)過程。
該過程對特征圖進行歸一化處理,通過減少內部協變量偏移(internal covariate shift) ,幫助穩定訓練過程。
內部協變量偏移是指:在神經網絡訓練過程中,各層輸入數據的分布會發生變化。這種偏移會迫使每一層在每個訓練周期(epoch)都重新適應變化的輸入分布,從而減緩訓練速度。
批量歸一化是解決這一問題的常用方案:通過將特征圖的均值調整為0、方差調整為1,使輸入分布更密集、更穩定,進而加速訓練。
非線性激活函數
在卷積層運算的最后一步,會對每個特征圖應用非線性激活函數(non-linear activation function) 。
常用的激活函數是ReLU函數(Rectified Linear Unit),其作用是返回輸入值(神經元的加權和與偏置之和,記為x)與0中的較大值,公式如下:
圖片
該過程為網絡引入了非線性特性,使其能夠學習復雜的特征模式。
池化層
池化層(Pooling Layer) 通過縮小特征圖的空間維度,對特征圖進行下采樣(downsample),最終生成激活圖。
池化層的主要作用包括:
- 降低計算負荷:縮小特征圖尺寸,減少后續圖層的參數數量和計算量。
- 實現平移不變性(translation invariance):使網絡對輸入特征的位置偏移更具魯棒性,確保即使特征位置發生微小變化,網絡仍能識別該特征。
池化層生成的每個激活圖,都是對卷積層處理后輸入數據特征的“總結”。
池化運算的類型
下圖展示了多種常見的池化運算方式:
步長時的多種池化運算
最大池化(Max Pooling)
最常用的池化方式,從指定區域中選擇激活程度最高的特征。
這種方式會提取區域內最顯著的特征,同時丟棄其他被認為不重要的特征。
常見應用場景:
- 大多數圖像分類任務(目標是識別特征是否存在,而非精確位置)。
平均池化(Average Pooling)
計算池化窗口內所有元素的平均值。
與最大池化不同,平均池化會考慮區域內的所有數值,有助于平滑特征圖、減少噪聲干擾。
常見應用場景:
- 醫學影像分析
- 衛星影像處理
- 任何需要關注區域內特征整體分布(而非單一強信號)的任務。
Lp池化(Lp-Pooling)
一種廣義的池化方式,通過計算池化窗口內數值的Lp范數(Lp norm) 實現下采樣,最大池化和平均池化均為其特殊情況:
- 當
p = 1時,Lp池化等價于平均池化。 - 當
p = ∞時,Lp池化等價于最大池化。
常見應用場景:
- 科研領域中的廣義池化方案。
混合池化(Mixed Pooling)
對最大池化和平均池化的線性組合。
網絡可根據具體任務學習最優的組合比例,靈活性更高。
常見應用場景:
- 科研領域中的廣義池化方案。
隨機池化(Stochastic Pooling)
與確定性選擇(如最大池化選最大值、平均池化算平均值)不同,隨機池化會根據數值大小按比例隨機采樣池化窗口內的激活值。
這種隨機性可作為一種正則化手段,幫助減少過擬合。
常見應用場景:
- 處理小型數據集時,用于緩解過擬合的正則化方法。
全局池化(Global Pooling)
與滑動小窗口的池化方式不同,全局池化將整個特征圖總結為單個數值。
全局池化通常應用于CNN的卷積部分末尾、全連接層之前,主要有兩種類型:
- 全局平均池化(Global Average Pooling,GAP):計算整個特征圖所有元素的平均值。
- 全局最大池化(Global Max Pooling,GMP):取整個特征圖的最大值。
盡管池化方式多樣,但所有池化運算的核心目標一致:通過下采樣縮小特征圖尺寸,降低計算負荷,同時實現平移不變性。
池化層的替代方案
池化層可完全由“大踏步卷積層(convolutional layers with larger stride)”替代。
例如,步長設為2的卷積層可將特征圖的空間維度縮小一半,實現與池化層相同的下采樣效果。
這種替代方案具有兩個顯著優勢:
- 下采樣過程的最優學習:允許網絡學習最優的下采樣操作,可能構建更具表達能力的模型,提升性能。
- 全程保留空間信息:大踏步卷積不會丟棄區域內的數值,能保留更多輸入數據信息,幫助網絡捕捉更豐富的上下文。
尤其當所有池化層都被大踏步卷積層替代時,會形成全卷積網絡(Fully Convolutional Network,FCN) ——這類網絡能在整個訓練和推理過程中保留空間信息。
研究表明,全卷積網絡更適合需要復雜上下文理解的任務,例如:
- 語義分割(semantic segmentation)
- 異常檢測(anomaly detection)
- 目標檢測(object detection)
- 圖像超分辨率(image super-resolution)
但正如圖B和圖C所示,增加卷積層會導致可學習參數數量增加,使模型更復雜、計算成本更高。因此,在選擇方案時需權衡利弊。
全連接層(FC Layer)
全連接層(Fully Connected Layer,簡稱FC層) ,又稱密集層(Dense Layer) ,是CNN中最后的特征轉換部分——該層中每個神經元都與前一層的所有神經元相連。
全連接層的核心作用是:基于卷積塊提取的特征圖(即特征),做出最終決策。
卷積塊提取的特征包括邊緣、角落、紋理等局部特征,而全連接層會將這些高層抽象特征整合,用于執行最終任務,例如:
- 分類任務:在圖像分類問題中,全連接層會將扁平化后的特征圖轉換為每個類別的概率。
- 回歸任務:在回歸問題中,全連接層會輸出單個連續值。
扁平化步驟
如圖A所示,在全連接層處理特征圖之前,需先將特征圖轉換為單個長一維向量(1D vector)——這一過程稱為扁平化(flattening) 。
該步驟是必要的,因為全連接層僅接受一維向量作為輸入。
扁平化后的向量將作為第一層全連接層的輸入,隨后依次傳遞給后續全連接層進行處理。
注意事項
全連接層擅長學習特征間的全局模式和關聯,因此在最終決策步驟中表現出色。
但全連接層的參數數量極大:由于每個神經元都與前一層所有神經元相連,權重數量會迅速增加。
這會導致兩個問題:
- 模型過擬合風險上升
- 計算成本增加
為緩解這些問題,通常會采用 dropout 等正則化技術。
輸出層
CNN中的輸出層(Output Layer) 是生成網絡最終輸出的關鍵層。
輸出層會接收卷積塊和全連接層傳遞的高層抽象特征,并將其轉換為最終的輸出形式。
如圖A所示,在分類任務中,輸出層會對輸入應用softmax激活函數,生成預設類別的概率分布(例如鳥類、獅子、貓)。
Softmax函數能確保所有類別的輸出概率之和為1,使結果可直接解釋為類別概率。
在回歸任務中,輸出層通常包含1個或多個神經元,采用線性激活函數(或無激活函數),輸出連續值。
以上就是CNN架構的完整介紹。
當卷積層提取完特征層次后,CNN的架構會過渡到與標準前饋網絡(feedforward network)類似的結構。
在訓練過程中,全連接層和卷積核的權重、偏置等可學習模型參數,會通過反向傳播(backpropagation)算法不斷優化。
卷積神經網絡的類型
為應對不同任務挑戰,研究者開發了多種CNN架構。
首先,根據卷積核的維度,CNN可分為三類:
- 一維CNN(1D CNNs)
- 二維CNN(2D CNNs,最常見的CNN類型,如圖C中使用的索貝爾卷積核)
- 三維CNN(3D CNNs)
下面將分別介紹這三類CNN。
一維CNN(1D CNNs)
一維CNN適用于序列數據(如時間序列分析、自然語言處理),其濾波器僅沿序列的一個維度滑動。
常見應用場景:
- 文本、音頻、傳感器數據等序列數據的分析與特征提取。
缺點:
- 不適用于需要從圖像或視頻中提取空間特征的任務——因為一維CNN僅考慮輸入數據的一個維度。
二維CNN(2D CNNs)
二維CNN是處理圖像和視頻數據的標準類型。
如前所述,其濾波器在二維平面上滑動,捕捉空間特征,因此能高效學習空間特征層次。
常見應用場景:
- 圖像分類、目標檢測等涉及靜態視覺數據的任務。
缺點:
- 不適用于體積數據(volumetric data)或具有強時間相關性的序列數據。
主要的二維CNN模型
以下是幾種典型的二維CNN架構模型:
LeNet-5
- 手寫數字識別領域的開創性模型。
- 適用場景:作為簡單圖像分類任務(低分辨率圖像)的基礎模型。
- 缺點:深度和容量有限,不適用于復雜、高分辨率圖像任務。
LeNet架構
AlexNet
- 比LeNet-5更深、更寬,是推動深度學習普及的關鍵模型。
- 適用場景:作為比LeNet更強的圖像分類基準模型,適用于較大數據集。
- 缺點:以當前標準來看架構較淺;使用的大尺寸卷積核(11×11、5×5)效率較低。
AlexNet架構
VGGNet
- 架構簡潔統一,通過使用小尺寸(3×3)卷積核增加網絡深度。
- 適用場景:作為其他模型的特征提取器(架構魯棒且易于理解)。
- 缺點:參數數量大、內存消耗高,導致訓練和部署速度慢。
VGGNet架構
GoogLeNet
- 深度網絡,參數數量較少——核心創新是“ inception模塊(inception module)”:該模塊允許網絡在單個圖層內自主選擇卷積核尺寸和池化操作。
- 適用場景:需要高性能且計算高效的模型的任務。
- 缺點:架構復雜,理解和實現難度較高。
GoogLeNet架構
ResNet(殘差網絡,Residual Network)
- 突破性模型,解決了極深網絡中的梯度消失(vanishing gradient)問題。
- 適用場景:任何需要訓練極深網絡的視覺任務——其殘差連接(residual connections)可防止網絡深度增加時性能下降。
- 缺點:網絡深度仍可能導致訓練時間較長(盡管比同等深度的非殘差網絡更易訓練)。
ResNet架構
DenseNet(密集連接網絡,Densely Connected Network)
- 核心特點是“密集連接”:每個圖層都與前向傳播路徑中的所有其他圖層相連。
- 適用場景:內存和計算資源有限的任務。
- 缺點:密集連接會導致特征圖數量龐大,內存消耗較高。
DenseNet架構
三維CNN(3D CNNs)
三維CNN適用于體積數據,如醫學影像(MRI、CT掃描)或視頻分類。
其濾波器在三維空間中運算,可同時捕捉空間和時間信息。
常見應用場景:
- 需同時考慮空間和時間特征進行分類的三維數據任務。
缺點:
- 計算成本高。
- 由于參數數量大,需要大量訓練數據。
主要模型:
- DenseNet:盡管DenseNet的常見實現是針對二維卷積,但“密集塊(dense blocks)”的核心原理可擴展到三維卷積,適用于醫學影像、視頻分析等領域。

























