Wie können Optimierungsfehler behoben und vermieden werden?
Zusammenfassung: Wenn bei dem Modell Optimierungsprobleme auftreten, ist es wichtig, diese zu beheben, bevor Sie andere Schritte ausführen. Die Diagnose und Behebung von Trainingsfehlern ist ein aktiver Forschungsbereich.
Beachten Sie in Abbildung 4 Folgendes:
- Durch das Ändern der Schritte wird die Leistung bei niedrigen Lernraten nicht beeinträchtigt.
- Hohe Lernraten werden aufgrund der Instabilität nicht mehr gut trainiert.
- Das Anwenden von 1.000 Schritten der Lernratenaufwärmung behebt diesen speziellen Instabilitätsfall und ermöglicht ein stabiles Training mit einer maximalen Lernrate von 0, 1.
Instabile Arbeitslasten identifizieren
Jede Arbeitslast wird instabil, wenn die Lernrate zu hoch ist. Instabilität ist nur dann ein Problem, wenn sie Sie zwingt, eine zu niedrige Lernrate zu verwenden. Es lohnt sich, mindestens zwei Arten von Trainingsinstabilität zu unterscheiden:
- Instabilität bei der Initialisierung oder zu Beginn des Trainings.
- Plötzliche Instabilität mitten im Training.
Sie können einen systematischen Ansatz verfolgen, um Stabilitätsprobleme in Ihrer Arbeitslast zu identifizieren. Gehen Sie dazu so vor:
- Führen Sie einen Lernraten-Sweep durch und ermitteln Sie die beste Lernrate lr*.
- Stellen Sie Kurven zu Trainingsverlusten für die Lernraten etwas über lr* ein.
- Wenn die Lernraten > lr* auf eine Verlustinstabilität hinweisen (der Verlust steigt nicht während des Trainings ab), verbessert die Behebung der Instabilität in der Regel das Training.
Loggen Sie die L2-Norm des vollständigen Verlustgefälles während des Trainings, da Ausreißerwerte mitten im Training zu einer falschen Instabilität führen können. Dies kann Aufschluss darüber geben, wie aggressiv Sie Gradienten oder Gewichtsaktualisierungen begrenzen.
HINWEIS: Einige Modelle weisen sehr früh Instabilität auf, gefolgt von einer Wiederherstellung, die zu einem langsamen, aber stabilen Training führt. Bei häufigen Bewertungsplänen können diese Probleme übersehen werden, da sie nicht häufig genug ausgewertet werden.
Um dies zu prüfen, können Sie mit lr = 2 * current best
für eine verkürzte Ausführung von nur etwa 500 Schritten trainieren, aber jeden Schritt bewerten.
Mögliche Korrekturen für häufige Instabilitätsmuster
Sehen Sie sich die folgenden möglichen Lösungen für häufige Instabilitätsmuster an:
- Lernrate-Aufwärmphase anwenden. Dies eignet sich am besten für frühe Trainingsinstabilität.
- Farbverlaufs-Clipping anwenden Dies wirkt sich positiv auf die Instabilität am Anfang und in der Mitte des Trainings aus und kann einige fehlerhafte Initialisierungen beheben, die beim Aufwärmvorgang nicht möglich sind.
- Neuen Optimierungstool ausprobieren Manchmal hat Adam Instabilitäten zu bewältigen, die Momentum nicht kann. Dies ist ein aktiver Forschungsbereich.
- Verwenden Sie für Ihre Modellarchitektur unbedingt Best Practices und die besten Initialisierungen (Beispiele folgen). Fügen Sie Restverbindungen und Normalisierung hinzu, wenn das Modell diese noch nicht enthält.
- Als letzte Operation vor der Residuen normalisieren. Beispiel:
x + Norm(f(x))
. Beachte, dassNorm(x + f(x))
Probleme verursachen kann. - Versuchen Sie, Restverzweigungen auf 0 zu initialisieren. Weitere Informationen finden Sie unter ReZero is All You Need: Fast Convergence at Large Deepth.
- Verringern Sie die Lernrate. Dies ist das letzte Mittel.
Lernrate Aufwärmphase
Wann soll die Aufwärmphase für die Lernrate angewendet werden?
Abbildung 7a zeigt ein Hyperparameter-Achsendiagramm, das anzeigt, dass ein Modell Optimierungsinstabilitäten aufweist, da sich die beste Lernrate am Rand der Instabilität befindet.
Abbildung 7b zeigt, wie dies überprüft werden kann, indem der Trainingsverlust eines Modells untersucht wird, das mit einer Lernrate trainiert wurde, die entweder 5-mal oder 10-mal größer als dieser Spitzenwert ist. Wenn dieses Diagramm nach einem stetigen Rückgang einen plötzlichen Anstieg des Verlusts zeigt (z. B. bei Schritt 10.000 in der Abbildung oben), leidet das Modell wahrscheinlich unter Optimierungsinstabilität.
So wenden Sie die Aufwärmphase für die Lernrate an
Lassen Sie unstable_base_learning_rate
die Lernrate sein, bei der das Modell instabil wird.
Das Aufwärmen beinhaltet das Voranstellen eines Lernratenplans, der die Lernrate von 0 auf einen stabilen base_learning_rate
erhöht, der mindestens eine Größenordnung größer als unstable_base_learning_rate
ist.
Standardmäßig wird ein base_learning_rate
verwendet, der 10 × unstable_base_learning_rate
groß ist. Allerdings wäre es möglich, die gesamte Prozedur noch einmal für etwa 100x unstable_base_learning_rate
auszuführen. Der genaue Zeitplan sieht so aus:
- Steigen Sie über „warmup_steps“ von 0 auf „base_learning_rate“ hoch.
- Trainieren Sie für post_warmup_steps mit konstanter Geschwindigkeit.
Ihr Ziel ist es, die kürzeste Anzahl von warmup_steps
zu finden, mit der Sie auf maximale Lernraten zugreifen können, die viel höher als unstable_base_learning_rate
sind.
Sie müssen also für jeden base_learning_rate
warmup_steps
und post_warmup_steps
abstimmen. In der Regel können Sie für post_warmup_steps
den Wert 2*warmup_steps
festlegen.
Das Aufwärmprogramm kann unabhängig von einem vorhandenen Abklingplan abgestimmt werden. warmup_steps
sollten in verschiedenen Größenordnungen erwidert werden. In einer Beispielstudie könnte z. B. [10, 1000, 10,000, 100,000]
verwendet werden. Der größte zulässige Punkt sollte nicht mehr als 10% von max_train_steps
betragen.
Sobald eine warmup_steps
eingerichtet wurde, die das Training bei base_learning_rate
nicht vertieft, sollte sie auf das Basismodell angewendet werden.
Stellen Sie diesen Zeitplan dem vorhandenen Zeitplan voran und verwenden Sie die oben beschriebene optimale Prüfpunktauswahl, um diesen Test mit der Referenz zu vergleichen. Wenn wir beispielsweise ursprünglich 10.000 max_train_steps
hatten und warmup_steps
für 1.000 Schritte ausgeführt haben, sollte das neue Trainingsverfahren für insgesamt 11.000 Schritte ausgeführt werden.
Wenn für das stabile Training lange warmup_steps
erforderlich sind (> 5% von max_train_steps
), müssen Sie max_train_steps
möglicherweise erhöhen, um dies zu berücksichtigen.
Es gibt keinen „typischen“ Wert für die gesamte Bandbreite von Arbeitslasten. Einige Modelle benötigen nur 100 Schritte, während andere (besonders Transformatoren) möglicherweise mehr als 40.000 Schritte benötigen.
Farbverlaufsüberschneidung
Das Überschneiden des Farbverlaufs ist am nützlichsten, wenn große oder Ausreißerprobleme bei Farbverläufen auftreten. Die folgenden Probleme können durch die Farbverlauf-Clipping-Funktion behoben werden:
- Frühe Trainingsinstabilität (frühe Norm mit großem Gradienten)
- Instabilitäten mitten im Training (plötzlicher Gradient steigt während des Trainings an).
Manchmal können durch längere Aufwärmphasen Instabilitäten korrigiert werden, die durch Clipping nicht behoben werden können. Weitere Informationen finden Sie unter Aufwärmphase der Lernrate.
🤖 Was ist mit Clipping während des Aufwärmens?
Die idealen Clipgrenzwerte liegen direkt über der „typischen“ Gradientennorm.
Hier ist ein Beispiel dafür, wie ein Gradienten-Clipping durchgeführt werden kann:
- Wenn die Norm des Farbverlaufs $\left | g\right |$ größer ist als der Grenzwert für die Gradientenbeschränkung $\lambda$, dann Folgendes ausführen: ${g}'= \lambda \times \frac{g}{\left | g\right |}$, wobei ${g}'$ der neue Farbverlauf ist.
Protokolliert die nicht begrenzte Gradientennorm während des Trainings. Generieren Sie standardmäßig Folgendes:
- Diagramm mit Gradientennormen und -schritten
- Ein Histogramm der über alle Schritte aggregierten Gradientennormen
Wählen Sie einen Grenzwert für die Gradientenbegrenzung basierend auf dem 90. Perzentil der Gradientennormen aus. Der Schwellenwert hängt von der Arbeitslast ab, aber 90% sind ein guter Ausgangspunkt. Wenn 90% nicht funktionieren, können Sie diesen Grenzwert anpassen.
🤖 Was ist mit einer Art adaptiver Strategie?
Wenn Sie das Gradienten-Clipping ausprobieren und die Instabilitätsprobleme weiterhin bestehen, können Sie es noch weiter versuchen und den Grenzwert verringern.
Extrem aggressive Gradienten-Clippings (d. h. mehr als 50% der Aktualisierungen werden abgeschnitten) sind im Wesentlichen eine seltsame Methode, die Lernrate zu reduzieren. Wenn Sie extrem aggressives Clipping verwenden, sollten Sie stattdessen wahrscheinlich einfach die Lernrate senken.
Warum werden die Hyperparameter für die Lernrate und andere Optimierungsparameter genannt? Sie sind keine Parameter früherer Verteilungen.
Der Begriff „Hyperparameter“ hat im Bayesschen maschinellen Lernen eine genaue Bedeutung. Daher ist die Bezeichnung der Lernrate und der meisten anderen einstellbaren Deep-Learning-Parameter als „Hyperparameter“ zu betrachten, ist wohl ein Terminologiemissbrauch. Wir verwenden den Begriff "Metaparameter" lieber für Lernraten, Architekturparameter und alle anderen einstellbaren Elemente von Deep Learning. Das liegt daran, dass bei einem Metaparameter Verwirrung durch den Missbrauch des Wortes „Hyperparameter“ entstehen kann. Diese Verwirrung ist besonders wahrscheinlich, wenn es um die Bayes'sche Optimierung geht, bei der die probabilistischen Antwortoberflächenmodelle ihre eigenen echten Hyperparameter haben.
Leider ist der Begriff "Hyperparameter" in der Deep-Learning-Community sehr verbreitet, obwohl er möglicherweise verwirrend ist. Daher haben wir uns für dieses Dokument, das für eine breite Zielgruppe mit vielen Personen bestimmt, denen diese Technik wahrscheinlich nicht bewusst ist, beschlossen, zu einer Ursache für Verwirrung auf diesem Gebiet beizutragen, um eine andere zu vermeiden. Allerdings könnten wir bei der Veröffentlichung einer Forschungsarbeit eine andere Entscheidung treffen und andere ermutigen, in den meisten Kontexten stattdessen „Metaparameter“ zu verwenden.
Warum sollte die Batchgröße nicht angepasst werden, um die Leistung des Validierungssatzes direkt zu verbessern?
Wenn Sie die Batchgröße ändern, ohne weitere Details der Trainingspipeline zu ändern, wirkt sich das häufig auf die Leistung des Validierungssatzes aus. Der Unterschied in der Leistung des Validierungssatzes zwischen zwei Batchgrößen verschwindet jedoch in der Regel, wenn die Trainingspipeline für jede Batchgröße unabhängig optimiert wird.
Die Hyperparameter, die am stärksten mit der Batchgröße interagieren und daher am wichtigsten für jede Batchgröße separat abgestimmt werden müssen, sind die Hyperparameter der Optimierung (z. B. Lernrate, Momentum) und die Regularisierungs-Hyperparameter. Kleinere Batchgrößen führen aufgrund der Stichprobenvarianz zu mehr Rauschen im Trainingsalgorithmus. Dieses Rauschen kann einen Regularisierungseffekt haben. Daher können größere Batchgrößen anfälliger für eine Überanpassung sein und möglicherweise eine stärkere Regularisierung und/oder zusätzliche Regularisierungstechniken erfordern. Darüber hinaus müssen Sie möglicherweise die Anzahl der Trainingsschritte anpassen, wenn Sie die Batchgröße ändern.
Sobald all diese Auswirkungen berücksichtigt sind, gibt es keine überzeugenden Beweise dafür, dass die Batchgröße die maximal erreichbare Validierungsleistung beeinflusst. Weitere Informationen finden Sie in Shallue et al. 2018.
Wie lauten die Aktualisierungsregeln für alle beliebten Optimierungsalgorithmen?
Dieser Abschnitt enthält Aktualisierungsregeln für verschiedene beliebte Optimierungsalgorithmen.
Stochastisches Gradientenverfahren (SGD)
\[\theta_{t+1} = \theta_{t} - \eta_t \nabla \mathcal{l}(\theta_t)\]
Dabei ist $\eta_t$ die Lernrate in Schritt $t$.
Erfolge
\[v_0 = 0\]
\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - \eta_t v_{t+1}\]
Dabei ist $\eta_t$ die Lernrate bei Schritt $t$ und $\gamma$ der Impulskoeffizient.
Nesterov
\[v_0 = 0\]
\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - \eta_t ( \gamma v_{t+1} + \nabla \mathcal{l}(\theta_{t}) )\]
Dabei ist $\eta_t$ die Lernrate bei Schritt $t$ und $\gamma$ der Impulskoeffizient.
RMSProp
\[v_0 = 1 \text{, } m_0 = 0\]
\[v_{t+1} = \rho v_{t} + (1 - \rho) \nabla \mathcal{l}(\theta_t)^2\]
\[m_{t+1} = \gamma m_{t} + \frac{\eta_t}{\sqrt{v_{t+1} + \epsilon}}\nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - m_{t+1}\]
ADAM
\[m_0 = 0 \text{, } v_0 = 0\]
\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]
\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l}(\theta_t)^2\]
\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]
\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]
Nadam
\[m_0 = 0 \text{, } v_0 = 0\]
\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]
\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l} (\theta_t)^2\]
\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]
\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{\beta_1 m_{t+1} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]