AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Deep Learning

Aller en bas 
AuteurMessage
onilink_
Modérateur
avatar

Messages : 8974
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Deep Learning   Dim 13 Mai 2018 - 17:41

Ça fait quelques temps (en fait très longtemps mais j'ai jamais eu le temps de trop approfondir) que je m'amuse avec des réseaux de neurones artificiels et vu qu'en ce moment c'est pas mal revenu a la mode (merci les gros GPU) je me demandais si y en avait qui avaient des expériences a partager.

J'essaye surtout de comprendre la théorie derrière, plus qu'a jouer sur le côté pratique de la chose.
J'ai plutôt bien avancé au niveau des perceptrons multicouche et j'en ai fait une petite classe C++ from scratch si y en a que ça intéresse: https://github.com/onidev/neural-net
Il manque l’entraînement via minibatch mais ça marche déjà très bien.

J'ai pas encore tout a fait bien compris au niveau mathématiques la descente du gradient utilisée dans l'algorithme de la backpropagation (pour l'apprentissage), je sais qu'on cherche un minimum global en "tâtonnant", mais je comprend pas trop le rapport entre les formules que j'ai trouvé sur le net, et celles utilisée dans la backpropagation en elle même. Bref si y a un expert qui passe par la...

J'aimerais aussi savoir si y en a qui s'y connaissent niveau réseau de neurones convolutifs. Je comprend "bien" comment ils fonctionnent une fois construits, mais encore une fois je ne comprend pas bien comment fonctionne l'apprentissage. Y a pas l'air d'y avoir masse de doc accessible sur le net, on dirait que tout le monde s'en fiche. Est ce qu'il s'agit d'une backpropagation aussi? Ou est ce un algorithme totalement différent? (j'ai cru comprendre que la méthode est assez récente comparé aux plus anciens modèles, et vient d'un français: Yann LeCun).

J'aimerais faire une mini bibliothèque complète pour l'apprentissage et l'utilisation de CNN. Je sais que ça existe déjà (tensorflow etc) mais j'aime comprendre les outils que j'utilise. Et c'est toujours bien d'avoir une version minimaliste pour bien comprendre comment fonctionne quelque chose (et encore mieux de le faire soit même).

Je me suis récemment amusé a utiliser ma bibliothèque dans la reconnaissance de nombres en utilisant la database de MNIST, et après un seul entraînement le réseau avait atteint > 90% de réussite.
Je me suis alors amusé a regarder les premières couches reliées a l'image d'entrée et le résultat est assez marrant:


Bref, si vous avez des trucs a partager a propos des réseaux de neurones ou du deep learning plus généralement, hésitez pas a poster ici Smile


_________________
                 
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
avatar

Messages : 2627
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

MessageSujet: Re: Deep Learning   Dim 13 Mai 2018 - 19:29

C'est vrai que c'est un sujet foutrement intéressant ! Je m'y connais pas plus que ça, j'ai juste lu 2-3 trucs de vulgarisation dessus, mais ça me donne aussi envie de m'y plonger un peu !

Par contre, j'avoue que je comprends pas trop ton image ? Une petite explication si possible ? ^^

_________________
Cliquez pour accéder aux topics dédiés !
   
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8974
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Deep Learning   Dim 13 Mai 2018 - 20:07

La première couche est reliée directement a l'entrée (l'image a reconnaître), ce qui fait que pour chaque neurone de cette couche, on peut visualiser les poids de chaque connexion avec chaque pixel sous forme d'une image. Et c'est cela qui ressort ici.
Après le fonctionnement de chaque neurone est toujours un peu un mystère, surtout dans un cas ou y a moins de neurones (ici 8 ) que de sorties (10 nombres). Ça reconnaît probablement certains patterns avant d'envoyer ça aux autres couches.

Pour les couleurs, noir représente le poids 0, a gauche (bleus et blanc) c'est des poids négatifs, et a droite (rouge, jaune) des poids positifs.
Logiquement, les "symboles" jaunes sont ceux qui vont être reconnus, et leur assemblage sera ensuite utilisé dans les couches suivantes pour déterminer le nombre.

_________________
                 
Revenir en haut Aller en bas
[TheDarkTiger]
Modérateur
avatar

Messages : 7409
Localisation : Essonne

MessageSujet: Re: Deep Learning   Lun 14 Mai 2018 - 23:04

ça fait bien longtemps que j'ai eu les cours là dessus (j'étais encore en Angleterre =P)
Mais de ce dont je me souviens, et ça à peut être évolué, il n'y avait pas de méthode cartésienne pour choisir la taille et la profondeur du réseau, et la seule façon pas suicidaire de remplir le réseau de neurone était un recuit simulé ou juste un bon gros blam dans ta tronche.
On avait par exemple crée un réseau pour reconnaitre un chiffre. L'image faisait je sais plus, 5*8 je crois, y avait 10 neurones de sortie, et basta le chat, on devait se dé***** à notre sauce pour choisir la taille des couches intermédiaires et leur nombres.
Ensuite il fallait fournir à la main (!) des fichiers d'apprentissage (et comme c'étaient des truelles à l'époque, y avait que 10 images de base (tiens, devinez pour voir?)) et on pouvait, si on voulait en ajouter d'autres.
Ensuite, fallait tester.
Alors le prof ouvrait pain, modifiait un ou deux pixel, et balançait dans le réseau neuronal et, ho miracle ! ça marchait.
Je me souviens que j'avais fait un script pour générer 100 images par image d'entrée avec 10 dégradations successives de bruit impulsionnel (sel et poivre) et 10 de dégradation genre pixel swap ou flou, je sais plus trop.
Bref, avec ça on commençait à comprendre un peu l’intérêt de bien choisir la taille de son système et surtout, de ni le faire sous apprendre, ni sur apprendre.

Voilà, ça apportera pas grand chose à la conversation, mais si je peut aider =P

Ha, un conseil, bien choisir ses variables d'entrée est 1000 fois plus efficace que passer 10 plombes à "optimiser" un réseau qui bosse avec des données foireuses.
Un exemple parmi tant d'autres, il vaut peut être mieux 4 imagettes : une miniature, un filtre horizontal, un filtre vertical et un passe haut que travailler sur l'image de base en fonction de la problématique.

_________________
Bonne chance pour vos projets actuels ! Prêt à aider ceux qui en ont besoin ^^
l'antique http://www.membres.lycos.fr/thedarkminousite/
Bienvenue au 2541eme utilisateur : Terese !
Revenir en haut Aller en bas
http://www.tdms.fr
onilink_
Modérateur
avatar

Messages : 8974
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Deep Learning   Mar 15 Mai 2018 - 8:18

Ahah, 10 images pour entraîner un réseau simple, voir même 100, c'est ridicule x)
mnist en ont 60k d'exemple et 10k de test (et ça existe depuis 1998 de souvenir). Ils étaient pas très doués vos profs.

Pour le choix du nombre de neurones, c'est assez logique en fait. Chaque neurone (dans le cas ou on traite une image) va agir comme un filtre, et définir si oui ou non un pixel a de l'importance (positive ou négative). Du coup, dans le cas ou tu vas avoir a classifier 10 nombres, il te faudra minimum 10 neurones pour que les résultats ne soient pas mauvais. Sinon ça va créer une espèce de "goulot" entre l'entrée et la sortie, et enlever cette couche sera plus bénéfique que l'ajouter.

Après y a pas de secret, plus y a de neurones, plus ça va marcher, mais plus long va être l'apprentissage.
La ou y a devient plus compliqué c'est au niveau de la topologie, parfois il vaut mieux avoir 2 couches, mais je sais pas exactement pourquoi au niveau théorique.

Pour les entrées, bien choisir ses données est en effet très important. En choisir trop mène vite a de la sur interprétation, et pas assez a de la sous interprétation.
Dans les deux cas un moyen très efficace de le vérifier et de faire de la validation croisée. Utiliser un dataset pour l'apprentissage, et un autre pour les vérifications (bien sur, faut faire une séparation entre les deux de manière aléatoire, et le test set peut être bien plus petit que le dataset).
Mais heureusement il existe des lois pour savoir la dimension du vecteur d'entrée a choisir: théorème de vapnik des explications ad hoc si je dit pas de bêtises.
Y a des vidéos sur youtube qui en parlent.

D'ailleurs, comme les perceptron multicouche sont des classificateurs linéaires, on peut donner des entrées supplémentaires "doublon" avec des transformations non linéaires (entre les entrées déjà présentes) pour améliorer drastiquement les résultats dans certains cas (tout en augmentant le nombre de dimensions, et donc les durées d’entraînement).

