Deep learning, c'est quoi?

Aabu a marqué ce sujet comme résolu.

Tout le monde se secoue ! :D

J'ai commencé (mardi 06 décembre 2016 à 14h17) la rédaction d'un article au doux nom de « Deep learning, c'est quoi? » et j'ai dans l'objectif de proposer en validation un texte aux petits oignons. Je fais donc appel à votre bonté sans limite pour dénicher le moindre pépin, que ce soit à propos du fond ou de la forme. Vous pourrez consulter la bêta à votre guise à l'adresse suivante :

Merci !


Hello,

J'ai rédigé une introduction au deep learning histoire d'initier ceux qui se demande ce que c'est, j'espère que ça va en intéresser certains ;)

Merci pour vos retours _

+0 -0

Salut,

C'est un sujet qui m'intrigue énormément sur lequel je me suis jamais attardé pour le moment. Alors j'ai pris le temps de lire.
Je n'ai lu que le début et pour le moment, je trouve que c'est très bien introduit pour quelqu'un qui n'y connait rien :D

J'ai relevé juste un détail où je ne comprends pas, lorsqu'on sépare le résultat en rouge et bleu. Tu dis que la droite est en y=x-5, mais je n'arrive pas à comprendre pourquoi elle passe par les coordonnées (0, 0) du coup.
Et j'avoue que je sais pas si c'est moi qui est oublié mes basiques des mathématiques ou si c'est une erreur :p

J'ai hâte de le finir ce soir, même si la vue du code m'a fait un peu peur. Mais si la fin est aussi bien faite que le début, je tirerais mon chapeau plutôt deux fois qu'une ;)

Super boulot en tous cas, merci ! :)

Salut,

Merci pour cet article. :)

Je n'ai lu que le début, et il m'a donné l'impression que ses objectifs n'étaient pas très clairs. Tu dis qu'il n'y a aucun pré-requis, mais tu commences par "Le deep learning est une technique de machine learning". Mais qu'est-ce que le machine learning ? Pour moi, cette notion devrait apparaître dans les pré-requis, de même que celle de classification par exemple.

Tu tentes de pallier ce manque dans la deuxième section, mais c'est fait trop rapidement je pense pour que ce soit bénéfique au lecteur. Disons que je ne vois pas l'intérêt de passer outre les notions de base juste pour comprendre de façon superficielle ce qu'il se cache derrière le célèbre deep-learning.

Pour moi, c'est soit on reste en surface en introduisant le ML de manière générale, pour en expliquer l'intérêt et les enjeux, soit on se penche sur un algorithme particulier, mais un minimum en profondeur (ce que tu fais dans la troisième section). Mais un mélange des deux, c'est avoir à mon sens le derrière entre deux chaises.

Sinon, ton introduction me semble un peu légère. Disons qu'elle ne nous permet de savoir si l'article va nous correspondre ou non. Le type du contenu nous met la puce à l'oreille, mais notamment, on ignore à quel point il sera détaillé et donc s'il peut intéresser des gens ayant déjà de la culture générale en ML.

Je n'ai pas lu l'article en détail, donc je m'abstiendrai de faire des remarques sur le fond. :)

+3 -0

Merci pour ces premières remarques :)

J'ai relevé juste un détail où je ne comprends pas, lorsqu'on sépare le résultat en rouge et bleu. Tu dis que la droite est en y=x-5, mais je n'arrive pas à comprendre pourquoi elle passe par les coordonnées (0, 0) du coup.

ShiiFu

En fait ce que je voulais dire c'est que si jamais on devait prédire où le point (0,0) est, on le classifierai chez les rouges. Je vais peut être ajouter le point en jaune pour rendre le truc plus clair parce que en effet il n'est pas sur la droite ^^

Quant au code, j'espère qu'il ne fait pas trop peur :p Je pourrais peut être mettre mon notebook ipython sur github mais je sais pas si ça simplifie vraiment vu que ce ne sera pas interactif non plus.

