Ich habe gerade einen TensorFlow-Code entdeckt, der diese Operation für das Training verwendet. Wie hilft es dem variablen Trainingsprozess?Was macht tf.train.ExponentialMovingAverage?
Antwort
Behält bewegliche Durchschnittswerte von Variablen bei, indem ein exponentieller Abfall verwendet wird.
Beim Training eines Modells ist es oft vorteilhaft, gleitende Mittelwerte der trainierten Parameter beizubehalten. Auswertungen, die gemittelte Parameter verwenden, erzielen manchmal signifikant bessere Ergebnisse als die endgültigen trainierten Werte.
doc: https://www.tensorflow.org/versions/r0.10/api_docs/python/train.html#ExponentialMovingAverage
Sie könnten in die Dokumentation von class tf.train.ExponentialMovingAverage
aussehen wollen:
Einige Trainingsalgorithmen, wie GradientDescent und Momentum oft profitieren einen gleitenden Durchschnitt von Variablen während der Optimierung beizubehalten. Die Verwendung der gleitenden Durchschnitte für Auswertungen verbessert oft signifikant die Ergebnisse.
Behält bewegliche Durchschnittswerte von Variablen bei, indem ein exponentieller Abfall verwendet wird.
Erläuterungen:
- Moving average
- Exponential decay: Ein Lernrate Scheduling-Algorithmus
ich hier ein Problem haben. In Anbetracht der TensorFlow offizielle Dokumentation für tf.train.ExponentialMovingAverage, ist die shadow variable
die Formel für die Aktualisierung wie folgt:
shadow_variable = Zerfall * shadow_variable + (1 - Zerfall) * variable
aber einen Blick auf Wikipedia Link unter für moving average Konzept sieht die Update-Operation wie wie folgt sein:
shadow_variable = (1 - Zerfall) * shadow_variable + Zerfall * Variable
Welche ist richtig? Ich denke Wikipedia-Link für Wikipedia documentation for moving average ist umfassender. Ich bin mir über meine oben erwähnte Argumentation jedoch nicht so sicher.