卷積神經網絡(CNN)的核心操作並非孤立存在,而是通過精細的參數設計和流程配合實現特徵提取與模型學習。以下從原理細節、計算過程、參數設計、變體形式四個維度,對核心操作進行更深入的解析,幫助你掌握實際應用中的關鍵細節。
一、卷積操作(Convolution)
卷積是 CNN “特徵提取” 的核心,其本質是通過滑動窗口的局部加權求和捕捉圖像的局部特徵(如邊緣、紋理、形狀等)。
1. 基礎計算邏輯
假設輸入是單通道灰度圖(形狀為 [H, W]),卷積核(Kernel)是 [kH, kW] 的矩陣(如 3x3),則卷積過程為:
- 卷積核在輸入圖像上按步長(Stride) 滑動,每次覆蓋一個
[kH, kW]的局部區域; - 對覆蓋區域與卷積核進行元素相乘後求和,得到輸出特徵圖(Feature Map)上的一個像素值;
- 公式:
output[i][j] = sum( input[i:i+kH, j:j+kW] * kernel ) + bias(bias 為可選偏置項)。
2. 關鍵參數(決定輸出特徵圖形狀)
- 卷積核大小(Kernel Size):常用 3x3、5x5(小核更靈活,多個小核堆疊等價於大核,且參數更少,如 2 個 3x3 核等價於 1 個 5x5 核);
- 步長(Stride):每次滑動的像素數(默認 1)。步長越大,輸出特徵圖越小(壓縮更快);
- 填充(Padding):在輸入圖像邊緣補 0,用於控制輸出特徵圖的尺寸:
Valid Padding:不填充,輸出尺寸 =(H - kH) / Stride + 1(向下取整);Same Padding:填充後輸出尺寸與輸入相同,填充量P = (kH - 1) // 2(適用於保持特徵圖大小);
- 輸入 / 輸出通道(Channels):
- 輸入通道數(
in_channels):與輸入特徵圖的通道一致(如 RGB 圖為 3); - 輸出通道數(
out_channels):等於卷積核的數量(每個核提取一種特徵,通道數越多,特徵維度越豐富); - 多通道卷積:每個卷積核需與輸入通道數匹配(如輸入 3 通道,核為
[kH, kW, in_channels]),輸出通道數 = 核的數量。
3. 變體形式(實際模型中的優化)
- 分組卷積(Group Convolution):將輸入通道分成若干組,每組單獨用一組卷積核計算,最後拼接輸出。減少參數(如分組數 = 輸入通道數,等價於深度卷積),代表模型:ResNeXt;
- 深度可分離卷積(Depthwise Separable Convolution):分兩步:
- 深度卷積(每個輸入通道用 1 個核單獨卷積);
- 逐點卷積(1x1 核融合通道特徵)。參數遠少於標準卷積,代表模型:MobileNet;
- 轉置卷積(Transposed Convolution):又稱 “反捲積”,用於擴大特徵圖尺寸(如語義分割中恢復分辨率),通過填充和步長設計實現 “上採樣”。
4. 參數計算
單個卷積層的參數數量(含偏置):參數 = (kH * kW * in_channels) * out_channels + out_channels(每個核對應 1 個偏置)。
二、激活函數(Activation Function)
激活函數通過引入非線性變換,讓 CNN 能夠擬合複雜的非線性關係(如圖像中 “邊緣 + 紋理 = 物體” 的高階特徵)。沒有激活函數,CNN 本質只是多層線性變換,無法學習複雜模式。
1. 核心要求
- 非線性:保證網絡能擬合非線性數據;
- 可微性:支持反向傳播求梯度;
- 計算高效:避免複雜運算(如指數、除法)。
2. 常用函數及細節
|
函數
|
公式
|
優點
|
缺點
|
適用場景
|
|
ReLU
|
|
計算快,緩解梯度消失
|
負半軸輸出 0(“死亡 ReLU” 問題)
|
絕大多數 CNN(默認選擇)
|
|
Leaky ReLU
|
|
解決死亡 ReLU(α 通常取 0.01)
|
α 需手動設置,效果不穩定
|
替代 ReLU 的場景
|
|
PReLU
|
|
α 為可學習參數,自適應數據
|
增加少量參數
|
數據量較大時(如 ImageNet)
|
|
ELU
|
|
輸出均值接近 0,抗噪聲能力強
|
計算稍慢(含指數運算)
|
需抑制噪聲的場景
|
|
Swish
|
|
平滑非線性,在深層網絡表現更優
|
β 為超參數(或可學習),計算略複雜
|
深層模型(如 MobileNetV3)
|
3. 設計原則
- 優先用 ReLU(簡單高效),若出現 “死亡 ReLU”(訓練中大量神經元輸出 0),可換 Leaky ReLU/PReLU;
- 深層網絡(如 100 層以上)可嘗試 Swish,提升收斂速度;
- 輸出層根據任務選擇:分類用 Softmax(多類)/Sigmoid(二類),迴歸用線性激活(無激活)。
三、池化操作(Pooling)
池化通過聚合局部特徵降低特徵圖的空間維度(H、W),實現 “降維” 和 “抗干擾”(對輸入的微小位移不敏感),同時減少計算量和過擬合風險。
1. 基礎計算邏輯
與卷積類似,通過 “池化窗口” 在特徵圖上滑動,對窗口內元素進行聚合:
- 最大池化(Max Pooling):取窗口內最大值(保留局部最顯著特徵,如邊緣、角點);
- 平均池化(Average Pooling):取窗口內平均值(保留局部整體信息,如背景)。
2. 關鍵參數
- 窗口大小(Kernel Size):常用 2x2、3x3(2x2 最常見,平衡降維和信息保留);
- 步長(Stride):默認與窗口大小相同(如 2x2 窗口 + 步長 2,輸出尺寸為輸入的 1/2);若步長 < 窗口大小,會產生重疊池化(增強特徵提取能力,如 AlexNet 用 3x3 窗口 + 步長 2)。
3. 變體形式
- 全局池化(Global Pooling):窗口大小等於特徵圖尺寸(如全局平均池化 GAP),直接將
[H, W, C]特徵圖轉換為[1, 1, C](每個通道取全局均值),替代全連接層減少參數(如 ResNet 用 GAP 輸出); - 混合池化:結合最大池化和平均池化(如各取一半再拼接),兼顧顯著特徵和全局信息;
- Stochastic Pooling:隨機按概率選擇窗口內元素(訓練時隨機,推理時取均值),增加正則化效果。
4. 作用細節
- 降維:若輸入為
[H, W, C],用 2x2 步長 2 的池化,輸出為[H/2, W/2, C](通道數不變); - 平移不變性:輸入微小位移時,池化後輸出基本不變(增強模型魯棒性);
- 注意:池化會丟失空間位置信息,語義分割等需要位置信息的任務中需謹慎使用(可改用步長 1 的卷積 + BN 替代)。
四、批歸一化(Batch Normalization, BN)
BN 通過標準化每批數據的特徵分佈,解決 “內部協變量偏移”(網絡深層輸入分佈隨前層參數變化而劇烈波動),從而加速訓練收斂、允許更大學習率、抑制過擬合。
1. 計算步驟(核心)
對每個批次(Batch)的特徵圖 x(形狀 [N, H, W, C],N 為批次大小),按通道標準化:
- 計算批次統計:每個通道的均值
μ = (1/NHW) * sum(x),方差σ² = (1/NHW) * sum((x-μ)²); - 標準化:
x_norm = (x - μ) / sqrt(σ² + ε)(ε 為極小值,避免除 0); - 縮放和平移:
y = γ * x_norm + β(γ 和 β 為可學習參數,恢復特徵表達能力,初始 γ=1,β=0)。
2. 訓練與推理的區別
- 訓練時:用當前批次的
μ和σ²標準化,並同步更新移動平均統計量(moving_mean和moving_var,用於推理); - 推理時:用訓練階段累積的
moving_mean和moving_var標準化(避免單樣本無批次統計)。
3. 變體及適用場景
|
歸一化方法
|
標準化維度
|
適用場景
|
|
批歸一化(BN)
|
批次內的每個通道
|
批量訓練的圖像分類(樣本獨立)
|
|
層歸一化(LN)
|
單樣本內的所有通道 / 特徵
|
NLP(序列長度不固定,無批次統計)
|
|
實例歸一化(IN)
|
單樣本內的每個通道
|
風格遷移(保留單樣本風格特徵)
|
4. 實際使用細節
- 位置:通常放在卷積層之後、激活函數之前(先標準化再激活,效果更穩定);
- 注意:BN 會引入額外參數(每個通道 2 個:γ 和 β),但遠少於全連接層;
- 小批量問題:批次大小過小時(如 N=1),BN 統計不準,可改用 LN。
五、扁平化(Flatten)與全連接層(Fully Connected, FC)
扁平化是連接 “卷積特徵提取” 與 “輸出預測” 的橋樑,而全連接層則負責將特徵映射到最終輸出(如類別概率)。
1. 扁平化(Flatten)
- 作用:將卷積 / 池化後的高維特徵圖(如
[H, W, C])轉換為一維向量([H*W*C]),適配全連接層的輸入格式; - 計算:直接按維度順序展開,例如
[2,2,3]展開為[2*2*3=12]的向量; - 注意:若特徵圖尺寸過大(如
[32,32,64]展開後為 65536 維),會導致全連接層參數爆炸,因此現代模型常用全局池化替代扁平化(如 ResNet 用 GAP 直接得到[C]維向量)。
2. 全連接層(FC)
- 作用:將一維特徵向量映射到輸出空間(如 1000 類分類任務輸出 1000 維向量);
- 計算:
output = W * input + b(W 為權重矩陣,[out_dim, in_dim];b 為偏置); - 參數數量:
out_dim * in_dim + out_dim(如輸入 1000 維,輸出 100 維,參數為 100*1000 + 100 = 100100); - 缺點:參數過多(易過擬合)、缺乏空間感知(丟失特徵的空間位置關係),因此現代 CNN 中逐漸減少 FC 層(如僅保留輸出層 1 個 FC)。
六、操作流程協同(典型 CNN 結構)
上述操作並非孤立,而是按固定順序組合形成 “特徵提取塊”,例如:輸入圖像 → 卷積層(提取局部特徵) → BN(標準化) → ReLU(激活非線性) → 池化層(降維) → ...(重複多輪) → 扁平化/全局池化 → 全連接層(輸出預測)
每一輪操作(卷積 + BN + 激活 + 池化)都會讓特徵圖的空間維度減小、通道數增加(從低級特徵如邊緣,逐步提取高級特徵如物體部件、整體輪廓)