Usando la notazione dalla pagina di Wikipedia, la convoluzione in una CNN sarà il kernel g di cui impareremo alcuni pesi per estrarre le informazioni di cui abbiamo bisogno e quindi applicare una funzione di attivazione.
Convoluzioni discrete
Dalla pagina di Wikipedia la convoluzione è descritta come
(f∗g)[n]=∑infm=−inff[m]g[n−m]
Ad esempio supponendo che sia la funzione e sia la funzione di convoluzione ,afbg
Per risolvere questo, possiamo usare prima l'equazione, capovolgiamo la funzione verticalmente, a causa del che appare nell'equazione. Quindi calcoleremo la somma per ogni valore di . Mentre si modifica , la funzione originale non si sposta, tuttavia la funzione di convoluzione viene spostata di conseguenza. A partire da ,b−mnnn=0
c[0]=∑ma[m]b[−m]=0∗0.25+0∗0.5+1∗1+0.5∗0+1∗0+1∗0=1
c[1]=∑ma[m]b[−m]=0∗0.25+1∗0.5+0.5∗1+1∗0+1∗0=1
c[2]=∑ma[m]b[−m]=1∗0.25+0.5∗0.5+1∗1+1∗0+1∗0=1.5
c[3]=∑ma[m]b[−m]=1∗0+0.5∗0.25+1∗0.5+1∗1=1.625
c[4]=∑ma[m]b[−m]=1∗0+0.5∗0+1∗0.25+1∗0.5+0∗1=0.75
c[5]=∑ma[m]b[−m]=1∗0+0.5∗0+1∗0+1∗0.25+0∗0.5∗0∗1=0.25
Come puoi vedere, questo è esattamente ciò che otteniamo sulla trama . Quindi abbiamo spostato la funzione sulla funzione .c[n]b[n]a[n]
Convoluzione discreta 2D
Ad esempio, se abbiamo la matrice in verde
con il filtro di convoluzione
Quindi l'operazione risultante è una moltiplicazione in termini di elementi e aggiunta dei termini come mostrato di seguito. Proprio come mostra la pagina di Wikipedia, questo kernel (matrice arancione) viene spostato sull'intera funzione (matrice verde) .gf
preso dal link che fa riferimento a @Hobbes. Noterai che non c'è capovolgimento del kernel come abbiamo fatto per il calcolo esplicito della convoluzione sopra. Questa è una questione di notazione come sottolinea @Media. Questo dovrebbe essere chiamato correlazione incrociata. Tuttavia, dal punto di vista computazionale questa differenza non influisce sulle prestazioni dell'algoritmo poiché il kernel viene addestrato in modo tale che i suoi pesi siano più adatti all'operazione, quindi l'aggiunta dell'operazione di capovolgimento semplicemente farebbe sì che l'algoritmo impari i pesi in diverse celle del kernel per ospitare la vibrazione. Quindi possiamo omettere il capovolgimento.g