Lösungen

Produkt

Ressourcen

Unternehmen

Eine Auffrischung der (Re-)Normalisierung von Chargen

Januar 24, 2018

KI

Industrie

Industrie

Wenn Sie so sind wie ich, dann genießen Sie es, CNNs auf jedes Bildproblem anzuwenden, das Ihnen über den Weg läuft. Wenn Sie so sind wie ich, dann haben Sie schon von BatchNorm gehört.

Blogartikel mit Bildmotiv
Blogartikel mit Bildmotiv
Blogartikel mit Bildmotiv

In diesem Beitrag wird davon ausgegangen, dass Sie über ein CS231n-ähnliches Verständnis von neuronalen Netzen verfügen (d. h. Sie haben einen Einführungskurs in Deep Learning auf Universitätsniveau belegt). Wenn Sie völlig neu auf dem Gebiet der neuronalen Netze sind, empfehle ich Ihnen dringend genau diesen Kurs als eine perfekte Ressource, um schnell auf den neuesten Stand zu kommen. Ehrlich gesagt, habe ich durch diese Vorlesungen die meisten meiner Intuitionen über CNNs entwickelt, auf die ich mich immer noch jeden Tag verlasse - Danke Andrej! Danke Justin!)

Batch-Renormierung

Wenn Sie so sind wie ich, dann genießen Sie es, CNNs auf jedes Bildproblem anzuwenden, das Ihnen über den Weg läuft. Sie fühlen sich sicher, wenn Sie Ihren MBA-Freunden erklären, wie¹ neuronale Netze funktionieren, und Sie beschweren sich gerne bei Ihren CS²-Freunden über den Preis der neuen GPUs von Nvidia. Wenn Sie so sind wie ich, dann haben Sie schon von BatchNorm gehört. Wahrscheinlich haben Sie es benutzt³, nach einer Erklärung gegoogelt, was interne Kovariatenverschiebung bedeutet, und sind einigermaßen zufrieden zu Ihrem Tagesgeschäft zurückgekehrt, um noch ein paar Hyperparameter zu optimieren.

Wahrscheinlich haben Sie noch nichts von der “ Batch-Renormierung“gehört, Ioffes Folgearbeit.

Die Kurzfassung für die meisten Leute lautet in etwa so:
BatchRenorm ist der in TensorFlow implementierten BatchNorm überlegen, hat aber den Nachteil, dass ein paar zusätzliche Hyperparameter eingestellt werden müssen. Wenn Ihre Stapelgröße sehr klein ist (sagen wir 2 oder 4 - höchstwahrscheinlich aufgrund von begrenztem GPU-Speicher), sollten Sie es wahrscheinlich verwenden.

Im Folgenden werde ich versuchen, Ihnen eine Auffrischung darüber zu geben, wie BatchNorm mit Transfer Learning zusammenhängt, warum Sie ein wenig paranoid sein sollten, wenn Sie BatchNorm verwenden (d.h. wie es auf unerwartete Weise versagen kann) und wie BatchRenorm Ihnen helfen wird, wieder wie ein Baby zu schlafen, aber nur - um das Gleichnis ein wenig zu dehnen - wenn Sie bereit sind, ein paar zusätzliche Liegestütze zu machen, bevor Sie ins Bett gehen.

Lernen übertragen

Das Transfer-Learning-Szenario, mit dem Sie am meisten vertraut sind, ist wahrscheinlich folgendes: Sie haben ein CNN auf ImageNet trainiert und möchten nun zwischen Ihren Socken mit dem linken Fuß und Ihren Socken mit dem rechten Fuß unterscheiden (oder etwas Ähnliches). Je nachdem, wie viele Daten Sie haben, tauen Sie die letzten paar Schichten auf oder trainieren das gesamte CNN auf Ihrem eigenen Sockendatensatz neu - so weit, so gut. Aber es gibt noch andere Szenarien des Transfer-Lernens, die zwar nicht so allgegenwärtig, aber genauso wichtig sind⁵.

Trainings- und Testsatz

Wenn wir unser Modell nicht von einer Aufgabe zur nächsten verallgemeinern wollen (z. B. Socken statt Hunde und Katzen klassifizieren), sondern von einer Quelldomäne zu einer Zieldomäne mit einer anderen Datenverteilung verallgemeinern wollen, nennt man dies Domänenanpassung. Um ein intuitives Verständnis dafür zu bekommen, warum dies ein schwieriges Problem sein könnte, betrachten Sie zwei Datensätze mit nur Katzen und Hunden. Beide enthalten die normale Vielfalt an Katzen, aber der erste enthält nur braune Hunde. Wenn wir Pech haben, lernt unser Modell, das auf dem ersten Datensatz trainiert wurde, keine Unterschiede wie spitze oder schlaffe Ohren, sondern nur, dass es sich um einen Hund handeln muss, wenn es ein braunes Ding sieht. In diesem Fall müssen wir uns nicht wundern, wenn unsere Klassifizierungsgenauigkeit beim Testen des zweiten Datensatzes aus heiterem Himmel einbricht⁶.

Das Fazit ist eine universelle Wahrheit des maschinellen Lernens: Wenn sich die Datenverteilung vor Ihren Augen ändert, sind Sie wahrscheinlich in Schwierigkeiten.

BatchNorm hat damit nichts zu tun

Zurück zu BatchNorm und zum Googeln, was “Verringerung der internen Kovariatenverschiebung“ bedeutet. “Interne Kovariatenverschiebung“ ist nur ein schicker Ausdruck für die Tatsache, dass sich die Verteilungen der Eingaben (“Daten“) von Zwischenschichten neuronaler Netze während des Trainings ändern. Das ist nicht verwunderlich, da die Eingabe einer Zwischenschicht einfach die Ausgabe der davor liegenden Schicht ist, und da die Parameter dieser “Vor“-Schicht im Laufe der Zeit aktualisiert werden, ändert sich auch ihre Ausgabe.

Anstatt nach einer cleveren Technik zur “internen Bereichsanpassung“ zu suchen, besteht die geniale Lösung von Ioffe-Szegedy für dieses Problem der sich ändernden Eingangsverteilungen darin, es einfach zu umgehen. Sie verwenden BatchNorm, um zu erzwingen, dass jede Schicht-Eingabe normalisiert wird, und voilà: kein Durcheinander von sich verändernden Verteilungen mehr.

Hier ist der Algorithmus zur schnellen Orientierung.

Algorithmus der Formverschiebung von Verteilungen

Es stellt sich heraus, dass die Verwendung von BatchNorm Ihr Modell auch robuster gegenüber einer weniger sorgfältigen Initialisierung der Gewichte und größeren Lernraten macht⁷. Und noch ein Leckerbissen:
I-S berichtet, dass das Rauschen, das durch die Berechnung des Mittelwerts und der Varianz über jede Mini-Charge statt über die gesamte Trainingsmenge entsteht⁸, nicht nur eine schlechte Nachricht ist, sondern als Regularisierung wirkt und die Notwendigkeit, zusätzliche Dropout-Schichten hinzuzufügen, beseitigen kann.

Warum BatchNorm Sie paranoid machen sollte

Sie wissen, was ich hasse: Wenn sich mein Code kompilieren lässt, läuft mein Modell, aber aus irgendeinem gut versteckten Grund ist die Modellleistung viel schlechter als erwartet. Leider kann BatchNorm unter bestimmten Umständen dieser gut versteckte Grund sein. Um zu verstehen, wann dies der Fall ist, empfehle ich die Lektüre von Alex Irpans Beitrag über die Gefahren von BatchNorm. Hier ist auf jeden Fall meine Zusammenfassung:

