Débogage des réseaux de neurones

10

J'ai construit un réseau neuronal artificiel en python en utilisant la fonction d'optimisation scipy.optimize.minimize (gradient conjugué).

J'ai implémenté la vérification du gradient, j'ai tout vérifié, etc., et je suis presque certain que cela fonctionne correctement.

Je l'ai exécuté plusieurs fois et il atteint `` L'optimisation s'est terminée avec succès '', mais lorsque j'augmente le nombre de couches masquées, le coût de l'hypothèse augmente (tout le reste est le même) une fois qu'elle s'est terminée avec succès.

Intuitivement, il semble que le coût devrait diminuer lorsque le nombre de couches cachées augmente, car il est capable de générer une hypothèse plus complexe qui peut mieux s'adapter aux données, mais cela ne semble pas être le cas.

Je serais intéressé de comprendre ce qui se passe ici, ou si j'ai mal mis en place le réseau neuronal?

user3726050
la source

Réponses:

9

Il y a tellement de façons de se tromper avec un réseau neuronal qu'il sera difficile de déboguer. De plus, pour répondre à votre intuition, chaque couche cachée supplémentaire rend l'apprentissage beaucoup plus difficile. Cela dit, voici quelques possibilités:

  1. Vous avez ajouté une perte de poids. L'ajout de couches supplémentaires ajoute plus de poids, ce qui augmente votre coût de régularisation.
  2. Le problème est suffisamment simple pour qu'un modèle avec une seule couche cachée soit suffisant. L'ajout de couches cachées rend l'apprentissage du réseau plus difficile (problème d'optimisation plus difficile).
  3. La méthode d'optimisation ne fait pas un excellent travail (je préfère climin à scipy.optimize).
  4. Vous utilisez la fonction d'activation sigmoïde / tanh. La fonction sigmoïde provoque le problème du gradient de fuite qui rend l'apprentissage difficile avec plus de couches. Essayez d'utiliser la fonction ReLu.

L'entraînement des réseaux neuronaux demande beaucoup de pratique, de chance et de patience. Bonne chance.

user1133029
la source
1
Bonne réponse. Sachez cependant que 2, 3, 4 peuvent interagir de manière complexe. Le débogage peut être effectué en vérifiant les valeurs d'activation de l'ANN, la magnitude des poids de l'ANN, en gardant un œil sur l'erreur dans l'échantillon et hors échantillon et la convergence de l'optimiseur, etc.
Def_Os
3

L'augmentation du nombre de couches cachées pour un réseau neuronal standard n'améliorera en fait pas les résultats dans la majorité des cas. Changer la taille de la couche cachée le sera.

Ce fait (que le nombre de couches cachées fait très peu) a en fait été noté historiquement et est la motivation derrière le domaine de l'apprentissage profond. L'apprentissage en profondeur est un moyen efficace et intelligent de former des réseaux de neurones multicouches en isolant, par exemple, des sous-ensembles de fonctionnalités lors de la formation de différentes couches.

Bonne vidéo d'introduction sur ce sujet sur YouTube

eric chiang
la source
2
Le deep learning consiste à augmenter le nombre de couches cachées. Sinon, cela s'appellerait le gros apprentissage :)
Emre
@Emre voulait vraiment dire ça. Maudis ma ponctuation!
eric chiang