Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Discussion: 1 ou 2 neurone?

  1. #1
    Membre à l'essai
    Inscrit en
    décembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 390
    Points : 24
    Points
    24

    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 chevronné
    Profil pro Alexis
    Ingénieur de recherche en informatique
    Inscrit en
    juin 2009
    Messages
    435
    Détails du profil
    Informations personnelles :
    Nom : Alexis
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche en informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 435
    Points : 705
    Points
    705

    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 :
    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 :
    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:

    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 à l'essai
    Inscrit en
    décembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 390
    Points : 24
    Points
    24

    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 chevronné
    Profil pro Alexis
    Ingénieur de recherche en informatique
    Inscrit en
    juin 2009
    Messages
    435
    Détails du profil
    Informations personnelles :
    Nom : Alexis
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche en informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 435
    Points : 705
    Points
    705

    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 à l'essai
    Inscrit en
    décembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 390
    Points : 24
    Points
    24

    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 chevronné
    Profil pro Alexis
    Ingénieur de recherche en informatique
    Inscrit en
    juin 2009
    Messages
    435
    Détails du profil
    Informations personnelles :
    Nom : Alexis
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche en informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 435
    Points : 705
    Points
    705

    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 à l'essai
    Inscrit en
    décembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 390
    Points : 24
    Points
    24

    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 chevronné
    Profil pro Alexis
    Ingénieur de recherche en informatique
    Inscrit en
    juin 2009
    Messages
    435
    Détails du profil
    Informations personnelles :
    Nom : Alexis
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche en informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 435
    Points : 705
    Points
    705

    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 à l'essai
    Inscrit en
    décembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 390
    Points : 24
    Points
    24

    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 chevronné
    Profil pro Alexis
    Ingénieur de recherche en informatique
    Inscrit en
    juin 2009
    Messages
    435
    Détails du profil
    Informations personnelles :
    Nom : Alexis
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche en informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 435
    Points : 705
    Points
    705

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •