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 :

Programmation d'un réseau de neurones


Sujet :

Méthodes prédictives

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 63
    Points
    63
    Par défaut Programmation d'un réseau de neurones
    Bonjour,

    je souhaiterai m'attaquer aux réseaux de neurones afin de distraire mon cerveau, et je me pose plusieurs questions.

    J'ai lu pas mal de documentation sur le sujet, plus ou moins compréhensible à mes yeux de non-matheux, et je pense avoir compris la *base*, à savoir ce qu'est un neurone, ses entrées, ses poids, sa fonction de combinaison (généralement une somme des produits poids*entrée), et sa fonction d'activation.

    Sauf que je voulais développer un ptit truc sans prétention, et je bloque déjà sur le choix de l'architecture.

    L'idée est a priori simple, je souhaiterai faire un réseau de neurones a qui on fourni deux chiffres en entrée, et il affiche vrai ou faux. Pour se faire, il doit "découvrir" d'après le jeu d'entrainement que si nb1 > nb2 alors affiche vrai, sinon affiche faux.

    Est-ce modélisable ? Je ne vois pas trop comment rendre ca possible, même avec la méthode de rétropropagation de radiant que j'ai pu lire un peu partout pour corriger les poids des neurones qui se gourent.

    D'où ma question, comment aborder mon problème a priori simple avec un réseau de neurones ? Combien de neurones, combien de couches, bref, n'importe quoi qui pourrait m'aider


    Merci !


    PS: je viens de découvrir également les algorithmes génétiques, qui sont très interessants, serait-ce pertinent de les utiliser pour déterminer des poids adéquats plutôt que la méthode de rétropropagation ? Ou est-ce... overkill ?

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Pour commencer, as-tu lu http://alp.developpez.com/tutoriels/...x-de-neurones/ ?

    Ensuite, je te conseille de voir (après lecture de l'article) ce qui concerne la séparabilité des points (de la forme (nb1,nb2)) du plan (dimension 2) pour lesquels la valeur est vraie et pour lesquels la valeur est faux. Durant cette recherche devrait apparaître une droite très connue... la droite constituée des points (x,x)
    Je te laisse deviner la relation entre cette droite et le problème de séparation.

    Ensuite, programmer un réseau de neurones sera enfantin une fois que tu auras bien compris le problème de séparabilité.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par Alp Voir le message
    Pour commencer, as-tu lu http://alp.developpez.com/tutoriels/...x-de-neurones/ ?

    Ensuite, je te conseille de voir (après lecture de l'article) ce qui concerne la séparabilité des points (de la forme (nb1,nb2)) du plan (dimension 2) pour lesquels la valeur est vraie et pour lesquels la valeur est faux. Durant cette recherche devrait apparaître une droite très connue... la droite constituée des points (x,x)
    Je te laisse deviner la relation entre cette droite et le problème de séparation.

    Ensuite, programmer un réseau de neurones sera enfantin une fois que tu auras bien compris le problème de séparabilité.

    Hello,

    merci pour ta réponse. Je viens de lire ta page et même si je n'ai pas tout compris (je suis un peu faché avec les maths, donc les équations que tu écris me font peur ), j'ai bien noté le passage sur la séparation !

    Effectivement, j'ai fais comme dans ton exemple, j'ai tracé avec mes mimines les points de quelques exemples, et j'ai effectivement obtenu une droite de séparation d'équation f(x) = y (c'est comme ça qu'on dit hein ? je regrette d'avoir si peu suivi mes cours de maths :p)

    Mais du coup, je vois pas ce que je peux apprendre de plus à mon réseau de neurone. J'ai un peu l'impression de lui avoir mâché le boulot, peut-être parce que le critère de "tri" des données en entrée était enfantin ?

    D'ailleurs, cette équation que j'ai trouvé, je dois la placer comme fonction d'activation ? Ou bien je dois mettre celle d'heaviside ou sigmoide en sortie ? (et auquel cas, comment tirer parti du fait que désormais je connaisse l'équation de la droite de séparation ?)

    Comme tu le vois, j'ai encore quelques zones d'ombres donc, mais je suis sûr que tu sauras m'éclairer comme tu as l'air de savoir de quoi tu parles, contrairement à moi


    Merci !

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    (c'est plutôt f(x) = x la fonction... et la droite c'est y = x, enfin bon )

    Il va falloir que tu lises en te concentrant sur les maths... Parce que pour que ton réseau de neurones (ici un neurone suffira !) sépare les points correctement, il faut qu'il donne un certain poids à x, et un certain poids à y, et il faut déterminer le seuil (le poids w0). Dans un cas simple comme le tien (comparé à un cas de reconnaissance d'écriture ou de pilotage automatique ), je te conseille de réfléchir et de déterminer ça à la main pour comprendre ce que tu donneras à faire à tes réseaux de neurones plus tard, dans des cas plus complexes, avec des algos qui serviront à déterminer les bons poids

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 63
    Points
    63
    Par défaut
    Je viens de tester avec des valeurs pifométriques, et j'ai retenu W1=1 et W2=-1 pour mes poids de neurone, W0=1, et une fonction sigmoide en sortie

    En sortie de neurone j'ai bien une valeur inférieure à 0.5 si x2>=x1, et une valeur > 0.5 autrement.

    Mais mon raisonnement à été du tâtonnement pas très académique (je manque furieusement de logique pour le coup), et je ne sais pas si ces valeurs sont optimales.

    Pour reprendre ton exemple, mon raisonnement a été le suivant :
    Je veux obtenir w1 * x1 + w2*x2 - biais > 0.5
    J'ai donc positionné la variable seuil de mon neurone à 0.5:
    a.seuil = 0.5
    a.sortie = sigmoid(a.w[0] * nb1 + a.w[1] * nb2 - a.seuil)

    Parcontre pour le poids des connexions, j'ai mis 1 et -1 pour w1 et w2, mais parceque j'ai testé et que ca semble marcher. Je n'ai pas trouvé de raisonnement logique et inébranlable pour justifier mon choix, comme cette phrase que tu écris :
    "De plus, on peut considérer que si x 1 = x 2 = 0.25, le neurone renverra 1. On va donc finalement choisir comme poids w 1 = w 2 = 1"

    J'avoue ne pas la comprendre

    Mais j'ai également une autre question : la fonction séparatrice ne sert finalement qu'à vérifier que le problème est modélisable avec un seul neurone ?

    Et quid de la fonction d'activation ? J'utilise actuellement la fonction sigmoide, mais mon jeu d'essai que je compte utiliser pour l'apprentissage contenir des 1 ou des 0 selon si c'est bon ou pas bon. Dois-je réencapsuler le résultat de ma fonction d'activation dans un test si sigmoide>0.5 retourne 1 sinon 0 ? Ou bien dois-je directement prendre une fonction d'heaviside ?


    Merci pour ta patience (j'aurais sûrement d'autres questions pour la suite )

  6. #6
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Citation Envoyé par cho7 Voir le message
    Je n'ai pas trouvé de raisonnement logique et inébranlable pour justifier mon choix, comme cette phrase que tu écris :
    "De plus, on peut considérer que si x 1 = x 2 = 0.25, le neurone renverra 1. On va donc finalement choisir comme poids w 1 = w 2 = 1"
    Rien d'inébranlable. J'ai seulement pris la convention suivante :
    si l'on veut simuler la fonction logique OU, j'ai choisi de considérer que si l'on a les deux entrées qui valent 0.25, on considèrera que le neurone renverra 1. C'est une convention que j'ai prise. On aurait pu choisir 0.355425 mais bon.

    Citation Envoyé par cho7 Voir le message
    la fonction séparatrice ne sert finalement qu'à vérifier que le problème est modélisable avec un seul neurone ?
    Non. Un réseau de neurones peut notamment faire ce que l'on appelle de la classification. Tu lui donnes n nombres en entrée, et il va te dire à quelle "classe" ce vecteur de n nombres appartient. (pour le diagnostic médical les classes sont des maladies par exemple)
    Mathématiquement, cela revient à diviser un espace de n dimensions en plusieurs sous-espaces (autant qu'il y a de classes). Et qu'il y ait un neurone ou plusieurs ne change rien à cette interprétation.

    Citation Envoyé par cho7 Voir le message
    Et quid de la fonction d'activation ? J'utilise actuellement la fonction sigmoide, mais mon jeu d'essai que je compte utiliser pour l'apprentissage contenir des 1 ou des 0 selon si c'est bon ou pas bon. Dois-je réencapsuler le résultat de ma fonction d'activation dans un test si sigmoide>0.5 retourne 1 sinon 0 ? Ou bien dois-je directement prendre une fonction d'heaviside ?
    Heaviside retournera 1 si la somme pondérée des entrées est supérieure à 0, donc il faudra juste adapter les poids.
    Mais si tu ne cherches en sortie que des 0 et des 1, prends Heaviside oui.



    Citation Envoyé par cho7 Voir le message
    Merci pour ta patience (j'aurais sûrement d'autres questions pour la suite )
    Pas de problème mais à partir de demain soir il faudra attendre mi-septembre que je rentre de vacances

Discussions similaires

  1. comment programmer un réseau de neurones
    Par anayi dans le forum MATLAB
    Réponses: 2
    Dernier message: 01/02/2014, 11h17
  2. Programmation d'un réseau de neurones
    Par somaa dans le forum Méthodes prédictives
    Réponses: 1
    Dernier message: 15/12/2012, 16h49
  3. programmer un réseau de neurone
    Par chiraz01 dans le forum SAS STAT
    Réponses: 5
    Dernier message: 04/05/2010, 17h26
  4. Programmer un réseau de neurones impulsionnels ou SNN
    Par @matlab@ dans le forum MATLAB
    Réponses: 3
    Dernier message: 12/02/2007, 10h47
  5. Réseau de neurones - reconnaissance visage
    Par PrAbronsius dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 03/05/2006, 03h38

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