卷積神經網路

填補

填補是指在卷積之前,於輸入四周加上一圈額外像素的邊框。沒有它,卷積核就無法以最外圈的像素為中心——邊緣之外沒有東西可供它相乘——於是輸出會在每一層都縮小一點,而且角落被使用的次數遠少於中央。填補同時解決了這兩個問題:它補上那圈缺失的邊框(最常用零填滿),讓卷積核能一路滑到最邊緣,使影像邊緣也得到完整的關注。

你到處會遇到的兩種具名模式是「valid」與「same」。「valid」填補意指完全不填補:只計算卷積核完整重疊在真實輸入上的位置,因此一個 kxk 卷積核會讓每個維度縮小 k-1。「same」填補加上剛好足夠的邊框,使得在步幅 1 時,輸出與輸入有相同的空間尺寸;對奇數卷積核 k,這需要每一邊 P = (k-1)/2(所以 3x3 用 1、5x5 用 2)。一般尺寸公式 floor((W + 2P - k)/S) + 1 精確顯示了 P 如何放大輸出。

邊框要用什麼填,也很重要。零填補是預設且便宜的做法,但它注入了一圈人工的暗框,濾波器可以學會偵測它,從而把絕對位置洩漏進一個本應平移等變的網路——研究已顯示 CNN 會利用這點來「作弊」推斷位置。其他替代做法,例如反射填補(reflection padding,把邊緣鏡射)或複製填補(replication padding,重複邊緣像素),可避免硬性的零邊界,常用於影像對影像與生成模型中,因為那裡邊緣假影會直接顯現在輸出上。

細節:「same」填補只有在步幅 1 時才是無歧義的。當步幅大於 1 時,「same」意指輸出 = ceil(W/S),而某些框架(例如 TensorFlow 的「SAME」)可能會做非對稱填補——右側/下側多填一些——這可能讓特徵相對於對稱填補的框架默默偏移。在不同函式庫間移植模型時,要驗證的不只是卷積核大小與步幅,還有填補行為。

又称
zero paddingsame paddingvalid padding