Skip to main content

Erforschung von Adaptivem Gradienten-Clipping und NFNetzen

Eine minimale Ablations-Studie zu den vorgeschlagenen Beiträgen aus dem neuesten Paper zum Thema High-Perfomance Large-Scale Bilderkennung ohne Normalisierung.
Created on March 30|Last edited on February 2
Dieser Artikel wurde aus dem Englischen übersetzt. Hier ist das Original.

Einleitung

Die letzten Monate über haben viele in der Computer Vision-Community ein Paper über NFNetze verarbeitet, dass aktuell eine hochmoderne Performance erreicht hat, Klassifizierungen auf ImageNet zu machen, “High-Performance Large-Scale Bilderkennung ohne Normalisierung”. Wir wollten uns einen Moment Zeit nehmen, um uns hier in die Forschung von Brock, De, Smith und Simonyan (2021) zu vertiefen, über die Vorteile (und Nachteile) von Batch-Normalisierung zu sprechen und unsere Ärmel hochzukrempeln und in einigen hundert Worten über diese äußerst faszinierende Forschung zu sprechen.
Wenn du dich in das Quellenmaterial vertiefen möchtest (und das empfehlen wir!), findest du die Links dazu im Folgenden. Ohne weitere Umstände:

Paper | GitHub |  Offizielle Repos

Die Saga der Batch-Normalisierung

Batch-Normalisierung (BN) war in Teilen verantwortlich für das Wachstum von Deep Learning, indem es das Training von tieferen neuronalen Netzen ermöglichte. Zum ersten Mal 2015 vorgeschlagen, hilft das Hinzufügen von Batch-Normalisierung, die verborgenen während des Trainings erlernten Repräsentationen (z.B. die Ausgabe von verborgenen Schichten) zu normalisieren, um interne kovariate Verschiebung zu adressieren.
Nimm aber zur Kenntnis, dass BN nichts mit interner kovariater Verschiebung zu tun hat. In dem Paper mit dem Titel “Wie hilft Batch-Normalisierung der Optimierung?” von Santurkar et al. (2018) entdeckten die Autoren, dass BN einen fundamentaleren Einfluss auf Training hat: “Es macht die Optimierungs-Landschaft signifikant glatter. Diese Glattheit bewirkt ein vorhersehbareres und stabileres Verhalten von Gradienten, die schnelleres Training erlaubt.”
📌 Hinweis: Die experimentellen Ergebnisse weiter unten wurden erzeugt, indem ein benutzerdefiniertes faltenkodiertes neuronales Netz auf den CIFAR-Datensatz trainiert wurde. Informiere dich bei den verlinkten Colab-Notizbüchern über Implementierungs-Details.
Egal aus welchem Grund BN funktioniert, gibt es viele praktische Vorteile, ein Modell mit BN zu trainieren. Für den Anfang:
  • Modelle, die mit BN trainiert sind, konvergieren schnell mit besserer Testgenauigkeit.

Probier das Colab-Notizbuch aus \rightarrow


Run set
2

  • BN ermöglicht außerdem Modelltraining mit einer großen Lernrate

Probier das Colab-Notizbuch aus \rightarrow 


Run set
2

Es gibt noch einige zusätzliche Vorteile von Batch-Normalisierung. Nämlich:
  • BN erlaubt effizientes Large-Batch-Training
  • BN eliminiert mittlere Verschiebung. Die Aktivierungsfunktionen wie ReLU und GeLU sind nicht-symmetrisch, haben also keine Nicht-Null Mittelaktivierung. Das führt Mittelverschiebung ein. Batch-Normalisierung stellt sicher, dass die Mittelaktivierung auf jedem Kanal des aktuellen Batches Null ist, was die Mittelverschiebung eliminiert.
  • BN hat einen Regulierungs-Effekt. (Quelle: “Zum Verständnis von Regulierung bei Batch-Normalisierung” von Luo et al.)
  • BN glättet Verlust-Landschaft. (Quelle: “Wie hilft Batch-Normalisierung der Optimierung?” von Sarturkar et al.)
Nun, da Batch-Normalisierung eine Schlüsselkomponente der meisten Bildklassifizierungs-Modelle ist, kommt es mit einigen unerwünschten Eigenschaften daher. Die Forschungsgemeinschaft versucht, einen Weg zu finden, um sie zu vermeiden, aber auf lange Sicht wird es besser sein, wenn wir eine Alternative zu Batch-Normalisierung finden, anstatt mit Eigenheiten und Schattenseiten umzugehen.
In der Tat, lasst uns ein paar Nachteile von Batch-Normalisierung behandeln:
  • Batch-Normalisierung erhöht die Zeit, Gradienten in einigen Netzwerken zu evaluieren.
  • Diskrepanzen zwischen Training und Inferenz-Punktzahl, wenn BN nicht sorgfältig genutzt wird.
  • BN kann die Unabhängigkeit von Trainingsbeispielen im Minibatch brechen.
Zusätzlich, wegen dieses besonderen Umstands:
  • Es ist schwierig, die Ergebnisse auf unterschiedlicher Hardware zu erzielen.
  • Du kannst über subtile Implementationsfehler stolpern, besonders im dezentralen Training. Aus diesem Grund wurde Synchronisierte Batch-Normalisierung von Zhang et al. in Kontext-Enkodierung für semantische Segmentation vorgeschlagen.
  • Und da Batch-Statistiken während des Trainierens berechnet werden, was als Interaktion zwischen Trainingsbeispielen gesehen werden kann, können Netzwerke bestimmte Verlust-Funktionen “betrügen”. Das ist ein Hauptanliegen für Sequenzmodellierungs-Aufgaben, was Sprachmodelle dazu angetrieben hat, alternative Normalisierer einzuführen.
  • Weiterhin können Netzwerke auch degradieren, wenn die Batch-Statistiken während des Trainings eine große Varianz haben.
📌 Hinweis: Die experimentellen Ergebnisse weiter unten wurden erzeugt, indem ein ResNet-Modell auf den CIFAR-Datensatz trainiert wurde. Für Implementations-Details sieh dir den verlinkten Kaggle Systemkern an.
  • Zuletzt ist die Performanz von Batch-Normalisierung sensibel gegenüber der Batch-Größe. Das folgende parallele Koordinaten-Diagramm zeigt, dass die finale Testgenauigkeit sensibel gegenüber der Batch-Größe ist. Es gibt eine negative Korrelation zwischen der Batch-Größe und der Testgenauigkeit (mit anderen Worten: hohe Batch-Größe führt generell zu geringerer Testgenauigkeit).

Probier den Kaggel Systemkern aus \rightarrow


Run set
6

📌Hinweis: “Large-Batch-Training erzielt keine höhere Testgenauigkeit innerhalb eines festgelegten Epochen-Budgets (Smith et al., 2020), es erzielt eine gegebene Testgenauigkeit in weniger Parameter-Updates, wobei es die Trainingsgeschwindigkeit signifikant verbessert, wenn es über mehrere Geräte parallelisiert wird.”

Hin zu Normalisierungs-freien Netzwerken