Wenn der Mini-Batch-Mittelwert (µB) und die Mini-Batch-Standardabweichung (σB) zu oft vom Mittelwert und der Standardabweichung des gesamten Trainingssatzes abweichen, bricht BatchNorm zusammen. Erinnern Sie sich daran, dass wir zur Inferenzzeit die gleitenden Durchschnitte von µB und σB (als Schätzung der Statistiken des gesamten Trainingssatzes) verwenden, um den Normalisierungsschritt durchzuführen. Wenn Ihre Mittelwerte und Standardabweichungen beim Training und beim Testen unterschiedlich sind, sind es natürlich auch Ihre Aktivierungen, und Sie dürfen sich nicht wundern, wenn Ihre Ergebnisse ebenfalls unterschiedlich (d. h. schlechter) sind. Dies kann passieren, wenn Ihre Mini-Batch-Stichproben nicht i.i.d. sind (oder im Klartext: wenn Ihr Stichprobenverfahren voreingenommen ist - denken Sie daran, dass Sie zuerst nur braune Hunde und dann nur schwarze Hunde stichprobenmäßig erfassen) oder, was noch häufiger vorkommt, wenn Sie eine sehr kleine Losgröße haben⁹. In beiden Fällen: Willkommen zurück im Land der “shape-shifting distributions“.

BatchRenorm eingeben

BatchRenorm geht das Problem der unterschiedlichen Statistiken zur Zug- und Inferenzzeit direkt an. Die wichtigste Erkenntnis zur Überbrückung des Unterschieds ist die folgende:

BatchRenorm-Algorithmus

Der Normalisierungsschritt zur Inferenzzeit (unter Verwendung von Schätzungen der Trainingsmengenstatistiken µ und σ) kann tatsächlich als affine Transformation des Normalisierungsschritts zur Trainingszeit (unter Verwendung der Minibatch-Statistiken µB und σB) umgeschrieben werden! Und das ist im Grunde alles, was es zu tun gibt. Die Verwendung von Mini-Batch + affiner Transformation zur Trainingszeit und gleitenden Durchschnitten zur Inferenzzeit stellt sicher, dass die Ausgabe von BatchRenorm in beiden Phasen gleich ist, selbst wenn σB != σ und µB != µ.

Hier ist der Algorithmus in seiner nicht-japanischen Fassung.

BatchRenorm-Algorithmus

Interessant ist, dass die Batch-Renormierung eigentlich nur eine Verallgemeinerung der BatchNorm ist und zu ihrem Vorgänger zurückkehrt, wenn σB == σ und µB == µ (oder r = 1 und d = 0). Dies führt uns zu der Frage, wann man BatchRenorm verwenden sollte und wann BatchNorm ausreicht.

BatchRenorm ≥ BatchNorm?

Die gute Nachricht ist, dass Sie sich darauf verlassen können, dass BatchRenorm in Bezug auf die Modellleistung immer besser oder gleich gut ist wie BatchNorm.

BatchNorm & Batch Renorm

Die Verwendung von BatchRenorm geht jedoch mit zwei zusätzlichen Hyperparametern einher (die in der Überschrift unter dem BatchRenorm-Algorithmus erläutert werden), für die Sie den richtigen Zeitplan finden müssen, um die beste Leistung zu erzielen. Da haben Sie es also. Wie bei den meisten Dingen im Leben geht es um einen Kompromiss zwischen Ihrer Zeit und der Leistung Ihres Modells. Wenn Sie die Abstimmung der Hyperparameter an Verfahren wie die Bayes'sche Optimierung¹¹ ausgelagert haben, handelt es sich immer noch um einen Kompromiss zwischen Rechenressourcen und Leistung.

Ich persönlich werde von nun an BatchRenorm mit dem im Artikel erwähnten festen Zeitplan¹² verwenden. Wenn ich sehr kleine Chargengrößen habe (oder eine seltsame Mini-Batch-Sampling-Kuriosität wie in Irpans Beitrag), könnte ich mich dazu durchringen, die Hyperparameter selbst zu optimieren.

Lassen Sie mich wissen, wie es bei Ihnen läuft.

[1] ^ Beachten Sie, dass ich “ wie“ und nicht “ warum“ gesagt habe . Für eine klare, völlig untechnische Darstellung der Funktionsweise neuronaler Netze ist dieserNYTimes-Artikelein Muss. Er enthält auch ein witziges Zitat von Quoc V. Le, das - wenn Sie mich fragen - wunderbar dieses obskure Gefühl einfängt, dass man zwar die meisten Prinzipien und die Mathematik, die neuronalen Netzen zugrunde liegen, verstanden hat, dass es sich aber, wenn man es wagt, zu tief zu graben, immer noch wie Zauberei anfühlt, wenn Ihr Inception-Resnet-v2 wieder einmal erfolgreich Ihren Hund als Soft Coated Wheaten Terrier und nicht als, sagen wir, West Highland White Terrier klassifiziert [1a].
Auf die Frage des Autors nach einem intuitiven mentalen Bild von Worteinbettungen (wie word2vec oder GloVe), antwortet Le unverblümt: “Gideon, [...] ich mag es im Allgemeinen nicht, wenn man versucht, tausenddimensionale Vektoren im dreidimensionalen Raum zu visualisieren.
[1a] Vollständige Offenlegung: Ich besitze keinen Terrier.

[2] ^ Frei suchen und ersetzen mit EE, Stats, Physics, Math. etc.

[3] ^ Tatsächlich wurde das Ioffe-Szegedy-Papier, in dem die Idee der Batch-Normalisierung vorgestellt wurde, 3397 Mal zitiert (Stand: 20. Januar 2018). Das bedeutet nicht unbedingt, dass 3397 Personen versucht haben, auf den von I-S eingeführten Ideen aufzubauen oder neue Wege zu finden, um die von BatchNorm angesprochenen Probleme zu lösen (dazu später mehr), sondern vor allem, dass BatchNorm in den meisten CNN-Architekturen, die seit 2016 verwendet werden, zur SOP geworden ist. Lassen Sie mich hier und jetzt zitieren:
Ioffe, S., Szegedy, C., (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. ICML.

[4] ^ Die Batch-Renormalisierung hat nichts mit der Renormalisierung zu tun, einer Sammlung von Techniken der Quantenfeldtheorie. Wenn Sie nichts über die Quantenfeldtheorie wissen (wie ich), empfehle ich Ihnen trotzdem, dem Link zum Wikipedia-Artikel zu folgen und sich beim Lesen des ersten Satzes zu amüsieren. Wie auch immer, hier ist die Renormierung, mit der wir uns beschäftigen:
Ioffe, S., (2017). Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-Normalized Models. NIPS.

[5] ^ Sebastian Ruder hat einen großartigen Blogbeitrag über die verschiedenen Transfer-Learning-Settings geschrieben, mit viel genaueren Definitionen als ich sie hier verwende. Dort zitiert er auch Andrew Ng, der während seines NIPS-Workshops 2016 voraussagte, dass Transfer Learning “der nächste Treiber für den Erfolg von ML“ sein wird.

[6] ^ Ähnlich könnte man sich vorstellen, dass es, wenn wir mit einem normalen Datensatz von Katzen und Hunden trainieren, aber Pech bei der Zufallsauswahl haben und anfangs nur braune Hunde erhalten, wahrscheinlich länger dauert, bis unser Modell treffende Unterschiede wie spitze oder schlaffe Ohren lernt. Wir werden auf diese Idee zurückkommen, wenn wir erörtern, wie BatchNorm auf unerwartete Weise versagen kann.

[7] ^ Eine einfache Intuition, warum dies wahr sein könnte, findet sich schnell in Ioffes Batch Renormalization Paper [4]:

Wenn x selbst ein Ergebnis der Anwendung einer linearen Transformation W auf die vorherige Schicht ist, macht Batchnorm das Modell invariant gegenüber der Skala von W (ohne Berücksichtigung des kleinen Epsilons).

Aber wenn die Größe von W keine Rolle spielt, dann ist die richtige Initialisierung der Gewichte nicht so wichtig und größere Lernraten werden Ihr Training nicht so leicht zerstören!

[8] ^ Wir können den Populationsmittelwert und die Varianz der Zwischenschichtaktivierungen nicht berechnen, da das Durchlaufen des gesamten Trainingssatzes nach jeder einzelnen Parameteraktualisierung den ganzen Zweck des stochastischen Gradientenabstiegs zunichte machen würde. Das scheint einfach genug zu sein. Aber warum können wir bei der Normalisierung nicht einfach die gleitenden Durchschnitte von Mittelwert und Varianz anstelle der Mini-Batch-Versionen verwenden? Der Grund dafür ist, wie ich finde, ziemlich subtil. Haftungsausschluss: Wenn Sie noch nie von dieser Frage über BatchNorm geplagt wurden, empfehle ich Ihnen, den Rest dieser Fußnote zu überspringen, da sie sowohl ausführlich als auch ein wenig technisch ist.

Wenn Sie jemals den Rückwärtspass für BatchNorm selbst ableiten mussten, werden Sie sich vielleicht daran erinnern, dass der Grund, warum die Übung nicht völlig mühelos ist, darin liegt, dass der Mittelwert und die Varianz der Minibatches (offensichtlich) Funktionen der aktuellen Aktivierungen im Minibatch sind.

Algorithmus der Batch-Renormierung

Dies gilt natürlich auch für die gleitenden Durchschnitte. Wenn Sie nun bei der Berechnung Ihrer Gradienten diese Abhängigkeit des Normalisierungsschritts (die Berechnung von σ und μ) von Ihren Mini-Batch-Eingaben ignorieren, wird Ihr Modell explodieren. Aber warum ist das so? I-S hat natürlich die Antwort:

Original Batchrnorm-Papier

Als Letztes ist hinzuzufügen, dass, wenn Sie die Abhängigkeit von E[x] von b berücksichtigen, Ihr Gradient ∆b = 0 ist (überprüfen Sie, ob das stimmt!) und Ihr Modell nicht explodiert. Juhu! Zurück zu den gleitenden Durchschnitten: in TensorFlow werden sie mit dem Impuls α berechnet (in Worten: mean_moving_average = α * mean_moving_average + (1 - α) * mini_batch_mean). Wie Sie wahrscheinlich schon gemerkt haben, ist es zwar möglich, die Abhängigkeit des mini_batch_mean von den aktuellen Aktivierungen zu berücksichtigen, aber es gibt keine einfache Möglichkeit, die Gradienten des mean_moving_average in Bezug auf die Aktivierungen x zu berechnen (leider der Nachteil der Rekursion), so dass ∆b nicht 0 sein wird, so dass b explodieren wird, so dass wir den mini_batch mean und die Varianz und nicht die gleitenden Durchschnitte verwenden. Das war's also.

[9] ^ Kleine Losgrößen führen zu einer hohen Varianz in µB und σB. Es kommt noch besser (oder schlechter): Im Extremfall einer Losgröße von eins handelt es sich nicht nur um ein Problem unbeständiger Mittelwerte und Varianzen, sondern die Ausgabe von BatchNorm besteht ausschließlich aus Nullen!

[10] ^ Wenn wir das nicht tun würden, wären wir wieder bei genau demselben Problem, das in [8] diskutiert wurde. Wenn Sie jedoch r und d als Konstanten behandeln, können Sie die in [8] diskutierten Bewegungen durchführen und Sie werden sehen, dass ∆b immer noch 0 ist => und Ihr Modell sollte nicht explodieren.

[11] ^ Gibt es schon eine Open-Source-Version von Google Vizier?

[12] ^ Der in der Arbeit verwendete Hyperparameterplan:

Für Batch Renorm wurde rmax = 1, dmax = 0 (d.h. einfach batchnorm) für die ersten 5000 Trainingsschritte verwendet. Danach wurden diese Werte schrittweise gelockert, um rmax = 3 bei 40k Schritten und dmax = 5 bei 25k Schritten zu erreichen.

Interessiert? Sprechen Sie mit uns.

Stellen Sie uns Ihre Fragen während einer persönlichen Live-Demo der Software. Oder sehen Sie sich vorher ein 5-minütiges Video zu den wichtigsten Funktionen an.

Interessiert?
Lassen Sie uns reden.

Stellen Sie uns Ihre Fragen während einer persönlichen Live-Demo der Software. Oder sehen Sie sich vorher ein 5-minütiges Video zu den wichtigsten Funktionen an.

Interessiert? Sprechen Sie mit uns.

Stellen Sie uns Ihre Fragen während einer persönlichen Live-Demo der Software. Oder sehen Sie sich vorher ein 5-minütiges Video zu den wichtigsten Funktionen an.

Letzte Artikel