@Vayel : Mon but c'est de faire un article sans pré-requis. Du coup je vais peut-être ajouter la def de machine learning. Et oui je suis assez d'accord sur le fait que je vais soit trop loin soit pas assez, j'ai écrit la seconde partie sur le neurone en dernier et j'ai hésiter à le faire pour tout dire. Mais le soucis c'est que si je n'introduit pas le softmax et la sigmoide/relu, l'example va apparaitre encore plus comme une boite noire :s

Après c'est sur que je ne peux pas aller trop loin (pas le temps de mon côté pour faire vraiment plus long et après ce ne sera plus lisible en disons 15-20 mins), j'espère en faire titiller la curiosité des gens, donner l'intuition des couches de neurones, l'envie de tester l'exemple et ensuite qu'ils aillent lire quelques unes des sources ou s'inscrivent à des cours en ligne :)

Par contre la classification ce n'est pas clair ? Je pensais qu'une image de chat rendait tout compréhensible xD Mais je peux reformuler si besoin.

Juste pour maximiser l'audience en fait :) . Je vois fréquemment des articles sur des médias généralistes sur le deep learning et ils n'expliquent rien et ne donne aucune références, et c'est dommage car c'est finalement simple d'avoir une idée dessus. Après des articles pointus, il en existent déjà beaucoup (quoique en français il y a genre rien ^^'). Récemment je voulais expliquer à quelqu'un qui y connait rien ce qu'on peut faire avec un réseau de neurones et à part wikipedia j'ai pas trouvé grand chose en français, d'où mon article !

Salut,

Je n'aime pas la formule sans prérequis, car elle est trop souvent mal utilisée. Dans ton cas, en survolant, j'ai vu des exponentielles, une sigmoïde, et une fonction de vecteur. Bref, un niveau Bac scientifique à minima (je dirai même L1 scientifique plus probablement).

Dire que ton article ne nécessite aucun prérequis est dans ce cas précis faux. Soit honnête avec les lecteurs ; tu minimises les prérequis peut-être (et c'est tout à ton honneur), mais il faut déjà un sacré niveau scientifique pour suivre ton article.

Puisque tu vises des gens qui ne connaissent pas la chose, je t'invites à tout particulièrement soigner tes introductions et définitions. Exemple :

Le deep learning est une technique de machine learning [qu'est-ce ?] qui permet de résoudre des problèmes en utilisant un grand niveau d'abstraction [là, tu n'as rien dis. C'est abstrait et ça résout des problèmes, ce n'est pas une définition ^^ ].

L'idée derrière c'est qu'on [les tournures typiques de l'oral sont à éviter à l'écrit] va utiliser plusieurs couches de "neurones" afin de laisser la machine "apprendre" des "formes" contenues dans nos données [neurones et formes non définis. De fait, la machine apprend, mais on ne sait toujours ni quoi, ni comment.].

C'est une technique inspirée par la biologie qui propose un algorithme pour résoudre les problèmes en donnant nos données brutes à l'ordinateur [Encore beaucoup trop générique.] qui se charge tout seul [est-ce magique ?] de les découper en sous problèmes et d'apprendre à résoudre ces problèmes tout seul à partir d'exemples. [Là, tu as un embryon de définition du machine learning : apprentissage automatisé. Mais on ne sait toujours pas de quoi on va parler]

Suivent des exemples de données traitées. Le lecteur, même de niveau L1 scientifique, qui ne sait pas ce qu'est le deep learning avant la lecture, ne le sait toujours pas après la fin de la première partie.

+1 -1

Hello - pour ma défense le paragraphe avec les maths est facultatif ;) Mais merci pour ton feedback en tout cas, va falloir que j'essaie de réarranger le début!

Et oui c'est quasi magique les réseaux de neurones :o Bon il y a genre beaucoup d'hyperparamètres en pratique ^^

Je ferai quelques retours approfondis un peu plus tard, j'ai presque tout lu !

je précise que j'aime beaucoup le format et que je suis en bac + 1.

Est-ce que vous auriez des références de livre pour le machine learning pour noël ? ça m'intéresse vraiment beaucoup ! en tout cas ce tutoriel m'a fait découvrir quelque chose.

+1 -0

Licence CC BY-NC-SA

Le tuto est récupérable. ;)

De plus, les deux contenus m'ont l'air d'avoir des objectifs différents ; celui-ci, c'est plus une présentation qu'un cours sur le machine learning si je ne me trompe pas.

+2 -0

@elegance : Oui c'est dommage que le tuto n'ait pas été publié, il est bien développé en plus. Il traite toutefois d'un sujet différent les k-NN et un peu de clustering hiérarchique.

Et oui clairement mon but n'est pas de faire un cours, je n'ai pas le temps personnel ni la prétention de faire mieux que ce qui est en ligne déjà et je ne pense pas non plus avoir la légitimité pour cela. Par contre je voudrais initier les gens et les pousser à regarder par eux même avec déjà une petite idée :)

