Perché il sovradimensionamento delle reti neurali devastanti per la classificazione MNIST?


8

Ho una semplice rete neurale (NN) per la classificazione MNIST. Include 2 livelli nascosti, ciascuno con 500 neuroni. Quindi le dimensioni del NN sono: 784-500-500-10. ReLU è usato in tutti i neuroni, softmax è usato all'uscita e l'entropia incrociata è la funzione di perdita.

Ciò che mi confonde è perché il sovradimensionamento non sembra devastare la NN?

Considera il numero di parametri (pesi) di NN. Sono circa

784×500+500×500+500×10=647000.
Tuttavia, nel mio esperimento, ho usato solo 6000esempi (un decimo del set di addestramento MNIST) per addestrare l'NN. (Questo serve solo per ridurre il tempo di esecuzione. L'errore di allenamento e test diminuirebbe notevolmente se avessi usato più esempi di allenamento.) Ho ripetuto l'esperimento 10 volte. Viene utilizzata la semplice discesa gradiente stocastica (senza prop RMS o quantità di moto); non è stata utilizzata alcuna regolarizzazione / abbandono / arresto anticipato. L'errore di addestramento e l'errore di prova riportati sono stati:

No.12345678910Etrain(%)7.810.39.111.08.79.29.38.310.38.6Etest(%)11.713.913.214.112.113.213.311.913.412.7

Si noti che in tutti e 10 gli esperimenti (ciascuno con inizializzazione di parametri casuali indipendente), l'errore del test differiva dall'errore di allenamento solo di ca. 4%, anche se ho usato esempi 6K per allenare i parametri 647K. La dimensione VC della rete neurale è nell'ordine diO(|E|log(|E|)) almeno dove |E|è il numero di spigoli (pesi). Quindi perché l'errore del test non è stato miseramente più alto (ad es. 30% o 50%) rispetto all'errore di allenamento? Lo apprezzerei molto se qualcuno potesse indicare dove mi sono perso. Molte grazie!

[EDITS 2017/6/30]

Per chiarire gli effetti dell'arresto anticipato, ho ripetuto i 10 esperimenti, ciascuno con 20 epoche di allenamento. I tassi di errore sono mostrati nella figura seguente:

inserisci qui la descrizione dell'immagine

Il divario tra il test e l'errore dell'allenamento è aumentato quando sono state usate più epoche nell'allenamento. Tuttavia, la coda dell'errore di test è rimasta quasi piatta dopo che l'errore di allenamento è stato portato a zero. Inoltre, ho visto tendenze simili per altre dimensioni del set di allenamento. Il tasso di errore medio alla fine di 20 epoche di allenamento viene tracciato rispetto alla dimensione dell'insegnamento indicato di seguito:

inserisci qui la descrizione dell'immagine

Quindi si verifica un overfitting, ma non sembra devastare la NN. Considerando il numero di parametri (647K) di cui abbiamo bisogno per il treno e il numero di esempi di addestramento che abbiamo (<60K), la domanda rimane: perché un overfitting non rende facilmente inutile l'NN? Inoltre, è vero per ReLU NN per tutte le attività di classificazione con output softmax e funzione obiettivo entropia? Qualcuno ha visto un contro-esempio?


Non riesco a vedere alcun commento sul numero di epoche utilizzate. Hai provato a correre per più / meno epoche per vedere l'effetto che ha? Dici di non usare l'arresto anticipato, ma presumibilmente stai decidendo di smettere in qualche modo? Stai correndo per un gran numero di epoche, in modo tale che la rete sembra essere convergente?
Neil Slater,

@NeilSlater Ho usato solo 1 epoca nell'esperimento e dopo ho terminato l'SGD. (Questo per ridurre i tempi di esecuzione, poiché lo sto facendo su Matlab per una migliore controllabilità e visibilità). Guardando il valore della funzione di perdita in SGD (mini batch size = 1), tuttavia, sembrava convergere, ovvero l'output massimo di softmax si aggirava vicino a 1. Ho provato anche 60K esempi (1 epoca) e ho visto una tendenza simile, cioè errore di allenamento ~ 3% ed errore di prova ~ 4%.
syeh_106,

