轉置卷積
轉置卷積是可學習的上採樣(upsampling)——它把特徵圖變大而非變小。帶步幅的卷積把大輸入映射成小輸出,轉置卷積則把這個映射反過來跑:它把每個輸入值散布成較大輸出中的一個區塊,以一個學出來的卷積核加權,並把重疊的貢獻相加。在概念上,它是普通卷積運算的梯度(即轉置),這也正是它名稱的由來。它讓解碼器能把一個粗略、低解析度的編碼,重新長回成全尺寸影像。
精確地說,轉置卷積可理解為:在輸入像素之間插入零(步幅為 1/S,因此稱「分數步幅」fractionally-strided),然後做一次普通卷積。在卷積核大小 k、步幅 S、填補 P 之下,輸出尺寸為 S*(W - 1) + k - 2P,恰為前向尺寸公式的反運算——因此它是把空間維度加倍或四倍的工具。卷積核權重是學出來的,所以不同於固定的雙線性上採樣,網路會學習如何填入細節;這正是它被用於分割網路(FCN)解碼器、自編碼器,以及 GAN 生成器(DCGAN)的原因。
其惡名昭彰的失敗模式是棋盤格假影(checkerboard artifacts):當卷積核大小無法被步幅整除時,重疊的輸出區塊收到的貢獻數量不均勻,產生一格一格規律的明暗斑點,在生成影像中格外刺眼。Odena 等人(2016)診斷出此現象,並推薦了如今標準的替代做法:先用一個無參數的方法上採樣(最近鄰或雙線性),再套用一個普通卷積(「resize-convolution」),或選擇能被步幅整除的卷積核大小。無論哪種方式,每當網路必須用可學習權重提升空間解析度時,轉置卷積仍是核心基本元件。
在 16x16 輸入上、卷積核 4、步幅 2、填補 1 的轉置卷積得到 2*(16-1)+4-2 = 32——恰好把解析度加倍;而卷積核大小 4 能被步幅 2 整除,有助於抑制棋盤格假影。
命名陷阱:「反卷積」(deconvolution)是個誤稱——轉置卷積並不會反轉(還原)一個卷積;它只是匹配了卷積的形狀轉換。它與卷積共享的是權重佈局/轉置的關係,而非反運算。許多現代程式庫偏好用「resize + 卷積」取代轉置卷積,正是為了避免棋盤格假影。