Comment lutter contre l'insuffisance cardiaque dans un réseau neuronal profond

50

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?

Izhak
la source

Réponses:

34

Le problème des réseaux profonds est qu’ils ont beaucoup d’hyperparamètres à régler et un très petit espace de solution. Ainsi, trouver les bons est plus une tâche d'art que d'ingénierie. Je commencerais par travailler à partir d’exemples tirés du didacticiel et j’utiliserais ses paramètres pour voir comment les résultats changent - cela donne une bonne intuition (bien que pas une explication formelle) sur les dépendances entre les paramètres et les résultats (finaux et intermédiaires).

J'ai aussi trouvé les articles suivants très utiles:

Ils décrivent tous deux des RBM, mais contiennent quelques informations sur les réseaux profonds en général. Par exemple, l'un des points clés est que les réseaux doivent être débogués couche par couche. Si la couche précédente ne fournit pas une bonne représentation des fonctionnalités, les couches suivantes n'ont pratiquement aucune chance de la réparer.

petit ami
la source
14

Bien que la réponse de ffriend donne d'excellents conseils pour en apprendre davantage sur la difficulté (extrêmement) difficile d'accorder correctement les réseaux de neurones, j'ai pensé qu'il serait peut-être utile de répertorier quelques techniques spécifiques actuellement utilisées dans les architectures de classification les plus performantes du réseau de neurones. Littérature.

Activations linéaires rectifiées

F(z)=(1+e-z)-1F(z)=max(0,z)

L'activation de relu présente deux grands avantages:

  • sa sortie est un vrai zéro (pas seulement une petite valeur proche de zéro) pour etz0
  • sa dérivée est constante, 0 pour ou 1 pour .z > 0z0z>0

Un réseau d’unités relu agit fondamentalement comme un ensemble exponentiel de nombreux réseaux linéaires, car les unités qui reçoivent l’entrée sont essentiellement "désactivées" (leur sortie est égale à 0), tandis que les unités qui reçoivent l’entrée réduisent à une seule ligne linéaire. modèle pour cette entrée. De plus, les dérivées constantes sont importantes car un réseau profond avec des activations de relu a tendance à éviter le problème du gradient en voie de disparition et peut être utilisé sans pré-entraînement par couches.z > 0z0z>0

Voir «Réseaux de neurones à redresseurs clairsemés profonds» de Glorot, Bordes et Bengio ( http://jmlr.csail.mit.edu/proceedings/papers/v15/glorot11a/glorot11a.pdf ) pour un bon article sur ces sujets.

Abandonner

Au cours des dernières années, de nombreux groupes de recherche ont préconisé l’utilisation du "décrochage" dans les réseaux de classificateurs pour éviter les surentraînements. (Voir, par exemple, "Abandon scolaire: un moyen simple d'empêcher les réseaux de neurones de surcharger", par Srivastava, Hinton, Krizhevsky, Sutskever et Salakhutdinov http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf ) Dans En cas d’abandon, au cours de la formation, une proportion constante des unités d’une couche donnée est définie de manière aléatoire sur 0 pour chaque entrée traitée par le réseau. Cela oblige les unités qui ne sont pas définies à 0 à "rattraper" les unités "manquantes". L'abandon semble être un régularisateur extrêmement efficace pour les modèles de réseau neuronal dans les tâches de classification. Voir un article de blog à ce sujet sur http: // fastml.

lmjohns3
la source
7
Mais la question concerne l'insuffisance, pas la sur-adaptation.
Valentas
8

Vous pourriez être intéressé par la lecture de l'article suivant par des chercheurs de Microsoft Research:

Kaiming He, Xiangyu Zhang, Shaoqing Ren et Jian Sun: Apprentissage résiduel en profondeur pour la reconnaissance d'images sur arxiv, 2015.

Ils ont eu des problèmes similaires aux vôtres:

Lorsque des réseaux plus profonds peuvent commencer à converger, un problème de dégradation est apparu: lorsque la profondeur du réseau augmente, la précision est saturée (ce qui pourrait ne pas être surprenant), puis se dégrade rapidement. De manière inattendue, une telle dégradation n'est pas causée par un surajustement, et l'ajout de couches supplémentaires à un modèle suffisamment profond entraîne une erreur d'apprentissage plus élevée , comme indiqué dans [11, 42] et entièrement vérifiée par nos expériences.

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.

Martin Thoma
la source
Merci pour votre réponse, vous prenez le problème de la disparition du gradient, si dans le cas où la validation est supérieure à la formation, que faut-il faire ?? Cela peut se produire pour un petit nombre de données dans l'ensemble de valeurs, mais cela ne dépend parfois pas de l'ensemble de valeurs. Je demande qui y at-il une autre raison pour laquelle le val acc est plus élevé que la formation acc ??
Sudip Das