Wie berechnet die Chargennormalisierung die Bevölkerungsstatistik nach dem Training?

7

Ich habe das Papier zur Chargennormalisierung (BN) (1) gelesen und es stand:

Zu diesem Zweck verwenden wir nach dem Training des Netzwerks die Normalisierung Verwendung der Grundgesamtheit anstelle von mini -Batch, Statistiken.

x^=x- -E.[x]]V.einr[x]]+ϵ

Meine Frage ist, wie berechnet es diese Bevölkerungsstatistik und über welchen Trainingssatz (Test, Validierung, Zug)? Ich dachte, ich wüsste, was das bedeutet, aber nach einiger Zeit merke ich, dass ich nicht sicher bin, wie es das berechnet. Ich gehe davon aus, dass es versucht, den wahren Mittelwert und die Varianz abzuschätzen , obwohl ich nicht sicher bin, wie es das macht. Was ich wahrscheinlich tun würde, ist, den Mittelwert und die Varianz gemäß dem gesamten Datensatz zu berechnen und diese Momente für die Schlussfolgerung zu verwenden.

Was mich jedoch vermuten ließ, dass ich falsch liege, ist ihre Diskussion über eine unvoreingenommene Varianzschätzung später in demselben Abschnitt:

Wir verwenden die unverzerrte Varianzschätzung bei der die Erwartung über dem Training liegt Mini-Chargen der Größe und sind ihre Stichprobenvarianzen.V.einr[x]]=mm- -1E.B.[σB.2]]mσB.2

Da es sich um Bevölkerungsstatistiken handelt, fühlte sich dieser Kommentar zu dem Papier so an, als käme er (für mich) aus dem Nichts und war sich nicht sicher, worüber sie sprachen. Stellen sie nur (zufällig) klar, dass sie während des Trainings unvoreingenommene Schätzungen verwenden, oder verwenden sie eine unvoreingenommene Schätzung, um die Bevölkerungsstatistik zu berechnen?


1 : Ioffe S. und Szegedy C. (2015),
"Chargennormalisierung: Beschleunigung des tiefen Netzwerktrainings durch Reduzierung der internen Kovariatenverschiebung",
Tagungsband der 32. Internationalen Konferenz über maschinelles Lernen , Lille, Frankreich, 2015.
Journal of Machine Learning Research: W & CP Band 37

Pinocchio
quelle

Antworten:

6

In der Regel wird die Bevölkerungsstatistik aus dem Trainingssatz entnommen. Wenn Sie den Testsatz einschließen, erhalten Sie zur Testzeit Informationen, auf die Sie technisch gesehen keinen Zugriff haben sollten (Informationen zum gesamten Datensatz). Aus dem gleichen Grund sollte der Validierungssatz nicht zur Berechnung dieser Statistiken verwendet werden.

Beachten Sie, dass aufgrund der Tatsache, dass die Batch-Normalisierung nicht nur auf der Eingabeebene erfolgt, die Bevölkerungsstatistik von Epoche zu Epoche variiert, da das Netzwerk seine Parameter (und damit seine Ausgaben auf jeder Ebene) lernt und ändert.

Daher besteht die übliche Methode zur Berechnung dieser Statistiken darin, während des Trainings einen (exponentiell abfallenden oder sich bewegenden) Durchschnitt beizubehalten. Dies wird die stochastischen Variationen aufgrund des Mini-Batch-Trainings glätten und auf dem neuesten Stand des Lernens bleiben. Ein Beispiel hierfür finden Sie im Brennercode für die Chargennorm: https://github.com/torch/nn/blob/master/lib/THNN/generic/BatchNormalization.c#L22

In dem Artikel wird erwähnt, dass sie gleitende Durchschnitte verwenden, anstatt nur die zuletzt berechneten Statistiken beizubehalten:

Stattdessen können wir mit gleitenden Durchschnitten die Genauigkeit eines Modells während des Trainings verfolgen.

Für Ihre zweite Frage sagen sie, dass sie diese unvoreingenommene Schätzung verwenden, um die Populationsvarianz zu schätzen (für zukünftige Schlussfolgerungen).

Jenkar
quelle
0

Selbst wenn Ihre Chargengröße keine Eins ist, basiert die Chargennorm auch auf dem gesamten Trainingssatz (wodurch die Inferenz stabil bleibt).

Lerner Zhang
quelle