@Unknown : hésite pas à me donner ton retour dans la semaine ;) je vais essayer de faire les correction rapidement et de le pousser pour valider ensuite.

Pour ce qui concerne les livres sur le machine learning, voilà quelques ref, pas trop sur le deep learning car là ça change encore super rapidement.

  • Comme intro en statistique : An Introduction to Statistical Learning with applications in R c'est comme le bouquin d'après mais en plus léger (moitié moins épais ;) ), je m'en suis peu servis mais on me l'a conseillé et il a l'air bien. Je l'ai là sur mon bureau du coup en le refeuilletant le niveau d'entrée en maths a l'air pas trop élevé. http://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
  • Comme référence il y The elements of Statistical Learning, c'est vraiment bien. Ce n'est pas sur le deep learning mais plus sur les techniques statistiques qui sont vraiment bien à connaitre. En plus le livre est disponible gratuitement sur le web :) http://statweb.stanford.edu/~tibs/ElemStatLearn/printings/ESLII_print10.pdf Il coute quand même cher en version papier je crois.
  • Il y a aussi Pattern Recognition and Machine Learning http://users.isr.ist.utl.pt/~wurmd/Livros/school/Bishop%20-%20Pattern%20Recognition%20And%20Machine%20Learning%20-%20Springer%20%202006.pdf pareil gratuit online et un bras en papier xD
  • ah et aussi : https://www.coursera.org/learn/machine-learning ce cours de Andrew Ng est très bien il paraît !! :)

Salut !

Je viens de voir qu'OC à publié un cours d'introduction au machine learning, qui vise à présenter les choses de façon générale et que je trouve pas trop mal ! Pourquoi ne pas faire une première partie du même genre qui donne au lecteur les grandes lignes et le vocabulaire de base du sujet ? Car parler de deep learning quand on ne sait pas ce qu'est le learning tout court ni à quoi cela sert c'est un peu mettre la charrue avant les boeufs non ?

Pourquoi ne de faire une première partie (ou un premier tuto ?) qui présente le maching learning de façon générale puis une seconde partie qui présente plus spécifiquement le deep learning.

Je te donne un petit exemple de comment personnellement je présenterait un neurone, sans utilise de maths dans un premier temps avant de donner des détails ensuite. L'idée est de donner l'intuition pour le non matheux en utilisant des exemples et expliquant les termes et dans un second temps de présenter les choses plus en détail. Comme ça tout le monde y trouve son compte. Le non matheux s'arrête à la première partie et comprend le principe, le matheux peut lui aller plus loin et mieux capter l'essence du sujet. Pour la première partie une bonne façon selon moi de faire est de te dire "comment est-ce que j’expliquerai ça à ma grand-mère ?". Tu n'en fera pas une data scientist, mais tu pourra lui donner une culture générale du sujet suffisante pour ne pas être perdu et en comprendre les grands principes et enjeux.

