Le deep learning pour les nuls

à la demande de @canard j ouvre un topic

Disclaimer : je ne suis pas du tout un expert de l’IA juste un geek assez vieux pour avoir decouvert le basic sur oric atmos, qui dev pour bouffer et qui s’interresse à l’IA. Je crois qu il y a des gens beaucoup plus calés sur le sujet qui trainent dans le coin je compte donc sur eux pour corriger et completer les conneries que je peux dire :slight_smile:

Alors deja on va preciser un peu de quoi on parle ici. Il y a en effet beaucoup de forme d « IA » et donc ici je vais plutot parler de deeplearning

Ensuite comme on est entre gens bien qui aiment pas les buzz word on va parler de modeles plutot que d « IA ». En effet quand on commence à s interresser un peu au sujet on s appercoit assez vite qu il y a rien de vraiment « intelligent » dans le deeplearing. C est juste une nouvelle classe d algo qui permet de resoudre des problemes qui etaient pour le moment tres compliqués à resoudre voir pratiquement impossible avec des algos classiques (avant le deeplearing on avait aussi des algos, dit de machine learning, mais pas le sujet ici).

On va aussi considerer qu on est entre dev et pas entre docteurs en mathematique ou statistique. Il y a évidemment beaucoup à dire et à apprendre sur la theorie derriere le deeplearing et ce qui fait que ca fonctionne mais par contre j ai pas plus besoin de connaitre en detail ces fondements theroriques pour faire du deeplearing que j ai besoin de connaitre en detail la theorie de l’algebre relationnelle pour faire une requete sql.

Ok mais alors comment on s y met quand on est un simple dev?
Alors deja j ai une mauvaise nouvelle… il va falloir vous mettre au python :slight_smile:
C est pas une obligation mais 99% (stat doigt mouillé) de la communauté bosse en python et donc la plus part des exemples de code, implementation de modele, framework, etc. que vous pourrez trouver seront dans ce langage. J entre pas plus en detail sur le python ici c est un sujet à part entiere (niveau outil regardez anaconda, pycharm, jupyter notebook)

Ok. python : check. I faut aussi louer 10 serveurs chez google pour entrainer mon modele?
Non. Pas besoin d’une machine surpuissante pour faire du deeplearing. Un gpu (de preference nvidia pour avoir acces à cuda) pas trop ancien et avec un peu de VRAM vous permettra deja d obtenir des resultats interressants. Vous pouvez aussi utilisez des outils comme colab qui vous donnent acces gratuitement à des envrionnements type jupyter notebook avec derriere des gpu correct.

Ensuite il va falloir choisir un framework. La il faut faire une petite pause pour avoir une petite vision d’ou en est le deeplearing actuellement. Je vous invite donc à jeter un oeil à ce site : Browse the State-of-the-Art in Machine Learning | Papers With Code
On y trouve tous les problemes standards qu on essaie de resoudre actuellement avec le deep learing et des exemple de code avec les meilleurs modeles pour ces differentes taches. Oui il y en beaucoup. Oui il y en a beaucoup qui sont deja extremement performant. Oui il y a beaucoup de sujets pour lesquels il n y a plus du tout besoin de reinventer la roue.

C est la qu il faut selon moi bien faire la difference entre un dev qui veut integrer du deeplearing dans son soft et un chercheur qui veut faire avancer l’etat de l’art. Un chercheur aura bien evidemment besoin de connaitre la theorie en detail, par contre un dev a juste besoin d’avoir une « intuition » de la theorie derriere (pour eviter de faire des trucs qui ont pas de sens) et ca lui suffira pour utiliser/adapter un modele concu par un chercheur.
Vous vous amusez pas à reimplementer un sort à chaque fois que vous voulez trier une liste, bah en deeplearing c est pareil vous vous amusez pas à inventer une architecture de modele totalement nouvelle quand vous voulez faire par exemple de la classification d image. Vous utilisez un modele standard qui a deja fait ses preuves sur cette tache et ca roule.
L’autre gros avantage d’utiliser des modeles standards c est que generalement vous pouvez trouver des versions préentrainées de ces modeles. Ces modele ont deja eu des phases d apprentissage sur generalement des grosses quantitées de données et donc quand vous réentrainez un modele pour votre tache specifique vous avez besoin de beaucoup moins de data et de beaucoup moins de puissance.

