Question

J'ai posé cette question à d'autres personnes travaillant dans le domaine de l'IA, mais on ne m'a pas vraiment répondu. "

Pour ceux qui ont déjà programmé un réseau de neurones artificiels, comment vérifier son exactitude?

Je suppose qu’une autre façon de le dire est la suivante: comment déboguer le code derrière un réseau de neurones?

Était-ce utile?

La solution

L’exactitude est un concept amusant dans la plupart des "soft computing". Le mieux que je puisse vous dire est: "un réseau de neurones est correct lorsqu'il répond systématiquement aux paramètres de sa conception". Pour ce faire, vous devez l’entraîner avec les données, puis le vérifier avec d’autres données et créer une boucle de rétroaction au milieu qui vous permet de savoir si le réseau de neurones fonctionne correctement.

Ce n'est bien sûr le cas que pour les réseaux de neurones suffisamment grands pour lesquels une preuve directe de la correction n'est pas possible. Il est possible de prouver qu’un réseau de neurones est correct grâce à l’analyse si vous essayez de construire un réseau de neurones qui apprend le XOR ou quelque chose de similaire, mais pour cette classe de problèmes, un AN est rarement nécessaire.

Autres conseils

En ce qui concerne les réseaux de neurones, vous utilisez généralement un réseau de neurones non formé, et vous l’entraînez à l’aide d’un ensemble de données donné, de sorte qu’il réponde comme vous le souhaitez. Voici le deal. généralement, vous vous entraînez jusqu'à un certain niveau de confiance pour vos intrants. Généralement (et encore, c’est juste en général, votre kilométrage peut varier), vous ne pouvez pas obliger les réseaux de neurones à toujours fournir la bonne réponse; vous obtenez plutôt l'estimation de la bonne réponse, dans une fourchette de confiance. Vous connaissez cette marge de confiance en fonction de la manière dont vous avez formé le réseau.

La question se pose de savoir pourquoi vous voudriez utiliser des réseaux de neurones si vous ne pouvez pas être certain que la conclusion à laquelle ils parviennent est vérifiable; La réponse est que les réseaux de neurones peuvent arriver à des réponses à haute confiance pour certaines classes de problèmes (spécifiquement, les problèmes NP-Complete) en temps linéaire, alors que des solutions vérifiables correctes de problèmes NP-Complete ne peuvent être obtenues qu'en temps polynomial. En termes simples, les réseaux de neurones peuvent "résoudre" problèmes que le calcul normal ne peut pas; mais vous ne pouvez être certain qu’un certain pourcentage d’espoir d'avoir la bonne réponse. Vous pouvez déterminer cette confiance par le programme d’entraînement et vous assurer généralement d’avoir au moins 99,9% de confiance.

Vous ouvrez ici une boîte de Pandore plus grosse que ce à quoi vous pourriez vous attendre.

Les NN sont peut-être mieux considérés comme des approximateurs de fonctions universels, ce qui peut vous aider à réfléchir à ce sujet.

Quoi qu'il en soit, votre question n'a rien de particulier à propos des NN. Le problème concerne tout type d'algorithme d'apprentissage.

La confiance que vous avez dans les résultats qu’elle donne dépendra à la fois de la quantité et de la qualité (souvent plus difficile à déterminer) des données de formation dont vous disposez.

Si cela vous intéresse vraiment, vous voudrez peut-être en savoir un peu plus sur les problèmes de surentraînement et sur les méthodes d'ensemble (ensachage, renforcement, etc.).

Le vrai problème est que vous n'êtes généralement pas intéressé par la "correction". (cf quality) d’une réponse sur une entrée donnée que vous avez déjà vue, mais vous tenez plutôt à prédire la qualité de la réponse sur une entrée que vous n’avez pas encore vue. C'est un problème beaucoup plus difficile. Les approches typiques impliquent alors de "retenir". certaines de vos données de formation (c’est-à-dire les éléments pour lesquels vous connaissez la réponse "correcte") et de tester votre système formé contre cela. Cela devient toutefois subtile lorsque vous commencez à penser que vous ne disposez peut-être pas de suffisamment de données, que vos données sont biaisées, etc. Ainsi, de nombreux chercheurs passent essentiellement tout leur temps à réfléchir à ce type de problèmes!

J'ai travaillé sur des projets contenant des données de test et des données de formation. Vous connaissez donc les résultats attendus pour un ensemble d'entrées que le réseau n'a pas vues.

L’utilisation d’une courbe ROC est un moyen courant d’analyser le résultat d’un classificateur. Vous trouverez une introduction aux statistiques des classificateurs et des courbes ROC à l'adresse Interprétation des tests de diagnostic

Je suis un amateur complet dans ce domaine, mais n'utilisez-vous pas un ensemble de données prédéterminé dont vous savez qu'il est correct?

Je ne crois pas qu'il existe une seule bonne réponse, mais il existe des méthodes probabilistes ou statistiques éprouvées qui peuvent rassurer. Les méthodes statistiques sont généralement appelées Rééchantillonnage .

Une méthode que je peux recommander est le Jackknife .

Mon professeur a toujours dit que sa règle générale était de former le NN avec 80% de vos données et de le valider avec les 20% restants. Et bien sûr, assurez-vous que cet ensemble de données est aussi complet que nécessaire.

Si vous voulez savoir si la rétropropagation du réseau est correcte, il existe un moyen simple.

Puisque vous calculez le dérivé du paysage d'erreur, vous pouvez vérifier si votre implémentation est correcte numériquement. Vous calculerez la dérivée de l'erreur par rapport à un poids spécifique, E / ?w. Vous pouvez montrer que

?E / w = (E (w + e) ??- E (w - e)) / (2 * e) + O (e ^ 2).

(Bishop, Apprentissage automatique et reconnaissance de formes, p. 246)

Essentiellement, vous évaluez l'erreur à gauche du poids, à la droite du poids et vérifiez si le gradient numérique est identique à votre gradient analytique.

(Voici une implémentation: http: // github.com/bayerj/arac/raw/9f5b225d6293974f8adfc5f20dfc6439cc1bed35/src/cpp/utilities/utilities.cpp )

Pour moi, il n’ya probablement qu’une seule valeur qui demande un effort supplémentaire pour vérifier le gradient de la propagation en retour. Je pense que la réponse de Bayer est en fait couramment utilisée et suggérée. Vous devez écrire du code supplémentaire, mais il s’agit de multiplications en matrice de propagation directe faciles à écrire et à vérifier.

Il existe d'autres problèmes qui vous empêcheront d'obtenir la meilleure réponse, par exemple:

  • La fonction de coût de NN n’est pas concave, votre descente de gradient n’est donc pas garantie de trouver l’optimum global.
  • Montage supérieur / inférieur
  • Ne pas choisir le "droit" fonctionnalités / modèle
  • etc

Cependant, je pense qu'ils dépassent le cadre du bogue de programmation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top