Eine Epoche in stochastischer Gradientenabnahme ist definiert als ein einzelner Durchgang durch die Daten. Für jedes SGD-Minibatch werden Proben gezogen, der Gradient berechnet und die Parameter aktualisiert. In der Epocheneinstellung werden die Muster ersatzlos gezogen.
Dies erscheint jedoch unnötig. Warum nicht jedes SGD-Minibatch so zeichnen, wie zufällig aus dem gesamten Datensatz bei jeder Iteration zieht? Über eine große Anzahl von Epochen hinweg scheinen die kleinen Abweichungen, von denen Proben mehr oder weniger häufig gesehen werden, unwichtig zu sein.
neural-networks
deep-learning
gradient-descent
Setzen Sie Monica wieder ein
quelle
quelle
Antworten:
Neben Francks Antwort zu praktischen Aspekten und Davids Antwort zur Betrachtung kleiner Untergruppen - beides wichtige Punkte - gibt es in der Tat einige theoretische Gründe, die Stichprobe ersatzlos zu bevorzugen. Der Grund hängt vielleicht mit Davids Punkt zusammen (der im Wesentlichen das Problem des Kuponsammlers ist ).
2009 verglich Léon Bottou die Konvergenzleistung mit einem bestimmten Textklassifizierungsproblem ( ).n = 781 , 265
Er trainierte eine Support-Vektor-Maschine über SGD mit drei Ansätzen:
Er empirisch die Konvergenz untersucht , wobei die Kostenfunktion ist, die Parameter in Schritt der Optimierung und die Erwartung ist , über die zugewiesenen Shuffling Chargen.E [C( θt) - minθC( θ ) ] θ t tC θt t
Dies ist seine Abbildung 1, die Folgendes veranschaulicht:
Dies wurde später theoretisch durch das Papier bestätigt:
Ihr Beweis gilt nur für den Fall, dass die Verlustfunktion stark konvex ist, dh nicht für neuronale Netze. Es ist jedoch zu erwarten, dass ähnliche Überlegungen auf den Fall des neuronalen Netzwerks zutreffen (der viel schwieriger zu analysieren ist).
quelle
Unter Performance-Gesichtspunkten mit einem großen Trainingssatz ist dies in der Tat ziemlich unnötig, aber die Verwendung von Epochen kann praktisch sein, z. B .:
[1] gibt einen weiteren Grund an, der angesichts der heutigen Computerkonfiguration nicht so relevant ist:
[1] Bengio, Yoshua. " Praktische Empfehlungen für das gradientenbasierte Training tiefer Architekturen. " Neuronale Netze: Tricks of the Trade. Springer Berlin Heidelberg, 2012. 437-478.
quelle
Ich bin etwas anderer Meinung, dass es offensichtlich keine Rolle spielt. Nehmen wir an, es gibt eine Million Trainingsbeispiele und wir nehmen zehn Millionen Proben.
In R können wir schnell sehen, wie die Verteilung aussieht
plot(dbinom(0:40, size = 10 * 1E6, prob = 1E-6), type = "h")
Einige Beispiele werden mehr als 20 Mal besucht, während 1% von ihnen höchstens 3 Mal besucht werden. Wenn der Trainingssatz sorgfältig ausgewählt wurde, um die erwartete Verteilung der Beispiele in realen Daten darzustellen, kann dies in einigen Bereichen des Datensatzes eine echte Auswirkung haben - insbesondere, wenn Sie damit beginnen, die Daten in kleinere Gruppen aufzuteilen.
Betrachten Sie den jüngsten Fall, in dem ein Wähler aus Illinois 30-fach übererprobt wurde und die Schätzungen des Modells für seine demografische Gruppe (und in geringerem Maße für die gesamte US-Bevölkerung) dramatisch verschoben hat. Wenn wir versehentlich "Ruffed Grouse" -Bilder, die an bewölkten Tagen mit geringer Schärfentiefe vor grünem Hintergrund aufgenommen wurden, überabtasten und die anderen Arten von Grouse-Bildern unterabtasten, ordnet das Modell diese irrelevanten Merkmale möglicherweise der Kategoriebeschriftung zu. Je mehr Möglichkeiten es gibt, die Daten aufzuteilen, desto mehr dieser Untergruppen gibt es und desto mehr Möglichkeiten für diese Art von Fehler gibt es.
quelle
samples = sample(1:1E6, size = 1E7, replace = TRUE)
plot(table(table(samples)) / 1E7)