Il parametro meta weight_decay
determina il termine di regolarizzazione della rete neurale.
Durante l'allenamento viene aggiunto un termine di regolarizzazione alla perdita della rete per calcolare il gradiente di backprop. Il valore weight_decay
determina in che modo dominante questo termine di regolarizzazione sarà nel calcolo del gradiente.
Come regola generale, più esempi di formazione hai, più debole dovrebbe essere questo termine. Più parametri hai (vale a dire, filtri più profondi, filtri più grandi, strati InnerProduct più grandi, ecc.) Più questo termine dovrebbe essere più alto.
Caffe permette anche di scegliere tra L2
regolarizzazione (default) e L1
regolarizzazione, impostando
regularization_type: "L1"
Tuttavia, dal momento che nella maggior parte dei casi i pesi sono numeri piccoli (cioè, -1<w<1
), il L2
norma del i pesi sono significativamente più piccoli della loro norma L1
. Pertanto, se si sceglie di utilizzare regularization_type: "L1"
, potrebbe essere necessario regolare weight_decay
su un valore significativamente inferiore.
Mentre la velocità di apprendimento può (e di solito avviene) cambiare durante l'allenamento, il peso di regolarizzazione è fisso in tutto.
Forse potresti spiegare i motivi della tua regola generale? Hai una fonte per questo? – Janosch
@Janosch di solito si deve usare la regolarizzazione quando ci sono più parametri dei vincoli su un problema numerico. Nell'apprendimento, gli esempi di formazione rappresentano "vincoli". Quindi, se hai (molto) più esempi di allenamento rispetto ai parametri gratuiti, devi preoccuparti meno dell'allocazione e puoi ridurre il termine di regolarizzazione. Tuttavia, se hai pochissimi esempi di allenamento (rispetto al numero di parametri), il tuo modello è soggetto a sovradattamento e hai bisogno di forti termini di regolarizzazione per evitare che ciò accada. – Shai
Devi impostare 'param {lr_mult: 1 decay_mult: 1 } 'nel livello' convolution' o il tipo di regolarizzazione è globale? @Shai – thigi