Pourquoi les chercheurs en réseaux de neurones se soucient-ils des époques?

69

Une époque en descente de gradient stochastique est définie comme un passage unique dans les données. Pour chaque minibatch SGD, échantillons sont extraits, le gradient calculé et les paramètres mis à jour. Dans le réglage d'époque, les échantillons sont prélevés sans remplacement.k

Mais cela semble inutile. Pourquoi ne pas dessiner chaque minibatch SGD car tirage aléatoire de l'ensemble des données à chaque itération? Sur un grand nombre d'époques, les petits écarts dont on voit les échantillons plus ou moins souvent sembleraient sans importance.k

Rétablir Monica
la source
1
+1 pour la question, curieusement j'avais presque la même question que sur le point de demander!
Haitao Du
Données anecdotiques, mais j'ai récemment intégré un réseau de neurones à une couche utilisant SGD sur les données MNIST, dont la taille correspond à 50 000 entraînements. Après une analyse aléatoire, la précision de la classification n’était pas très supérieure à 30-40% et le log-vraisemblance n’avait clairement pas convergé. J'ai donc répété la procédure pour 30 autres époques conduisant à une précision de plus de 90%. Au moins par contre-exemple, cela m’a montré qu’ils peuvent être nécessaires.
tomka
6
@tomka Cela semble prouver que plusieurs passages des données sont nécessaires, ce qui est conforme à la méthode proposée ici: continuez à tirer échantillons par itération de formation ad nauseam. k
Rétablir Monica
1
Une autre question intéressante serait: la mini-commande par lots aura-t-elle également un impact sur le surajustement?
Kh40tiK
3
@Pinocchio La pratique standard de SGD consiste à échantillonner sans remplacement (jusqu'à épuisement du pool d'échantillons, point auquel une nouvelle époque reprend avec toutes les données). Ma question est pourquoi il n’utilise pas d’échantillonnage avec remplacement. Il s'avère qu'une réponse est que l'échantillonnage sans remplacement améliore le taux de convergence du modèle.
Réintégrer Monica le

Réponses:

60

Outre les réponses de Franck sur les aspects pratiques et celles de David sur les sous-groupes restreints (deux points importants), il existe des raisons théoriques de préférer l'échantillonnage sans remplacement. La raison est peut-être liée au point de David (qui est essentiellement le problème du collecteur de coupon ).

En 2009, Léon Bottou a comparé les performances de convergence d'un problème de classification de texte particulier ( ).n=781,265

Bottou (2009). Convergence curieusement rapide de certains algorithmes de descente de gradient stochastique . Actes du symposium sur l'apprentissage et la science des données. ( pdf de l'auteur )

Il a formé une machine à vecteurs de support via SGD selon trois approches:

  • Aléatoire : dessine des échantillons aléatoires de l'ensemble de données complet à chaque itération.
  • Cycle : mélangez le jeu de données avant de commencer le processus d'apprentissage, puis parcourez-le de manière séquentielle afin que les exemples soient affichés à chaque époque dans le même ordre.
  • Shuffle : mélangez le jeu de données avant chaque époque, de sorte que chaque époque passe dans un ordre différent.

C θ t tE[C(θt)minθC(θ)]Cθtt

  • Pour Random, la convergence était approximativement de l'ordre de (comme prévu par la théorie existante à ce moment-là).t1
  • Le cycle a obtenu une convergence de l'ordre de (avec mais variable en fonction de la permutation, par exemple pour sa figure 1). alpha > 1 alpha 1,8tαα>1α1.8
  • Shuffle était plus chaotique, mais la ligne la mieux ajustée donnait , beaucoup plus rapide que Random.t2

Voici sa figure 1 illustrant que: illustration de la convergence à des taux donnés

Ceci fut théoriquement confirmé par la suite:

Gürbüzbalaban, Ozdaglar et Parrilo (2015). Pourquoi le remaniement aléatoire bat la descente du gradient stochastique . arXiv: 1510.08560 . ( vidéo de la conférence invitée au NIPS 2015 )

Leur preuve ne s'applique qu'au cas où la fonction de perte est fortement convexe, c'est-à-dire pas aux réseaux de neurones. Il est toutefois raisonnable de s'attendre à ce qu'un raisonnement similaire puisse s'appliquer au cas du réseau neuronal (ce qui est beaucoup plus difficile à analyser).

Dougal
la source
3
C'est une réponse très perspicace. Merci beaucoup pour votre contribution.
Rétablir Monica
1
désolé pour l'ignorance, mais cela ne vous dérange-t-il pas d'expliquer un peu plus la différence entre les trois? En particulier, je suis confus au sujet de Random, quand vous dites "échantillon", que voulez-vous dire? Je sais que ce n’est pas ce à quoi vous faites référence, mais le lot standard Neural Net mini SGD échantillonne généralement les lots sans les remplacer à chaque itération. Est-ce que c'est ce que fait Aléatoire? Si c'est le cas, en quoi est-ce différent de Shuffle?
Pinocchio
1
Maintenant que je le relis, tous les trois semblent avoir le même algorithme, quelle est la différence si le jeu de données est mélangé ou non et à quelle fréquence si les lots pour SGD sont toujours aléatoires?
Pinocchio
3
@ Pinocchio Imaginez un jeu de données à quatre lamentations. Random pourrait aller ACADBBCA; chaque entrée est complètement aléatoire. Cycle pourrait aller BDAC BDAC BDAC; il choisit un ordre pour chaque époque puis se répète. Shuffle pourrait être BDAC ADCB CBAD; ça va dans les époques, mais chacune est aléatoire. Cette analyse n'utilise pas de miniatures, mais uniquement un SGD un à la fois.
Dougal
C'est une excellente réponse. Merci à vous!
DankMasterDan
24