Un neurone fonctionne de façon similaire à un neurone de notre cerveau : le neurone reçoit plusieurs signaux, traite ses signaux et en fonction de ce traitement renvois un résultat en sortie. Les signaux sont les données qu'on à pour traiter notre problème et la sortie est la solution qu'on propose. Un exemple simple est d'imaginer un neurone qui essaye de prédire si une personne doit prendre son parapluie ou pas. Notre neurone reçois deux entrées (= données) pour l'aider à prendre sa décision : une première entrée qui est la probabilité qu'il pleuve dans la journée et la seconde entrée est la distance que l'on doit parcourir à l'air libre (avec le risque d'être mouillé si on n'a pas pris de parapluie et qu'il pleut). Le neurone utilise ses deux informations pour calculer la probabilité qu'on prenne un parapluie, ce qui correspond à la sortie du neurone.

(Mettre dessin du genre http://prntscr.com/dja1jj).

Notre but est d'entrainer ce neurone à nous dire en fonction des deux paramètres d'entrée si on doit ou non prendre notre parapluie. Pour cela le neurone va faire des calculs en utilisant les données qu'il reçoit afin de trouver la meilleure réponse possible. Pour faire son calcul, le neurone utilise ce qu'on appel une fonction d'activation. On parle de fonction d'activation car elle décide si le neurone s'active ou non. Si le neurone estime qu'on ne doit pas prendre le parapluie on dit qu'il ne s'active pas et si il nous conseil de l'emporter alors on dit qu'il est activé. La fonction d'activation est une fonction mathématique qui prend en paramètre les entrées du neurone et donne en résultat la sortie du neurone. Ici notre fonction pour notre neurone parapluie serait de ce genre :

$$f(probabilitéPluie,distance) = ProbabilitéPrendreParapluie$$

Pour l'instant on ne s'intéresse pas à savoir exactement comment cette fonction marche et fait son calcul : on admet qu'elle prend les données et qu'elle les combinent de façon à donner une probabilité en sortie. Nous examinerons plus en détail ces fonctions plus tard.

Une chose importante à noter est que notre fonction ne vas pas accorder la même importance à tous les paramètres qu'elle reçoit pour déterminer le résultat. Pour notre neurone-parapluie il semble normal que la probabilité de pluie est plus importante pour déterminer le résultat final que la distance à parcourir : après tout, si il n'y a aucune chance de pleuvoir (probabilité de pluie = 0), la distance importe peu : on n'a pas besoin de parapluie. Pour tenir compte des différences d'importance des paramètres, le neurone va leur accorder ce qu'on appel un poids. Le poids d'un paramètre indique son importance pour le neurone : plus le poids est élevé, plus ce paramètre "compte" dans le résultat final.

Pour chaque paramètre $i$ on note son poids $\omega_i$ et on multiple chaque paramètre par son poids avant de le donner au neurone. Par exemple si on estime que pour notre neurone-parapluie doit prendre en compte la probabilité de pluie de façon plus importante que la distance pour calculer la sortie on peut décider de donner un poids $\omega_1 = 2$ a la probabilité de pluie et attribuer un poids normal de $\omega_2 = 1$ a la distance. Notre neurone ressemblera alors à ceci :

http://prntscr.com/dja422

N'importe quel neurone peut alors être vue comme une "boîte noire" qui traite des paramètres spécifiques qui vont être chacun multiplié par un poids qui indique son importance et donne un résultat en sortie :

Mettre dessin ici.

La question importante du maching learning avec réseau de neurone est de savoir quels sont les poids $w_i$ que l'on doit affecter à chaque paramètre pour que notre neurone soit le plus efficace possible. L'idée générale est que a chaque fois que notre neurone va avoir de nouvelles données, il va modifier un petit peu les poids afin de se rapprocher de la bonne solution. Plus on lui donne de données, mieux il va ainsi pouvoir ajuster ses poids. Si ce n'est pas encore très clair pas de panique, c'est normale. On reviendra là dessus plus tard. Mais pour le moment, avant de savoir comment trouver les poids idéals on va se pencher plus en détail sur la fonction d'activation du neurone pour comprendre comment en pratique elle utilise les paramètres pour calculer la sortie. Cela demande quelques bases en mathématiques, aussi n'hésite pas à réviser un peu ou à sauter cette partie si vous n'avez pas encore le niveau nécessaire.

Là on parle des sigmoïde et on peut développer pourquoi pas !

Voilà, c'est vraiment fait vite fait et je ne suis clairement pas un spécialiste du sujet, mais c'est ce genre d'approche que j'adopterai si je devais expliquer à un débutant ce qu'est un neurone et comment il fonctionne. En espérant ne pas voir trop dit de bêtises et que ma réponse t'aidera un peu !

+0 -0

Le point de vue de Demandred est très intéressant je pense mais, de façon plus général, il faut savoir de quoi on parle.

Posons un postulat de base : le deep-learning (mais de façon général tout ce qu'il y a dans le machine learning) n'est pas un sujet simple. C'est un domaine complexe qui demande des compétences dans pas mal de domaines, entre autre un certain niveau d'algèbre linéaire, calcul numérique et statistiques.

Partant de là il y a pour moi seulement deux approches possibles pour faire un contenu sur le domaine :

  1. Vulgarisation : La but est d'expliquer "avec les mains" de ce qui se passe, sans rentrer dans les détails. Il ne devrait pas y avoir besoin de pré-requis particulier et, si il y a du code ça doit être de grosses boite noires sans chercher à expliquer les détails (c'est possible avec les libs actuels).
  2. Exhaustif : Où on va donner des détails mais il faut avoir alors conscience que plus le pré-requis sera bas plus il faudra détailler des détails. L'ensemble doit être rigoureux et correct.

Je trouve que cet article a une position batarde de ce point de vue : tu dis qu'il n'y a pas de pré-requis mais tu va très vite dans des équations de math et des détails très rapidement qui perdrons beaucoup de gens qui n'ont pas le niveau. Le fait que tu dise la partie math "optionnel" en intro n'est pas une solution selon moi : la majorité des lecteurs vont la lire au fil de la lecture et se retrouverons perdue. D'ailleurs je doute que la suite soit vraiment indépendante de la partie math.

Ce que propose Demandred correspondrait a un début de cours exaustif avec pas ou peu de prérequis. C'est possible mais comme il vient de le démontrer, pour la moindre notion "simple" (ici un simple neurone), il faut prévoir beaucoup d'étapes, d'explications, de schémas et de détails.

Les deux approches sont intéressantes et ne s’intéresse ni aux même personnes, ni dans les même conditions. Les deux sont très compliqué à écrire.

Quelque chose me dit que tu visais la première mais je trouve que tu donne a la fois trop de détails par moment et à la fois tu ne vulgarise pas assez certains points.

Dans tous les cas bonne chance.

Pour ceux qui s’intéressent au ML, voici un lien récent qui m’a plu : https://elitedatascience.com/python-machine-learning-tutorial-scikit-learn

J’ai lu en diagonale, sans mettre en pratique du tout, mais l’esprit ’badin’ voire superficiel m’a bien plu.

Sur ce tuto, on n’explique pas POURQUOI ça marche, on se moque totalement des aspects théoriques ; on positionne Scikit-Learn/Machine-Learning comme une boite noire, et on explique rapidement comment tirer profit de cette boite-noire.

Cf. la discussion que nous avions eu ici. Bon, c’était pour un tuto mais honnêtement, ce serait bien plus jouable de présenter ça de la sorte.

L’idée serait de sectionner le sujet et de prendre le temps d’écrire deux ou trois articles s’il le faut mais de présenter le DL par étape. De la vulgarisation dans un premier article vers une entrée en matière plus mathématique.

+0 -0
Ce sujet est verrouillé.