Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Problème] Réseau de Neurones

Boucle infinie lors de l'apprentissage par le perceptron

    26 juillet 2016 à 15:01:00

    Je me renseigne actuellement sur les réseaux de neurones. Je m'appuie sur un cours PDF disponible ici : http://www.touzet.org/Claude/Web-Fac-Claude/Les_reseaux_de_neurones_artificiels.pdf . Je suis en train de réaliser le TP 3 "Perceptron" (page 38). J'ai donc réalisé l'algorithme suivant (en HTML/Javascript) :

    "use strict";
    var base = [[[-1, -1], -1], [[-1, 1], -1], [[1, -1], -1], [[1, 1], 1]],
        p = {poids: [0, 0], seuil: 0, pas: 1},
        fin = 0,
        i = 0;
    function signe(nbr) {
    	if (nbr > 0) {return 1;} else {return -1;}
    }
    while (fin < base.length) {
        var a = p.seuil, d = base[i][1], e = base[i][0];
        for (var j = 0, c = p.poids.length; j < c; j++) {
            a += e[j] * p.poids[j];
        }
        var x = signe(a);
        if (x == d) {
        	fin += 1;
        } else {
        	fin = 0;
            for (var j = 0, c = p.poids.length; j < c; j++) {
                p.poids[j] = p.poids[j] + p.pas * (d - x) * e[j];
            }
    
        }
        i = (i + 1) % base.length;
        console.log(JSON.stringify(p.poids));
        console.log(i + " TEST");
    }
    console.log("DONE");

    (j'ai essayé de faire mon algorithme le plus facilement modulable à de nouvelles entrées).

    Les données entrées pour l'apprentissage sont dans la variable "base". Chaque entrée est décrite comme suit : [[Valeur 1, Valeur 2], Résultat Attendu].

    (vous pouvez tester l'algorithme avec les valeurs de l'exemple précédent en modifiant les lignes 2 et 3 de l'algorithme ci-haut par celles suivantes : )

    var base = [[[1, -1, 1, -1], 1], [[1, 1, 1, 1], 1], [[1, 1, 1, -1], -1], [[1, -1, -1, 1], -1]],
        p = {poids: [0, 0, 0, 0], seuil: 0, pas: 1},

    Ici, j'obtiens la convergence des poids à [-3, -3, 5, 3].

    Le problème, c'est que pour certains poids initiaux, l'algorithme ne converge pas (par exemple pour la porte ET (premier extrait de code), si en poids on met [2,1] cela ne fonctionne pas ; la porte OU ne converge pas si les poids initiaux sont [0,0] ...).

    N'ayant pas entendu ce genre de problèmes dans le cours, je pense donc qu'il s'agit d'une erreur de mon algorithme ... Mais où ? Si vous avez des pistes de réflexion je veux bien :) Merci !

    -
    Edité par Jadoremario 26 juillet 2016 à 16:33:51

    • Partager sur Facebook
    • Partager sur Twitter
      28 juillet 2016 à 10:44:45

      Le problème n'étant toujours pas résolu, je UP ^^
      • Partager sur Facebook
      • Partager sur Twitter

      [Problème] Réseau de Neurones

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown