AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
24/100 第三週:📌 卷積神經網路 CNN
24.卷積步長與填充策略 ⛓ 控制輸出尺寸的關鍵!
________________________________________
✅ 為何需要調整「步長」與「填充」?
在 CNN 中,控制特徵圖的空間尺寸(高與寬)非常重要,影響模型深度、計算量與最終輸出形狀。
📌 兩個參數決定特徵圖大小:
• 步長(Stride):每次滑動的步幅 → 控制「濾鏡移動速度」
• 填充(Padding):是否在圖像邊緣「補 0」 → 控制「是否邊緣裁切」
________________________________________
🧩 一、步長 Stride
stride = 1 每次滑動 1 格,最大保留特徵訊息 特徵圖尺寸變化最小
stride = 2 每次跳 2 格,快速降維 特徵圖大小約縮小一半
stride > 2 更快速壓縮圖像空間 計算快但可能損失細節
🔧 調整步長可以不使用 Pooling 就達到「空間下採樣」的效果!
________________________________________
🧩 二、填充 Padding
在卷積神經網路中,填充(Padding)類型會影響輸出特徵圖的尺寸與特性。valid 表示不補零,僅在濾鏡能完全套入的區域進行捲積,導致輸出尺寸縮小;same 則會在邊緣補 0,使輸出尺寸與輸入相同,便於多層卷積堆疊,實務中最常使用;causal 是時序資料專用的填充方式,常用於 1D 卷積(如語音、時間序列),可確保模型在每個時間點只使用過去資料,符合因果順序。選擇合適的填充方式,有助於控制模型結構與時間依賴性。
📌 same 可以確保特徵圖在深層網路中尺寸一致,適合 ResNet 等結構。
________________________________________
🔬 計算公式回顧(無 Pooling)
我們可以這樣解釋卷積層的輸出尺寸變化:
在卷積神經網路中,每次使用濾鏡掃描圖像時,輸出的大小會受到以下幾個因素影響:
輸入尺寸:圖像原本有多大(例如 28x28)。
濾鏡大小:一次掃描的區塊有多大(常見是 3x3)。
步長(Stride):濾鏡每次移動幾格(步長越大,輸出越小)。
填充方式(Padding):
same:會在圖像邊緣補零,讓輸出和輸入一樣大,方便多層堆疊。
valid:不補零,濾鏡只能掃描能完整套入的區域,輸出會變小。
📌 簡單記憶:
如果使用 same,輸出大小通常不變。
如果使用 valid,輸出大小會略小於輸入。
步長越大,輸出越小。
濾鏡越大,壓縮得越多。
這些設定會影響模型的特徵圖尺寸與運算量,因此設計卷積層時要注意這些參數是否適合你的資料與任務目標。
________________________________________
📦 TensorFlow / Keras 實作:
python
from tensorflow.keras import layers
model = tf.keras.Sequential([
layers.Conv2D(64, (3, 3), strides=2, padding='same', activation='relu'),
layers.Conv2D(64, (3, 3), strides=1, padding='valid', activation='relu')
])
• padding='same' → 輸出尺寸與輸入相同(取決於 stride)
• padding='valid' → 捲積後特徵圖縮小
這段程式碼建立了兩層卷積層的模型,第一層使用 padding='same' 搭配步長 strides=2,表示即使有補零,輸出尺寸仍會因步長大於 1 而縮小一半;第二層則使用 padding='valid',不補零,會讓特徵圖在卷積後進一步縮小。總結來說,same 可在步長為 1 時保持輸出尺寸不變,而 valid 則會在每次卷積後縮小特徵圖,有助於逐步壓縮空間資訊。
________________________________________
🧠 實際效果視覺對比:
以 28×28 的輸入圖像為例,使用大小為 3×3 的濾鏡,在不同的設定下會有不同的輸出結果:
Padding = same, Stride = 1 ➜ 輸出尺寸:28×28
說明:這是最常見的設定,使用“same”表示在圖像邊緣加上適當的 Padding,使濾鏡滑動後仍可保持與原圖相同的輸出尺寸。適合在保持圖像大小的情況下提取特徵。
Padding = valid, Stride = 1 ➜ 輸出尺寸:26×26
說明:“valid”代表不補零,濾鏡只能在圖像原始區域內滑動,導致每邊都少了一層(因為 3×3 濾鏡無法跨出邊界),所以尺寸減少為 26×26,常用於下採樣或精簡特徵圖。
Padding = same, Stride = 2 ➜ 輸出尺寸:14×14
說明:步伐設為 2 表示濾鏡每次跳兩格滑動,因此尺寸會縮小為原來的一半。這是在保留特徵的同時,快速降低圖像尺寸,提升計算效率。
Padding = valid, Stride = 2 ➜ 輸出尺寸:13×13
說明:此設定同時不補零且步伐為 2,因此除了縮小尺寸外,還因為不補零而導致邊緣資訊損失更多,進一步壓縮圖像尺寸,適合進一步降維與資訊濃縮。
________________________________________
⚠️ 設計提醒:
• 捲積層 越深 → 特徵圖越小 → 留意尺寸不能小於 1
• 多層堆疊時使用 same 可避免尺寸不一致
• 若特徵圖太小再接 Dense 會導致維度錯誤或學不到東西!
________________________________________
🎯 小結與啟示:
✅ 步長控制「移動速度」= 特徵圖壓縮速度
✅ 填充決定「邊界保留」= 是否會裁切資訊
✅ 兩者配合才能打造靈活、精確又高效的 CNN 結構設計
✅ 要控制計算資源與模型表現,就從這兩個參數開始!