Pour ce qui est de la classification : Le but : Une entrée donne une Classe (ou catégorie),
les modèles topologiques sont plus puissants que les modèles linéaires dans ce cas de figure. (A combinaisons linéaires).
Il faut quand même être honnête; et l'admettre.
En plus leur façon d'apprendre permet une supervision minime si nécessaire : juste un booléen : tu as tords ou raison.
C'est plus long. Normal car il a à chercher la bonne solution.
Mais on peut aussi utiliser l'apprentissage supervisé sur les réseaux topologiques.
Ça utilise les cartes de Kohonen. Même si les GNG font mieux, ... mais faut savoir les paramétrer.
Il y a un concours tous les ans pour créer le meilleur logiciel de reconnaissance d'écriture manuscrite.
Il y a un consensus : les réseaux de neurones sont meilleurs !
Duel : Homme / machine
-
- Intarissable
- Messages : 7750
- Enregistré le : dimanche 19 mai 2013 à 12:03
- Localisation : En haut à gauche
Re: Duel : Homme / machine
TSA, diagnostic établi à mes 33 ans par le CRA de ma région.
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"
-
- Intarissable
- Messages : 37322
- Enregistré le : lundi 15 juillet 2013 à 15:09
- Localisation : CH
Re: Duel : Homme / machine
Bon, on met qui comme joueurs humains ?
Magus Carlsen pour le jeu d'échecs.
Lee Sedol pour le go.
Yoshiharu Habu pour le shogi.
Magus Carlsen pour le jeu d'échecs.
Lee Sedol pour le go.
Yoshiharu Habu pour le shogi.
Pardon, humilité, humour, hasard, confiance, humanisme, partage, curiosité et diversité sont des gros piliers de la liberté et de la sérénité.
Diagnostiqué autiste en l'été 2014
Diagnostiqué autiste en l'été 2014
-
- Intarissable
- Messages : 7750
- Enregistré le : dimanche 19 mai 2013 à 12:03
- Localisation : En haut à gauche
Re: Duel : Homme / machine
Bon je me sens coupable, car j'ai introduit un biais.
Pour construire un réseau topologique comme les cartes de Kohonen ou même les neural gazes, le niveau requis en maths se limite au niveau collège de 3ème.
Il suffit de connaître le théorème de Pythagore et en conséquence comment réduire (ou augmenter) une distance entre un point et un autre. Même si les points sont exprimés sur x dimensions ça ne change rien. (On peut toujours, suivant le théorème de Pythagore, calculer la distance et savoir comment les rapprocher ou les éloigner).
C'est vraiment simple. Franchement.
Pour les réseaux à combinaisons linéaires , c'est plus compliqué : il faut savoir calculer des dérivées partielles (classe de première), et des gradients (notion introduite en Bac + 1 en physique surtout).
Dans les deux cas, on cherche à réduire la valeur de l'erreur.
Au cas par cas.
L'erreur, c'est la différence entre la valeur réelle et celle déterminée par le réseau.
Dans un réseau topologique c'est très simple : Ni plus ni moins que la distance entre l'entrée et le vainqueur de la compétition. Même l'erreur est locale dans ces réseaux.
Les réseaux topologiques peuvent aussi être entraînés en apprentissage supervisé :
On connait la classe de sortie, donc on fait converger le gagnant de la compétition de la bonne classe (on le rapproche) vers l'entrée.
Et donc la bonne catégorie émerge (à terme).
[EDIT] c'est évidemment présomptueux de ma part, mais j'insiste car cela fonctionne très bien :
On utilise plusieurs réseaux topologiques superposés, autant qu'il y a de classes dans le problème, chacun assigné à une classe..
On ne peut pas parler de couches pour autant car ils sont tous devant.
Par exemple des réseaux de Kohonen ou des growing-neural-gas (meilleurs).
On met ces réseaux en compétition. Pour trouver la bonne classe (ou catégorie), chaque réseau est assigné à une classe. ils se battent tous non pas neurone contre neurone mais réseau contre réseau. C'est assez surprenant tant ça marche.
C'est franchement hyper efficace, le nombre d'itérations, est bien moindre.
Plus en détail : face à une entrée (un vecteur de dimension quelconque), on détermine le neurone gagnant parmi tous, c'est le plus proche (en distance) de l'entrée. On note de quelle classe (assignée à un réseau, il y a autant de réseaux superposés que de classes dans le problème) il appartient.
Et on fait converger ce réseau (le neurone gagnant et ses voisins) vers l'entrée.
On le rapproche de l'entrée, et dans une moindre mesure, ses voisins (les neurones qui lui sont reliés).
En apprentissage supervisé ça suffit.
C'est le plus simple des apprentissages par renforcement.
Après on peut aller plus loin : éloigner le neurone vainqueur de l'entrée s'il s'est trompé.
(Il a gagné la compétition, mais il n'est pas de la bonne catégorie)
On éloigne le mauvais vainqueur, et on rapproche celui qui aurait dû gagner.
L'erreur du réseau augmente donc, ce qui est paradoxal vu l'objectif.
Mais du coup la convergence globale est beaucoup plus rapide. (Il faut moins d'itérations pour résoudre le problème)
Et cela permet d'utiliser un apprentissage supervisé dans une moindre mesure : pas besoin de savoir quelle classe est la bonne, il suffit de savoir si le réseau a raison ou tord. S'il a raison on rapproche le vainqueur, s'il a tord on l'éloigne. On donne un simple booléen au lieu de la solution, par itération.
De manière itérative, la bonne solution, la bonne catégorie émerge. Sans la donner. Le réseau la trouve tout seul.
Bien-sûr cet algorithme ne fonctionne que dans le cas de réponses discrètes (une catégorie ou une autre ... des entiers).
C'est de la classification.
Ils sont bien incapable de faire de l'approximation de fonctions. Les réseaux à combinaisons linéaires sont inévitables dans ce cas.
Ces réseaux ont comme sortie un vecteur de réels, ce qui est beaucoup plus riche que la sortie des réseaux topologiques qui est un rang (un index, un entier, ou des coordonnées d'entier). C'est une sortie discrète.
Par contre l'entrée est de même type entre les deux familles de réseaux (topologiques et linéaires) : un vecteur de réels de taille quelconque.
Cependant, on peut utiliser les réseaux linéaires (Perceptron, Multi-layer Perceptron, ou plus sophistiqués mais ça me dépasse) pour faire de la classification discrète de la même manière.
En utilisant aussi l'apprentissage compétitif.
Il y a sans doute mieux, mais en 2ème année Maths-Info, j'avais fait un projet qui utilisait l'apprentissage compétitif sur un Perceptron (une seule couche).
J'avais mis en sortie la fonction sigmoide, et je faisais converger vers 1 quand le réseaux avait raison, et 0 quand le réseaux avait tord.
Il y a un défaut énorme (les poids tendent vers les infinis), mais j'arrivais à obtenir un programme qui apprend le jeu Snake sans supervision dans une certaine mesure.
[EDIT]
Pour les réseaux topologiques :
Le rapprochement comme l'éloignement sont proportionnels à la distance entre l'entrée et le neurone gagnant.
Pour le rapprochement ce n'est pas gênant.
Pour l'éloignement, si. Il faut appliquer un logarithme sur la distance dans ce cas. (Bon sang, encore un paramètre !)
Sinon on se retrouve avec tous les neurones en dehors de la fenêtre ...
[EDIT 2]
Une autre idée, c'est d'éloigner selon l'inverse de la distance, au lieu que se soit proportionnel.
Mais je n'ai pas essayé.
On calcule la direction d'éloignement, mais au lieu de multiplier par la distance, on divise par cette distance.
A suivre.
vecteur d'éloignement (vecteur normalisé, de longueur 1) * 1/ (1 + x), où x est la distance.
Pour construire un réseau topologique comme les cartes de Kohonen ou même les neural gazes, le niveau requis en maths se limite au niveau collège de 3ème.
Il suffit de connaître le théorème de Pythagore et en conséquence comment réduire (ou augmenter) une distance entre un point et un autre. Même si les points sont exprimés sur x dimensions ça ne change rien. (On peut toujours, suivant le théorème de Pythagore, calculer la distance et savoir comment les rapprocher ou les éloigner).
C'est vraiment simple. Franchement.
Pour les réseaux à combinaisons linéaires , c'est plus compliqué : il faut savoir calculer des dérivées partielles (classe de première), et des gradients (notion introduite en Bac + 1 en physique surtout).
Dans les deux cas, on cherche à réduire la valeur de l'erreur.
Au cas par cas.
L'erreur, c'est la différence entre la valeur réelle et celle déterminée par le réseau.
Dans un réseau topologique c'est très simple : Ni plus ni moins que la distance entre l'entrée et le vainqueur de la compétition. Même l'erreur est locale dans ces réseaux.
Les réseaux topologiques peuvent aussi être entraînés en apprentissage supervisé :
On connait la classe de sortie, donc on fait converger le gagnant de la compétition de la bonne classe (on le rapproche) vers l'entrée.
Et donc la bonne catégorie émerge (à terme).
[EDIT] c'est évidemment présomptueux de ma part, mais j'insiste car cela fonctionne très bien :
On utilise plusieurs réseaux topologiques superposés, autant qu'il y a de classes dans le problème, chacun assigné à une classe..
On ne peut pas parler de couches pour autant car ils sont tous devant.
Par exemple des réseaux de Kohonen ou des growing-neural-gas (meilleurs).
On met ces réseaux en compétition. Pour trouver la bonne classe (ou catégorie), chaque réseau est assigné à une classe. ils se battent tous non pas neurone contre neurone mais réseau contre réseau. C'est assez surprenant tant ça marche.
C'est franchement hyper efficace, le nombre d'itérations, est bien moindre.
Plus en détail : face à une entrée (un vecteur de dimension quelconque), on détermine le neurone gagnant parmi tous, c'est le plus proche (en distance) de l'entrée. On note de quelle classe (assignée à un réseau, il y a autant de réseaux superposés que de classes dans le problème) il appartient.
Et on fait converger ce réseau (le neurone gagnant et ses voisins) vers l'entrée.
On le rapproche de l'entrée, et dans une moindre mesure, ses voisins (les neurones qui lui sont reliés).
En apprentissage supervisé ça suffit.
C'est le plus simple des apprentissages par renforcement.
Après on peut aller plus loin : éloigner le neurone vainqueur de l'entrée s'il s'est trompé.
(Il a gagné la compétition, mais il n'est pas de la bonne catégorie)
On éloigne le mauvais vainqueur, et on rapproche celui qui aurait dû gagner.
L'erreur du réseau augmente donc, ce qui est paradoxal vu l'objectif.
Mais du coup la convergence globale est beaucoup plus rapide. (Il faut moins d'itérations pour résoudre le problème)
Et cela permet d'utiliser un apprentissage supervisé dans une moindre mesure : pas besoin de savoir quelle classe est la bonne, il suffit de savoir si le réseau a raison ou tord. S'il a raison on rapproche le vainqueur, s'il a tord on l'éloigne. On donne un simple booléen au lieu de la solution, par itération.
De manière itérative, la bonne solution, la bonne catégorie émerge. Sans la donner. Le réseau la trouve tout seul.
Bien-sûr cet algorithme ne fonctionne que dans le cas de réponses discrètes (une catégorie ou une autre ... des entiers).
C'est de la classification.
Ils sont bien incapable de faire de l'approximation de fonctions. Les réseaux à combinaisons linéaires sont inévitables dans ce cas.
Ces réseaux ont comme sortie un vecteur de réels, ce qui est beaucoup plus riche que la sortie des réseaux topologiques qui est un rang (un index, un entier, ou des coordonnées d'entier). C'est une sortie discrète.
Par contre l'entrée est de même type entre les deux familles de réseaux (topologiques et linéaires) : un vecteur de réels de taille quelconque.
Cependant, on peut utiliser les réseaux linéaires (Perceptron, Multi-layer Perceptron, ou plus sophistiqués mais ça me dépasse) pour faire de la classification discrète de la même manière.
En utilisant aussi l'apprentissage compétitif.
Il y a sans doute mieux, mais en 2ème année Maths-Info, j'avais fait un projet qui utilisait l'apprentissage compétitif sur un Perceptron (une seule couche).
J'avais mis en sortie la fonction sigmoide, et je faisais converger vers 1 quand le réseaux avait raison, et 0 quand le réseaux avait tord.
Il y a un défaut énorme (les poids tendent vers les infinis), mais j'arrivais à obtenir un programme qui apprend le jeu Snake sans supervision dans une certaine mesure.
[EDIT]
Pour les réseaux topologiques :
Le rapprochement comme l'éloignement sont proportionnels à la distance entre l'entrée et le neurone gagnant.
Pour le rapprochement ce n'est pas gênant.
Pour l'éloignement, si. Il faut appliquer un logarithme sur la distance dans ce cas. (Bon sang, encore un paramètre !)
Sinon on se retrouve avec tous les neurones en dehors de la fenêtre ...
[EDIT 2]
Une autre idée, c'est d'éloigner selon l'inverse de la distance, au lieu que se soit proportionnel.
Mais je n'ai pas essayé.
On calcule la direction d'éloignement, mais au lieu de multiplier par la distance, on divise par cette distance.
A suivre.
vecteur d'éloignement (vecteur normalisé, de longueur 1) * 1/ (1 + x), où x est la distance.
TSA, diagnostic établi à mes 33 ans par le CRA de ma région.
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"
"Ce syndrome est caractérisé chez ce patient par l’absence de détérioration intellectuelle, un syndrome dysexécutif, un déficit d'attention"