Die zentrale Idee hinter SGD

Sep 30 2020

Pr. Hinton bezieht sich in seinem beliebten Kurs über Coursera auf folgende Tatsache :

Rprop funktioniert nicht wirklich, wenn wir sehr große Datenmengen haben und Mini-Batch-Gewichtsaktualisierungen durchführen müssen. Warum funktioniert es nicht mit Mini-Batches? Nun, die Leute haben es versucht, aber es fiel ihnen schwer, es zum Laufen zu bringen. Der Grund, warum es nicht funktioniert, ist, dass es gegen die zentrale Idee des stochastischen Gradientenabfalls verstößt. Wenn wir eine ausreichend kleine Lernrate haben, werden die Gradienten über aufeinanderfolgende Mini-Batches gemittelt. Betrachten Sie das Gewicht, das bei neun Mini-Batches den Gradienten 0,1 und bei Zehntel-Mini-Batches den Gradienten von -0,9 ergibt. Was wir möchten, ist, dass sich diese Farbverläufe ungefähr gegenseitig aufheben, so dass der Aufenthalt ungefähr gleich bleibt. Aber es ist nicht das, was mit rprop passiert. Mit rprop erhöhen wir das Gewicht 9-mal und verringern es nur einmal, sodass das Gewicht viel größer wird.

Wie Sie sehen können, ist die zentrale Idee hinter SGD, dass die aufeinanderfolgenden Gradienten in Mini-Batches gemittelt werden sollten. Hat jemand eine gültige formale Quelle dafür? Gibt es eine Rechtfertigung? Ich habe bis jetzt keinen Beweis gefunden.

Antworten

2 JavierTG Oct 07 2020 at 04:39

Einfluss der Datenerzeugungsverteilung

Um dies zu sehen, müssen wir zunächst erwähnen, dass wir weder mit dem Batch-Gradientenabstieg (unter Verwendung des gesamten Datensatzes zur Berechnung des Gradienten) noch mit dem Mini-Batch-Gradientenabstieg den wahren (genauen) Wert des Gradienten berechnen.

Um den wahren Wert des Gradienten zu berechnen, müssten wir die Menge aller möglichen Werte der Merkmale verwenden. $x$, (und damit die Ausgänge $y$).

Formaler und unter Bezugnahme auf die Menge, die wir minimieren möchten, als den erwarteten Wert der Verlustfunktion pro Beispiel ($J(x,y,\theta)$, wo $\theta$ sind die Parameter) für alle möglichen $x,y$ Werte, der wahre Gradient $g$ ist gegeben durch: $$g = \frac{\partial}{\partial \theta}\mathbb{E}_{x,y\sim p_{data}}(J(x,y,\theta)) $$Und wenn wir bestimmte Bedingungen annehmen , haben wir das:$$g = \mathbb{E}_{x,y\sim p_{data}}\left(\frac{\partial}{\partial \theta}J(x,y,\theta)\right) $$

Wo $p_{data}$ist die Datenerzeugungsverteilung (die Verteilung, aus der die Werte von$x$ und $y$sind gezogen). Diese datengenerierende Verteilung ist jedoch normalerweise nicht bekannt. Wir kennen nur den Datensatz, den wir erhalten.

Aus diesem Grund verwenden wir zur Aktualisierung der Parameter unter Verwendung aller angegebenen Informationen (des Trainingssatzes) stattdessen die empirische Verteilung, die durch die Trainingsdaten definiert wird ($\hat{p}_{data}$), die eine Wahrscheinlichkeit von $1/m$ auf jedem der $m$ Proben $(x^{(1)}, y^{(1)}), \,(x^{(2)}, y^{(2)}),\,...\,,(x^{(m)}, y^{(m)})$des Datensatzes. Der Gradient wird also angenähert durch:$$ \begin{aligned} \hat{g}&=\frac{\partial}{\partial \theta}\mathbb{E}_{x,y\sim \hat{p}_{data}}(J(x,y,\theta))\\&=\frac{\partial}{\partial \theta}\left(\sum_{i=1}^m \frac{1}{m}J_i(x^{(i)},y^{(i)},\theta)\right)\\ &= \frac{1}{m}\sum_{i=1}^m\frac{\partial }{\partial \theta}J_i(x^{(i)},y^{(i)},\theta) \end{aligned} $$ Am Ende des Batch-Gradientenabstiegs.

Aber was passiert mit Mini-Batches?

Durch die Verwendung von Mini-Bad-Updates werden ständig neue Daten angezeigt (vorausgesetzt, wir berechnen nur eine Epoche). In diesem Fall verwenden wir bei Verwendung von Mini-Batches die Datengenerierungsverteilung.

Dies bedeutet, dass wir bei jeder Mini-Batch-Aktualisierung durch Abtasten dieser Datenerzeugungsverteilung eine Schätzung erhalten ($\hat{g}$) des wahren Gradienten ($g$) das ist unvoreingenommen dh $\mathbb{E}_{x,y\sim p_{data}}(\hat{g})=g$. Um dies zu sehen und zu überlegen$\text{s-sized}$ Mini-Chargen: $$\begin{aligned} \mathbb{E}_{x,y\sim p_{data}}(\hat{g})&=\mathbb{E}_{x,y\sim p_{data}}\left(\frac{g^{(1)}+...+g^{(s)}}{s}\right)\\ &=\frac{1}{s}(\mathbb{E}_{x,y\sim p_{data}}(g^{(1)}+...+g^{(s)}))\\ &=\frac{1}{s}s\,\,g=g \end{aligned} $$Wenn wir aufeinanderfolgende Mini-Batch-Updates durchführen, tendieren wir im Durchschnitt dazu (wie durch gezeigt)$\mathbb{E}_{x,y\sim p_{data}}(\hat{g})$), um unsere Parameter mit dem wahren Wert des Gradienten zu aktualisieren. Und darauf beziehen sich die Autoren meiner Meinung nach im Zitat der Frage.


Tolle Referenzen:

Deep Learning Buch, Ian Goodfellow et. al Kapitel 8.1
Antworten von hier

1 cmn Oct 09 2020 at 23:07

In einem vollständigen Gradientenabstiegsschritt wird die Verlustfunktion als Durchschnitt der Verlustdauer an einzelnen Abtastpunkten definiert. Um die Verlustfunktion zu minimieren, müssen wir über die einzelnen Gradienten mitteln.

Wenn beim stochastischen Gradientenabstieg keine Verzerrung bei der Auswahl der Chargen vorliegt, würde die Mittelung über die Chargen zu einer unvoreingenommenen Schätzung des vollständigen Gradienten führen.

Bitte werfen Sie einen Blick auf diese Vorlesungsunterlagen http://www.stat.cmu.edu/~ryantibs/convexopt-F18/scribes/Lecture_24.pdf