IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Méthodes prédictives Discussion :

Réseau de neurones et apprentissage


Sujet :

Méthodes prédictives

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    ç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.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    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)

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Pourtant dans ton algo W semble être un tableau à deux dimensions

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    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.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    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 ?

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    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)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    Par défaut
    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 ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    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).

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    Par défaut
    Merci pour l'aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réseau de neurones / sur-apprentissage
    Par demoisellex dans le forum Méthodes prédictives
    Réponses: 5
    Dernier message: 22/06/2016, 02h10
  2. Réseau de neurones et apprentissage non supervisé
    Par fatmaif dans le forum Méthodes prédictives
    Réponses: 0
    Dernier message: 28/03/2014, 10h39
  3. Sauvegarder le réseau de neurones après apprentissage
    Par miss_angel dans le forum OpenCV
    Réponses: 3
    Dernier message: 25/04/2012, 23h11
  4. Réseau de neurones - l'apprentissage
    Par Skull57 dans le forum Méthodes prédictives
    Réponses: 5
    Dernier message: 19/01/2011, 17h42
  5. Apprentissage de réseau de neurones
    Par flahaymen dans le forum Méthodes prédictives
    Réponses: 0
    Dernier message: 06/01/2009, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo