Les réseaux de neurones mettent-ils généralement un certain temps à se mettre en marche pendant l'entraînement?

10

J'essaie de former un réseau neuronal profond pour la classification, en utilisant la propagation arrière. Plus précisément, j'utilise un réseau de neurones convolutifs pour la classification d'images, en utilisant la bibliothèque Tensor Flow. Pendant l'entraînement, je ressens un comportement étrange et je me demande simplement si cela est typique ou si je fais quelque chose de mal.

Donc, mon réseau de neurones convolutionnels a 8 couches (5 convolutionnelles, 3 entièrement connectées). Tous les poids et biais sont initialisés en petits nombres aléatoires. J'ai ensuite défini une taille de pas et je continue la formation avec des mini-lots, en utilisant Adam Optimizer de Tensor Flow.

Le comportement étrange dont je parle est que pendant environ les 10 premières boucles de mes données d'entraînement, la perte d'entraînement ne diminue pas, en général. Les poids sont mis à jour, mais la perte d'entraînement reste à peu près à la même valeur, augmentant et diminuant parfois entre les mini-lots. Cela reste ainsi pendant un certain temps, et j'ai toujours l'impression que la perte ne diminuera jamais.

Puis, tout d'un coup, la perte d'entraînement diminue considérablement. Par exemple, dans environ 10 boucles à travers les données d'entraînement, la précision de l'entraînement passe d'environ 20% à environ 80%. À partir de là, tout finit par bien converger. La même chose se produit chaque fois que je lance le pipeline de formation à partir de zéro, et ci-dessous est un graphique illustrant un exemple de course.

entrez la description de l'image ici

Donc, ce que je me demande, c'est si c'est un comportement normal avec l'entraînement des réseaux de neurones profonds, par lequel il faut un certain temps pour "entrer en action". Ou est-il probable que je fasse quelque chose de mal qui cause ce retard?

Merci beaucoup!

Karnivaurus
la source
Je suppose que je suis un peu en retard à la fête. Mais peut-être que je peux encore ajouter de la valeur à la conversation. Soo ... pour moi, cela ressemble à une fonction d'activation sigmoïde. Puisque la dérivée du sigmoïde est petite pour des valeurs très petites ou très grandes, l'entraînement peut être lent pour les "neurones saturés". Malheureusement, je ne peux pas dire exactement à quoi ressemble votre CNN d'après la description que vous avez donnée.
Nima Mousavi

Réponses:

7

Le fait que l'algorithme ait mis un certain temps à "démarrer" n'est pas particulièrement surprenant.

En général, la fonction cible à optimiser derrière les réseaux de neurones est hautement multimodale. En tant que tel, à moins que vous n'ayez une sorte d'ensemble intelligent de valeurs initiales pour votre problème, il n'y a aucune raison de croire que vous commencerez une descente abrupte. En tant que tel, votre algorithme d'optimisation sera errant presque aléatoirement jusqu'à ce qu'il trouve une vallée assez raide pour commencer à descendre. Une fois que cela a été trouvé, vous devez vous attendre à ce que la plupart des algorithmes basés sur un gradient commencent immédiatement à se restreindre dans le mode particulier dont il est le plus proche.

Cliff AB
la source