Précédent   Forum du club des développeurs et IT Pro > Autres langages > Algorithmes > Intelligence artificielle
Intelligence artificielle Forum d'entraide sur l'intelligence artificielle. Avant de poster : Cours d'intelligence artificielle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/09/2012, 22h53   #1
bird12358
Invité régulier
 
Inscription : décembre 2007
Messages : 164
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 164
Points : 9
Points : 9
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.
bird12358 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2012, 14h07   #2
Alexis.M
Membre chevronné
 
Alexis
Doctorant en informatique
Inscription : juin 2009
Messages : 428
Détails du profil
Informations personnelles :
Nom : Alexis
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 428
Points : 700
Points : 700
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]
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2012, 22h22   #3
bird12358
Invité régulier
 
Inscription : décembre 2007
Messages : 164
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 164
Points : 9
Points : 9
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 ...
bird12358 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2012, 09h25   #4
Alexis.M
Membre chevronné
 
Alexis
Doctorant en informatique
Inscription : juin 2009
Messages : 428
Détails du profil
Informations personnelles :
Nom : Alexis
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 428
Points : 700
Points : 700
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.
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2012, 09h31   #5
bird12358
Invité régulier
 
Inscription : décembre 2007
Messages : 164
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 164
Points : 9
Points : 9
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?
bird12358 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2012, 12h37   #6
Alexis.M
Membre chevronné
 
Alexis
Doctorant en informatique
Inscription : juin 2009
Messages : 428
Détails du profil
Informations personnelles :
Nom : Alexis
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 428
Points : 700
Points : 700
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.
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2012, 18h34   #7
bird12358
Invité régulier
 
Inscription : décembre 2007
Messages : 164
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 164
Points : 9
Points : 9
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?
bird12358 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2012, 23h31   #8
Aleph69
Membre Expert
 
Homme
Chercheur
Inscription : mars 2010
Messages : 1 150
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 150
Points : 1 666
Points : 1 666
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.
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h48.


 
 
 
 
Partenaires

Hébergement Web