Il est en effet tout à fait inutile du point de vue des performances avec un grand ensemble d’entraînement, mais utiliser des époques peut être pratique, par exemple:

  • cela donne une assez bonne métrique: "le réseau de neurones a été formé pour 10 époques" est une déclaration plus claire que "le réseau de neurones a été formé pour 18942 itérations" ou "le réseau de neurones a été formé sur 303072 échantillons".
  • Il y a suffisamment de choses aléatoires pendant la phase d'entraînement: initialisation aléatoire du poids, mélange de mini-lots, abandon, etc.
  • il est facile à mettre en œuvre
  • cela évite de se demander si l'ensemble d'entraînement est assez grand pour ne pas avoir d'époques

[1] donne une raison de plus, qui n'est pas tellement pertinente compte tenu de la configuration informatique actuelle:

Comme pour toute méthode de descente de gradient stochastique (incluant le cas de mini-batch), il est important pour l'efficacité de l'estimateur que chaque exemple ou minibatch soit échantillonné de manière approximativement indépendante. Parce que l'accès aléatoire à la mémoire (ou pire, au disque) est coûteux, une bonne approximation, appelée gradient incrémental (Bertsekas, 2010), consiste à consulter les exemples (ou mini-lots) dans un ordre fixe correspondant à leur ordre en mémoire. ou disque (en répétant les exemples dans le même ordre sur une seconde époque, si nous ne sommes pas dans le cas purement en ligne où chaque exemple est visité une seule fois).Dans ce contexte, il est préférable de placer les exemples ou les mini-lots dans un ordre aléatoire (pour vous assurer que c'est bien le cas, il peut être utile de mélanger d'abord les exemples). Une convergence plus rapide a été observée si l’ordre dans lequel les mini-lots sont visités est modifié pour chaque époque, ce qui peut être relativement efficace si le jeu d’entraînement est conservé dans la mémoire de l’ordinateur.


[1] Bengio, Yoshua. " Recommandations pratiques pour la formation d'architectures profondes basée sur le gradient. " Réseaux de neurones: astuces du métier. Springer Berlin Heidelberg, 2012. 437-478.

Franck Dernoncourt
la source
1
k
1
@ Sycorax L'échantillonnage sans remplacement, bien que n'étant bien sûr pas indépendant, est "à peu près indépendant" en ce sens qu'il est échangeable . Du point de vue de la formation d'un classificateur qui ne se soucie pas beaucoup d'un point de données, cette capacité d'échange est certainement assez proche de la "quasi indépendante".
Dougal
18

Je suis en désaccord quelque peu que ce ne sera clairement pas important. Disons qu'il y a un million d'exemples de formation et que nous prenons dix millions d'échantillons.

En R, on peut rapidement voir à quoi ressemble la distribution avec

plot(dbinom(0:40, size = 10 * 1E6, prob = 1E-6), type = "h")

PMF binomiale

Certains exemples seront visités plus de 20 fois, tandis que 1% d’entre eux le seront 3 fois ou moins. Si l'ensemble de formation a été choisi avec soin pour représenter la distribution attendue d'exemples dans des données réelles, cela pourrait avoir un impact réel sur certains domaines de l'ensemble de données, en particulier une fois que vous avez commencé à découper les données en groupes plus petits.

Prenons le cas récent où un électeur de l'Illinois a effectivement été suréchantillonné 30 fois et a considérablement modifié les estimations du modèle pour son groupe démographique (et dans une moindre mesure, pour l'ensemble de la population américaine). Si nous sur-échantillonnons accidentellement des images de "gélinotte huppée" prises sur un arrière-plan vert par temps nuageux avec une profondeur de champ étroite et que nous sous-échantillonnons les autres types d'images de grouse, le modèle pourrait associer ces caractéristiques non pertinentes à l'étiquette de catégorie. Plus il y a de façons de séparer les données, plus il y aura de sous-groupes et plus il y aura de possibilités pour ce type d'erreur.

David J. Harris
la source
1
Je ne pense pas que cela ferait une grande différence dans la pratique pour un grand ensemble d'entraînement, mais je m'attends assurément à le faire avec un ensemble d'entraînement plus petit.
Franck Dernoncourt
5
@FranckDernoncourt eh bien, l'idée était que cela peut avoir de l'importance pour les grands ensembles de données si vous commencez à regarder de petits sous-groupes. Ce qui n'est pas une procédure rare dans les grands ensembles de données,
dimpol
vous devriez avoir utilisé une distribution uniforme, pas un binôme
lahwran
2
@lahwran Nous échantillonnons fois sur 10 6107106 éléments avec remplacement. En R, ce serait samples = sample(1:1E6, size = 1E7, replace = TRUE). A partir de là, vous pouvez tracer la distribution de fréquence avec plot(table(table(samples)) / 1E7). Cela ressemble à la distribution binomiale que j'ai décrite ci-dessus.
David J. Harris
2
aha! J'avais tort alors.
lahwran