Che cos'è il vincolo maxnorm? In che modo è utile nelle reti neurali convoluzionali?


Risposte:


16

Da http://cs231n.github.io/neural-networks-2/#reg :

Vincoli della norma massima. Un'altra forma di regolarizzazione è quella di imporre un limite superiore assoluto alla grandezza del vettore del peso per ogni neurone e usare la discesa gradiente proiettata per imporre il vincolo. In pratica, ciò corrisponde all'esecuzione normale dell'aggiornamento dei parametri e quindi all'applicazione del vincolo bloccando il vettore di peso di ogni neurone per soddisfareI valori tipici di sono negli ordini di 3 o 4. Alcune persone segnalano miglioramenti quando utilizzano questa forma di regolarizzazione. Una delle sue proprietà interessanti è che la rete non può "esplodere" anche quando i tassi di apprendimento sono troppo alti perché gli aggiornamenti sono sempre limitati.ww2<c.c


8

Ho trovato molto utile una risposta di McLawrence in un'altra domanda . Di seguito riprodotto:

Che cosa fa un vincolo di peso max_norm?

maxnorm(m)se la norma L2 dei tuoi pesi supera m, ridimensiona l'intera matrice del peso di un fattore che riduce la norma a m. Come puoi trovare nel codice keras in class MaxNorm(Constraint):

def __call__(self, w):
    norms = K.sqrt(K.sum(K.square(w), axis=self.axis, keepdims=True))
    desired = K.clip(norms, 0, self.max_value)
    w *= (desired / (K.epsilon() + norms))
    return w

Adizionale, maxnormha un axisargomento, lungo il quale viene calcolata la norma. Nel tuo esempio non specifichi un asse, quindi la norma viene calcolata sull'intera matrice di peso. Se ad esempio vuoi vincolare la norma di ogni filtro convoluzionale, supponendo che tu stia utilizzando l' tfordinamento dimensionale, la matrice del peso avrà la forma (rows, cols, input_depth, output_depth). Il calcolo della norma sopra axis = [0, 1, 2]vincolerà ciascun filtro alla norma data.

Perché farlo

Vincolare direttamente la matrice dei pesi è un altro tipo di regolarizzazione. Se usi un semplice termine di regolarizzazione L2, penalizzi i pesi elevati con la tua funzione di perdita. Con questo vincolo, regolarizzi direttamente. Come anche collegato nel kerascodice, questo sembra funzionare particolarmente bene in combinazione con un dropoutlivello. Maggiori informazioni vedi capitolo 5.1 in questo documento


Bella risposta, ma attenzione: "Nel tuo esempio non specifichi un asse, quindi la norma viene calcolata sull'intera matrice di peso". - Questo non sembra essere vero (almeno per ora). Piuttosto, la norma viene quindi calcolata rispetto al valore predefinito axis=0.
Bobson Dugnutt,

Concordo, la norma massima è considerata come la lunghezza dei pesi che si inseriscono in un nodo in un livello nascosto, ovvero . Inoltre, hai notato che per la regolarizzazione del dropout è stata utilizzata la massima norma per tutte le esecuzioni (vedere l'ultimo paragrafo a pagina 1934 di cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf ). ||w||
Wrktsj,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.