Apprentissage sur un perceptron

Apprentissage sur un perceptron - Algo - Programmation

Marsh Posté le 20-01-2013 à 12:54:02    

Bonjour :hello:
 
Je commence un peu à exploiter les perceptrons, histoire de voir ce qu'on peut faire avec, mais je bloque sur l'apprentissage (j'utilise l'algo de Widrow-Hoff)
 
Donc si j'ai bien compris, l'algo marche avec un set d'exemple, on lui présente des valeurs en entrée, ce qu'on veut en sortir et l'algo fait progressivement converger le neurone vers cette sortie.
J'ai essayé avec un seul neurone de lui apprendre n'importe quel fonction logique (sauf XOR), mais les résultats sont pas très concluant :/
 
Voilà comme je procède :  
 
Je lui fais passer ma liste d'exemple, je force les deux entrée de mon neurone aux valeurs de l'exemple, je calcule la sortie et je modifie les poids des entrée de tel manière :
 
poid(i) += alpha * (Résultat - RésulatExemple) * Entrée(i)
 
Le calcul de la sortie se fait comme ça : (w0 est traité indépendamment, donc il n'est pas modifié par l'algo)

Code :
  1. In=0;
  2. pour i=0,NbEntrée
  3.      In+= Entrée(i)*Poid(i);
  4. fin
  5. In-=Threshold; // w0
  6. Sortie = 1.0 / (1.0 + e^-(In)); // Formule sigmoïde


 
Ce qui m'étonne, c'est que dans les algos que j'ai vu, le threshold n'est jamais modifié, ou alors il y a un truc que j'ai très mal pigé :/
 
L'exemple (pour un ou) :  
A     B     S
-1   -1    -1
-1    1      1
1    -1      1
1     1      1
 
Merci pour vos lumière :hello:


Message édité par Terminapor le 20-01-2013 à 12:54:47

---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 20-01-2013 à 12:54:02   

Reply

Marsh Posté le 20-01-2013 à 13:51:39    

J'y connais rien, mais si tu veux essayer la matrice suivante: peut-être ?
1 0 1
0 1 1
0 0 0
1 1 1

Reply

Marsh Posté le 20-01-2013 à 14:07:29    

L'ordre n'importe pas, et ça ne marche pas non plus avec des 0 (de toute manière, ça aurait du marcher avec des -1/1 si ça avait marché avec des 0/1)

 

Le soucis, c'est que je vois pas comment on recalcule le seuil du neurone, j'ai essayé ça :

 

Seuil -= Alpha*(SortieDesiree - Sortie);

 

Mais ça donne rien de concluant non plus :(

 

edit : Le cours que j'ai suivi : http://alp.developpez.com/tutoriel [...] -neurones/
Le tableau de valeurs sur lequel je me base : http://pages.cs.wisc.edu/~dyer/cs540/notes/nn.html (Example: Learning OR in a Perceptron)


Message édité par Terminapor le 20-01-2013 à 14:39:23

---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 01-02-2013 à 20:04:04    

Je connais l'algorithme de décente du gradient, et il n'y a que très peu de différences entre les deux. Normalement le biais doit être calculé dans l'algorithme, vu que c'est lui qui détermine l'activation ou non
du neurone. As tu pensé à soustraire le biais à la somme ? Et quel fonction d'activation utilise-tu ?
Sinon si tu es intéressé par les réseaux de neurones, je travail actuellement sur un logiciel et une librairie en C++ ( http://temporaire-zebrain.0fees.net/ ).
Et je recherche d'autre personnes intéressées. Tu pourras me contacter si tu le souhaite.
 
A+

Reply

Marsh Posté le 02-02-2013 à 13:49:21    

C'est bon, j'ai pu régler le soucis du neurone (je prenais pas en compte w0 dans mes calculs), et j'ai fait le réseau (avec la back-propagation d'erreur) :D
Maintenant, j'essaie de faire un apprentissage non-supervisé pour le neurone, en gros, les sorties du réseau passent par une fonction qui renvoie vrai ou faux si le résultat est satisfaisant, mais j'arrive pas à implémenter la correction dans ce cas.
 
En fait, je cherche à appliquer le réseau de neurone pour une IA d'un jeu 2D, le réseau permettrai de faire les reach-specifications (comment aller d'une plateforme à une autre en graduant bien le saut et les déplacements, en prenant en compte les objets dangereux,etc) et aussi les stratégies de combats.
Donc chaque fois que le réseau se retrouverai face à une situation (pendant l'entraînement), il essaierai quelque chose, et si ça ne marche pas, corrigerai en essayant autre chose jusqu'à ce qu'il y arrive (d'où l'utilité de la fonction qui valide les sorties sans savoir lesquels précisément sont bonnes ou fausses)


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 02-02-2013 à 14:37:43    

Regarde du coté de l'adaline, et des carte auto-organisatrices. Cela permettra à ton IA de retenir les objets en les classant grâce aux cartes, et de s'adapter à des situation grâce à l'adaline. C'est un peut plus dur que les perceptrons. Mais sa offre des résultats bien meilleurs dans ces cas là.

Reply

Marsh Posté le 02-02-2013 à 15:50:37    

Merci à toi, je vais regarder tout ça :jap:


---------------
Perhaps you don't deserve to breathe
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed