Stavo leggendo il Libro di Yoshua Bengio sull'apprendimento profondo e si dice a pagina 224:
Le reti convoluzionali sono semplicemente reti neurali che usano la convoluzione al posto della moltiplicazione della matrice generale in almeno uno dei loro strati.
tuttavia, non ero sicuro al 100% di come "sostituire la moltiplicazione della matrice con la convoluzione" in un senso matematicamente preciso.
Ciò che mi interessa davvero è definire questo per i vettori di input in 1D (come in ), quindi non avrò input come immagini e cercherò di evitare la convoluzione in 2D.
Quindi, ad esempio, nelle reti neurali "normali", le operazioni e il modello del reparto di alimentazione possono essere espressi in modo conciso come nelle note di Andrew Ng:
dove è il vettore calcolato prima di passarlo attraverso la non linearità f . La non linearità agisce pero sul vettore z ( l ) e a ( l + 1 ) è l'output / attivazione delle unità nascoste per il layer in questione.
Questo calcolo mi è chiaro perché la moltiplicazione della matrice è chiaramente definita per me, tuttavia, mi sembra poco chiaro sostituire semplicemente la moltiplicazione della matrice con la convoluzione. vale a dire
f ( z ( l + 1 ) ) = a ( l + 1 )
Voglio essere sicuro di comprendere matematicamente l'equazione sopra.
Il primo problema che ho appena sostituito la moltiplicazione di matrice con la convoluzione è che di solito si identifica una riga di con un prodotto punto. Quindi si sa chiaramente come l'intera a ( l ) sia in relazione ai pesi e che sia mappata a un vettore z ( l + 1 ) della dimensione come indicato da W ( l ) . Tuttavia, quando uno lo sostituisce con convoluzioni, non mi è chiaro quale riga o pesi corrispondano a quali voci in a ( l ). Non è nemmeno chiaro per me che abbia senso rappresentare più i pesi come una matrice (fornirò un esempio per spiegare questo punto in seguito)
Nel caso in cui input e output siano tutti in 1D, si calcola semplicemente la convoluzione in base alla sua definizione e poi la passa attraverso una singolarità?
Ad esempio se avessimo il seguente vettore come input:
e abbiamo avuto i seguenti pesi (forse l'abbiamo imparato con il backprop):
quindi la convoluzione è:
sarebbe corretto passare semplicemente attraverso la non linearità e trattare il risultato come un livello / rappresentazione nascosta ( per ora non assumere pool )? cioè come segue:
(il tutorial UDLF di Stanford credo ritaglia i bordi in cui la convoluzione si unisce agli 0 per qualche motivo, dobbiamo tagliarli?)
È così che dovrebbe funzionare? Almeno per un vettore di input in 1D? La non è più un vettore?
Ho anche disegnato una rete neurale di come questo dovrebbe apparire come penso: