Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Futur Membre du Club
    Inscrit en
    décembre 2007
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 214
    Points : 15
    Points
    15

    Par défaut Perceptron multicouche et classification non linéaire

    Bonjour,

    J'ai programmer un réseau de neurone multicouche afin de classifier des zones non lineaire. Pour tester j'ai donc créé une base de données de 2 entrées (e1,e2, t) suivant une fonction non lineaire f(x) = 2x² par exemple. Si y > f(x) t= 1 sinon t=0.

    L'ensemble des fonctions d'activation sont des sigmoides. J'ai ensuite crée un perceptron multicouche comportant un neurone en sortie deux neurones sur la couche inférieur et le vecteur d'entrée en dessous.

    Lorsque je fais l'apprentissage et la généralisation, la ligne de partage entre les deux zones est une droite et pas une fonction non lineaire.

    Je voudrais savoir si le réseau que j'ai créé est suffisant pour gérer cette classification non lineaire??
    D'avance merci.

  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

    Après quelques tests rapides avec le module python ffnet, il semble qu'il faille faire très attention à bien équilibrer les classes, pour que l'algo converge.
    En tirant x,y uniformément dans un rectangle, j'avais des classes déséquilibrées et l'algo ne convergeait pas.

    Un autre point qui peut faire la différence est la fonction du neurone de sortie.
    Souvent il s'agit juste de l'identité (f(a) = a) ce qui permet d'éviter les problème d'échelle.

    Après si tu veux vraiment faire de classification (et pas juste te familiariser avec les réseaux de neurones) je te conseille plutôt de regarder du coté des
    machine à vecteurs supports (SVM) avec noyaux RBF pour le mode non linéaire, par ex.

    [edit]
    avec la même architecture de réseau que toi, j'obtiens des scores de classification de l'ordre de 95%
    [/edit]

  3. #3
    Futur Membre du Club
    Inscrit en
    décembre 2007
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 214
    Points : 15
    Points
    15

    Par défaut Re

    Merci Alexis.M pour ta réponse.

    En ce qui concerne la distribution de la base de données d'apprentissage, j'ai tiré aléatoirement les points par un random sur [0,1] pour l'entrée e1 et e2. Mais c vrai que la deuxième classe du fait de la fonction a une aire légérement plus faible que la 1ere. Je sais pas si ca peux jouer enormement. J'ai tiré aléatoirement 4000 points pour modèliser les deux zones.


    Pour la deuxième question , elle porte sur ta remarque sur la fonction de sortie. En quoi une fonction linéaire résout-elle les problèmes de mise à l'echelle (quelles echelles, les données d'entrées ??).

    Je cherche actuellement des bases de données sur internet pour tester mes algos. Comment fait-on quand on a des données qui sont par exemple en concentration de molécules pour traiter les données. Doit-on les normaliser sur [0,1] ? Doit-on privilégier certaines fonction d'activation? Les données négatives posent-elles problèmes?

    Je sais que ca fait pas mal de question ... Pas forcement des plus sensés je pense ...

  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

    Dans les tests que j'ai effectués avec ffnet, l'algo ne convergeait pas si les classes n'étaient pas équilibrées donc oui ce la peut avoir une grosse influence.

    Avec une fonction de sortie sigmoidale, le réseau ne peut atteindre qu'une plage limitée de valeurs [0,1] ou [-1,1], alors qu'avec une fonction linéaire toutes valeur réelles est théoriquement possible. Cela dit dans le cas de la classification, il est clairement préférable de garder une fonction sigmoïde: c'est équivalent à essayer d'atteindre +inf et -inf sauf que ça a le gros avantage de permettre de faire les calculs. La sortie linéaire est utile pour faire de la régression, pas de la classification. Je suis désolé d'avoir introduit de la confusion, j'ai juste cité les problèmes souvent rencontrés avec les réseaux de neurones.

    Si tu as des types de données très différents avec des domaines de définition très différents, il est souvent utile de centrer-réduire tes données. C'est à dire pour chaque composante indépendamment, de soustraire la moyenne est de diviser par l'écart-type.

    Les données à valeurs négatives ne posent pas de problème a priori.

  5. #5
    Futur Membre du Club
    Inscrit en
    décembre 2007
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 214
    Points : 15
    Points
    15

    Par défaut Re

    Déja merci poiur tes réponses.

    Je viens de finir l'implémentation de mon algo pour les perceptrons multicouches.
    J'ai fait un test: 2 entrées e1 et e2. 2 etages : 1 neurone de sortie et 2 neurones cachés.

    Quand je fais l'apprentissage sur une base de donnée simple du genre une fonction y = x, ca fonctionne bien. Mais dès que je met un étage de plus pour la même fonction , ca ne marche plus. Il me met tt classifier en zone 1 ou en zone 2.

    La fonction est-elle trop "simple" pour le réseau?

  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

    Je ne peux pas te répondre, je n'utilise pas les réseaux de neurones, j'ai juste pas mal lu sur ce sujet à une époque. Comme je l'ai déjà signalé, en pratique, sauf cas spécifique, on utilise plutôt des SVM pour la classification. Avec un noyau RBF, les SVM sont également capables d'approximer n'importe qu'elle frontière de décision.

    Il y aussi les classifieurs/regresseurs par forêts aléatoires qui sont à la mode.

  7. #7
    Futur Membre du Club
    Inscrit en
    décembre 2007
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 214
    Points : 15
    Points
    15

    Par défaut

    Merci en tout cas pour les réponses.
    Je viens de trouver le problème. Ca venait visiblement de du taux d'apprentissage.
    Je me suis rendu compte que le choix de cette valeur est primordiale. Ca peut faire completement diverger le système.

    Une dernière question pour la route. Je voudrais savoir si il existe une lois qui estime la valeur de ce taux ( cette valeur n'est pas fixe dans mon programme, elle diminue de facon exponentielle) en fonction des données d'entrées et de la complexité de la base de données?

  8. #8
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    mars 2010
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : mars 2010
    Messages : 1 175
    Points : 1 684
    Points
    1 684

    Par défaut

    Bonjour,

    à ma connaissance, le seul moyen connu pour dimensionner le taux d'apprentissage est de sélectionner (statistiquement) le meilleur modèle à l'aide d'une base de validation.

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
  •