Einführung
Dies ist der Inhalt von Kurs 2, Woche 2 (C2W2) von Deep Learning Specialization.
(C2W2L01) Mini-batch gradient descent
Inhalt
-Wenn $ m = 5000000 $, teilen Sie den Trainingssatz in Mini-Batch auf und berechnen Sie die Vorwärts- und Rückwärtsausbreitung für jeden Mini-Batch.
--mini-batch konvergiert schneller
X^{\{1\}} = \left[ X^{(1)} \, X^{(2)} \, \cdots \, X^{(1000)}\right] \\
Y^{\{1\}} = \left[ Y^{(1)} \, Y^{(2)} \, \cdots \, Y^{(1000)}\right] \\
X^{\{2\}} = \left[ X^{(1001)} \, X^{(1002)} \, \cdots \, X^{(2000)}\right] \\
Y^{\{2\}} = \left[ Y^{(1001)} \, Y^{(1002)} \, \cdots \, Y^{(2000)}\right]
(C2W2L02) Understanding Mini-batch Gradient Descent
Inhalt
- Im Fall eines Mini-Batch-Gradientenabfalls verringert sich die Kostenfunktion $ J ^ {\ {t \}} $, während sie mit jeder Mini-Batch-Iteration vibriert.
- Die geeignete Größe der Mini-Charge sollte groß genug sein, um von der Effizienz der Berechnung durch Vektorisierung zu profitieren.
-Typische Größen sind $ 2 ^ 6 $, $ 2 ^ 7 $, $ 2 ^ 8 $, $ 2 ^ 9 $ usw. (um Speicher effizient zu nutzen, eine Potenz von 2)
- Die Mini-Batch-Größe, die nicht in die Speichergröße der CPU / GPU passt, ist ineffizient
--Versuchen Sie einige Potenzen von 2, um eine Größe zu finden, die effizient berechnet werden kann
(C2W2L03) Exponentially Weighted Average
Inhalt
- Exponentiell gewichteter (gleitender) Durchschnitt (stimmt Japanisch mit exponentiell gewichtetem (gleitendem) Durchschnitt überein?)
- Konvertieren Sie die Originaldaten ($ \ theta_0 $, $ \ theta_1 $, $ \ cdots $)
V_0 = 0 \\
V_t = \beta V_{t-1} + \left( 1-\beta \right) \theta_t
- $ V_t $ kann als Durchschnitt von ungefähr $ \ frac {1} {1- \ beta} $ Daten angesehen werden
-Wenn $ \ beta $ groß ist, sind die Daten glatt, da sie mit mehr Daten berechnet werden.
-Wenn $ \ beta $ klein ist, ist es laut und empfindlich gegenüber Ausreißern.
(C2W2L04) Understanding exponentially weighted average
Inhalt
- So implementieren Sie einen exponentiell gewichteten Durchschnitt
- V_0 = 0
- Wiederholen Sie Folgendes
- Get next \theta_t
- V_t = \beta V_{t-1} + (1-\beta)\theta_t
- Der Vorteil ist, dass weniger Speicher benötigt wird
(C2W2L05) Bias correction in exponentially weighted average
Inhalt
- Der exponentiell gewichtete Durchschnitt macht $ V_t $ am Anfang sehr klein
V_0 = 0 \\
V_1 = 0.98 V_0 + 0.02 \theta_1 = 0.02 \theta_1 \\
V_2 = 0.98 V_1 + 0.02 \theta_2 = 0.0196\theta_1 + 0.02\theta_2
- Korrigieren Sie daher $ V_t $ mit $ \ frac {V_t} {1- \ beta ^ t} $. Wenn t groß wird, wird es $ \ beta ^ t \ sim 0 $, und der Effekt der Korrektur geht fast verloren.
- In vielen Fällen wird keine Bias-Korrektur implementiert (unter Verwendung von Daten aus der Anfangsphase).
(C2W2L06) Gradient descent with momentum
Inhalt
- Bei Iteration $ t $
--Berechnen Sie $ dW $, $ db $ mit dem aktuellen Mini-Batch
V_{dw} = \beta V_{dw} + \left( 1-\beta \right) dW \\
V_{db} = \beta V_{db} + \left( 1-\beta \right) db \\
W := W - \alpha V_{dW} \\
b := b - \alpha V_{db}
- Glätten Sie die Vibration der Methode mit dem steilsten Abstieg
- $ \ Beta $ und $ \ alpha $ sind Hyperparameter, aber $ \ beta = 0.9 $ ist gut
- Die Bias-Korrektur wird selten verwendet. Wiederholen Sie dies 10 Mal und es wird $ \ beta ^ t \ sim 0 $ sein
-Es gibt auch ein Dokument, das $ V_ {dW} = \ beta V_ {dW} + dW $ setzt. In diesem Fall kann davon ausgegangen werden, dass $ \ alpha $ mit $ \ frac {1} {1- \ beta} $ skaliert wird.
(C2W2L07) RMSProp
Inhalt
- RMS = Root Mean Square
- Bei Iteration $ t $
--Berechnen Sie $ dW $, $ db $ mit dem aktuellen Mini-Batch
S_{dW} = \beta S_{dW} + \left( 1-\beta \right) dW^2 \ (\textrm{Element für Element}) \\
S_{db} = \beta S_{db} + \left( 1-\beta \right) db^2 \ (\textrm{Element für Element}) \\
W := W -\alpha \frac{dW}{\sqrt{S_{dW}} + \epsilon} \\
b := b -\alpha \frac{db}{\sqrt{S_{db}} + \epsilon} \\
- Fügen Sie $ \ epsilon = 10 ^ {-8} $ ein, damit der Nenner nicht 0 wird
(C2W2L08) Adam optimization algorithm
Inhalt
- Adam optimization = momentum + RMSProm
- Adam = Adaptive momentum estimation
- Bei Iteration $ t $
--Berechnen Sie $ dW $, $ db $ mit dem aktuellen Mini-Batch
V_{dw} = \beta_1 V_{dw} + \left( 1-\beta_1 \right) dW \\
V_{db} = \beta_1 V_{db} + \left( 1-\beta_1 \right) db \\
S_{dW} = \beta_2 S_{dW} + \left( 1-\beta_2 \right) dW^2 \\
S_{db} = \beta_2 S_{db} + \left( 1-\beta_2 \right) db^2 \\
V^{corrected}_{dW} = \frac{V_{dw}}{1-\beta_1^t} \\
V^{corrected}_{db} = \frac{V_{db}}{1-\beta_1^t} \\
S^{corrected}_{dW} = \frac{S_{dw}}{1-\beta_2^t} \\
S^{corrected}_{db} = \frac{S_{db}}{1-\beta_2^t} \\
W := W -\alpha \frac{V^{corrected}_{dW}}{\sqrt{S^{corrected}_{dW}}+\epsilon} \\
b := b -\alpha \frac{V^{corrected}_{db}}{\sqrt{S^{corrected}_{db}}+\epsilon} \\
- Hyperparameter
- \alpha ; needs to be tuned
- \beta_1 ; 0.9
- \beta_2 ; 0.999
- $ \ epsilon $; $ 10 ^ {-8} $ (beeinflusst nicht viel, aber normalerweise $ 10 ^ {-8} $)
(C2W2L09) Learning rate decay
Inhalt
- Wenn $ \ alpha $ im Mini-Batch konstant ist, konvergiert es nicht. Wenn Sie $ \ alpha $ schrittweise reduzieren, passt es in die Nähe des Mindestwerts.
--epoch; 1 Durchlauf von Daten (Bei Aufteilung in Mini-Batch wird die Einheit, die alle Mini-Batch-Daten verarbeitet, als Epoche bezeichnet.)
\alpha = \frac{1}{1 + \textrm{decay_rate} \ast \textrm{epoch_num}} \alpha_0
- Andere Methoden umfassen die folgenden
\alpha = 0.95^{\textrm{epoch_num}} \alpha_0\\
\alpha = \frac{k}{\sqrt{\textrm{epoch_num}}} \alpha_0
Referenz