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 :

1 ou 2 neurone?


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 1 ou 2 neurone?
    Bonjour,

    je programme actuellement un réseau de neurone simple couche. Je voulais commencé par un exemple simple. Une fonction logique par exemple. Je voudrais savoir combien de neurone dois-je mettre pour modèliser une fonction not.

    Déja est-ce que un RdN simple couche peu modèliser cette fonction et un unique neurone peut-il suffire pour la modèlisation?

    Si quelqu'un pouvait m'apporter une réponse?

  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
    Si tu poses la question, c'est sans doute que tu n'as pas trop compris ce que
    faisait un réseaux de neurones ou même un seul neurone.

    en version simple un perceptron avec en entrée un vecteur x, y applique
    un vecteur de poids w et un biais b ( w'x + b) et applique au résultat
    une fonction (ou pas) généralement de type sigmoïde ou échelon.

    donc la question est: "est-ce qu'avec un neurone prenant en entrée 1 ou 0
    je suis capable de lui faire sortir repsectivement 0 ou 1.

    Evidemment oui! dans ce cas w = -1 et b = 0.5 suivit d'une fonction échelon

    h(x) = 1 si x > 0 et 0 sinon

    ça fonctionne.

    De manière générale il faut comprendre le perceptron comme un séparateur linéaire. Si sur un graphe tu représentes les sorties attendues
    en fonction des valeurs d'entrées (dans le cas de fonctions logiques, il s'agit
    des noeuds d'une grille) et que tu peux tracer une ligne qui sépare les 1 des 0 alors un seul perceptron peut faire le travail. Sinon, c'est qu'il faut en utiliser plus d'un (mais tu ne sais pas forcément combien).

    ex: fonction "or"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     |0  1
    ---------
    0| 0 1
    1| 1 1
    clairement tu peux mettre tous les uns d'un coté d'une droite donc un seul
    neurone suiffit (même chose pour "and")

    par contre avec "xor":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     |0  1
    ---------
    0| 0 1
    1| 1 0
    ce n'est pas possible dont tu ne peut pas le faire avec un seul neurone.

    Dans le cas de "not" tu n'as qu'une dimension:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    0  1
    ---------
    1  0
    Il est donc facile de séparer les 1 des 0 et donc un seul neurone suffit.

    Pour le cas "xor" (a.not(b) + not(a).b), tu peux même trouver combien de neurones il faut: a.not(b) peut s'effectuer avec un neurone de même que not(a).b.

    Pour a.not(b):
    |0 1
    ---------
    0| 0 1
    1| 0 0
    [/code]

    il faut donc un neurone pour chaque et un troisième neurone pour la fonction "or"

    Donc une réseau avec 1 couche cachée de deux neurones et un neurone en sortie.

  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
    Merci pour votre réponse.

    Par contre une question pratique pour la génération de la base de donnée d'apprentissage. Si je veux faire une classification basique du genre une fonction e1 = a*e2 +b. Si un couple (e1_a,e2_a) deux couple tiré aléatoirement :
    si e1_a> a * e2_a +b la sortie du réseau est a val1
    sinon la sortie du réseau est a val2.

    Quand je crée cette base de donnée dois-je mettre val1=1 val2=0 ou val1=1 et val2=-1.
    Parce que lorsque l'on va faire le calcul de la sortie du neurone fonctionActivation( somme (w*ei) pour savoir si l'entrée appartiennent à la zone 0 ou 1 on va devoir faire :

    si fonctionActivation( somme (w*ei)) >0 => zone 1
    sinon zone 0.

    Donc il faut mettre val1 =1 et val2 = -1?

  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
    Je suis désolé mais je n'ai pas compris ce que tu voulais faire. Peux-tu reformuler ta question si poussibles en explicitant tes notations (pas très standards).

    Un problème de classification et généralement donné par un ensemble de couples: (x1,y1), (x2,y2), ... , (x3,y3)
    où les xi sont les données (ou descripteurs) et les yi représentent les labels attendus yi = {1,-1} ou yi = {1,0} (classification binaire)

    La fonction d'activation est à choisir de sorte à pouvoir atteindre les valeurs de sortie ou sinon, tu transformes les données de manière à ce que les valeurs extrêmes coincide avec celles de la fonction d'activation
    donc

    h(x) = 0 si x <= 0 et 1 sinon pour des labels de classes {1,0}
    h(x) = -1 si x < 0 et 1 sinon pour des labels de classes {1,-1}

  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
    En fait en sortie on aura tout d'abord la somme:
    a(X) = somme(wi*Xi) ou w est le poids i associé à l'entrée Xi = [e0, e1,...,en]
    et en sortie de la fonction d'activation on aura:
    y= h(a) j'ai pris dans mon cas une sigmoide.
    Si on part sur une classification de deux zones, j'ai un enssemble de couple (e1,e2,t) ou t est la classification (zone0 ou zone1). Mais justement cette valeur t, je dois mettre t= 0 ou 1 ou t = -1 ou 1.

    Parce que si j'ai bien compris pour savoir si le couple (e1,e2) appartient a la zone1 ou la zone 2 on va faire:
    si y = h(a) >0 zone 1
    sinon zone 0 ??

    Donc pour moi la valeur cible dans la base de donnée doit valoir -1 ou 1 pour pouvoir la comparer a cette calculée par le neurone??

  6. #6
    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
    Citation Envoyé par black_hole Voir le message
    En fait en sortie on aura tout d'abord la somme:
    a(X) = somme(wi*Xi) ou w est le poids i associé à l'entrée Xi = [e0, e1,...,en]
    J'ai l'impression que tu mélanges des concepts là si tu as un échantillon x = [e0, e1, ..., en]

    alors le vecteur poids correpsond aux entrées:

    a(X) = somme(wi,ei)

    ensuite comme je l'expliquais plus haut, il faut que les valeurs associées à tes labels de classe correspondent au valeurs extrêmes de la fonction h.

    donc si -1< h(y) <1 alors t dans {1,-1}
    si 0< h(y) <1 alors t dans {1,0}

  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
    Citation Envoyé par Alexis.M Voir le message

    donc si -1< h(y) <1 alors t dans {1,-1}
    si 0< h(y) <1 alors t dans {1,0}
    Tu voulais dire plutot si on suit les notation :
    donc si -1< h(a(X)) <1 alors t dans {1,-1}
    si 0< h(a(X)) <1 alors t dans {1,0}

    Non? Parce que moi y= h(a(X)). Ensuite la notation t dans {1,0} , ca veut dire que t est soit égale à 1 soit égale à 0? Pas de valeur intermédiaire on est bien d'accord?

    Si on prend 0< h(a(X)) <1 (le cas d'une sigmoid) pour savoir si h(a(X)) appartient à une des deux zones il faut faire :
    si h(a(X)) >0.5 => zone 1
    sinon zone 0.

    alors que dans le cas ou on avait pris -1< h(a(X)) <1 on doit faire :
    si h(a(X)) >0 => zone 1
    sinon zone 0.

    On est d'accord?

  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 on est d'accord.

    Il est fréquent que , dans les réseaux multi-couche, la fonction h du neurones de sortie
    soit simplement l'identité h(a(x)) = a(x) ce qui permet justement d'éviter les problèmes d'échelle. Par contre il est important de conserver des fonctions non linéaires (type sigmoides) pour les neurones des couches cachées.

    Dans le cas du perceptron cela revient simplement à faire une régression linéaire.

  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 Re
    Merci pour ces réponses.

    Dans les réseaux que j'ai programmé, la fonction d'activation du neurone de sortie est sigmoide, ca apporte réellement quelquechose d'avoir une fonction d'activation lineaire en sortie?

    J'ai également constaté que lorsque le réseau à des neurones cachés avec des fonctions d'activations lineaires, le systèmes est assez instable. Une question concernant les taux d'apprentissage. Dans le cas de mes réseaux j'ai mis un taux d'apprentissage identique tous les neurones. Faut-il qu'il y est des taux différents pour les neurones cachées pour leur permettre d'avoir des oscillations au niveau de leur poids moins violentes?

    Se peut-il maintenant si j'ai une classification de 3 zones a faire d'utiliser un seul réseau mais avec non pas une sortie pour choisir l'une ou l'autre des zones mais 2 sorties ( les deux sorties pour les deux zones et la 3ieme est la négation de la zone 1 et négation de la zone 2)?

  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
    Pour de la régression, la fonction linéaire pour le neurone de sortie permet de ne pas trop avoir à se soucier des problèmes d'échelle des données à ajuster.

    Il est par contre indispensable d'avoir la fonction sigmoïdes pour les neurones cachés, c'est elle qui donne les propriétés non linéaires des réseaux.

    Pour la classification multi-classe, deux méthodes sont généralement utilisées:

    - un neurone de sortie par classe. La sortie attendu est à 1 et les autres à zéro pendant l'apprentissage.

    - un code binaire, pour trois classes, deux neurones sont suffisants est suivant comment tu choisis ton codage, cela correspond en effet à ce que tu proposes:

    classe1: 0 1
    classe2: 1 0
    classe3: 0 0 ou 1 1

    L'avantage c'est que tu économises 1 neurone, l'inconvénient c'est que tu risque d'avoir des ambiguités:

    Si pour la classe 3 j'impose 0 0, Comment dois-je interpréter 1 1 ?

    Avec 1 neurone par classe, on détermine la classe à partir du neurone dont la réponse est maximale.

Discussions similaires

  1. Les réseaux de neurones ??? Ouvrage, site, tutos ???
    Par wallys dans le forum Méthodes prédictives
    Réponses: 5
    Dernier message: 21/03/2006, 14h08
  2. Algo évolutionniste et neurone
    Par vincent0 dans le forum Méthodes prédictives
    Réponses: 3
    Dernier message: 21/11/2005, 18h01
  3. Trouver un cours d'introduction sur les reseaux de neurones
    Par Alec6 dans le forum Méthodes prédictives
    Réponses: 2
    Dernier message: 10/10/2005, 16h41
  4. Besoin d'aide classifieur SVM et reseau de neurones
    Par dahoo dans le forum Méthodes prédictives
    Réponses: 2
    Dernier message: 12/04/2005, 14h31
  5. Réseaux de neurones
    Par kayin dans le forum Méthodes prédictives
    Réponses: 8
    Dernier message: 10/03/2004, 14h22

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