Donc pour revenir au framework, si vous avez suivi ce que j ai dit au dessus et si vous etes un dev et pas un docteur en mathematique/statistique (sinon de tte facon vous devriez deja plus etre ici), choisissez un framework qui vous offre les fonctions du plus haut niveau possible par exemple tensorflow+keras ou pytorch+fastai

Voila j ai commencé à glisser « fastai »…
Si je suis en train de vous parler de tout ca maintenant c est que l année derniere j ai suivi les cours de deeplearing de fastai et je les ai trouvé passionants et extremement didactiques. J etais pas un noob total en deeplearing quand je me suis lancé dedans. J avais deja suivi les classiques cours de Andrew Ng sur coursera. Mais à la fin des cours de coursera j etais tout juste capable de classifier des chiffres manuscrits (vous allez en bouffer du MNIST :slight_smile: ) alors qu à la fin des cours de fastai j’etais capable de faire de la generation de style, de la segmentation d image et d avoir des classements honorable dans les competitions kaggle

Le TRES gros avantage de ces cours c est qu on ne commence pas par de la theorie. On commence tout de suite par du code, avec des fonctions de haut niveau et qui fait facilement des trucs spectaculaires. Au debut on sait pas trop comment ni pourquoi ca marche…mais ca marche! Dans la suite des cours on voit de plus en plus la theorie et donc on se construit justement cette « intuition » necessaire pour ne pas faire n importe quoi.
En plus l’equipe derriere ces cours à aussi créé une lib de haut niveau appelée…fastai au dessus de pytorch qui est tres simple à utiliser et tres puissante.

Donc voila tout ce que je peux vous dire c est que si vous voulez decouvrir le deeplearing : suivez les cours de fastai et ne pensez pas que le deeplearing n est accesible qu aux tueurs en math ou necessite de faire une specialisation de 3 ans en fac avant de pouvoir taper une ligne de code. Par contre comme le repete regulierement le prof ne suivez pas les cours « passivement ». Il faut vraiment, comme d ailleurs dans tous les domaines, experimenter par soit meme. C est la meilleure maniere de comprendre vraiment ce qui se passe et de progresser. En plus vous avez de la chance en debarquant maintenant la lib fastai est passée en V1 (elle etait en V0.7 dans les cours de l année derniere). Elle est beaucoup plus claire, stable et surtout documentée qu elle ne l etait l’année derniere.

Donc voila j espere avoir des retours des pro pour corriger mes conneries, des retour d experience de ceux qui se sont/seront lancés, des liens cool sur le sujet et des questions auxquelles j essaierai de repondre au mieux :slight_smile:

10 « J'aime »

:+1::clap::clap:

Avec mes doctorants, c’est le combat inverse que je mène : « arrêtez avec le depplearning, y a pas toujours besoin de sortir le bazooka pour faire x/y/a »

Ce qui est dommage avec la sur médiatisation du DL, c’est qu’on en a oublié que parfois une chaîne de markov peut faire l’affaire. Que parfois on va recentraliser un problème decentralisé pour l’adapet au DL… côté science on vit un vrai appauvrissement des idées liées à l’IA par contre côté appli, on a des ordi qui joue à Starcraft et poutre des humains :sweat_smile:.

Côté qui fait peur aussi, c’est l’aspect « boîte noire ». Dans mon labo on est en train de mettre en place du DL pour le recrutement des étudiants « parcours sup » et cet aspect là n’est pas des plus rassurant.

pour résumer :
Le DL c’est cool et hyper puissant mais y a parfois plus approprié (surtout dans des cas de problèmes décentralisés).

Si vous voulez des infos sur l’intelligence artificielle distribuée / système multi agents, je peux vous avoir ça. (Voir même des agents qui utilise le DL). Je dois même pouvoir vous filer quelques plateformes.

Tellement vrai! Ce buzz autour du deeplearing est insupportable et je pense que c est la meilleur solution pour qu on tombe à nouveau dans un « ai winter ». Pour revenir à mon expemple de tri dans mon post, on peut peut etre entrainer un modele de DL à faire un tri, ca « marchera » mais ca sera juste ridicule parce que je peux le coder de maniere bcp plus simple, lisible, debugable, interpretable avec un aglo classique. Meme pour des problemes plus compliqués il y a comme tu le dis deja pleins de solutions genre random forest qui sont tres efficaces et la aussi… plus interpretable

Alors j ai bien insisté sur le interpretable mais il faut pas non plus imaginer que le deeplearing ne l’est pas du tout. On sait deja relativement bien « predire » en fonction des differentes architectures choisies et de la qualité des datas utiilisées pour l entrainement le niveau de qualité de predictions qu on peut esperer en sortie. Ils commencent aussi à y avoir de plus en plus de techniques permettant de representer les differents poids du reseau de maniere relativement interpretable par exemple ici :

http://scs.ryerson.ca/~aharley/vis/conv/
bon ok le cas est simple et donc le reseau simpliste mais presenter ca comme ca sur le net en temps reel… j trouve que ca meritait d etre montré :slight_smile:

ou ici :

Bien evidemment mes deux exemples concernent des modeles d’analyse d’image parce que l etat du reseau est forcement plus facilement représentable que sur un modele de nlp ou de collaborative filtering… :frowning:

Mais c est clair qu il y a beaucoup de progres à faire sur le sujet… et la pour le coup une simple « intuition » sur la theorie derriere les modeles n est peut etre plus suffisante …:slight_smile:

Je highjack le thread pour parler d’un petit jeu de vulgarisation d’IA assez sympas :

2 « J'aime »

super interessant ! J’en profite pour poser une question qui m’interpelle et pour laquelle je n’ai pas trouver de réponse : comment sont stocker les données dans un réseau de neurone entrainé ?

Je lis souvent “ce reseau a déjà été entrainé à identifier x ou y pattern”, mais comment est stocké cet entrainement ? C’est quoi la difference entre un reseau de neurone brut, et un réseau de neurone capable de reconnaitre des chats sur des photos ? On lit souvent qu’il a fallu des teraoctect de données pour apprendre au réseau à reconnaitre des chats, mais comment on stock cette information, et est-ce que c’est volumineux ?

Lorsque tu entraînes un réseau de neurones, pour faire simple, tu vas appliquer un algorithme de rétro propagation en fonction de la sortie que tu attends. Cet algorithme va modifier, entre autre, les poids sur les liaisons entre les neurones de chaque couche. C’est ces poids que tu vas sauvegarder en parallèle de ton modèle de réseau.

La différence avec un réseau « nature » qui aurait tout les poids de synapses égaux, l’entrainé lui aura des poids différent.

La taille va donc dépendre de la taille de ton réseau.

Je détourne rapidement le thread pour montrer à quoi peut servir l’IA, c’est quand même complètement fou

2 « J'aime »

Ok merci Ewi ! Dont la taille ne dépends pas de l’entrainement, il faut juste qu’il ait suffisamment de neurones pour être performant, mais à nombre égale, un réseau entrainé pèse le même poids qu’un réseau non entrainé.
Sur des réseaux de reconnaissance d’image comme on voit partout, on parle de combien de neurone et de quelle taille (ko ? mo ? go ? to ? )

Vouais. J’ai finalement pas lu tout le post d’origine (parce que j’ai pas spécialement envie de m’y mettre, c’est pas lié au document en lui même) mais je trouve quand même que, même si tu te défends d’utiliser des buzzwords, le titre de ton thread est ultimement trompeur.
Et du coup, le titre deeplearning pour les nuls aurait été beaucoup plus adapté (puisque complétement raccord avec le post) et en plus, l’utilisation du buzzword est totalement justifié!
Pour ceux qui ont été trompé par le titre, je relink ici le super chouette Ramene ta science sur l’IA de manière plus générale.

Concernant les réseaux de neurones, je n’ai pas suivi les dernières avancés, mais j’ai fait un stage de 3eme année d’IUT sur le sujet (ok ok, c’était il y a 20 ans but still :smiley: ) et j’obtenais de meilleurs résultats finaux avec un seul neurone qu’avec 3 ou 6. Vu les résultats actuels, je pense (un peu au pif, ça fait longtemps) que c’était lié aux données très limitées d’apprentissage que j’avais à l’époque. Malgré tout, je ne suis pas sur que le nombre de neurones conditionne l’efficacité, mais elle conditionne très fortement la difficulté d’apprentissage.

