Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Réseau de neurones] Perceptron multicouche

    31 janvier 2017 à 15:25:22

    Bonjour,

    Dans 2 jours j'ai un examen, et je bute sur une question d'un sujet de l'an passé portant sur le perceptron multicouche :

    "Nous souhaitons réaliser un classifieur par réseau de neurones multicouches. Les individus à classer sont codés par 4 attributs réels (ils appartiennent donc à R4) et sont répartis en 3 classes noté C1, C2 et C3. Ces classes ne sont pas linéairement séparables.

    a) Proposer un codage pour ces 3 classes.

    b) Peut-on considérer un réseau sans couches cachées pour modéliser ce classifieur ? Expliquer pourquoi."

    a) Je ne comprend pas ce que le professeur entend par "codage" des trois classes. Est-ce qu'il veut qu'on délimite, pour chaque classe, l'ensemble de l'espace (et donc les valeurs possibles) qui lui correspond ?

    Par exemple dans un espace binaire {0;1}, on a typiquement 2 classes respectivement codées par 0 et 1, non ? Dans tous les cas, pourrais-je avoir un exemple simple répondant à la question du professeur ?

    Par ailleurs vu que les individus sont définies sur R4, cela veut dire que le perceptron aura 4 neurones d'entrées (une observation soumise au perceptron correspondant à un vecteur à 4 dimensions). Par contre comment savoir combien il a de sortie ? Je dirais 3, car il y a trois classes donc il faut 3 frontières pour toutes les séparer, mais je ne suis pas certain.

    b) Je sais que seul un perceptron multicouche peut réaliser une classification de classes qui ne sont pas linéairement séparables, car ce problème se résout par rétro propagation du gradient de l'erreur (on corrige le poids de chaque neurones proportionnellement à son importance dans l'erreur engendrée). Cependant, même si je comprend en gros comme fonctionne la méthode, je ne comprend pas en quoi elle permet de résoudre un problème non linéairement séparable.  C'est à dire, en quoi un perceptron multicouche permet à l'algorithme de converger vers la solution alors qu'un perceptron simple n'y arriverait ? Pourtant le perceptron simple se corrige aussi, non ? Si la valeur de sortie est trop élevée par rapport à celle désirée on peut également changer les poids !

    Merci par avance, toute réponse me serait d'une aide précieuse ! S'il vous-plaît ne me renvoyez pas vers des liens car j'en ai lu beaucoup mais je n'arrive toujours pas à comprendre ces choses !

    Edit :

    J'ai trouvé un ami qui connaissait les perceptrons et qui a pu me répondre ! Voilà mon résumé, si j'ai bien compris :

    a) Un codage simple serait C1= 01, C2 = 00 et C3 = 11. J'avais du mal à comprendre car je raisonnait en terme de "valeurs" alors qu'on veut simplement un codage qui permet de savoir si le neurone est activé ou non, donc un codage binaire suffit. Avec deux classes on peut se contenter de l'espace {0,1} mais avec 3 classes il faut coder sur minimum deux bits !

    b) Pour comprendre la réponse il faut porter son attention sur la notion de "linéaire". Un perceptron simple est aussi appelé perceptron linéaire car les entrées sont liées de façon linéaire à la sortie, simplement par le biais de la fonction d'agrégation. Ainsi, pour l'exemple du prof, si on considère un perceptron linéaire, chaque sortie s'exprime linéairement par rapport aux valeurs/dimensions du vecteur d'entrée et des poids associé à chaque valeur. Exemple avec la sortie y1, en considérant :

    - le vecteur d'entrée [x1,x2,x3,x4] :

    - que chaque entrée est connectée à l'ensemble des sorties. Donc w1 est le poids de x1 à y1, w2 est le poids de x1 à y2, etc jusqu'à w12 qui est le poids de x4 à y3.

    y1 = x1w1 + x2w4 + x3w7 + x4w10

    On voit bien que la relation entrée/sortie est linéaire. Si on peut écrire le reste des équations et donner des valeurs aux poids sans qu'il n'y est d'incohérence dans les équations, alors le problème est linéairement séparable. Si on essaie de poser tout ça en considérant un cas plus simple avec 2 classes et des observations sur l'espace {0,1} pour coder un XOR (non ou), on se rendra compte que le problème n'est pas linéairement séparable car on aura une incohérence dans les équations (cf. http://computing.dcu.ie/~humphrys/Notes/Neural/single.neural.html)

    Dans ce cas il faut utiliser des couches cachées car elles permettent d'introduire la notion de non linéarité. En effet, les entrées ne sont plus directement liées à la sortie via la fonction d'agrégation, mais passent par d'autres neurones qui ont des sorties conditionnées par une fonction d'activation ! En conséquence la relation entrée/sortie n'est plus linéaire car le neurone de sortie dépend non seulement des entrées mais aussi des fonctions d'activations des neurones cachées.

    Voilà, j'espère que je dis pas trop de bêtise et que ça pourra aider quelqu'un d'autre !

    -
    Edité par Flyout 31 janvier 2017 à 17:51:03

    • Partager sur Facebook
    • Partager sur Twitter

    [Réseau de neurones] Perceptron multicouche

    × 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