2 votes

Réseaux neuronaux - pourquoi chacun a une approche différente avec XOR

Actuellement, j'essaie d'apprendre à travailler avec les réseaux neuronaux en lisant des livres, mais surtout des tutoriels sur Internet.

Je vois souvent que "XOR est le 'Hello World' des réseaux neuronaux".

Mais voici une chose : l'auteur d'un tutoriel dit que pour un réseau neuronal qui calcule la valeur XOR, il faut utiliser une couche cachée avec 2 neurones. Il utilise également la rétropropagation avec des deltas pour ajuster les poids.

enter image description here

J'ai implémenté ceci, mais même après 1 million d'époques, j'ai un problème : le réseau est bloqué avec les données d'entrée 1 et 1. Il devrait y avoir "0" comme réponse, mais la réponse est généralement 0,5 quelque chose. J'ai vérifié mon code, il est correct.

Si j'essaie d'ajouter un seul neurone supplémentaire dans la couche cachée, le réseau réussit à calculer XOR après ~50 000 époques.

enter image description here

En même temps, certaines personnes disent que "XOR n'est pas une tâche triviale et que nous devrions utiliser un réseau avec 2-3 couches ou plus". Pourquoi ?

Allez, si XOR crée tant de problèmes, peut-être ne devrions-nous pas l'utiliser comme le "bonjour" des réseaux neuronaux ? Veuillez expliquer ce qui se passe.

1voto

Tryer Points 110

Les réseaux neuronaux sont donc très intéressants. Il existe une preuve qu'un seul perceptron peut apprendre n'importe quelle fonction linéaire avec suffisamment de temps. Plus impressionnant encore, un réseau neuronal à une seule couche cachée peut apparemment apprendre n'importe quelle fonction, bien que je n'aie pas encore vu de preuve à ce sujet.

XOR est une bonne fonction pour l'enseignement des réseaux neuronaux car, en tant qu'étudiants en CS, les élèves de la classe sont probablement déjà familiarisés avec cette fonction. En outre, elle n'est pas triviale au sens où un seul perceptron peut l'apprendre. Elle n'est pas linéaire. Voir ce graphique que j'ai créé.

enter image description here

Il n'y a pas de ligne qui sépare ces valeurs. Pourtant, elle est suffisamment simple pour que les humains la comprennent et, plus important encore, pour qu'un humain puisse comprendre le réseau neuronal qui la résout. Les réseaux neuronaux sont très "boîte noire", il devient difficile de dire pourquoi ils fonctionnent si vite. Voici un exemple un autre configuration du réseau qui peut résoudre XOR.

enter image description here

Votre exemple d'un réseau plus compliqué qui résout le problème plus rapidement montre la puissance qui résulte de la combinaison de plus de neurones et de plus de couches. Il n'est absolument pas nécessaire d'utiliser 2 ou 3 couches cachées pour résoudre le problème, mais cela permet d'accélérer le processus.

Le fait est qu'il s'agit d'un problème suffisamment simple pour être résolu par un humain et sur un tableau noir en classe, tout en étant légèrement plus difficile qu'une fonction linéaire donnée.

EDIT : Un autre exemple fantastique pour l'enseignement pratique des NN est le jeu de données MNIST de classification de chiffres dessinés à la main. Je trouve qu'il montre très facilement un problème qui est à la fois très simple à comprendre pour les humains, très difficile à écrire un programme de non-apprentissage, et un cas d'utilisation très pratique pour l'apprentissage automatique. Le problème est que la structure du réseau est impossible à dessiner sur un tableau noir et à retracer ce qui se passe d'une manière pratique pour une classe. XOR permet d'y parvenir.

EDIT 2 : Aussi, sans le code, il sera probablement difficile de diagnostiquer pourquoi il ne converge pas. Avez-vous écrit les neurones vous-même ? Qu'en est-il de la fonction d'optimisation, etc ?

EDIT 3 : Si la sortie du dernier nœud de votre fonction est 0,5, essayez d'utiliser une fonction d'écrasement de pas qui transforme toutes les valeurs inférieures à 0,5 en 0, et toutes les valeurs supérieures à 0,5 en 1. Vous n'avez de toute façon qu'une sortie binaire, alors pourquoi s'embêter avec une activation continue sur le dernier nœud ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X