On parle généralement pas de nombre de neurones mais plutôt de nombre de paramètres. Ça correspond à toutes les valeurs que le modèle va pouvoir ajuster pendant la phase d entrainement pour que (en schematisant beaucoup) en multipliant l input par ces valeurs on obtienne l output attendu.
Le nombre de paramètres va donc beaucoup dépendre de l architecture du modèle et donc de la tâche qu on essaie de résoudre.
Pour te donner un ordre de grandeur un modèle avec une architecture récente permettant de faire de la classification d image avec un précision supérieur à 95% contient quelques dizaines de millions de paramètres.
Et donc comme le disait ewi quand on parle de modèle pré entraîné c’est que les valeurs des paramètres ont déjà été ajusté sur un jeu de données d entrainement. Pour pouvoir profiter de ce pré entraînement il suffit de charger ces valeurs sur le modèle.
Concernant la taille de ces valeurs ça tient généralement en quelques 10ene de méga.

fixed mais mon but etait clairement pas d etre « ultimement » trompeur juste en mal d inspiration et quand j ai commencé à ouvrir ce sujet je savais pas encore vraiment dans quelle direction j allais aller.

jette quand meme un oeil à ce qui se fait maintenant je pense que ca a « un peu » changé…

Et je confirme que le ramene ta science sur l’IA etait tres interressant et je n ai pas du tout la prétention de proposer la meme chose.

Comment tu as fait pour faire une troisième année d’iut?? :sweat_smile:

Si tu as le meilleurs résultats avec 3 ou 6 neurones, c’est peut être que ton problème de se prêtait pas à être résolu par un RNA. Le nombre de neurones ne conditionne pas la difficulté d’apprentissage. Ce qui va faire que ton a apprentissage est bon, c’est surtout la qualité de ta supervision.

Un éxo que je fais faire à mes étudiants est la détection de cercle dans une image. Si dans la phase d’apprentissage ils « valident » des presque cercles, ils auront beau avoir 3, 10, 1000 couches… le résultat sera moyen.

Dans mon IUT, il était possible de faire une 3eme année de spécialisation en optoélectronique, et le diplôme était reconnu en équivalent licence/bac+3 je sais plus trop :wink:
Le problème en question était du traitement d’image, a savoir de la compression lossless d’images noir & blanc issues d’un scanner du cerveau. Je ne saurais pas te dire si, a l’époque, c’était pertinent d’utiliser un réseau de neurone pour ca :smiley:

@blind_man J’aurais du mettre plus de smiley dans mon post, c’était inutilement plein de reproches sans une petite dose d’attenuation :wink: Mon mauvais :smiley:

pas de sentiments durs :slight_smile:

Bonne idée cet article!

C’est quoi la difference entre deep learning et machine learning ?

Depuis un an je fais du R mais orienté au départ données de gestion : en fait le R avait été installé avant mon arrivée pour de la chimiométrie. Et donc je suis devenu fan de R.

Tout ça pour dire : et qu’en est-il des solutions en R en deep learning (et machine learning) ?

Le machine learning, c’est la grande famille de l’apprentissage, supervisé ou non. Le deeplearning en est une branche.

Un exemple de machine learning non supervisé est les k-means et dérivés

Le choix du supervisé ou du non supervisé dépendra du problème et de la nature de la solution qui tu attends.

Il y a des solutions pour Excel alors pour R, y a de forte chance. Je demanderai au collègue statisticiens fan de R ce qu’ils utilisent.

J’ai vu que ca parlait de fast.ai dans le post, alors je mets ce lien que j’avais sauvé il y a peu :

Introduction to Machine Learning for Coders: Launch

https://www.fast.ai/2018/09/26/ml-launch/

legerement off topic parce que ce sont justement des cours de machine learning “standard” et pas de deeplearing.
Par contre ces cours sont aussi tres interressants et principalement sur toute la partie manipulation de data en python.
Je les avais d ailleurs conseillé à bussiere ici Cherche recommandation de livre en datascience et python

Ouais, j’imagine, mais c’est surtout le “For coders” qui est pertinent la dedans je trouve.

intéressant comme thread , surtout non pas en tant que dev mais en tant que client.
Je déploie en ce moment des systèmes de deeplearning pour de la maintenance prédictive dans des usines un peu partout . Industry 4.0 toussa .

(peut être arriverez vous à m’enlevez la désagréable impression que c’est une blackbox sans moyen simple de connaitre les relations qui ont été créées dedans par apprentissage ? . j’avoue ne pas avoir un à priori très positif sur le DL dans tous les sens . surtout pour réinventer la roue souvent dans mon application)