Domanda:
Come si progetta intenzionalmente una rete neurale overfitting?
Rahn
2020-06-30 13:51:20 UTC
view on stackexchange narkive permalink

Per avere una rete neurale che funzioni perfettamente sul set di addestramento, ma scarsamente sul set di convalida, cosa dovrei fare?Per semplificare, consideriamolo un compito di classificazione CIFAR-10.

Ad esempio, "nessun dropout" e "nessuna regolarizzazione" sarebbero utili, ma "più livelli" non necessariamente.Mi chiedo anche: la "dimensione del batch" e la scelta dell'ottimizzatore fanno la differenza sull'overfitting?

Niente "garantisce" l'overfitting.Se ci fosse qualcosa di simile, semplicemente non lo useremmo durante la costruzione delle reti neurali.
@Tim: non sarebbe sufficiente aggiungere enormi quantità di dati totalmente casuali?
@StephanKolassa potresti approfondire?
Aggiungi molte funzionalità completamente casuali alla tua rete.A meno che tu non sfoltisca / regolarizzi, la tua rete si attaccherà alle correlazioni spurie e farà sempre meglio in allenamento.E peggio nel test / convalida.Puoi persino overfit sul set di test, è solo una questione di setacciare abbastanza dati casuali.[Vedi qui.] (Https://stats.stackexchange.com/a/474623/1352)
@StephanKolassa Immagino, questo porta la domanda: cosa è "consentito" per renderlo overfitt?Ad esempio, l'utilizzo di etichette casuali in fase di treno, ma quelle corrette in fase di test funzionerebbero.
@StephanKolassa la mia esperienza dice che la semplice aggiunta di più livelli / canali di solito non migliora le prestazioni di allenamento.
Non sto parlando di aggiungere strati.Sto parlando di aggiungere dati di input casuali.
@StephanKolassa Presumo che tu intenda aggiungere ulteriori caratteristiche / attributi di input, piuttosto che campioni di addestramento aggiuntivi (dati di input casuali potrebbero significare entrambi)?
@DikranMarsupial: sì, [come ho scritto] (https://stats.stackexchange.com/questions/474738/how-do-i-intentionally-design-an-overfitting-neural-network?noredirect=1#comment876505_474738), "completamentecaratteristiche * casuali * ".
@StephanKolassa Cita che questo rovinerebbe effettivamente le prestazioni di una rete neurale?Ti colleghi a te stesso facendo la stessa affermazione.
Per quanto riguarda la dimensione del lotto, penso che l'uso di lotti più grandi aiuti il sovraadattamento.Ci sono alcuni risultati sperimentali che mostrano che la varianza nei gradienti stocastici gioca una sorta di effetto di regolarizzazione.Quindi, con lotti di grandi dimensioni, riduci la varianza.Ad ogni modo, ottenere un buon addestramento ma una cattiva accuratezza di convalida è banale: memorizzare semplicemente il set di dati di addestramento?
Non sono sicuro delle reti neurali, ma usando un albero decisionale senza profondità massima potresti sicuramente overfit
@AleksandrDubinsky: Non sono un esperto di reti neurali, motivo per cui lo suggerisco come commento, non come risposta, quindi non ho un riferimento.Mi collego a un'altra mia risposta come illustrazione, poiché ho molta familiarità con ciò che ho scritto io stesso.
@StephanKolassa Sono abbastanza sicuro che la magia dei modelli NN è che evitano di fare proprio questo.Questo è ciò che li rende eccezionali con dati ad alta dimensione.Tuttavia, sarebbe un esperimento molto interessante.Suppongo che più caratteristiche spurie in ogni campione, più grande dovrebbe essere il modello per regolarizzarsi sulla varianza aggiuntiva.
@AleksandrDubinsky: potresti avere ragione.Sospetto che questa magia derivi dalla regolarizzazione / potatura / abbandono che di solito viene applicata automaticamente e che OP ha pensato di disattivare.
@StephanKolassa È più fondamentale.Anche senza dropout, i molti neuroni inizializzati in modo casuale eseguono un insieme.Dropout, SGD, ecc. Lo migliorano ma non sono cruciali.Ma ancora una volta, sarebbe un'ottima ricerca.
Per i lettori come me che lottano per capire cosa sia esattamente l'overfitting (nonostante l'ampio folklore), [questa risposta] (https://stats.stackexchange.com/a/281474/86176) può essere utile.
Otto risposte:
Dikran Marsupial
2020-06-30 14:27:35 UTC
view on stackexchange narkive permalink

Se hai una rete con due livelli di pesi modificabili puoi formare regioni decisionali convesse arbitrarie, dove i neuroni di livello più basso dividono lo spazio di input in semispazi e il secondo strato di neuroni esegue un'operazione "AND" per determinare se sei nella parte destra dei semispazi che definiscono la regione convessa. Nel diagramma sottostante puoi formare le regioni r1 e r2 in questo modo. Se si aggiunge un ulteriore in un secondo momento, è possibile formare regioni decisionali concave o disgiunte arbitrarie combinando gli output delle sottoreti che definiscono le sottoregioni convesse. Penso di aver ottenuto questa prova dal libro di Philip Wasserman "Neural Computing: Theory and Practice" (1989).

enter image description here

Quindi si desidera sovradimensionare, utilizzare una rete neurale con tre livelli nascosti di neuroni, utilizzare un numero enorme di neuroni di livello nascosto in ogni livello, ridurre al minimo il numero di schemi di allenamento (se consentito dalla sfida), utilizzare una metrica dell'errore di entropia incrociata e addestrare utilizzando un algoritmo di ottimizzazione globale (ad es. ricottura simulata).

Questo approccio consentirebbe di creare una rete neurale che avesse sottoregioni convesse che circondano ogni modello di addestramento di ciascuna classe, e quindi avrebbe zero errori nel set di addestramento e avrebbe scarse prestazioni di convalida laddove le distribuzioni delle classi si sovrappongono.

Tieni presente che l'over-fitting riguarda l'eccessiva ottimizzazione del modello. Un modello sovra-parametrizzato (più pesi / unità nascoste del necessario) può comunque funzionare bene se la "mancata corrispondenza dei dati" non è minimizzata eccessivamente (ad esempio applicando la regolarizzazione o l'arresto anticipato o avendo la fortuna di atterrare in un minimo locale "buono" ).

La prova è o non necessaria (intuitivamente, è possibile costruire una cattiva rete) o insufficiente (quindi ... quanto grande deve essere una rete, con questa costruzione, per memorizzare CIFAR?) I suggerimenti effettivi, come non randomizzare ili dati di addestramento e l'utilizzo di un ottimizzatore di batch (ad esempio, batch size == epoch size) sono buoni, ma non sufficienti.
@AleksandrDubinsky il punto è che l'aumento del numero di neuroni nascosti è garantito per consentire la memorizzazione.Intuitivamente, per un problema di classificazione binaria bilanciata con N pattern in uno spazio d-dimensionale, avresti bisogno al massimo di Nd unità nascoste per memorizzare i dati (inserendo una casella d-dimensionale attorno a ciascun punto di una classe), ma ovviamente tupotrebbe richiedere meno.In pratica, gli MLP con un numero anche molto elevato di unità di livello nascoste tendono a non sovradimensionarsi (soprattutto a memorizzare), anche senza regolarizzazione.(1/2)
Sospetto che ciò sia dovuto al fatto che i minimi locali "buoni" abbondano e i minimi globali della perdita del set di addestramento sono in realtà piuttosto difficili da trovare.Sottolineare che un numero sufficiente di unità di strati nascosti garantisce che la memorizzazione sia possibile è importante perché mostra che è necessaria un'ottimizzazione globale aggressiva (cioè qualcosa di più della discesa del gradiente).
Peteris
2020-07-01 03:37:54 UTC
view on stackexchange narkive permalink

Memorizzazione

Per un overfitting assoluto, vuoi una rete che sia tecnicamente in grado di memorizzare tutti gli esempi, ma fondamentalmente non capace di generalizzazione. Mi sembra di ricordare una storia su qualcuno che formava un predittore del rendimento degli studenti che ha ottenuto ottimi risultati nel primo anno ma è stato un fallimento assoluto nell'anno successivo, che si è rivelato essere causato dall'utilizzo di tutte le colonne di una tabella come caratteristiche, incluso il colonna con il numero sequenziale dello studente, e il sistema è semplicemente riuscito a imparare che ad es lo studente # 42 ottiene sempre buoni voti e lo studente # 43 ha un rendimento scarso, il che ha funzionato bene fino al prossimo anno, quando un altro studente era # 42.

Per una prima prova di concetto su CIFAR, potresti fare quanto segue:

  1. Scegli un sottoinsieme di campioni CIFAR per il quale il colore del pixel nell'angolo in alto a sinistra risulta essere diverso per ogni immagine e utilizza quel sottoinsieme come dati di addestramento.
  2. Crea una rete in cui il primo livello seleziona solo i valori RGB dell'angolo in alto a sinistra e ignora tutto il resto, seguito da uno o due livelli completamente collegati di larghezza comparabile fino al livello di classificazione finale.
  3. Addestra il tuo sistema: dovresti ottenere il 100% sui dati di addestramento e quasi casuale sui dati di test.

Dopodiché, puoi estenderlo a un sistema orribilmente overfitting per l'intero CIFAR:

  1. Come prima, filtra i dati in arrivo in modo che sia possibile identificare ogni singolo elemento nei dati di addestramento (quindi un singolo pixel non sarà sufficiente) ma in modo che sia decisamente impossibile risolvere il problema effettivo da quei dati. Forse i primi dieci pixel nella riga superiore sarebbero sufficienti; forse qualcosa dai metadati, ad es. l'ID immagine, come nello scenario delle prestazioni degli studenti.
  2. Assicurati che non ci sia regolarizzazione di alcuna forma, nessuna struttura convoluzionale che implichi indipendenza traduttiva, solo livelli completamente connessi.
  3. Allenati fino al 100% di precisione di allenamento e piangi per l'inutilità del sistema.
L'overfitting non si verifica quando la perdita sul treno è molto inferiore alla perdita durante il test (è normale!).È quando la perdita sul set di test è molto peggiore di quanto "dovrebbe essere", ad esempio peggiore di quanto si supponga il precedente.Non sono sicuro che ciò accadrà.(Non stai fornendo alla rete molti dati utili, quindi ovviamente non può funzionare bene, ma potrebbe non andare stupidamente male.) Devi provarlo.Sospetto che una rete non minuscola andrà benissimo e persino farà una previsione leggermente migliore della precedente.Esperimento interessante, a prescindere.
D.W.
2020-07-01 09:10:12 UTC
view on stackexchange narkive permalink

In generale, se ti alleni per un numero molto elevato di epoche e se la tua rete ha una capacità sufficiente, la rete andrà in overfit. Quindi, per garantire l'overfitting: scegli una rete con una capacità molto elevata e poi allenati per molte epoche. Non utilizzare la regolarizzazione (ad es. Abbandono, calo del peso, ecc.).

Gli esperimenti hanno dimostrato che se ti alleni abbastanza a lungo, le reti possono memorizzare tutti gli input nel set di addestramento e raggiungere una precisione del 100%, ma questo non significa che sarà accurato su un set di convalida. Uno dei modi principali in cui evitiamo l'overfitting nella maggior parte del lavoro oggi è interrompendola anticipatamente: interrompiamo SGD dopo un numero limitato di epoche. Quindi, se eviti di fermarti in anticipo e utilizzi una rete abbastanza grande, non dovresti avere problemi a far sì che la rete si adatti in modo eccessivo.

Vuoi davvero forzare un sacco di overfitting? Quindi aggiungi ulteriori campioni al set di addestramento, con etichette scelte a caso. Ora scegli una rete molto grande e allenati per molto tempo, abbastanza a lungo da ottenere il 100% di precisione sul set di allenamento. È probabile che i campioni etichettati in modo casuale impediscano ulteriormente qualsiasi generalizzazione e causino prestazioni ancora peggiori della rete sul set di convalida.

"se ti alleni abbastanza a lungo, le reti possono memorizzare tutti gli input nel set di addestramento e raggiungere una precisione del 100%, ma questo non significa che sarà accurato su un set di convalida."Anche questo non implica che * non * sarà accurato sul set di convalida.
@AleksandrDubinsky, Lo so.Si può fare lo stesso commento su ogni risposta qui.Vedere l'ultimo paragrafo della mia risposta per sapere cosa si può fare al riguardo.Non ci sono garanzie matematiche in questo regno, ma mi aspetto che funzioni.
"Gli esperimenti hanno dimostrato che se ti alleni abbastanza a lungo, le reti possono memorizzare tutti gli input nel set di addestramento e raggiungere una precisione del 100%", non è vero se utilizzi la discesa del gradiente poiché è probabile che il criterio di allenamento abbia minimi locali.Questa può essere una buona cosa in quanto può prevenire l'eccessivo adattamento.
Haitao Du
2020-06-30 15:20:58 UTC
view on stackexchange narkive permalink

Mi piace molto la tua domanda.

Le persone spesso parlano di overfitting, ma forse non troppe persone si sono rese conto che progettare intenzionalmente un modello di overfitting non è un compito banale!Soprattutto con grandi quantità di dati.

In passato, la dimensione dei dati è spesso limitata.Ad esempio, un paio di centinaia di punti dati.Allora è facile avere un modello troppo aderente.

Tuttavia, nel "machine learning moderno", i dati di addestramento possono essere enormi, diciamo milioni di immagini, se un modello può sovradimensionarlo, sarebbe già un grande risultato.

Quindi la mia risposta alla tua domanda è, non un compito facile, a meno che tu non stia barando riducendo la dimensione del campione.

Non tutti i problemi che devono essere risolti sono problemi di "big data".Abbiamo ancora bisogno di buoni metodi per i problemi di "piccoli dati" oggi.La difficoltà nei "big data" sembra non essere inferenziale, ma computazionale.Per piccoli problemi di dati, la gestione dei dati è banale, ma si ha il problema dell'inferenza.Dovremmo mirare ad avere strumenti e capacità per entrambi i tipi di problema, almeno come comunità se non come individui.
csiz
2020-06-30 23:37:09 UTC
view on stackexchange narkive permalink

Secondo il documento di Open AI Deep Double Descent, è necessario disporre di una rete neurale sufficientemente grande per un dato set di dati.Presumibilmente questo rende l'NN abbastanza potente da apprendere perfettamente i dati di addestramento, ma abbastanza piccolo da non ottenere l'effetto di generalizzazione di una rete di grandi dimensioni.Il documento è empirico, quindi il motivo per cui funziona non è compreso in modo significativo ...

Come puoi vedere nel grafico, inizi con una rete sottodimensionata che non apprende i dati.È possibile aumentare le dimensioni finché non si comportano bene sul set di test, ma ulteriori aumenti di dimensioni portano a un adattamento eccessivo e prestazioni peggiori sul set di test.Infine, reti neurali molto grandi entrano in un regime diverso in cui l'errore del test continua a diminuire con le dimensioni.Tieni presente che l'errore di addestramento (mostrato in un grafico diverso) diminuisce in modo monotono.

test error by network size

Il documento non ha nulla a che fare con la domanda.
Inoltre, non è un documento molto significativo o interessante.Il "fenomeno" di cui si parla si verifica nel punto in cui la rete funziona ancora male sul set di allenamento.(La domanda stabilisce che la rete funziona "perfettamente" sul set di addestramento.) Non si parla di overfitting reale, ma di alcune osservazioni irrilevanti che gli autori sperano possano essere spiegate da una teoria delle reti neurali.
@AleksandrDubinsky Sono d'accordo che non è particolarmente interessante, ma sembra rilevante.Considero un fenomeno generale che le reti di dimensioni intermedie abbiano prestazioni peggiori sul set di test di quanto ci si aspetterebbe dall'errore di addestramento.Quindi una regola pratica per la domanda di OP è aumentare leggermente la capacità di qualsiasi rete neurale di piccole dimensioni che trova che funzioni bene.L'errore del treno si avvicina a 0, sebbene non sia proprio lì nel punto critico.Per questo sfiderei l'ipotesi di OP su cosa significhi over-fitting.Forse vuole massimizzare l'errore del test per l'errore del treno
La parte più rilevante è il confronto con la statistica classica, dove la risposta sarebbe semplicemente aumentare il numero di parametri.Il documento mostra che non è così semplice per le moderne reti neurali.
@csiz Ho eseguito un gran numero di esperimenti su questo (sfortunatamente i revisori non pensano che sia una domanda interessante, quindi è inedito), ma il grafico non è sempre così.A volte l'errore del test aumenta solo in funzione della dimensione del livello nascosto, a volte diminuisce e aumenta di nuovo, a volte cade e basta.Almeno per MLP "superficiali".
Wololo
2020-07-01 09:49:06 UTC
view on stackexchange narkive permalink

Ecco alcune cose che penso potrebbero aiutare.

  1. Se sei libero di modificare l'architettura di rete, prova a utilizzare una rete grande ma meno profonda. I livelli aiutano una rete ad apprendere funzionalità di livello superiore e dall'ultimo livello le funzionalità sono sufficientemente astratte da consentire alla rete di "dar loro un senso". Forzando l'addestramento su una rete meno profonda, stai essenzialmente paralizzando la rete di questa capacità di formare una gerarchia di concetti di livello sempre più alto e costringendola ad apprendere meccanicamente i dati (overfit, vale a dire) per minimizzare il perdita.
  2. Se è ancora una volta qualcosa che ti interesserebbe esplorare, puoi provare a eliminare i dati dalla rete. Fornisci a una grande rete solo una manciata di esempi di formazione e cercherà di adattarla al meglio. Meglio ancora, forniscigli esempi che abbiano una variabilità minima, esempi che hanno più o meno lo stesso aspetto.
  3. Non utilizzare gradiente stocastico decente. La stocasticità aiuta a ridurre l'overfitting. Quindi, usa l'addestramento completo! Se desideri utilizzare un gradiente stocastico decente, progetta i tuoi minibatch in modo che abbiano una variabilità minima.
Aleksandr Dubinsky
2020-06-30 23:35:54 UTC
view on stackexchange narkive permalink

Riduci il set di addestramento a pochi o addirittura a 1 esempio.

È un modo semplice e valido per testare il codice per alcuni bug evidenti.

Altrimenti no, non esiste un'architettura magica che vada sempre oltre.Questo è "in base alla progettazione".Gli algoritmi di apprendimento automatico che si adattano facilmente non sono normalmente utili.

gdelab
2020-07-01 20:38:07 UTC
view on stackexchange narkive permalink

Se hai molta libertà nella progettazione dell'algoritmo, puoi fare quanto segue:

  • addestra una rete neurale enorme ma superficiale (probabilmente non convoluzionale, la vuoi davvero molto potente ma molto stupida) per memorizzare perfettamente il set di addestramento, come suggerito da @Peteris e @Wololo (la sua soluzione è stata convertita me). Questa rete dovrebbe fornire sia la classificazione che un valore booleano che indica se questa immagine è nel tuo set di addestramento o meno.

  • Per addestrare questa prima rete, in realtà avrai bisogno di dati di addestramento aggiuntivi dall'esterno, per addestrare la parte "non nel set di addestramento".

  • forma il miglior convnet che puoi per svolgere effettivamente il tuo compito correttamente (senza overfitting).

  • Durante l'inferenza / valutazione,

    • utilizza la prima rete per dedurre se l'immagine è nel set di addestramento o meno.
      • In tal caso, visualizza la classificazione che hai "imparato a memoria" nella prima rete,
      • Altrimenti, utilizza la seconda rete per ottenere la classificazione meno probabile per l'immagine

In questo modo, con una prima rete abbastanza grande, dovresti avere una precisione del 100% sui dati di addestramento e peggio che casuale (spesso vicino allo 0%, a seconda dell'attività) sui dati del test, che è "migliore" del 100% rispetto all'output casuale.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...