Penso che la risposta che segue i tuoi esperimenti estesi sia una combinazione tra la mia e la risposta di Bashar. Può essere utile se si pensa in termini di test del rapporto di errore: allenarsi - un errore di addestramento dello 0% con un errore di prova del 7% non è una buona prestazione - questo è un eccessivo adattamento. Anche il tuo tasso di errore del 2,5% su 60k esempi di allenamento è 10 volte peggiore dei tassi di errore all'avanguardia su questo problema. Tuttavia, suppongo che la tua domanda sia "perché la rete non è regredita al 50% o addirittura al 90% dei tassi di errore"? Che è la risposta di Bashar, anche se mi chiedo ancora se gli errori del test aumenterebbero con ancora più epoche
Neil Slater,

1
@NeilSlater Certo, dimensioni del gradino SGD = 0,001. I pesi vengono inizializzati in modo casuale e uniforme su [-0,2, +0,2] sui primi 2 livelli, [-1, + 1] sul livello di output.
syeh_106,

1
Ho aggiornato la mia risposta con qualche indagine aggiuntiva. Fondamentalmente concorda con le tue scoperte e offre un contesto e una spiegazione agitando la mano
Neil Slater,

Risposte:


7

Ho replicato i tuoi risultati usando Keras e ho ottenuto numeri molto simili, quindi non credo che tu stia facendo qualcosa di sbagliato.

Per interesse, ho corso per molte altre epoche per vedere cosa sarebbe successo. L'accuratezza dei risultati dei test e dei treni è rimasta piuttosto stabile. Tuttavia, i valori di perdita si sono allontanati ulteriormente nel tempo. Dopo circa 10 anni, ottenevo un'accuratezza del treno del 100%, un'accuratezza del test del 94,3%, con valori di perdita rispettivamente intorno a 0,01 e 0,22. Dopo 20.000 epoche, le precisioni erano appena cambiate, ma avevo una perdita di addestramento di 0,000005 e una perdita di prova di 0,36. Anche le perdite stavano ancora divergendo, anche se molto lentamente. A mio avviso, la rete è chiaramente troppo adatta.

Quindi la domanda potrebbe essere riformulata: perché, nonostante l'eccessivo adattamento, una rete neurale addestrata al set di dati MNIST si generalizza ancora apparentemente ragionevolmente bene in termini di precisione?

Vale la pena confrontare questa precisione del 94,3% con ciò che è possibile utilizzare approcci più ingenui.

Ad esempio, una semplice regressione lineare del softmax (essenzialmente la stessa rete neurale senza gli strati nascosti), fornisce una precisione stabile e rapida del 95,1% di treni e del 90,7% di test. Ciò dimostra che molti dati si separano linearmente: è possibile disegnare iperpiani nelle dimensioni di 784 e il 90% delle immagini delle cifre si troveranno all'interno della "scatola" corretta senza che sia necessario un ulteriore perfezionamento. Da questo, ci si potrebbe aspettare che una soluzione non lineare di overfit ottenga un risultato peggiore del 90%, ma forse non peggiore dell'80% perché forma in modo intuitivo un confine troppo complesso attorno ad esempio un "5" trovato all'interno della scatola per "3" assegnerà in modo errato solo una piccola quantità di questa ingenua 3 varietà. Ma siamo migliori di questa stima dell'80% inferiore rispetto al modello lineare.

Un altro possibile modello ingenuo è la corrispondenza dei modelli, o il più vicino. Questa è una ragionevole analogia con ciò che sta facendo l'eccessivo adattamento: crea un'area locale vicino a ciascun esempio di addestramento in cui prevede la stessa classe. Problemi di sovra-adattamento si verificano nello spazio tra i valori di attivazione che seguiranno qualunque sia la rete "naturalmente". Nota il caso peggiore, e ciò che vedi spesso nei diagrammi esplicativi, sarebbe una superficie quasi caotica e altamente curva che viaggia attraverso altre classificazioni. Ma in realtà potrebbe essere più naturale per la rete neurale interpolare più uniformemente tra i punti: ciò che effettivamente fa dipende dalla natura delle curve di ordine superiore che la rete combina in approssimazioni e da quanto bene si adattano già ai dati.

Ho preso in prestito il codice per una soluzione KNN da questo blog su MNIST con K Neighbours più vicini . L'uso di k = 1 - ovvero la scelta dell'etichetta del più vicino tra i 6000 esempi di allenamento semplicemente abbinando i valori dei pixel, fornisce una precisione del 91%. Il 3% in più che la rete neurale troppo allenata ottiene non sembra così impressionante data la semplicità del conteggio dei pixel match che KNN con k = 1 sta facendo.

Ho provato alcune varianti dell'architettura di rete, diverse funzioni di attivazione, diversi numeri e dimensioni di livelli - nessuno usando la regolarizzazione. Tuttavia, con 6000 esempi di allenamento, non sono riuscito a convincere nessuno di loro a adattarsi in un modo in cui la precisione del test è diminuita drasticamente. Anche la riduzione a soli 600 esempi di allenamento ha appena abbassato l'altopiano, con una precisione dell'86% circa.

La mia conclusione di base è che gli esempi MNIST hanno transizioni relativamente fluide tra le classi nello spazio delle caratteristiche e che le reti neurali possono adattarsi a queste e interpolare tra le classi in modo "naturale", dato i blocchi NN per l'approssimazione delle funzioni - senza aggiungere componenti ad alta frequenza a l'approssimazione che potrebbe causare problemi in uno scenario di overfit.

Potrebbe essere un esperimento interessante provare con un set di "MNIST rumoroso" in cui una quantità di rumore casuale o distorsione viene aggiunta sia agli esempi di allenamento che di test. Ci si aspetterebbe che i modelli regolarizzati funzionino bene su questo set di dati, ma forse in quello scenario l'eccessivo adattamento causerebbe problemi più evidenti con precisione.


Questo è da prima dell'aggiornamento con ulteriori test da parte di OP.

Dai tuoi commenti, dici che i risultati dei tuoi test sono tutti presi dopo aver eseguito una sola epoca. In sostanza, hai utilizzato l'interruzione anticipata, nonostante tu abbia scritto di no, perché hai interrotto l'allenamento il prima possibile in base ai dati di allenamento.

Suggerirei di correre per molte altre epoche se vuoi vedere come la rete sta davvero convergendo. Inizia con 10 epoche, considera di salire a 100. Un'epoca non è molte per questo problema, specialmente su 6000 campioni.

Sebbene non sia garantito un numero crescente di iterazioni per peggiorare la tua rete di quanto non abbia già fatto, non hai davvero dato molte possibilità e i tuoi risultati sperimentali finora non sono conclusivi.

In effetti, mi sarei quasi aspettato che i risultati dei dati dei tuoi test migliorassero dopo una seconda, terza epoca, prima di iniziare a staccarmi dalle metriche di allenamento con l'aumentare del numero di epoche. Mi aspetto anche che il tuo errore di formazione si avvicini allo 0% mentre la rete si avvicina alla convergenza.


Hai ragione. Eseguendo solo 1 epoca, ho implementato implicitamente l'arresto anticipato, inavvertitamente. Proverò il tuo suggerimento e eventualmente aggiornerò la mia domanda se necessario.
syeh_106 il

La risposta aggiornata e i risultati dell'indagine sono molto utili, facendo luce su questa domanda. Lo apprezzo molto. Le reti neurali artificiali mi sembrano belle e affascinanti. È solo che, quando ho cercato di capire perché / come / quando ha funzionato, l'analisi / teoria quantitativa e rigorosa non sembrava abbondare.
syeh_106,

3

In generale, le persone pensano al sovradimensionamento in funzione della complessità del modello. È fantastico, perché la complessità del modello è una delle cose che puoi controllare. In realtà, ci sono molti altri fattori che sono legati al problema di overfitting: - numero di campioni di training - numero di iterazioni - la dimensione dell'input (nel tuo caso, credo che questo sia il motivo per cui non stai overfitting) - il difficoltà del problema: se hai un problema semplice, separabile linearmente, non devi preoccuparti troppo del sovralimentazione.

Esiste una demo visiva fornita da google tensorflow che consente di modificare tutti questi parametri. http://playground.tensorflow.org Puoi cambiare il tuo problema di input, il numero di campioni, la dimensione del tuo input, la rete, il numero di iterazioni.

Mi piace pensare al overfitting come Overfitting = modelli di grandi dimensioni + caratteristiche non correlate

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.