Von den Vorteilen von BN her sind wir uns der guten Bestandteile bewusst, die für ein leistungsstarkes Netzwerk erforderlich sind. Eine brauchbare Alternative zu BN sollte uns die meisten (wenn nicht alle) diese Vorteile bringen, während es auch die Nachteile mildert, die wir oben dargelegt haben.
Nun, vorangegangene Arbeiten haben versucht, tiefe ResNets zu wettbewerbsfähiger Genauigkeit ohne Normalisierung zu trainieren, indem nur ein oder zwei Vorteile von BN wiederhergestellt wurden. Die Schlüsselidee, die in diesen Arbeiten verwendet wird, ist die Größenordnung der Aktivierung auf dem Risidual-Zweig bei der Initialisierung zu unterdrücken, indem eine kleine konstante oder lernbare Skalarfunktion eingeführt wird.
Normalisierungs-freie ResNets (NF-ResNets) wurden zuerst in einem Paper mit dem Titel “Signal-Propagierung charakterisieren, um die Performanz-Lücke in unnormalisierten ResNets zu schließen” von Brock et al. (2021) vorgeschlagen. NF-ResNets sind eine Klasse von Reaktivierungs-ResNets, die zu wettbewerbsfähigem Training und Testgenauigkeiten ohne Normalisierung-Schichten trainiert werden können.
Wenn du dich über den Aufbau eines ResNets informieren willst, ist hier eine schöne Video-Zusammenfassung des Papers von Yannic. Aber inwiefern ist NF-ResNet anders als das gute alte Resnet?
  1. NF-ResNet zieht einen Restblock der Formel hi=1=hi+αfi(hi/βi)h_{i=1} = h_i + αf_i(h_i/β_i), heran, wo:
  • hih_i und ​hi+1h_{i+1} Eingaben in den ithi^{th} Restzweig sind und die sich ergebende Ausgabe dementsprechend. hi+1h_{i+1} ​ ist die Eingabe für den nächsten Restblock.
  • fif_i ist parametrisiert, um Varianz-bewahrende Funktion bei der Initialisierung zu sein, so dass Var(fi(z))=Var(z).Var(f_i(z)) = Var(z).
  • αα ist ein Skalarwert, der die Rate spezifiziert, bei die Varianz der Aktivierung nach jedem Restblock steigt.
  • ββ ist die Standardabweichung von den Eingaben zur ithi^{th} Schicht-Restblock.
2. NF-ResNet verwendet Skalierte Gewicht-Standardisierung. Gewicht-Standardisierung reparametrisiert (Wi,jW_{i,j} \rightarrow W^i,j\hat W_{i, j}) die faltungskodierte Schicht, so dass
W^=(Wi,jμi)/σi\hat W = (W_{i,j} - μ_i) / σ_i, wo:
  • W^\hat W und WWsind die reparametrisierten beziehungsweise ursprünglichen Gewichte,
  • μi=(1/N)j=1NWi,jμ_i = (1/N) \sum_{j=1}^N W_{i,j} und
  • σi2=(1/N)j=1N(Wi,j2μi2)σ_i^2 = (1/N) \sum_{j=1}^N (W_{i, j}^2 - μ_i^2)
Standard Gewicht-Standardisierung ist eine geringe Modifikation von Gewicht-Standardisierung, wo σi2=(1/N)j=1N(Wi,jμi)2σ_i^2 = (1/N) \sum_{j=1}^N (W_{i, j} - μ_i)^2.
3. Aktivierungs-Funktionen sind auch mit einer nicht-linearitätsspezifischen Skalarwertverstärkung γγ skaliert.
📌 Fakt: “Mit zusätzlicher Regularisierung (Dropout und stochastischer Tiefe) entsprechen NF-REsNets den Testgenauigkeiten, die bei Batch-normalisierten pre-Aktivierungs-ResNets auf ImageNet bei Batch-Größe 1024 erreicht wurden. Sie übertreffen außerdem ihre Batch-normalisierten Gegenstücke, wenn die Batch-Größe sehr klein ist, aber sie bringen eine schlechtere Leistung als Batch-normalisierte Netzwerke für große Batch-Größen (4096 oder höher).”
📌 Hinweis: “NF-ResNets entsprechen nicht der Leistung von Hochleistungs-Netzwerken wie EfficientNets, die Batch-Normalisierung verwenden.”

ResNet vs. NF-ResNet auf Cifar-10 mit Batch-Größe 32

Am Ende übertrifft NF-ResNet-50 das gute alte ResNet-50 mit einem Vorsprung von schätzungsweise ~15%. (Ich habe Ross Wightman’s timm package für beide Modelldefinitionen verwendet).

Trainiere NF-ResNet mit dem Colab-Notizbuch \rightarrow


Run set
2


Adaptives Gradienten-Clipping

Ein Problem ist, dass NF-ResNet fürs Training nicht zu großen Batch-Größen (4096 oder höher) skalieren konnte. Die Autoren des Papers, mit dem wir uns heute beschäftigen (High-Performance Large-Scale Bilderkennung ohne Normalisierung) stellten die Hypothese auf, dass Gradienten-Clipping NF-ResNets zu einem größeren Batch skalieren helfen sollte. Daher schlugen sie Adaptives Gradienten-Clipping (AGC) vor.
Ein Standard-Clipping-Algorithmus schneidet den Gradienten vor dem Update des Parameters θ , sodass:
G{λGG if G>λG otherwise G \rightarrow\left\{\begin{array}{ll} \lambda \frac{G}{\|G\|} & \text { if }\|G\|>\lambda \\ G & \text { otherwise } \end{array}\right.
Hier ist λ\lambda  (Clipping-Schwellenwert) der Parameter, der eingestellt werden muss.
Gradienten-Clipping kann helfen, auf einer höheren Lernrate zu trainieren, aber ist sehr sensibel für den Clipping-Schwellenwert (erkennbar an der folgenden Datenträger-Platte).

Probier das Colab-Notizbuch aus \rightarrow


Run set
2

AGC versucht, diese Problematik zu überwinden, indem sie adaptives Clipping anstelle von “hartem” Clipping einführt.
📌Hinweis: “Der AGC-Algorithmus ist motiviert von der Beobachtung, dass das Verhältnis der Norm des Gradienten GlG^lzur Norm der Gewichte WlW^l von Schicht ll, GFWF\frac{\left\|G^{\ell}\right\|_{F}}{\left\|W^{\ell}\right\|_{F}} ,​​, eine einfache Messung davon zur Verfügung stellt, wie viel ein einzelner Gradienten-Abstiegsschritt die ursprünglichen Gewichte WlW^lverändert.”
Die Autoren dieses Papers verwenden einheitsweise Verhältnisse von Gradienten-Normen zu Parameter-Normen anstelle von schichtweisen Normverhältnissen. Hier wird eine Frobenius-Norm( . F||\space.\space||_F)verwendet.
Gi{λWiFGiFGi if GiFWiF>λGi otherwise. G_{i}^{\ell} \rightarrow\left\{\begin{array}{ll} \lambda \frac{\left\|W_{i}^{\ell}\right\|_{F}^{\star}}{\left\|G_{i}^{\ell}\right\|_{F}} G_{i}^{\ell} & \text { if } \frac{\left\|G_{i}^{\ell}\right\|_{F}}{\left\|W_{i}^{\ell}\right\|_{F}^{\star}}>\lambda \\ G_{i}^{\ell} & \text { otherwise. } \end{array}\right.
wo λ\lambda  der Hyperparameter ist und WiF=max(WiF,ε)||W_i||_F^* = max(||W_i||_F, ε). Ein kleiner Wert von ε=103ε = 10^-3 hält Null-initialisierte Parameter davon ab, ihre Gradienten immer auf Null zu schneiden.
📌 Fakt: Wenn wir AGC verwenden, können wir NF-ResNets stabil mit größeren Batch-Größen trainieren (bis zu 4096), wie auch sehr starke Daten-Augmentierungen wie RandAugment.”
Um AGC gut zu verstehen und den Effekt beim Modelltraining zu sehen, habe ich ein Bündel von Experimenten eingerichtet. Die Absicht dieser Experimente ist nicht, irgendwelche ernsthafte Schlüsse zu ziehen, sondern eher, zu erforschen. Die Experimente decken einen winzigen Teil der möglichen Versuchsanordnungen ab.
Hier stabilisiert NF-ResNets für eine größere Batch-Konfiguration. Aber größere Batch-Größe führt nicht zu höherer Testgenauigkeit. Daher wollte ich den Effekt von AGC untersuchen und ob es als eine sinnvolle Alternative zum guten alten Gradienten-Clipping angesehen werden sollte. Also wie verhält sich AGC?

Effekt von AGC auf Normalisierer-freie Netzwerke

Zuerst eine Anmerkung zu den drei Modellen, die ich trainiert habe:
  • Ein ResNet-20 Aufbau für den CIFAR-10 Datensatz mit Batch-Normalisierung (Colab-Notizbuch).
  • Ein ResNet-20 Aufbau ohne die Batch-Normalisierungs-Schicht mit derselben Konfiguration (Colab-Notizbuch).
  • Ein ResNet-20 Aufbau ohne die Batch-Normalisierung und mit AGC (Colab-Notizbuch).
📌 Hinweis: Die Ergebnisse sind vom Training mit Batch-Größe 1024 mit dem Clipping-Faktor von 0.01.
  • AGC konnte kein Modell produzieren, was mit der Basislinie vergleichbar war.
  • Die Testgenauigkeit mit AGC ist ungefähr dieselbe wie die von einem, das nicht mit Batch-Normalisierung trainiert wurde.
  • Das Ergebnis korrelierte mit der Auswahl des Clipping-Faktors. Daher sollten wir vielleicht nicht allzu viel aus diesem Experiment ableiten, und ich empfehle sehr, einen größeren Konfigurationsbereich zu untersuchen, bevor hier irgendwelche weitreichenden Behauptungen aufgestellt werden.
Meiner Meinung nach könnte ein Clipping-Faktor von 0.01 sehr eng sein. Ich ermutige die Leser, mit größeren Clipping-Faktoren zu experimentieren.

Run set
3


Verhältnis zwischen Batch-Größe und Clipping-Faktor

Der Clipping-Faktor für reguläres Gradienten-Clipping ist sensibel für Batch-Größe, Modelltiefe, Lernrate etc. Ich wollte die Beziehung zwischen Batch-Größe und Clipping-Faktor und ihre Korrelation mit der finalen Testgenauigkeit untersuchen.
Indem ich die Weights und Biases-Durchsuchung verwendet habe, konnte ich meine Ablations-Studie schnell aufstellen.
📌 Hinweis: Die folgenden experimentellen Ergebnisse wurden erzeugt, indem ein ResNet-20-Modell auf den CIFAR-10-Datensatz trainiert wurde. Für Implementations-Details sieh dir den verlinkten Kaggle Systemkern an.

Probier den Kaggel Systemkern aus \rightarrow

  • Batch-Größe hat eine negative Korrelation mit Testgenauigkeit. Das bestätigt auch die Theorie, dass steigende Batch-Größen möglicherweise nicht zu besserer Testgenauigkeit führen.
  • Andererseits hat der Clipping-Faktor eine positive Korrelation. Also sollte es zu einer höheren Testgenauigkeit führen, in diesem Konfigurationsbereich den Clipping-Faktor zu erhöhen.
  • Trotzdem ist es schwer zu verstehen, was genau man aus der Beziehung zwischen den zwei Parametern machen soll. Einiges, was ich bei diesem Experiment bemerkt habe und was sich nicht in jedem Fall als zutreffend erweisen könnte, ist:
    • Kleine Batch-Größe erfordert einen größeren Clipping-Faktor.
    • Größere Batch-Größen tendieren dazu, besser mit kleineren Clipping-Faktoren zu funktionieren.
  • Von diesen zwei Hyperparametern ist die Batch-Größe wichtiger für höhere Testgenauigkeit.

Run set
25

Die Autoren haben selbst viele Ablations-Studien ausgeführt, um die Effektivität von AGC auf NF-ResNets zu präsentieren. Dies sind die Schlüsselerkenntnisse:
  • Die Vorteile der Verwendung von AGC sind kleiner, wenn die Batch-Größe klein ist.
  • Kleinere Clipping-Schwellwerte sind für Stabilität bei höheren Batch-Größen nötig. Das ist etwas, was wir auch in meinen Experimenten gesehen haben.
  • Es ist besser, die finale lineare Schicht oder die Ausgabe-Schicht nicht zu schneiden.
  • Es ist möglich, NF-ResNet ohne die Gradienten für die initiale faltenkodierte Schicht zu schneiden.

NF-Net: Die aktuelle SOTA bei ImageNet

🎉 SOTA Warnung: Unser NFNet-F1 Modell erreicht vergleichbare Testgenauigkeit mit einem EffNet-B7, während es 8.7X schneller zu trainieren ist. Unser NFNet-F5 Modell hat die gleiche Trainingslatenz für EffNet-B7, erreicht aber eine 86%ige Hochleistungs-top1-Genauigkeit bei ImageNet.
📌 Hinweis: NF-ResNets und NF-Nets sind zwei verschiedene Aufbauten.
Der Designaufbau neuronaler Netzwerke hängt von der Auswahl der Messgröße zur Optimierung ab. Diese Messgrößen können sein:
  • FLOPs count,
  • Inferenz-Latenz auf einem Zielgerät wie Edge-/Mobilgeräten,
  • Trainingslatenz auf einem Beschleuniger.
Die Autoren dieses Papers beschlossen, Trainingslatenz auf existierenden Beschleunigern zu optimieren. Sie untersuchten den Modellbereich, indem sie manuell die Trends durchsuchten, die top1-Genauigkeit bei ImageNet gegenüber der tatsächlichen Trainingslatenz auf dem Geräte verbesserten. Das Ziel war, an beiden Fronten zu erhöhen.
Das Urteil? Die Autoren erreichten ein Hochleistungs-Ergebnis von 86,5 top1-Testgenauigkeit bei ImageNet, indem sie NFNet-F6 mit der kürzlich vorgeschlagenen Sharpness Aware Minimierungs (SAM) -Technik trainierten. Die offizielle Implementierung des Aufbaus ist im JAX Framework. Du findest den offiziellen GitHub Report hier.
Zusätzlich hat Yannic Kilcher in seinem YouTube-Video eine unglaubliche Erklärung von NFNets gegeben. Informiere dich hier:


Ich habe ein Colab Notizbuch zur Verfügung gestellt, um ein NF-Net Modell zu trainieren, indem PyTorch Lightning auf einem the Caltech-101 Datensatz verwendet wird. Die NF-Net Implementierung basiert auf timm package. Fühl dich frei, Modellvarianten und andere Parameter zu verändern.

Trainiere NFNet auf Colab-Notizbuch, indem du PyTorch Lightning verwendest \rightarrow


Run set
1


Fazit und Danksagungen

Die Experimente werden auf dem CIFAR-10 Datensatz ausgeführt, was nicht genug für eine Technik sein könnte, um ihren Effekt zu zeigen. Aber für eine einfache Anwendbarkeit habe ich meinen Versuchsaufbau auf Colab-Notizbücher und Kaggel Systemkerne begrenzt.
Ich möchte die Werke würdigen, die mich dazu befähigt haben, diesen Report mit vielfältigen Code-Beispielen und Versuchsergebnissen anzureichern:
Abschließend Gratulation an die Autoren für ihre fantastische Arbeit.
Ich möchte auch Sayak Paul und Morgan McGuire für ihr Feedback danken, das mir geholfen hat, diesen Report zu verbessern. Außerdem Dank an Justin Tenuto für seine Editierungs-Magie.
Iterate on AI agents and models faster. Try Weights & Biases today.