Pour le coup de filtrer avant de passer les données, ça c'est vieux et ça ne se fait plus. Le principe des réseaux de neurones convolutif étant justement qu'ils sont capable de "créer" les filtres dont ils ont besoin eux même et sur mesure. Et c'est ça la révolution avec les CNN. Il ne reste que deux choses a faire pour les entraîneurs:
- créer ou se fournir la database
- choisir la topologie du réseau (sachant qu'il existe beaucoup de modèles spécialisés dans des taches particulières)

C'est presque un jeu d'enfant gnii

Ah et sinon j'ai fait quelques tests de topologie sur une itération de training: https://i.imgur.com/ssI6VW8.png
Et j'ai réussi a obtenir 97.5% de réussite avec une couche cachée de 128 neurones, et 5 itérations de training.
Va falloir passer aux CNN maintenant.

_________________
                 
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1365
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: Deep Learning   Mar 15 Mai 2018 - 19:11

Cool! Je me suis dit qu'un jours, j'allais faire un topic comme celui-ci pour en discuter. Content que tu l'ai fait. :fleche_d

Quelque liens que je trouve très importants:

Des présentation d'article de marchine learning incroyable où tu peux interagir avec tout les élements:https://distill.pub/
Des articles sympa: http://colah.github.io/
Une série de vidéo avec des points de vue que je n'ai pas vu présenté ailleurs:
https://www.youtube.com/playlist?list=PLtzmb84AoqRTl0m1b82gVLcGU38miqdrC
(D'ailleur j'ai l'impression que tu l'a déjà regardé ^^)

La backpropagation:
https://www.youtube.com/watch?v=tIeHLnjs5U8&list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi&index=3

La backpropagation dans un CNN.
https://becominghuman.ai/back-propagation-in-convolutional-neural-networks-intuition-and-code-714ef1c38199

Si tu as une question précise, j'essayerais d'y répondre si je peux.

Si tu veux faire un projet commun pour apprendre, je suis chaud. ;fleche_d

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8974
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Deep Learning   Mar 15 Mai 2018 - 20:04

Vraiment cool ces liens, surtout le premier, ça aide vraiment mieux a appréhender la reconnaissance d'image. C'est génial.

Ouais science4all j'ai regardé ses vidéos, c'est pas mal mais faut vraiment faire gaffe aux premières vidéos de sa série IA qui sont selon moi un peu parsemées de bullshit et d'opinions personnelles foireuses.
Heureusement vers l'épisode 5 ça commence a être plus rigoureux et avec moins d'avis subjectifs.

C'est marrant mais le premier lien que tu as mis ( https://distill.pub/ ) me fait vraiment penser a une "joute" qui a eu entre Ali Rahimi (un mec qui bosse chez google) et Yann Lecun (le père des CNN).
Rahimi a fait tout un talk pour dire en gros, que le deep learning c'est de l'alchimie moderne parce qu'on comprend pas comment ça marche.
Sauf que du coup Lecun est venu et a posé un gros NOPE.

Et le truc amusant c'est qu'effectivement beaucoup de personnes utilisent ça de manière alchimique sans essayer de comprendre comment ça fonctionne, sans étudier toute la partie théorique sur laquelle c'est basé (c'est pas sorti de nulle part, y a quand même des bases très solides), alors que t'as tout a gagner a connaître la théorie derrière pour optimiser les résultats.
Et surtout, il n'y a rien de magique derrière tout ça, et c'est ce genre de site interactifs qui le montrent bien, que ce soit au niveau du fonctionnement, ou après l’entraînement, un réseau de neurone n'est pas une boite noire totalement opaque. C'est un système très complexe, mais avec la bonne méthodologie on peut le découper, l'analyser, et comprendre les briques élémentaires.
Bien sur pour ça il faut prendre le temps de chercher... et de comprendre.

Edit:
Sinon niveau projet, déjà je vais essayer de me faire une implé simplifié de CNN et l'utiliser pour le dataset mnist des digits, m'amuser un peu avec, puis je vais commencer a regarder les gros frameworks et la ce sera déjà un peu plus sérieux.
J'ai beaucoup d'idées de projets:
- agrandissement d'image
- séparation de deux images fusionnées (une bête moyenne des deux)
- deviner la prochaine frame dans une vidéo
- faire une interpolation entre deux frames dans une vidéo pour augmenter le framerate
- recoloriser des images en niveau de gris
- combler un trou d'une couleur spécifique dans une image
Sachant qu'après recherche, la plupart ont déjà un paper ou quelqu'un qui a déjà essayé, ce qui permet de ne pas partir de zéro si y a un blocage.

Pour l'instant je vais me concentrer sur la reconnaissance de symboles et d'objets.
Ça me paraît le plus simple.

Y a des trucs amusants pour faire jouer des IA a des jeux de manière totalement autonomes sinon.

Personnellement, a terme, j'aimerais beaucoup faire des outils liés de près ou de loin au pixel art.
Mais a vrai dire je ne sais pas si le deep learning sera vraiment d'une grande aide.
Surtout étant donné la taille très légère des ressources disponibles sur internet a ce niveau.

_________________
                 
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Deep Learning   

Revenir en haut Aller en bas
 
Deep Learning
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Informations :: Projets communs-
Sauter vers: