Dans la formation en mini-lots d'un réseau de neurones, j'ai entendu qu'une pratique importante est de mélanger les données d'entraînement avant chaque époque. Quelqu'un peut-il expliquer pourquoi le brassage à chaque époque aide?
De la recherche google, j'ai trouvé les réponses suivantes:
- il aide la formation à converger rapidement
- il évite tout biais lors de la formation
- il empêche le modèle d'apprendre l'ordre de la formation
Mais, j'ai de la difficulté à comprendre pourquoi l'un de ces effets est causé par le brassage aléatoire. Quelqu'un peut-il fournir une explication intuitive?
la source
D'un point de vue très simpliste, les données sont introduites séquentiellement, ce qui suggère qu'au moins, il est possible que l'ordre des données ait un effet sur la sortie. Si l'ordre n'a pas d'importance, la randomisation ne fera certainement pas de mal. Si l'ordre importe, la randomisation aidera à lisser ces effets aléatoires afin qu'ils ne deviennent pas des biais systématiques. En bref, la randomisation est bon marché et ne fait jamais de mal, et minimise souvent les effets de commande des données.
la source
Remarque: tout au long de cette réponse, je fais référence à la minimisation de la perte d'entraînement et je ne discute pas des critères d'arrêt tels que la perte de validation. Le choix des critères d'arrêt n'affecte pas le processus / les concepts décrits ci-dessous.
Le processus d'apprentissage d'un réseau neuronal consiste à trouver la valeur minimale d'une fonction de perte , où représente une matrice (ou plusieurs matrices) de poids entre les neurones et représente l'ensemble de données d'apprentissage. J'utilise un indice pour pour indiquer que notre minimisation de se produit uniquement sur les poids (c'est-à-dire que nous recherchons tel que soit minimisé) tandis que est fixe.LX( W) W X X L W W L X
Maintenant, si nous supposons que nous avons éléments dans (c'est-à-dire qu'il y a poids dans le réseau), est une surface dans un espace dimensionnel . Pour donner un analogue visuel, imaginez que nous n'avons que deux poids de neurones ( ). Alors a une interprétation géométrique facile: c'est une surface dans un espace tridimensionnel. Cela vient du fait que pour toute matrice de poids donnée , la fonction de perte peut être évaluée sur et cette valeur devient l'élévation de la surface.P W P L P+1 P=2 L W X
Mais il y a le problème de la non-convexité; la surface que j'ai décrite aura de nombreux minima locaux, et donc les algorithmes de descente de gradient sont susceptibles de se "coincer" dans ces minima tandis qu'une solution plus profonde / inférieure / meilleure peut se trouver à proximité. Cela peut se produire si est inchangé sur toutes les itérations d'apprentissage, car la surface est fixe pour un donné ; toutes ses fonctionnalités sont statiques, y compris ses différents minima.X X
Une solution à cela est une formation en mini-lot combinée à un mélange. En mélangeant les lignes et en ne les entraînant que sur un sous-ensemble d'entre elles au cours d'une itération donnée, change à chaque itération, et il est en fait tout à fait possible qu'aucune deux itérations sur la séquence entière d'itérations et d'époques de formation ne soient effectuées sur le même . L'effet est que le solveur peut facilement "rebondir" sur un minimum local. Imaginez que le solveur soit bloqué dans un minimum local à l'itération avec la formation du mini-lot . Ce minimum local correspond à évalué à une valeur particulière de poids; nous l'appelleronsX i X i ℒ ℒ X i ( W i ) X i + 1 ℒ X i + 1 ( W i ) ℒ X i ( W i ) ℒ X i + 1 ℒ X i ℒ X W WX X i Xi L LXi(Wi) . À l'itération suivante, la forme de notre surface de perte change en fait parce que nous utilisons , c'est-à-dire que peut prendre une valeur très différente de et il est fort possible que cela ne corresponde pas à un minimum local! Nous pouvons maintenant calculer une mise à jour de gradient et continuer la formation. Pour être clair: la forme de sera - en général - différente de celle de . Notez que je me réfère ici à la fonction de perte évaluée sur un ensemble d'apprentissage ; c'est une surface complète définie sur toutes les valeurs possibles deXi+1 LXi+1(Wi) LXi(Wi) LXi+1 LXi L X W Plutôt que l'évaluation de cette perte (qui est juste un scalaire) pour une valeur spécifique de . Notez également que si des mini-lots sont utilisés sans mélange, il existe toujours un certain degré de "diversification" des surfaces de perte, mais il y aura un nombre fini (et relativement petit) de surfaces d'erreur uniques vues par le solveur (en particulier, il verra le même ensemble exact de mini-lots - et donc de surfaces de perte - à chaque époque).W
Une chose que j'ai délibérément évitée a été une discussion sur les tailles des mini-lots, car il y a un million d'avis à ce sujet et cela a des implications pratiques importantes (une plus grande parallélisation peut être obtenue avec des lots plus importants). Cependant, je pense que ce qui suit mérite d'être mentionné. Étant donné que est évalué en calculant une valeur pour chaque ligne de (et en additionnant ou en prenant la moyenne, c'est-à-dire un opérateur commutatif) pour un ensemble donné de matrices de poids , la disposition des lignes de n'a aucun effet lors de l'utilisation de descente de gradient de lot (c'est-à-dire lorsque chaque lot est le complet et que les itérations et les époques sont la même chose). X W X XL X W X X
la source
Imaginez que vos dernières étiquettes de minibatch aient plus de bruit. Ensuite, ces lots tireront les poids finaux appris dans la mauvaise direction. Si vous mélangez à chaque fois, les chances que les derniers lots soient disproportionnellement bruyants diminuent.
la source
Lorsque vous entraînez votre réseau à l'aide d'un ensemble de données fixe, ce qui signifie des données que vous ne mélangez jamais pendant la formation. Vous êtes très susceptible d'obtenir des poids très élevés et très bas tels que 40,70, -101,200 ... etc. Cela signifie simplement que votre réseau n'a pas appris les données d'entraînement mais qu'il a appris le bruit de vos données d'entraînement. Cas classique d'un modèle overfit. Avec un tel réseau, vous obtiendrez des prévisions sur les données que vous avez utilisées pour la formation. Si vous utilisez d'autres entrées pour le tester, votre modèle s'effondrera. Maintenant, lorsque vous mélangez les données d'entraînement après chaque époque (itération de l'ensemble global), vous alimentez simplement les neurones à chaque époque et cela régule simplement les poids, ce qui signifie que vous êtes plus susceptible d'obtenir des poids «inférieurs» plus proches de zéro , ce qui signifie que votre réseau peut effectuer de meilleures généralisations.
J'espère que c'était clair.
la source
Voici une explication plus intuitive:
Lorsque vous utilisez la descente de gradient, nous voulons que la perte soit réduite dans une direction de gradient. Le gradient est calculé par les données d'un mini-lot unique pour chaque cycle de mise à jour du poids. Ce que nous voulons, c'est que ce gradient basé sur des mini-lots soit à peu près le gradient de population, car cela devrait produire une convergence plus rapide. (Imaginez que si vous alimentez le réseau 100 données de classe 1 dans un mini-lot, et 100 données de classe 2 dans un autre, le réseau planera. Une meilleure façon est de l'alimenter avec 50 classes 1 + 50 classes 2 dans chaque mini-lot.)
Comment y parvenir puisque nous ne pouvons pas utiliser les données de population dans un mini-lot? L'art de la statistique nous dit: mélangez la population et les premières données batch_size peuvent représenter la population. C'est pourquoi nous devons mélanger la population.
Je dois dire que le brassage n'est pas nécessaire si vous avez une autre méthode pour échantillonner les données de la population et vous assurer que les échantillons peuvent produire un gradient raisonnable.
Voilà ma compréhension. J'espère que cela aide.
la source