Comprendre la descente de gradient en mini-lots

Sep 18 2020

Je voudrais comprendre les étapes de la descente de gradient en mini-batch pour entraîner un réseau de neurones.

Mes données de train $(X,y)$ a une dimension $(k \times n)$ et $(1 \times n)$, où $k$ est le nombre de fonctionnalités et $n$ est le nombre d'observations.

Pour chaque couche $l=1,...L$ mes paramètres sont $W^{[l]}$ de dimension $(n^{[l]} \times n^{[l-1]})$, où $n^{[0]}=k$

a) J'initialise d'abord aléatoirement les paramètres $W^{[l]}$ pour $l=1,...L$.

b) Je prends un échantillon de longueur $p\in[1,n]$ de mes données d'entraînement, désignées par $(X^{(1)},y^{(1)})$ pour le numéro de l'échantillon $1$.

c) Je calcule le coût $J^{(1)}(W)$ avec la première initialisation des paramètres et le premier échantillon des données du train.

d) En rétropropagation, je mets à jour les paramètres pour $l=L,...1$ selon un taux d'apprentissage $\alpha$: $$ W^{[l]} = W^{[l]} - \alpha \text{ } \frac{\partial J^{(1)}(W)}{\partial W^{[l]}}$$

Maintenant, j'ai fait une étape de la descente de gradient avec un échantillon des données du train. Comment l'algorithme se poursuit-il?

Répète-t-il les étapes (c) et (d) avec le "nouveau" $W^{[l]}$ sur un deuxième échantillon des données du train $(X^{(2)},y^{(2)})$?

Dans ce cas, va-t-il continuer jusqu'à la convergence lorsque chaque mise à jour de la descente de gradient est effectuée avec différents échantillons des données du train?

Veuillez me faire savoir si quelque chose n'est pas clair.

Réponses

1 Nikaido Sep 18 2020 at 18:11

TL, DR;

Oui vous avez raison.


LONGUE RÉPONSE

Je vais vous donner un peu de contexte

Il existe trois "types" principaux de descente de gradient:

  • Descente de gradient par lots
  • Descente de gradient stochastique
  • Descente de gradient en mini-lot

Ces algorithmes diffèrent pour la taille du lot de l'ensemble de données.

Terminologie

  • epochs: epochs est le nombre de fois où l'ensemble de données complet est passé en avant et en arrière par l'algorithme d'apprentissage
  • itérations: le nombre de lots nécessaires pour compléter une époque
  • taille du lot: est la taille d'un échantillon de jeu de données

Descente de gradient par lots

Si vous travaillez avec des données d'entraînement pouvant tenir en mémoire (RAM / VRAM), le choix est sur Descente de gradient par lots. Dans ce cas, la taille du lot est égale à l'ensemble de données. Cela signifie que le modèle est mis à jour uniquement lorsque tout le jeu de données est passé.

for epoch in number of epochs:
    - for all the training instances in the dataset compute the derivative of the cost function
    - update the weights

Descente de gradient stochastique

Il s'agit d'une estimation de la descente de gradient par lots. La taille du lot est égale à 1. Cela signifie que le modèle est mis à jour avec uniquement une instance d'entraînement à la fois.

for epoch in number of epochs:
    for instance in total dataset:
        - for the current instance compute the derivative of the cost function 
        - update the weights

Descente de gradient en mini-lot

C'est une généralisation de la descente de gradient stochastique. La taille du lot est égale à une valeur> = 1. Cela signifie que le modèle est mis à jour par lot.

for epoch in number of epochs:
    for batch in num of batches:
        - for all the training instances in the batch sample compute the derivative of the cost function
        - update the weights

Exemple: Pour être plus clair, supposons avoir un ensemble de données de 1000 instances (n_of_instances), et disons que pour chaque type de descente de gradient, nous avons un nombre fixe d'époques (n_of_epochs) égal à 100, et comme taille de lot pour descente de gradient mini batch nous avons 100 (batch_size), et donc 10 itérations (n_of_iterations = n_of_instances / batch_size = 1000/100 = 10).

  • Descente de gradient par lots: le modèle sera mis à jour 100 fois (n_of_epochs)
  • Descente de gradient stochastique: le modèle sera mis à jour 100.000 fois (n_of_epochs * n_of_instances = 100 * 1000)
  • Descente de Gradient Mini-batch: le modèle sera mis à jour 1000 fois (n_of_iterations * n_of_epochs = 10 * 100)

La règle empirique consiste à utiliser la descente de gradient par lots si vous pouvez mettre tout le jeu de données en mémoire. Au contraire, en fonction de la taille de l'instance, le choix sera une descente de gradient mini-batch avec un lot de taille fixe qui peut tenir entièrement en mémoire. Habituellement, lorsque vous utilisez la descente de gradient par mini-lots, la convergence d'erreur sera plus bruyante que la descente de gradient par lots, en raison de la variabilité du contenu des lots.

Quelques références utiles:

  • époques vs batch vs itérations
  • Descente par lots, mini-lots et gradient stochastique
  • Descente de dégradé en mini lot
  • Comprendre le Dexcent Gradient Mini-Batch