Cosa significa il parametro 'same' padding nella convoluzione in TensorFlow?
Lo stesso padding significa che le dimensioni delle feature-map di output sono le stesse delle feature-map di input (sotto l'ipotesi di [math]stride=1[/math]). Per esempio, se l'input è costituito da [math]n_{in}[/math] canali con feature-map di dimensione [math]28\times 28[/math], allora in output ci si aspetta di ottenere [math]n_{out}[/math] feature map ciascuna di dimensione [math]28\times 28[/math].
Ora come ottenere ciò, è una questione di configurazione dell'operatore di convoluzione. Se viene utilizzato un kernel (filtro) di dimensione [math]k\times k[/math], allora la dimensione del padding [math]p[/math] dovrebbe essere scelta per essere [math]p=frac{k-1}{2}[/math].
Per vedere da dove viene questo, considerate la seguente figura schematica, con una mappa di caratteristiche 2D di input di dimensioni [math]10 volte 10[/math] e un kernel di dimensioni [math]3 volte 3[/math].
Al fine di rendere le feature map di output della stessa dimensione, abbiamo bisogno di calcolare l'operazione di convoluzione della matrice del kernel con le patch locali delle feature map di input [math]10[/math] volte in ogni direzione. Intuitivamente, per ogni cella della matrice di input deve essere posta al centro del kernel. Quindi, partendo dalla prima cella nell'angolo in alto a sinistra, abbiamo bisogno di riempire quella cella con abbastanza zeri per farla diventare il centro del kernel. E questo significa che dobbiamo riempire la matrice con uno zero in ogni direzione. Se il kernel fosse di dimensioni [math]5 volte 5[/math] allora, avremmo bisogno di zeri.
Un altro modo per verificare questo, è quello di utilizzare la relazione tra le dimensioni di input e output per la dimensione del kernel [math]k[/math] e il padding [math]p[/math] (come notato in https://arxiv.org/pdf/1603.07285.pdf):
[math]o = (i-k) + 2p + 1[/math]
Quindi, quando [math]i=10[/math], [math]k=3[/math], [math]p=1[/math] otteniamo la dimensione dell'output [math]o=10-3+2 \times 1 + 1 = 10[/math]
e quando quando [math]i=10[/math], [math]k=5[/math], [math]p=2[/math] otteniamo la dimensione dell'output [math]o=10-5+2\times 2 + 1 = 10[/math]
Mentre ho semplificato considerando [math]stride=1[/math], e assumendo che la dimensione del padding sia un numero pari, si può anche trovare questo link utile per capire lo stesso padding: caffe2/caffe2