步幅
步幅是指卷積核在兩個連續位置之間「跳多遠」。步幅 1 時,卷積核每次移動一個像素、走訪每一個位置;步幅 2 時,它每隔一個位置才停一次,所以每個軸上只走訪一半的位置。因此較大的步幅會產生較小的輸出網格——也就是降採樣。直觀上,步幅是一個「粗細旋鈕」:大步幅以較稀疏的網格對輸入取樣,以犧牲空間解析度來換取更便宜的運算與增長更快的感受野。
精確地說,對輸入尺寸 W、卷積核大小 k、填補 P、步幅 S,輸出尺寸為 floor((W + 2P - k) / S) + 1(若有擴張率 d,則把 k 換成 d(k-1)+1)。步幅 2 大致會把每個空間維度減半、把輸出位置數量變成四分之一,同時削減激活記憶體與後續各層的工作量。由於較早的感受野最終會以彼此相距 S 個像素的方式排列,每一個帶步幅的層也會放大後續感受野的增長速度。
帶步幅的卷積是 CNN 內部降採樣的兩種主要方式之一,另一種是池化。現代架構越來越偏好帶步幅(或可學習)的降採樣:「全卷積網路」(Springenberg 等人,2015)證明池化可以用步幅 2 的卷積取代而不損失效能,而 ResNet 在其瓶頸區塊中就用步幅 2 的卷積做降採樣。其取捨在於:過於激進的步幅會太早丟失細節,對需要精確定位的任務(分割、關鍵點)有害——在那些任務中,設計者會把步幅維持得很低,改用擴張來增長脈絡而不縮小特徵圖。
在 7x7 輸入上套用 3x3 卷積核、無填補:步幅 1 得到 floor((7-3)/1)+1 = 5x5;步幅 2 得到 floor((7-3)/2)+1 = 3x3——輸出面積從 25 縮為 9。
陷阱:若步幅無法整除(含填補後的)輸入,餘數會被尺寸公式中的 floor 默默捨去,於是卷積核永遠不會覆蓋那一邊最後幾個像素。請刻意檢查你的輸出維度;這裡差一格就可能讓一個預期「精確 2 倍金字塔」的解碼器崩潰。