Ci sono differenze nella regolarizzazione della MLP tra aggiornamenti batch e singoli?


9

Ho appena appreso della regolarizzazione come approccio per il controllo del sovra-adattamento e vorrei incorporare l'idea in una semplice implementazione di backpropagation e Multistrater perceptron (MLP) che ho messo insieme.

Attualmente per evitare un eccesso di adattamento, convalido e mantengo la rete con il miglior punteggio finora sul set di convalida. Funziona bene, ma l'aggiunta della regolarizzazione mi gioverebbe in quella scelta corretta dell'algoritmo e dei parametri di regolarizzazione che farebbero convergere la mia rete su un modello non in forma più sistematica.

La formula che ho per il termine di aggiornamento (dal corso Coursera ML) è indicata come un aggiornamento batch, ad esempio per ogni peso, dopo aver sommato tutti i delta applicabili per l'intero set di allenamento dalla propagazione dell'errore, lambda * current_weightviene aggiunto anche un aggiustamento prima del combinato il delta viene sottratto alla fine del batch, dove si lambdatrova il parametro di regolarizzazione.

La mia implementazione della backpropagation utilizza aggiornamenti di peso per articolo. Temo di non poter semplicemente copiare l'approccio batch, anche se per me sembra intuitivo. Un termine di regolarizzazione più piccolo per articolo funziona altrettanto bene?

Ad esempio, lambda * current_weight / Ndove N è la dimensione del set di allenamento, a prima vista sembra ragionevole. Non sono riuscito a trovare nulla sull'argomento, e mi chiedo se ciò sia dovuto al fatto che la regolarizzazione non funziona altrettanto bene con un aggiornamento per articolo, o addirittura ha un nome diverso o una formula modificata.

Risposte:


2

La regolarizzazione è rilevante anche per l'apprendimento per articolo. Vorrei suggerire di iniziare con un approccio di validazione di base per scoprire lambda, sia che tu stia facendo l'apprendimento batch o per articolo. Questo è l'approccio più semplice e sicuro. Prova manualmente con un numero di valori diversi. ad es. 0,001. 0,003, 0,01, 0,03, 0,1 ecc. E guarda come si comporta il tuo set di validazione. Successivamente è possibile automatizzare questo processo introducendo un metodo di ricerca lineare o locale.

Come nota a margine, credo che il valore di lambda dovrebbe essere considerato in relazione agli aggiornamenti del vettore dei parametri, piuttosto che alla dimensione del set di addestramento. Per l'addestramento in batch è disponibile un aggiornamento dei parametri per passaggio del set di dati , mentre per l'aggiornamento online per campione (indipendentemente dalle dimensioni del set di addestramento).

Di recente mi sono imbattuto in questa domanda crossvalidata , che sembra abbastanza simile alla tua. Esiste un collegamento a un documento su un nuovo algoritmo SGD , con alcuni contenuti pertinenti. Potrebbe essere utile dare un'occhiata (in particolare le pagine 1742-1743).


Sì, intendo ancora convalidare in modo incrociato per verificare l'eccessivo adattamento, la mia domanda è più semplice di così: non riesco a trovare alcun riferimento all'utilizzo della regolarizzazione con una regolazione del peso per articolo in MLP, e sono preoccupato che ci sia un buon motivo di ciò - ad es. non funziona in quella modalità di apprendimento o necessita di aggiustamenti. La domanda crossvalidated è molto simile e mi dà più fiducia, grazie. La pagina dell'algoritmo SGD sembra avere un metodo diverso e stocastico per introdurre la regolarizzazione, che potrebbe essere un po 'avanzato per me, ma è esattamente quello che sto cercando.
Neil Slater,

La regolarizzazione è rilevante anche per l'apprendimento per articolo. Vorrei ancora suggerire di iniziare con un approccio di convalida di base per scoprire lambda. Questo è l'approccio più semplice e sicuro. Prova manualmente con un numero di valori diversi. ad es. 0,001. 0,003, 0,01, 0,03, 0,1 ecc. E guarda come si comporta il tuo set di validazione. Successivamente è possibile automatizzare questo processo introducendo un metodo di ricerca lineare o locale.
insys

Se il tuo commento sopra è stato modificato e sostituito la prima frase / domanda nella tua risposta, penso che potrei accettarlo.
Neil Slater,

Grazie per la segnalazione, sono d'accordo. Modificato in. Spero sia più chiaro.
insys

2

Per completare ciò che ha detto insys :

La regolarizzazione viene utilizzata quando si calcola la backpropagation per tutti i pesi nel proprio MLP. Pertanto, invece di calcolare il gradiente rispetto a tutti gli input del training set ( batch), usi solo alcuni / uno item (s) ( stochastic or semi-stochastic). Si finirà per limitare un risultato dell'aggiornamento rispetto a un elemento anziché a tutto ciò che è anche corretto.

Inoltre, se ricordo bene, usava Andrew NG L2-regularization. L' /Nin lambda * current_weight / Nnon è obbligatorio, ma aiuta solo ridimensionamento l'ingresso. Tuttavia, se si sceglie di non utilizzarlo, sarà necessario (nella maggior parte dei casi) selezionare un altro valore per lambda.

Puoi anche usare l' algoritmo di ricerca Grid per scegliere il valore migliore per lambda(l' iperparametro => quello che devi scegliere).

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.