Précédent   Forum des professionnels en informatique > Autres langages > Algorithmes > Intelligence artificielle
Intelligence artificielle Forum d'entraide sur l'intelligence artificielle. Avant de poster : Cours d'intelligence artificielle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2012, 21h17   #1
Invité régulier
 
Inscription : février 2011
Messages : 61
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 61
Points : 8
Points : 8
Par défaut Réseau de neurones et apprentissage

Bonjour,

Je travaille actuellement sur l'apprentissage de réseau de neurone simple couche. J'essaye de faire un réseau pour classifier des points donc un point vaut 0 ou 1, je crée préalablement une base de données. Voici mon algo:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

W = rand(1,3) % Création des points

for k=1: size(base,1)  
    
   s = (W(k,:)*[1,base(k,1:2)]'); %calcul de la sortie du neurone
   alpha = 0.2;

   for n=1:3
       if(n==1)
         W(k+1,n) = W(k,n) + alpha*(base(k,3)-s); 
       else
         W(k+1,n) = W(k,n) + alpha*(base(k,3)-s)*base(k,n-1);  
       end 
   end

end
En fait je n'arrive pas à avoir des résultats satisfaisant meme en faisant varier la valeur de alpha.

Je voudrais savoir si l'algo était bon?

D'avance merci.
black_hole est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 21h39   #2
Membre éclairé
 
Doctorant en informatique
Inscription : juin 2009
Messages : 244
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 244
Points : 347
Points : 347
ça aurait été sympa de nous définir tes variables d'autant que tu n'utilises pas des notations conventionnelles...

J'ai l'impression que tu inverses les rôles de tes points de donnée et de ton vecteur poids:

Grosso modo tu veux trouver le vecteur poids qui optimise le problème de moindres carrés:

E = sum_i (yi - w'xi)^2

ou tu veux prédire les yi à partir des xi.
le gradient donne: dE/dw = - 2 * sum_i (yi - w'xi)xi

Pour résoudre cela tu adoptes une approche par gradient stochastique (tu approxime le gradient à chaque itération à partir d'un seul point):

w = w + 2*alpha*(yi - w'xi)xi

Le biais est pris en comptes en rajoutant 1 à tous les xi.

Dans l'algorithme que tu nous donnes on dirait que tu inverse le rôle des xi et et du vecteur poids.
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 21h58   #3
Invité régulier
 
Inscription : février 2011
Messages : 61
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 61
Points : 8
Points : 8
Par défaut Re

Ah oui désolé. J'ai réalisé le programme sous Matlab.

Donc
-W est un tableau de 3 valeurs qui correspond aux poids.
-s est la sortie du neurone
-alpha constante d'apprentissage
-base base de donnée contenant coordonné x,y et la classe du point c. Donc le n-ieme exemple de la base = base(n,x,y,c)
black_hole est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 22h02   #4
Membre éclairé
 
Doctorant en informatique
Inscription : juin 2009
Messages : 244
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 244
Points : 347
Points : 347
Pourtant dans ton algo W semble être un tableau à deux dimensions
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 22h09   #5
Invité régulier
 
Inscription : février 2011
Messages : 61
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 61
Points : 8
Points : 8
Par défaut Re

Je pense pas confondre les poids et les entrées. J'ai en entrée du réseau les coordonnées (x,y) du point et j'entre ces coordonnées dans le réseau et je regarde la sortie du réseau s.

base(k,n-1) est en faire l'entrée 1 ou 2 du réseau donc x ou y.
black_hole est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 22h11   #6
Invité régulier
 
Inscription : février 2011
Messages : 61
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 61
Points : 8
Points : 8
Euh ... oui desolé j'ai donné une mauvaise version c'etait pour mémoriser les différentes valeurs des poids et tracer à la fin leurs valeurs


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
W = rand(1,3) % Création des poids

for k=1: size(base,1)  
    
   s = (W(1,:)*[1,base(k,1:2)]')>=0; %calcul de la sortie du neurone avec une fonction d'activation type Heaviside
   alpha = 0.2;

   for n=1:3
       if(n==1)
         W(1,n) = W(1,n) + alpha*(base(k,3)-s); 
       else
         W(1,n) = W(1,n) + alpha*(base(k,3)-s)*base(k,n-1);  
       end 
   end
black_hole est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 22h26   #7
Invité régulier
 
Inscription : février 2011
Messages : 61
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 61
Points : 8
Points : 8
Par défaut Re

Je crois que je sais pourquoi ca ne marchait pas tres bien...
Je générais une base de données de points avec leur classification associée. Mais je générais d'abord tout les classe 1 et tous les classes 0.

Ca peut compter ca ?
black_hole est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 22h51   #8
Membre éclairé
 
Doctorant en informatique
Inscription : juin 2009
Messages : 244
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 244
Points : 347
Points : 347
Oui il faut mieux prendre tes points de manière aléatoire, mais la formule pour ta décente de gradient n'est plus bonne.

A priori si tu ajoutes une fonction d'activation comme ça tu n'optimises plus la bonne fonction.

D'abord si tu prends une vraie fonction échelon tu risques d'avoir des soucis, sa dérivée est nulle partout sauf en 0 ou elle n'est pas définie, on prends plutôt une fonction de type sigmoîde ; h(x) = 1/(1+exp(-x))

Dans ce cas tu minimises:

\sum_i (y_i - h(w'xi))^2

et la dérivée est - 2 (yi - h(w'xi))h'(w'xi)xi

où h'(x) est la dérivée de h(x)
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 22h57   #9
Invité régulier
 
Inscription : février 2011
Messages : 61
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 61
Points : 8
Points : 8
Mais au niveau de la classification faut bien mettre un seuil à un moment ou à un autre sinon on aura jamais 0 ou 1 en sortie?
On aura des valeurs du type 0.1.. ou 0.8... ?

Là, je viens de tester avec une réorganisation aléatoire de la BD et ca a l'air de bien marcher. Je vais tester avec la sigmoide.

Autre question, dans le cas ou on a une classification supérieur à 2. Comment ca se passe dans l'apprentissage ?
black_hole est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 23h52   #10
Membre éclairé
 
Doctorant en informatique
Inscription : juin 2009
Messages : 244
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 244
Points : 347
Points : 347
le seuil est à mettre seulement à la fin, pas pendant l'apprentissage. en plus si tes labels de classe sont 0 et 1 il faut seuiller a 0.5

Avec plusieurs classes et un réseau à 1 couche, tu as le choix entre un approche 1 contre 1 (un réseau pour chaque paire de classe) ou 1 contre tous (1 réseau par classe).
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 19h48   #11
Invité régulier
 
Inscription : février 2011
Messages : 61
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 61
Points : 8
Points : 8
Merci pour l'aide.
black_hole est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h55.


 
 
 
 
Partenaires

Hébergement Web