introduction
C'est le contenu du cours 2, semaine 2 (C2W2) de Spécialisation en apprentissage profond.
(C2W2L01) Mini-batch gradient descent
Contenu
-Lorsque $ m = 5000000 $, divisez l'ensemble d'apprentissage en mini-lots et calculez la propagation avant et arrière pour chaque mini-lot.
--mini-batch converge plus rapidement
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
Contenu
- Dans le cas de la descente de gradient de mini-lots, la fonction de coût $ J ^ {\ {t \}} $ diminue en vibrant pour chaque itération de mini-lots.
- La taille appropriée du mini-lot doit être suffisamment grande pour bénéficier de l'efficacité du calcul par vectorisation.
-Les tailles typiques sont $ 2 ^ 6 $, $ 2 ^ 7 $, $ 2 ^ 8 $, $ 2 ^ 9 $, etc. (pour utiliser efficacement la mémoire, une puissance de 2)
- La taille du mini-lot qui ne correspond pas à la taille de la mémoire du CPU / GPU est inefficace
- Essayez quelques puissances de 2 pour trouver une taille qui peut être calculée efficacement
(C2W2L03) Exponentially Weighted Average
Contenu
- Moyenne pondérée exponentiellement (mobile) (le japonais correspond-il à la moyenne pondérée exponentiellement (mobile)?)
--Convertissez les données d'origine ($ \ theta_0 $, $ \ theta_1 $, $ \ cdots $)
V_0 = 0 \\
V_t = \beta V_{t-1} + \left( 1-\beta \right) \theta_t
- $ V_t $ peut être considéré comme la moyenne d'environ $ \ frac {1} {1- \ beta} $ data
-Si $ \ beta $ est gros, les données seront lisses car elles seront calculées en utilisant plus de données.
-Si $ \ beta $ est petit, il est bruyant et sensible aux valeurs aberrantes.
(C2W2L04) Understanding exponentially weighted average
Contenu
- Comment mettre en œuvre une moyenne pondérée de manière exponentielle
- V_0 = 0
- Répétez ce qui suit
- Get next \theta_t
- V_t = \beta V_{t-1} + (1-\beta)\theta_t
- L'avantage est qu'il nécessite moins de mémoire
(C2W2L05) Bias correction in exponentially weighted average
Contenu
- La moyenne de poids exponentielle rend $ V_t $ très petit au début
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
--Par conséquent, corrigez $ V_t $ avec $ \ frac {V_t} {1- \ beta ^ t} $. Lorsque t devient grand, il devient $ \ beta ^ t \ sim 0 $, et l'effet de correction est presque perdu.
- Dans de nombreux cas, la correction du biais n'est pas mise en œuvre (en utilisant les données de l'étape initiale)
(C2W2L06) Gradient descent with momentum
Contenu
- À l'itération $ t $
--Calculer $ dW $, $ db $ avec le mini-lot actuel
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}
- Lisse la vibration de la méthode de descente la plus raide
- $ \ beta $ et $ \ alpha $ sont des hyperparamètres, mais $ \ beta = 0.9 $ est bon
- La correction des biais est rarement utilisée. Répétez 10 fois et ce sera $ \ beta ^ t \ sim 0 $
-Il existe également un document qui définit $ V_ {dW} = \ beta V_ {dW} + dW $. Dans ce cas, on peut considérer que $ \ alpha $ est mis à l'échelle de $ \ frac {1} {1- \ beta} $.
(C2W2L07) RMSProp
Contenu
- RMS = Root Mean Square
- À l'itération $ t $
--Calculer $ dW $, $ db $ avec le mini-lot actuel
S_{dW} = \beta S_{dW} + \left( 1-\beta \right) dW^2 \ (\textrm{Élément par élément}) \\
S_{db} = \beta S_{db} + \left( 1-\beta \right) db^2 \ (\textrm{Élément par élément}) \\
W := W -\alpha \frac{dW}{\sqrt{S_{dW}} + \epsilon} \\
b := b -\alpha \frac{db}{\sqrt{S_{db}} + \epsilon} \\
--Insérez $ \ epsilon = 10 ^ {-8} $ pour que le dénominateur ne devienne pas 0
(C2W2L08) Adam optimization algorithm
Contenu
- Adam optimization = momentum + RMSProm
- Adam = Adaptive momentum estimation
- À l'itération $ t $
--Calculer $ dW $, $ db $ en utilisant le mini-lot actuel
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} \\
--Hyper paramètres
- \alpha ; needs to be tuned
- \beta_1 ; 0.9
- \beta_2 ; 0.999
- $ \ epsilon $; $ 10 ^ {-8} $ (n'affecte pas beaucoup, mais généralement $ 10 ^ {-8} $)
(C2W2L09) Learning rate decay
Contenu
- En mini-batch, si $ \ alpha $ est constant, il ne convergera pas. Si vous réduisez progressivement $ \ alpha $, il sera proche de la valeur minimale.
--epoch; 1 passe par les données (lorsqu'elle est divisée en mini-lot, l'unité qui gère toutes les données du mini-lot est appelée epoch)
\alpha = \frac{1}{1 + \textrm{decay_rate} \ast \textrm{epoch_num}} \alpha_0
- D'autres méthodes comprennent les suivantes
\alpha = 0.95^{\textrm{epoch_num}} \alpha_0\\
\alpha = \frac{k}{\sqrt{\textrm{epoch_num}}} \alpha_0
référence