C'est un fait bien connu qu'un réseau à une couche ne peut pas prédire la fonction xor, car elle n'est pas séparable linéairement. J'ai tenté de créer un réseau à 2 couches, en utilisant la fonction sigmoïde logistique et backprop, pour prédire xor. Mon réseau a 2 neurones (et un biais) sur la couche d'entrée, 2 neurones et 1 biais dans la couche cachée et 1 neurone de sortie. À ma grande surprise, cela ne convergera pas. si j'ajoute une nouvelle couche, j'ai donc un réseau à 3 couches avec entrée (2 + 1), caché1 (2 + 1), caché2 (2 + 1) et sortie, cela fonctionne. De plus, si je garde un réseau à 2 couches, mais que j'augmente la taille de la couche cachée à 4 neurones + 1 biais, il converge également. Y a-t-il une raison pour laquelle un réseau à 2 couches avec 3 neurones cachés ou moins ne pourra pas modéliser la fonction xor?
la source
Réponses:
Oui, il y a une raison. Cela a à voir avec la façon dont vous initialisez vos poids.
Il existe 16 minimums locaux qui ont la plus forte probabilité de converger entre 0,5 et 1.
Voici un article qui analyse le problème xor.
la source
Un réseau avec une couche cachée contenant deux neurones devrait être suffisant pour séparer le problème XOR. Le premier neurone agit comme une porte OU et le second comme une porte NON ET. Ajoutez les deux neurones et s'ils franchissent le seuil, c'est positif. Vous pouvez simplement utiliser des neurones de décision linéaires pour cela en ajustant les biais pour les seuils. Les entrées de la porte NOT AND doivent être négatives pour les entrées 0/1. Cette image devrait le rendre plus clair, les valeurs sur les connexions sont les poids, les valeurs dans les neurones sont les biais, les fonctions de décision agissent comme des décisions 0/1 (ou juste la fonction de signe fonctionne dans ce cas aussi).
Photo grâce au "blog Abhranil"
la source
Si vous utilisez une descente de gradient de base (sans autre optimisation, telle que l'élan) et un réseau minimal 2 entrées, 2 neurones cachés, 1 neurone de sortie, il est certainement possible de l'entraîner à apprendre XOR, mais cela peut être assez délicat et peu fiable.
Vous devrez peut-être ajuster le taux d'apprentissage. L'erreur la plus courante est de le régler trop haut, afin que le réseau oscille ou diverge au lieu d'apprendre.
Il peut falloir un nombre étonnamment élevé d'époques pour former le réseau minimal à l'aide d'une descente de gradient par lots ou en ligne. Peut-être plusieurs milliers d'époques seront nécessaires.
Avec un si petit nombre de poids (seulement 6), une initialisation aléatoire peut parfois créer une combinaison qui se coince facilement. Vous devrez donc peut-être essayer, vérifier les résultats, puis redémarrer. Je vous suggère d'utiliser un générateur de nombres aléatoires prédéfini pour l'initialisation et d'ajuster la valeur de départ si les valeurs d'erreur se bloquent et ne s'améliorent pas.
la source