Esistono numerose prove empiriche che reti neurali abbastanza profonde possono memorizzare etichette casuali su enormi set di dati (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals, "Comprendere l'apprendimento profondo richiede ripensare la generalizzazione"). Quindi, in linea di principio, ottenendo un NN abbastanza grande, possiamo sempre ridurre l' errore di addestramento a valori estremamente piccoli, limitati nella pratica dall'accuratezza numerica, non importa quanto sia insignificante il compito.
Le cose sono abbastanza diverse per l' errore di generalizzazione . Non possiamo essere sicuri che per ogni problema di apprendimento, esista un modello NN apprendibile che può produrre un errore di generalizzazione tanto basso quanto desiderato. Per questo motivo il primo passo è
1. Imposta le tue aspettative correttamente
Trova un riferimento affidabile che ti dica che esiste un'architettura che può raggiungere l'errore di generalizzazione che stai cercando, sul tuo set di dati o su quello più simile per il quale puoi trovare riferimenti. Ad esempio, guarda qui
Quali sono le reti neurali convoluzionali attuali?
per trovare le prestazioni attuali (al momento delle risposte) SOTA (State Of The Art) per le CNN su vari compiti. È una buona idea provare a riprodurre tali risultati su questi set di dati di riferimento, prima di allenarsi sul proprio set di dati, come test per verificare che tutta la propria infrastruttura sia correttamente installata.
2. Assicurarsi che la procedura di allenamento sia impeccabile
Tutti i controlli descritti nelle risposte alla domanda
Cosa devo fare quando la mia rete neurale non impara?
per assicurarsi che la procedura di allenamento sia corretta, sono un prerequisito per una corretta riduzione dell'errore di generalizzazione (se il tuo NN non sta imparando, non può imparare a generalizzare). Questi controlli includono, tra le altre cose:
- test unitari
- controlli del set di dati (dai un'occhiata ad alcuni campioni casuali di input / etichette sia per il set di allenamento che per il set di test e controlla che le etichette siano corrette; controlla la larghezza e la dimensione delle immagini di input; mescola i campioni nel set di allenamento / test e vedi se influisce risultati; ecc.)
- test di randomizzazione
- standardizzare le versioni di pre-elaborazione e pacchetto
- tenere un diario di esperimenti numerici
3. Cerca di ottenere la superconvergenza
"Super-convergenza: formazione molto rapida di reti neurali che utilizzano grandi tassi di apprendimento" di Leslie N. Smith e Nicholay Topin mostra che in alcuni casi la combinazione di grandi tassi di apprendimento con il metodo ciclico del tasso di apprendimento di Leslie N. Smith funge da regolarizzatore , accelerando la convergenza di un ordine di grandezza e riducendo la necessità di un'ampia regolarizzazione. Quindi questa è una buona cosa da provare prima
4. Impostazione della regolarizzazione su MAXXX
La regolarizzazione spesso aumenta il tempo di allenamento (cattivo), aumenta l'errore di allenamento e riduce l'errore di generalizzazione (buono), ma troppa regolarizzazione può effettivamente aumentare entrambi gli errori (insufficiente). Per questo motivo, e a causa dell'aumento del tempo di allenamento, è spesso meglio introdurre le varie tecniche di regolarizzazione una alla volta, dopo aver superato con successo il set di allenamento. Si noti che la regolarizzazione di per sé non implica necessariamente che l'errore di generalizzazione si riduca: il modello deve avere una capacità sufficiente per ottenere buone proprietà di generalizzazione. Questo spesso significa che hai bisogno di una rete sufficientemente profonda, prima di poter vedere i vantaggi della regolarizzazione.
I metodi di regolarizzazione più antichi sono probabilmente l'arresto anticipato e la riduzione del peso. Alcuni degli altri:
- ridurre le dimensioni del lotto: le dimensioni del lotto più piccole sono generalmente associate a un errore di generalizzazione più piccolo, quindi è qualcosa da provare. Tuttavia, si noti che alcuni contestano l'utilità dei minibatch: nella mia esperienza, aiutano (a condizione che non si debbano usare piccole dimensioni folli comem = 16), ma Elad Hoffer, Itay Hubara, Daniel Soudry Train più a lungo, generalizzano meglio: colmare il divario di generalizzazione nella formazione di grandi lotti di reti neurali non è d'accordo. Si noti che se si utilizza la norma batch (vedere di seguito), i minibatch troppo piccoli saranno piuttosto dannosi.
- usa SGD piuttosto che ottimizzatori adattivi: questo è già stato trattato da @shimao, quindi lo cito solo per completezza
- usa dropout: se usi LSTM, usa il dropout standard solo per le unità di input e output di un layer LSTM. Per le unità ricorrenti (le porte) utilizzare l'abbandono ricorrente, come mostrato per la prima volta da Yarin Gal nel suo dottorato di ricerca. tesi . Tuttavia, se si utilizzano CNN, il dropout viene utilizzato meno frequentemente ora. Invece, tendi a ...
- ... usa la normalizzazione batch: le architetture CNN più recenti evitano il dropout a favore della normalizzazione batch. Questo potrebbe essere solo una mania, o potrebbe essere dovuto al fatto che apparentemente l'abbandono e la normalizzazione in lotti non giocano bene insieme (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, Comprensione della disarmonia tra dropout e normalizzazione in lotti da parte della varianza Maiusc ). Poiché la norma batch è più efficace del dropout quando si hanno enormi set di dati, questo potrebbe essere un motivo per cui il dropout è caduto in disgrazia per le architetture della CNN. Se si utilizza la normalizzazione batch, verificare che la distribuzione di pesi e distorsioni per ogni strato appaia approssimativamente normale. Per gli RNN, l'implementazione della norma batch è complicata: normalizzazione del peso (Tim Salimans, Diederik P. Kingma,Normalizzazione del peso: una semplice rigenerazione per accelerare l'allenamento delle reti neurali profonde ) è una valida alternativa.
- usa l'aumento dei dati: ha anche un effetto regolarizzante.
5. Ricerca iperparametro / architettura
Se nient'altro aiuta, dovrai testare più impostazioni di iperparametro diverse (l'ottimizzazione bayesiana può aiutare qui) o più modifiche architettoniche diverse (ad es. Forse nell'architettura GAN e per il set di dati su cui stai lavorando, la norma batch funziona solo nel generatore, ma se aggiunto anche al discriminatore peggiora le cose). Assicurati di tenere traccia dei risultati di questi lunghi e noiosi esperimenti in un registro ben ordinato.
PS per un GAN non ha molto senso parlare di un errore di generalizzazione: l'esempio sopra era inteso solo come un'indicazione che c'è ancora molta alchimia in Deep Learning e cose che ti aspetteresti di funzionare bene, a volte don o viceversa qualcosa che ha funzionato bene molte volte, improvvisamente ti prende in giro per un nuovo set di dati.