Quand j'ai commencé avec les réseaux de neurones artificiels (NN), je pensais que je devais me battre contre la suralimentation comme principal problème. Mais dans la pratique, je ne parviens même pas à faire passer mon NN à la barre des 20% de taux d’erreur. Je ne peux même pas battre mon score sur forêt aléatoire!
Je cherche un conseil très général ou pas aussi général sur ce qu'il faut faire pour qu'un NN commence à capturer les tendances des données.
Pour implémenter NN, j'utilise Theano Stacked Auto Encoder avec le code du didacticiel qui fonctionne très bien (taux d'erreur inférieur à 5%) pour la classification du jeu de données MNIST. Il s’agit d’un perceptron multicouche, avec une couche softmax sur le dessus, chaque masque caché étant ensuite pré-formé en autoencoder (décrit en détail au chapitre 8 du didacticiel ). Il y a ~ 50 fonctions d'entrée et ~ 10 classes de sortie. Le NN a des neurones sigmoïdes et toutes les données sont normalisées à [0,1]. J'ai essayé beaucoup de configurations différentes: nombre de couches cachées et de neurones (100-> 100-> 100, 60-> 60-> 60, 60-> 30-> 15, etc.), apprentissage et pré-entraînement différents tarifs, etc.
Et la meilleure chose que je puisse obtenir est un taux d'erreur de 20% sur l'ensemble de validation et un taux d'erreur de 40% sur l'ensemble de test.
D'autre part, lorsque j'essaie d'utiliser Random Forest (de scikit-learn), j'obtiens facilement un taux d'erreur de 12% sur l'ensemble de validation et de 25% (!) Sur l'ensemble de test.
Comment se peut-il que mon NN profond avec la pré-formation se comporte si mal? Que devrais-je essayer?
Vous pourriez être intéressé par la lecture de l'article suivant par des chercheurs de Microsoft Research:
Ils ont eu des problèmes similaires aux vôtres:
Pour résoudre le problème, ils ont utilisé une architecture de saut. Avec cela, ils ont formé des réseaux très profonds (1202 couches) et ont obtenu le meilleur résultat dans le challenge ILSVRC 2015.
la source