En ce moment, je me pose plein de questions sur les réseaux de neurones. Ce n’est pas mon domaine de predilection mais… je pense que c’est un grand rêve :).
Il y a quelques années j’ai eu l’idée de faire ça. Et comme vous pouvez le constater… on l’a déjà fait pour moi :-). Mais voilà, j’ai quand même envie de le refaire pour comprendre comment ça marche.
Ce que je souhaite faire est assez simple. Voir si je peux affiner une image avec des contours simples en noir et blanc a partir d’une image low res.
Il faudrait donc que l’algorithme “invente” des details qui n’existent pas.
Un réseau neuronale au final c’est quelque chose d’assez simple.
Pour comprendre un peu le systeme, essayons de le restreindre à 3D avec deux points en entrée et un point en sortie.
Les valeurs ici sont arbitraires et juste donné a titre d’exemple. Ce qu’ils faut comprendre c’est que lors de l’entrainement, le réseau va s’autoadapter avec un algorithme d’ajustement (que je n’expliquerais pas ici) pour coller un maximum aux valeurs de sorties en fonction des valeurs d’entrées.

Approximation d'un signal carré avec une multitude de sinusoide
Si l’on compare cela a des frequences, en additionant une multitude de frequences, on peut obtenir une courbe en sortie qui est proche de ce que l’on désire. Ici ce n’est pas une seule courbe qui passe par tout les points de l’entrainement mais une addition de courbes.
Il est maintenant facile de comprendre qu’avec une infinité de neurones, on peut avoir une courbe qui passe par tout les points. Ce n’est pourtant pas ce que l’on désire. Si l’on passe par tout les points, nous pouvons avoir des extremes que l’on ne souhaite pas prendre en compte (cas bien particulier).
L’autre soucis d’un réseau de neurones est la vitesse d’apprentissage. Un peu comme un humain il faut commencer par des problèmes simples et venir sur des problèmes plus complexe peu a peu. Si le niveau est trop haut, le réseau va apprendre trop vite et se specialiser dans un domaine. Trop lent et il n’apprendra clairement pas assez vite et restera “débile” ;).
Au final un réseau de neurones doit être bien pensé. Il faut lui attribué un bon nombre de neurones, un bon seuil d’apprentissage et même une topologie qui correspond au problème (je n’aborde pas ici les problemes de loop back, de plusieurs couches hidden ni même le type de fonction des neurones sygmoid, linear, …) et au final je ne suis pas expert.
Et si au final je ne m’en souciais pas ?
Pourquoi ne pas mettre en place un algorithme génétique qui etudierait les réseaux de neurones ?
Je pourrais très bien avoir une population de réseau de neurones généré aléatoirement. Comme parametre génétique je pourrais avoir:
Ensuite, lors de l’experimentation sur par exemple 10 000 images générés aléatoirement (même jeux de test pour tout les algos) je prend les 4 meilleurs algo (basé sur celui qui est plus proche de mes images de reférences), je crée des enfants en gerant des mutations et je continue le processus.
J’estime qu’au bout d’un certain nombre de génération, j’obtiendrais des réseaux de neurones qui auront un contenu que je ne connais pas mais surtout avec une structure de neurones que je ne connais pas non plus mais qui en théorie devrait fonctionner.
Voila… c’est une idée comme ça, j’attend vos commentaires :-)… si vous en avez :-).
Si j’ai le temps d’implementer cela, je vous en reparle ;-). Au passage si vous avez de la doc ou que vous êtes au courant que c’est une perte de temps et que quelqu’un a déjà tenté avant moi, faite le moi savoir
3 reponses sur “Ameliorer un réseau de neurones avec un algorithme génétique ?”
Par Flo le 17/12/2008
j’ai rien compris…
c’est parce que j’ai que deux neurones tu crois ?
Par X-Blaster le 18/12/2008
Je pensais faire un truc abordable (avec l’exemple du début)… j’avais peur que le premier commentaire ce soit ça… :\
Non je pense que tu en as quand même bien plus !
2 neurones c’est pas suffisant pour apprendre un bête XOR…
Par cocolombo le 24/01/2009
Salut.
Si tu as des “patterns” spatiaux à faire apprendre au réseau, regarde du coté des réseaux d’Elman.
J’utilise ces réseaux pour des patterns temporels, mais ça semble efficace aussi pour des reconnaître des caractéristiques spatiales.