3

J'essaye de régler l'hyper paramètre i.e taille de lot dans CNN.J'ai un ordinateur de Corei7, RAM 12GB et je forme un réseau CNN avec l'ensemble de données CIFAR-10 qui peut être trouvé dans ce blog.

Maintenant Dans un premier temps ce que j'ai lu et appris sur la taille des lots dans l'apprentissage de la machine:Une taille de lot plus importante rendra-t-elle le temps de calcul inférieur dans l'apprentissage automatique?

nous allons d'abord supposons que nous faisons l'apprentissage en ligne, à savoir que nous sommes en utilisant une taille de minibatch de 1. L'inquiétude évidente à propos de l'apprentissage en ligne est que l'utilisation de minibatches qui ne contiennent qu'un seul exemple de formation entraînera des erreurs significatives dans notre estimation du gradient. En fait, cependant, les erreurs se révèlent ne pas être un tel problème. La raison est que les estimations de gradient individuelles n'ont pas besoin d'être super-précises. Tout ce dont nous avons besoin, c'est d'une estimation suffisamment précise pour que notre fonction de coût ait tendance à continuer à diminuer. C'est comme si vous essayez pour atteindre le pôle magnétique nord, mais que vous avez une boussole bancale qui fait 0 à 10 degrés à chaque fois que vous le regardez. Pourvu que vous arrêtez à vérifier la boussole fréquemment, et la boussole obtient la bonne direction en moyenne, vous finirez au pôle magnétique Nord juste bien.

Sur la base de cet argument, il semble que nous devrions utiliser l'apprentissage en ligne . En fait, la situation s'avère plus compliquée que que. Comme nous le savons, nous pouvons utiliser des techniques matricielles pour calculer le gradient mise à jour pour tous les exemples dans une minibatch simultanément, plutôt que en boucle sur eux. Selon les détails de notre bibliothèque d'algèbre linéaire cela peut rendre un peu plus rapide de calculer l'estimation de gradient pour une minibatch de (par exemple) taille 100, plutôt que de calculer l'estimation de gradient minibatch en bouclant sur le 100 exemples d'entraînement séparément. Il pourrait prendre (disons) seulement 50 fois longtemps, plutôt que 100 fois plus longtemps. Maintenant, au début, il semble que si cela ne nous aide pas beaucoup.

Avec notre minibatch de taille 100 la règle d'apprentissage pour les poids ressemble: enter image description here

où la somme est sur des exemples de formation dans le minibatch. C'est par rapport à enter image description here
pour l'apprentissage en ligne. Même si cela ne prend que 50 fois plus de temps pour faire la mise à jour minibatch, il semble toujours être préférable de faire de l'apprentissage en ligne, parce que nous serions mise à jour beaucoup plus fréquemment. Supposons, cependant, que dans le minibatch cas, nous augmentons le taux d'apprentissage par un facteur 100, de sorte que la règle de mise à jour devient
enter image description here
C'est un peu comme faire des instances distinctes de l'apprentissage en ligne avec un taux d'apprentissage de η. Mais cela prend seulement 50 fois plus de temps que de faire un seul exemple d'apprentissage en ligne. Cependant, il semble possible que l'utilisation de la plus grande minibatch accélérerait les choses.



Maintenant, je l'ai essayé avec MNIST digit dataset et dirigé un programme d'échantillonnage et définissez la taille du lot 1 à first.I noté le temps de formation nécessaire à la pleine dataset.Then i augmenté la taille du lot et J'ai remarqué que c'est devenu plus rapide. Mais en cas de formation avec ce code et github link changer la taille du lot ne diminue pas le temps d'entraînement.Il est resté le même si j'utilise 30 ou 128 ou 64.Ils disent qu'ils ont obtenu 92% précision.Après deux ou trois époque où ils ont eu plus de 40% précision.Mais quand j'ai couru le code dans mon ordinateur sans rien changer autre que la taille du lot j'ai eu pire résultat après 10 époque comme seulement 28% et la précision du test coincé là dans l'époque suivante. ils ont utilisé la taille de lot de 128 j'ai besoin d'utiliser that.Then j'ai utilisé la même chose, mais il est devenu plus mauvais seulement donner 11% après 10 époque et coincé là-bas. Pourquoi est-ce ??

Répondre

5

Les réseaux neuraux apprennent par la descente de gradient une fonction d'erreur dans l'espace de poids qui est paramétrée par les exemples d'apprentissage. Cela signifie que les variables sont les poids du réseau neuronal. La fonction est "générique" et devient spécifique lorsque vous utilisez des exemples d'apprentissage. Le "bon" moyen serait d'utiliser tous les exemples d'entraînement pour faire la fonction spécifique. Ceci est appelé « descente de gradient de lot » et est généralement pas fait pour deux raisons:

  1. Il ne rentrera pas dans votre RAM (généralement GPU, comme pour les réseaux de neurones, vous obtenez un énorme coup de pouce lorsque vous utilisez la CPU).
  2. Il n'est en fait pas nécessaire d'utiliser tous les exemples.

Dans les problèmes d'apprentissage automatique, vous avez généralement plusieurs milliers d'exemples d'apprentissage. Mais la surface d'erreur peut sembler similaire lorsque vous ne regardez que quelques exemples (par exemple 64, 128 ou 256). Pensez-y comme à une photo: Pour avoir une idée de la photo, vous n'avez généralement pas besoin d'une résolution de 2500x1800px. Une image 256x256px vous donnera une bonne idée de la photo. Cependant, vous manquez des détails. Imaginez donc que la descente de gradient soit une marche sur la surface de l'erreur: Vous commencez sur un point et vous voulez trouver le point le plus bas. Pour ce faire, vous descendez. Ensuite, vous vérifiez à nouveau votre hauteur, vérifiez dans quelle direction il descend et faites un "pas" (dont la taille est déterminée par le taux d'apprentissage et un couple d'autres facteurs) dans cette direction. Lorsque vous avez un entraînement par mini-lot au lieu d'un entraînement par lots, vous descendez sur une surface d'erreur différente. Dans la surface d'erreur basse résolution. Il pourrait effectivement remonter dans la surface d'erreur "réelle". Mais globalement, vous ira dans la bonne direction. Et vous pouvez faire des étapes simples beaucoup plus vite!

Maintenant, que se passe-t-il lorsque vous diminuez la résolution (la taille du lot est plus petite)? À droite, votre image de la surface de l'erreur devient moins précise. Combien cela vous affecte dépend de facteurs tels que:

  • Votre matériel/mise en œuvre
  • Dataset: Quelle est la complexité de la surface d'erreur et à quel point il est approximed par seulement une petite partie?
  • Apprentissage: Comment apprenez-vous exactement (élan? Newbob? Rprop?)
+0

La taille du lot est-elle liée à la précision? –

+2

@setubasak Lorsque vous avez l'algorithme d'entraînement adéquat et que vous vous entraînez assez longtemps, la taille du lot ne devrait pas avoir d'influence significative sur la précision. –

+0

la plus grande taille du lot fera-t-elle diminuer le temps de formation si mon matériel le supporte? –

1

Je voudrais ajouter à ce qui a été déjà dit ici que la taille du plus grand lot n'est pas toujours bon pour la généralisation. J'ai vu ces cas moi-même, lorsqu'une augmentation de la taille des lots a nui à la précision de la validation, en particulier pour CNN travaillant avec l'ensemble de données CIFAR-10.

De "On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima":

La descente de gradient stochastique méthode (SGD) et ses variantes sont algorithmes de choix pour de nombreuses tâches d'apprentissage en profondeur. Ces méthodes fonctionnent dans un régime de petit lot dans lequel une fraction des données d'apprentissage , disons 32-512 points de données, est échantillonnée pour calculer une approximation au gradient. Il a été observé dans la pratique que lors de l'utilisation d'un plus grand lot il y a une dégradation de la qualité du modèle, comme mesurée par sa capacité à généraliser. Nous étudions la cause de cette baisse de généralisation dans le régime des grands lots et présentons des preuves numériques qui soutiennent que les méthodes de grands lots ont tendance à converger vers des minimiseurs aigus des fonctions d'entraînement et de test - et comme cela est bien connu, des minima aigus conduisent à une généralisation plus pauvre. En revanche, les méthodes de petits lots convergent uniformément vers des minimiseurs plats, et nos expériences supportent une vue généralement partagée que cela est dû au bruit inhérent dans l'estimation de gradient. Nous discuter de plusieurs stratégies pour tenter d'aider les méthodes de gros lots éliminer cet écart de généralisation.

Bottom-line: vous devez ajuster la taille du lot, tout comme any other hyperparameter, pour trouver une valeur optimale.