Il dropout ( carta , spiegazione ) imposta l'output di alcuni neuroni su zero. Quindi, per un MLP, potresti avere la seguente architettura per il set di dati di fiori di Iris :
4 : 50 (tanh) : dropout (0.5) : 20 (tanh) : 3 (softmax)
Funzionerebbe così:
con , , , , (ignorando i pregiudizi per motivi di semplicità).
Con e
dove l'operazione moltiplica puntuale con (vedi prodotto Hadamard ).
Quindi campioniamo solo la matrice ogni volta e quindi il dropout diventa una moltiplicazione di un nodo con 0.
Ma per le CNN, non mi è chiaro cosa venga abbandonato esattamente. Vedo tre possibilità:
- Eliminazione di mappe di funzionalità complete (da cui un kernel)
- Eliminazione di un elemento di un kernel (sostituzione di un elemento di un kernel con 0)
- Eliminazione di un elemento di una mappa delle caratteristiche
Aggiungi un riferimento / preventivo alla tua risposta.
I miei pensieri
Penso che Lasagne lo faccia (3) (vedi codice ). Questo potrebbe essere il più semplice da implementare. Tuttavia, più vicino all'idea originale potrebbe essere (1).
Sembra essere simile per Caffe (vedi codice ). Per tensorflow, l'utente deve decidere ( codice - non sono sicuro di cosa accada quando noise_shape=None
viene passato).
Come dovrebbe essere
(2) e (3) non hanno molto senso in quanto indurrebbe la rete ad aggiungere invarianza alle posizioni spaziali, il che probabilmente non è desiderato. Quindi (1) è l'unica variante che ha senso. Ma non sono sicuro di cosa succede se si utilizza l'implementazione predefinita.