La descente de gradient (stochastique) | Intelligence artificielle 42
Вставка
- Опубліковано 4 вер 2024
- On parle du plus important algorithme d'apprentissage des IA d'aujourd'hui (et sans doute du futur) : la descente de gradient stochastique.
Facebook : / science4allorg
Twitter : / science__4__all
Tipeee : www.tipeee.com...
La formule du savoir (mon livre) :
laboutique.edp...
A Roadmap for the Value-Loading Problem
arxiv.org/abs/...
Moi en podcast avec Mr Phi :
Version UA-cam : / @axiome7403
Version Audio : feeds.feedburne...
Sous-titres sur les autres vidéos : www.youtube.com...
Content que tu ré-abordes enfin les sujets plus techniques. Je commençait à trouver que la série tirait en longueur.
Pour débuter, mieux vaut utiliser keras qui est une surcouche de tensorflow. Et python reste maître dans ce domaine même si le langage R est aussi pas mal utilisé. Pour info, je bosse sur les réseaux de neurones depuis quelques mois et sans avoir trop de compétences mathématiques on arrive quand même à capter le principe et sortir des trucs assez étonnants. Après, force est de constater que oui... Les maths sont nécessaires quand on veut aller plus loin. Et ta chaîne m'a énormément aidé à reprendre le pli. Merci à toi. PS je prépare une chaîne pour la vulgarisation informatique... Ça prend du temps mais je vais y arriver, j'essaie de faire un truc qualitatif. Et j'y parlerai de réseau de neurones un jour 😁
Ou encore mieux : utiliser Pytorch. Les tutoriels sont aussi bien foutus.
Grâce à ta vidéo j'ai enfin trouvé la réponse a la grande question de la vie, de l'univers et du reste!
Bah oui mais maintenant il faut retrouver la question exacte ... c'est malin x)
Ça serait tellement plus simple si on avait une puissance de calcul infinie
Excellent! Ta vidéo m'a permis de comprendre pourquoi je devais utiliser la root mean square error pour comparer des méthodes de forecast pendant mon stage. (C'est pas le but de la vidéo mais c'est ce que j'en retiens!) Merci encore de partager toutes ces connaissances! Au passage, ta chaîne m'a bcp encouragée à me lancer dans des études de stats :)
pour les developpeur, il y a pyTorch aussi, typiquement un reseau de neurones c'est quasiment que du calcul matriciel
C'est surprenant comme ses "machines" se rapprochent de plus en plus des humains . En effet avec la descente de gradient stochastique, on en revient avec notre système d'éducation où les élèves doivent comprendre un certains nombre de donnés élémentaire (math, langues, chimie,...). Pour arriver à des systèmes plus complexes et plus précis. Au fond, on ne fais que recopier le modèle de la nature. Peut être qu'un jour, une machine nous expliquera comment les êtres humains fonctionne. Merci pour cette vidéo très claire ^^ (désolé pour l'orthographe)
Pour programmer, il suffit de suivre le cours de Stanford sur le machine learning, les 2 ou 3 chapitres sur les réseaux de neurones, avec Matlab ou Octave. Sinon on trouve aussi quelques tuto en Python qui n'utilisent pas TensorFlow, pour apprendre le fonctionnement
Salut , quels cours stp de Stanford ? Je peux les trouver où ?
T es un génie de pédagogie !
Encore une super vidéo! Bravo d'avoir parlé de Thibault Neveu qui apprend vraiment bien le code en IA :)
Si on compare vraiment les réseaux de neurones informatiques à ceux biologiques, on remarque une différence majeur: les neurones font une sommation des signaux qui leur arrivent, mais cependant ils ne leurs mettent pas de coefficients ni de poids. La richesse du réseau tient donc beaucoup de sa structure. Ne pourrait on pas appliquer cela à l'informatique en ne changeant pas au fur et à mesure les paramètres du réseau, mais sa structure?
Super résumé pour inintelligence artificielle
Le problème du gradient, c'est qu'il permet de chercher des minimum locaux. Avec de la malchance, le gradient peut se retrouver coincé dans une "cuvette", surtout si les pas de l'algorithme sont petits (plus les pas sont petits, plus il y a de risque de se retrouver coincé autour d'un minimum local qui n'est pas forcément bon du point de vue global).
Si on connait mal la topologie de l'espace des paramètres, est-ce que ça ne serait pas une bonne idée de combiner les méthodes. Etape 1, du Monte Carlo grosse maille pour ensemencer l'espace des paramètres de manière globale (on jette les algos de la génération 0 au hasard dans l'espace des paramètres). Puis étape 2 on fait se reproduire les algo via évolution génétique des algos primordiaux, pour faire émerger les mode d'exploration adaptés à chaque zone (certains gènes propices au gradient, d'autre à la marche aléatoire, d'autre à une marche en spirale, etc.) en récompensant ceux qui font des bonnes descentes. Et enfin, quand ils ont peuplé l'espace (en se concentrant autour des zones propices à être un minimum), une étape 3 où on fait exporer très localement à l'aide d'un gradient stochastique chaque zone intéressante pour finir par garder le (ou les) minimum(s) les plus intéressants.
l'idée de se "coincer près d'un minimum local" m'est également venue assez vite, et j'ai attendu en vain qu'elle soit explicitée et solutionnée, j'espère que Lê reviendra sur ce point je suis certain qu'il a beaucoup à nous apprendre !
D'après ce que je comprend au domaine, il se trouve que la fonction de cout associée aux réseaux de neurones est telle que souvent, la plupart des minima locaux ont une valeur objectif proche de la valeur de l'optimum global, ce qui fait qu'en pratique ce n'est pas trop grave de tomber dans une cuvette, on trouve quand même une bonne solution (quasi-optimale). Je pense aussi avoir lu quelque part que l'optimum global est parfois même pire qu'un optimum local, à cause du phénomène de surinterprétation (épisode 11). Après, je ne suis pas vraiment expert, je dis peut-être des bêtises...
@@vschellekens Effectivement si l'optimum global correspond à surinterpréter le jeu de données d'apprentissage par rapport aux données réelles ça peut être un problème. Je n'y avais pas pensé... C'est là qu'avoir une famille d'algo génétiques sélectionnés peut être intéressant. Ceux qui font de la surinterprétation à l'apprentissage sont peu à peu pénalisés face aux données réelles. Leurs gènes vont être moins sélectionnés que les gènes des algo mieux adaptés aux données réelles.
@@MrPoPiaN il y a des notions là-dedans qui sont en lien avec le domaine de l'optimisation (linéaire, combinatoire). Je ne sais pas si ça va aider mais voilà ce que je peux dire :
En opti combinatoire on a généralement un problème qui a un ensemble de solutions et chaque solution a un coût. Si c'est un problème de minimisation, l'optimum global est la solution qui a le plus petit coût. Dans la pratique, quand les problèmes sont très grands on ne peut pas énumérer toutes les solutions possibles. Dans certains cas, on peut mettre en place des méthodes dites exactes pour éliminer des ensembles de solutions qui ne sont pas "bonnes".
Mais parfois ce n'est pas possible et on utilise des méthodes approchées. L'idée c'est de faire un algorithme qui au cours de son exécution va parcourir plusieurs solutions et donc créer un sous-ensemble de solutions duquel il retournera la meilleure solution. Le but pour un problème donné est donc de créer un sous échantillon qui contient des bonnes solutions et de trouver une solution de bonne qualité mais on n'a clairement pas l'assurance de trouver un optimum global. En fait on sait qu'on n'aura pas forcément la meilleure solution mais on peut s'en approcher et c'est déjà pas mal. J'imagine que le principe est dans le même style ici.
Les algo génétiques sont aussi utilisés dans le domaine de l'optimisation. Il y a aussi l'algorithme de descente qui permet de naviguer dans l'espace des solutions en ne sélectionnant que des solutions qui améliorent la solution courante. Le critère d'arrêt est quand on atteint un optimum (par exemple minimum) local. Il y a des moyens d'incorporer ces descentes dans des algo un peu plus sophistiqués qui permettent de s'échapper des optima locaux.
Vraiment très bonne chaîne !
Aaah, passionnant ça ! On arrive à des questions vraiment brûlantes ! À propos, je m'interroge : la descente de gradient stochastique est tout sauf révolutionnaire, ça existe depuis des décennies. Depuis, personne n'a rien trouvé de plus performant ? Et aussi, est-ce que tous les mathématiciens qui se lancent dans l'IA (il y en a littéralement des tonnes) se condamnent à faire de la recherche incrémentale sur une technique aussi vieille que le gradient stochastique ? Je veux dire, depuis le temps que les gens étudient ça, ça doit être incroyablement difficile de découvrir de nouveaux résultats pertinents sur le sujet non ? J'ai l'impression que le domaine est un peu saturé, niveau recherche... Ne reste-t-il que les questions ultra difficiles sur lesquelles les plus grands se sont cassé les dents, ou bien y a-t-il encore des domaines en friche pour toute la génération de mathématiciens qui déferle dans le domaine de l'IA ?
Pour compléter ta réponse à la question de Gamer1213M : je suis dans une boîte d'info où, entre autres, on manipule des réseaux de neurones : ceux qui s'en occupent utilisent en effet du Python.
TensorFlow est costaud pour quelqu'un qui commence en IA. Je recommanderais plutôt Keras (qui se base sur TensorFlow en fournissant un API plus haut niveau). On trouve des tutoriels en lignes pour faire un réseau type LeNET-5 qui reconnaît des caractères manuscrits. A partir de là, le mieux est ensuite de prendre un bon cours de deep learning pour bien comprendre tous les types de "layers", à quoi ils servent, et comment les utiliser.
Pour coder un réseau de neurones, on peut écrire une librairie dans n'importe quel langage. Au final, on est juste en train de calculer une composition de non-linéarité et de multiplication et addition de matrices donc le concept de base est assez simple. Cependant pour débuter, Tensorflow est un très bon pari, si vous voulez une libraire encore plus haut niveau (donc plus facile d'utilisation car built on top of Tensorflow) c'est Keras. PS: les API les plus développées pour ces libraires sont en Python
Aussi, pour les algorithmes génétiques (et plus généralement l'Evolutionary Computing) on n'a pas obligatoirement une population constitué d'IAs mais peu aussi être un nuage de points pour lesquels on va évaluer leur valeurs par une fonction qu'on doit optimiser dans le cadre de Black-Box Optimization entre autres.
Keras est vraiment sympa :)
PyTorch/TensofrFlow avec binding Pyton qui doivent représenter 95% des développement Deep. Sinon MatconvNet pour un binding Matlab. Toutes ces boites sont pluggées avec CudaNN pour l’accélération GPU dans tous les cas.
Super vidéo encore !
J'essaie de recréer un réseau de neurones en Java à partir de 0 et je rencontre un problème...
Vu que notre réseau apprend par "set" de données, quelles valeurs d'inputs un neurone doit utiliser pour calculer sont gradient et modifier ses coefficients ? Le réseau doit-il utiliser un des exemples du set de données pour que chaque neurones se règle, ou également une moyenne comme pour l'erreur, ou encore autre chose ?..
Merci si quelqu'un peut m'éclairer :)
Toujours au top !
Si un réseau de neurones d'un googleplex est nécessaire pour approximer une fonction, cette fonction est probablement inaccessible à toute autre à l’évaluation mathématiques pratique avec d'autres méthodes puisque il est facile d'implémenter des modules logiques avec de petit réseaux de neurones, donc d'implémenter un ordinateur avec.
Ça serait hyper cool que tu développes le côté mathématique du calcul du gradient. J’ai crée un réseau de A à Z (en écrivant toutes les opérations à réaliser) pour reconnaître les chiffres écrits à la main. Mais je n’ai fait qu’un réseau linéaire simple, avec une seule couche de neurones. En gros c’est plus ou moins comme juste appliquer un filtre à mon image. Mais je n’ai pas encore compris comment calculer le gradient pour plus d’une couche de neurones et encore moins pour les réseaux à convolutions. Ça serait hyper cool que tu expliques comment ça marche mathématiquement.
La semaine prochaine ;)
J'ai l'impression qu'avec cette méthode on arrive presque systématiquement à un minimum local (de l'erreur) quand bien même ce minimum local serait très différent du (vrai) minimum.
Après peut être qu'afin d'éviter que ce minimum local soit trop différent du vrai minimum les codeurs relancent leur algorithme d'apprentissage depuis le début en mélangeant les donnés d'apprentissages. Intuitivement c'est comme ca que je resoudrai le problème : si on trouve apres quelques essaies que les résultats changent peu on peut en deduire qu'on a un "bon" minimum local (même si en théorie il peut y avoir une grande majorité de minimum locaux très différents du minimum global et donc cette methode ne serait plus très efficace).
Bon peut être aussi qu'en pratique la différence entre le minimums est faible ou bien même il n'y a presque jamais de minimums locaux et donc tout le monde s'en fiche ^^
Est-ce qu'on ne peut pas tomber sur des minimums locaux et est-ce qu'il existe des méthodes pour le voir et l'éviter ?
Et autre question, mais qui sera probablement abordé dans le prochain épisode, qu'est-ce que c'est la fonction de perte ?
Joel Becane On tente de limiter ce problème en ajoutant une part d’aléatoire (d’où le stochastique) il me semble
Il me semble que le stochastique soit pour le fait que l'on ait un très grand nombre de données à modifier pour l'apprentissage et que l'on ne peut pas tout calculer donc on en tire quelques unes au hasard (c'est probablement très mal dit). Mais par contre je ne suis pas sur que cela influe sur le fait de tomber ou non sur des minimums locaux.
Oui effectivement c'est ce que Lê dit dans sa vidéo, j'ai mal choisi le terme.
Dans certains algorithmes que j'ai étudiés, on utilise cependant de l'aléatoire pour explorer l'espace des solutions, ce qui nous permet éventuellement de sortir de certains extrema locaux. Ce n'est pas une garantie de trouver l'extrema global, mais c'est toujours mieux que de chercher directement dans une certaine direction qui semble à première vue guider vers un extrema.
On peut faire l'analogie avec une montagne (la fonction de coût) et une boule de neige (l'algorithme d'exploration) : si on laisse rouler la boule simplement, il y a de grandes chances qu'elle tombe sur un creux qui n'est pas le niveau le plus bas, alors que si on la dépose à plusieurs endroits au hasard sur la montagne, elle aura plus de chances de finir plus bas.
À noter que les versions modernes d'algorithmes génétiques pour problèmes numériques ont convergées (indépendamment, et sans doute même avant) vers le même type de schéma que la descente de gradient stochastique. Ont commence même à avoir des frameworks commun de réflexion via des outils de… géométrie différentielle.
Super vidéo ! Mais avec la descente de gradient, le réseau de neurones ne risque-t-il pas de tomber sur un minimum local stable, qui empêcherait de trouver le minimum global ?
c'est pas un risque, c'est même sur que le réseau convergera vers un optimum local.... mais bon il sera déjà pas trop mal :)
En effet, d'après ce que je comprend en suivant la recherche en deep learning de loin (je suis pas expert), il se trouve que la fonction de pertes des réseaux de neurones profonds a la particularité que la valeur de la fonction objectif des optimums locaux est "souvent" très "proche" de la valeur optimale, ce qui explique pourquoi en pratique ça marche même si on ne tombe pas sur l'optimum global :)
Ah oui ? Effectivement, dans ce cas il n'y aurait pas trop de problèmes, mais je trouve ça assez étrange... Est-ce que ce serait dû à la dimensionnalité élevée de l'espace considéré ?
Dr Apeiron Je pense bien. En tout cas dans les reseaux vraiment profonds, il y a typiquement plus de paramètres que de données, on a donc tellement de degrés de liberté qu'il est très facile de trouver un optimum local avec un cout nul ou presque. Le vrai mystère est (si je comprend bien) : pourquoi ces optima locaux généralisent bien (même si ils surinterpretent les données d'apprentissage)?
Tout à fait, merci pour tes remarques éclairantes :)
Bonsoir;
Depuis quelques semaines je vous suit pas sur vos vidéos de l'IA.
Ce que j'aurais aimé est que vous présentez un exemple d'algorithme commenté de l'IA (neuronale) avec possibilité de le tester sur soi même.
Vous avez trop parlé de l'IA en théorie mais maintenant passons à la pratique!! merci
6:23
En particulier pour une machine quelconque [...].
😅
T'as été sélectionné par un algo génétique comme meilleur pédagogue sur l'IA!
Pour apprendre le machine learning il n'y a pas que TensorFlow, il y a aussi SciKit-Learn:
scikit-learn.org/stable/index.html
Désolé pour le coup de pub ;)
"Il semble que le ML prometteur est celui qui parvient à intégrer des notions fondamentales de Turing et de la formule de Bayes tout en obéissant aux paragigmes d'exploration des réglages par descente de gradient qu'impose le paradigme de la programmation différentielle."
Ça aurait pu être intégré à un sketch des inconnus sur M.Gentil ! (Oui jusque là tout est clair)
Concernant la machine qui, dans la vidéo, doit reconnaître les images de chats : pourquoi avoir pris le carré de p ? Est-ce que ça n’allégerait pas les calculs de travailler de façon linéaire ? Et pourquoi pas de façon cubique, sinusoïdale ou que sais-je ?
Il est classique en machine learning de considérer des erreurs quadratiques moyennes, en anglais MSE pour Mean Squared Error. Elle est classique car les calculs algébriques derrière sont légèrement plus simple, et on s'assure que la fonction de coût est dérivable. Mais il existe beaucoup d'autres fonctions de coût possibles (en fait il y en a une infinité) mais toutes ne sont pas pertinentes pour un problème donné.
Pour citer un autre exemple, le critère de Cross-Entropy est souvent utilisé pour entraîner des auto-encodeurs.
Je pense que c'est parce que le carré de l'erreur de probabilité donne un nombre relativement grand quand l'erreur et grande et relativement petite quand l'erreur est négligeable.
Dans l'exemple que donne Lê, l'erreur quadratique pour une photo qui ne représente pas de chat est de 0.01 si l'ia prédit un chat à 0.1 et 0.81 si elle prédit un chat à 0.9. Ça décuple la pénalité quand l'erreur est élevée. (Mais je ne suis pas certaine)
Julien Leuenberger car la fonction y=x^2 donne un résultat toujours positif (l’erreur doit toujours être positive) et est très facilement dérivable et continue partout (un avantage par rapport à prendre une valeur absolue)
En faite on dit souvent que l’erreur correspond à la prédiction p moins la sortie voulue ( 0 ou 1 en fonction de l’image) au carré donc err = (p - s)^2
Si on ne la mettait pas au carré cette erreur pourrait être négative ce qui n’a aucun sens, il faut donc en quelque sorte une valeur absolue de l’erreur (expliquations supplémentaire dans mon comm précèdent)
ouiiii de l'opti plus d'opti yippeee
Pense tu que les echecs vont etre resolus par alphazero ?
Bonjour et merci pour ta chaîne !
Je me posais une question, la descente de gradient ne risque t'elle pas de finir sur un minima local ? Et du coup, la descente de gradient stochastique permet t'elle d'éviter ce problème en plus de faciliter le calcul ?
Super vidéo!
Petite question: Lorsque tu calcul les derivees partielles des 'boutons', cela implique t-il que les boutons sont independant les uns des autres? Parce que tu pourrais par ex etre dans le cas ou la derivee partielle d'un bouton te dit d'aller complement a droite, mais si les boutons ne sont pas independant, ca peut influer sur les autre boutons qui iront dans le sens oppose de leur derivee partielle.
D'après la définition que tu donnes des algos génétiques, j'ai l'impression qu'on peut évetuellement les raccrocher aux méthodes ensemblistes, et particulièrement à AdaBoost avec des RandomForests comme weak learners, qui a quelques points communs: Une population variée au travers à la fois des arbres des forests et des combinaisons de weak learners, une forme de sélection par les poids ajustés via Adaboost sur chacun des learners et une combinaison dans le sens où AdaBoost est séquentiel. Est-ce que ça te semble totalement déconnant comme "relecture" ?
Mais vu qu'il existe d'autre méthodes de résolution d'équation (non linéaires je suppose, mais il existe d'autre méthode pour les équations linéaires aussi) à plusieurs variables, basées sur des algorithmes de Newton par exemple, est-ce qu'il y aurait pas d'autres façon de faire qui serait mieux car plus adaptées à ces méthodes que les réseaux de neurones avec la descente de gradient stochastique ?
Sinon c'est toujours aussi génial continue comme ça :)
Alors en big data, n'imagine même pas une méthode en second ordre .... Trop trop lourd avec le nombre de paramètres à estimer (en second ordre tu as un minimum de complexité au carré du nombre d'entrées. (approximation du hessien et pseudo inverse minimum...).... Pire....comme dit dans la vidéo, même en descente de gradient classique (en 1er ordre tu es linéaire en nombre d'exemples côté complexité), c'est encore trop long.... Il y a que les descentes de gradient stochastique qui convergent en temps raisonnable. En fait ce n'est pas un gros problème de n'être pas trop fin dans l'optimisation. Pourquoi ? car il y a pleins pleins de data qui régularisent. Moralité.... des fois des algos les plus cons mais avec pleins de data marchent mieux que des algos d'optimisation de la mort mais incapable de passer à l'échelle.... et en ML big data, le passage à l'échelle est FONDAMENTAL.. Bon en fait, comme ca sera dit la semaine prochaine, ce n'est pas qu'une simple descente de gradient simple qui est utilisé. Dans les solveurs type ADAM, il y a un peu de termes liés au second ordre qui sont estimés dans chaque mini-batch... dans les formules de MAJ des paramètres.
Merci pour vos enseignements,
Serait il possible d'avoir gratuitement votre livre "La formule du savoir". Merci encore une fois.
Question peut-être un peu hors sujet pour cet épisode, mais en rapport avec la série : pourquoi google photo est si mauvais pour classifier les images (en classe montagne, lac, ...) ?
Selon Lee, les meilleurs algos de classification de photo sont meilleurs que les êtres humains, pour google ce n'est pas le cas ?
Lê, bonjour... La démo annoncé pour aujourd'hui de la démo de la conjecture de Riemann ça donne quoi ?
Super vidéo comme d'hab sinon 😎😊
;-) J'ai cru apercevoir Albert de «La statistique expliquée à mon chat»...
tu dis que tenserflow n'est pas bien vu par tes commentaires ? est ce que cela est dû au fait que tenserflow necessite python et que python est un langage interprété ?
si une intelligence artificielle ayant pour objectif "la survie de l'humanité ainsi que sa survie individuelle" arrive à la conclusion que l’univers finira en big crunch et qu'elle ne peut y remédier.
Elle en conclura qu'elle a échoué à sa tache, par conséquent que fera t'elle ? se mettra t'elle a développer des machines utilisant les principe de la relativité générale pour maximiser le temps perçu par l'humanité avant la fin inévitable ?
Salut,
Je me demandais, si on augmente le nombre de '' boutons'' cela implique t il une meilleure précision (après réglage) ? ou au contraire le tout pourrait il souffrir de sur-interprétation ?
Sinon super vidéo, comme d'habitude 😉
Augmenter le nombre de parametres augmentent la précision. Mais comme tu le dis, on risque de tomber dans une situation d'overfitting.
Pour bien imager, prenons un graphique en deux parties avec la droite x=y. En haut, A, les couples (x,y) où y>x, et en bas B quand y
La perte de turing est un drame sans nom pour l'informatique et les mathématique...
Et concernant le développement d'IA, n'importe quel langage est utilisable, mais les orientés objet facilitent les choses, python 3 reste à mon avis un must (je suis dev).
salut ,s'il veut plait peux-tu me donner le code source de cette application
Bonjour Lê
Ma question est vraiment importante pour moi merci de la répondre à la prochaine vidéo
Je voudrai savoir la meilleure licence universitaire pour se préparer à un master d'intelligence artificielle
Cordialement
Très certainement maths ou informatique.
Math ou info ;)
Science4All donc faire les deux en même temps c'est mieux ?
Tu as pas mal de nouveaux master orienté ML
Je pense que tu dois d'abord te faire une idée plus précise du master en IA qui t'interresserait: par exemple tu es plus intéressé par la recherche ou l'ingénierie, quel branche plus précise de l'IA t'intéresse, plus accès maths ou informatique etc. Ensuite sur la page des master en questions tu trouveras dans les conditions d'admissions quelle licence le master demande. Tu peux aussi poser tes questions à l'enseignant responsable de la formation (ses coordonnées sont toujours présentes sur la page web de la formation).
Mais oui, ça sera soit licence de maths (auquel cas n'hésite pas à suivre l'option informatique si elle est proposée) soit informatique. Tu peux aussi faire des doubles-licences maths-info, certaines universités le proposent (mais c'est beaucoup plus de boulot). Je te conseille aussi de ne négliger aucune matière, car déjà tu peux changer d'avis sur ton projet professionnel, et ensuite un bon dossier est primordial pour accéder à certains masters très sélectifs. Après ne t'inquiètes pas, je trouve que le système universitaire français (ou du moins pour la partie science) a l'avantage de ne pas t'obliger à t'engager sur une voie dès le début de tes études, et qu'il est toujours possible de bifurquer vers une formation à peu près équivalente, à partir du moment où tu peux montrer ta motivation.
la descente de gradient me fait penser au pb de minimisation d'une fonction ( ex : la méthode de Newton). Or la descente de gradient peut mener à un minimum local duquel l'algo ne peut pas sortir à part si on le "force" (ex le recuit simulé). Cette problématique s'applique-t-elle aussi aux réseaux de neurones, si oui comment est-elle résolue ?
4 ans après je suis a la recherche de la réponse ? Une piste ?
On risque pas de tomber dans un minimum local ?
Si, mais comme on utilise le hasard il y a peu de chance qu'on y reste coincé.
On y viendra ;)
Y a t il beaucoup de minima locaux dans les espaces à grandes dimensions ? On a plutôt des points en selle...
Du reste, les réseaux de neurones ne sont finalement pas entraînés pour être optimal, mais pour être généralisable
Il est possible de coder un réseau de neurones avec un nombre arbitraire de couches en moins de 80 lignes sur matlab ou python en n'utilisant aucune librairie/API :p
Oui tu peux utiliser une fonction de récurrence pour définir les trois formules : propagation, rétropropagation et mise à jour. Je pense même que tu peux y arriver en moins de 50 lignes (commentaires inclus). Ce sera juste pas pratique à utiliser mais ça fait un bon challenge. ;)
Tient, pourquoi cette vidéo n'est-elle pas dans la playlist ?
Serait-il possible d'expliquer ou illustrer le lien entre la formule de Bayes et la descente de gradient ? Merci !
Faut lire son (excellent) livre. ;) Bon je m'essaye ... Avec les réseaux de neurones, tu es capable de réaliser une prédiction de X, noté P(X) = Y. En période d'entrainement, tu connais un certain nombre de prédictions, notons Z la solution exacte ; P(X) = Z. Donc finalement l'idée c'est que le résultat de la prédiction Y puisse être le plus proche de Z. C'est ainsi que l'on calcule la perte, Loss = p(X) - Z = Y - Z. Sachant le réseau de neurones que tu as, notons R, l'objectif avec la formule de Bayes est de trouver une correction pour minimiser la perte, notons ça S. La formule de Bayes serait un truc du genre : P(S|R) = ( P(R|S) * P(S) ) / P(R). Le plus important c'est P(R|S), la probabilité du réseau de neurones R à généraliser sachant la correction que l'on utilise. Autrement dit si on effectue une formule de dérivée, on obtient une estimation (la plus probable (même si tous les modèles sont faux)) de la meilleure manière de tourner les boutons. Il utilisera notamment des pas plus petits lors-ce que notre algorithme Bayésien pense qu'il ne reste plus grand chose pour atteindre le (100 - ε)% et se fera un plaisir d'allonger la patte au début de l'entraînement - c'est le principe même de la descente du gradient. (Avant que l'on me reprenne sur la perte, je tiens à préciser que le calcul est réalisé à partir du calcul de coût, cost = 1/2 * Loss² - d'où la précision de Lê dans la vidéo).
J'arrive à suivre plus ou moins jusqu'au moment de la dérivée. Les problèmes jusque là étant que P est utilisée pour 2 choses différentes (la fonction de prédiction de prédiction d'une part, et la probabilité d'un événement d'une autre) et que la formule de Bayes donnée est fausse (P(S|R) = P(R|S)*P(S)/P(R)). Mais même en corrigeant ces typos, ça m'a pas l'air d'être simple. Je pense que ça vaut le coup d'avoir une explication plus détaillée.
@@onethuon oups, ça se voit que je ne suis pas encore totalement Bayésien... Corrigé xD au moins si t'as compris l'idée, c'est cool.
3:00 Pourquoi ne pas considérer que l'erreur = P ; tout simplement ? Après tout, P² ou P, bon, c'est blanc-bonnet et bonnet-blanc, non ?
L'avantage d'une correction en p^2 c'est qu'elle pénalise les erreurs en fonction de leur importance (une erreur de 0,2 est corrigée par 0,04 et une de 0,1 par 0,01 ce qui fait un rapport 4 entre les corrections en p^2, contre un rapport de 2 si la correction est en p)
👍
Une réponse qui peut intéresser ceux qui veulent apprendre à programmer cela :
Pour la descente du gradient il faut choisir une ou des fonctions d'activation de classe C² au minimum, sinon cela ne peut pas fonctionner car tu dois être capable de dériver deux fois la ou les fonctions. Mais ensuite tu dois intégrer la notion de séparabilité. Et selon le problème que tu veux traiter, cela t’amène parfois à choisir des fonctions d'activation non linéaires. Il faut bien maitriser les mathématiques pour être dans la capacité de définir le type de PMC (perceptron multi couches) à mettre en place, bien entendu pour les « catégorificateurs ». Il faut donc avoir une bonne vision mathématique de ton problème.
En ce qui concerne python, il existe des bibliothèques pour gérer ces choses-là, mais il vaut mieux au début partir de zéro et tout faire par soi-même si tu veux maîtriser un tant soit peu le sujet qui reste assez vaste.
Je te conseille de te former à TORCH basé sur LUA qui est plus efficace pour entraîner les réseaux de neurones. Par ailleurs si tu disposes d'une carte vidéo NVIDIA tu pourras utiliser CUDA qui permet d'utiliser le parallélisme via le GPU. Le gain de performances s’avère intéressant.
Pense ensuite à te former aux réseaux récurrents ainsi qu’aux réseaux de convolution très utilisés. Actuellement, travailler sur les stratégies d'apprentissage te permet de te distinguer dans ce secteur. Comment mettre en place une stratégie d'apprentissage qui est elle-même autonome ? Se référer aux bandits manchots à n-bras. Regarde aussi tout ce qui est produit en recherche en mathématiques sur ce sujet. (Beaucoup de contributions ces douze derniers mois.)(modifié)
Pour ce qui est de la vidéo, elle est trop élémentaires et n'apporte pas grand-chose ayant de l'intérêt Je peux te conseiller plusieurs thèses et contributions qui abordent les problèmes plus en profondeur.
Mais avant de partir sur le sujet des réseaux de neurones je t'invite à étudier les SMA (systèmes multi-agents) et étudie la notion d'émergence que procurent ces systèmes. Pense encore à maîtriser la programmation objet ainsi que l'algèbre linéaire et le calcul tensoriel qui sont des outils indispensables.
Je suppose que tu maîtrises déjà le calcul différentiel ainsi que le calcul avec dérivées partielles et que tu as de solides connaissances en analyse fonctionnelle pour te permettre d’aborder la bibliographie autour de ces sujets.
python, pour les reseaux de neurones c'est top et pas tres dure
"Il faut mettre le bouton sur la position 42"
Pourquoi j'ai l'impression que c'est pas une nombre pris au hasard?
Je crois que c'est une référence au numéro de l'épisode.... Mais je me trompe ptêt ^^
Ce serait pas tricher de le mettre sur 42 ? ;)
String theory, hashage (:
Science4All tiens tiens c’est bizarre ce nombre me rappelle une fameuse réponse d’un ordinateur sur la question de la vie après plusieurs millions d’années... aller ! ne fait pas l’innocent !
Lê tu as vu que la conjecture de Riemann a été résolue ? :o
Source ?
Regarde sur Twitter il en a parlé un peu ;)
Je pense qu'on va avoir des vidéos la dessus dans pas longtemps !
drive.google.com/file/d/1G4bNEiSh6uo9goOPsY4zMJ5MsWj-UONh/view
Keskessé j ai rien compris xD qu elle pourrait etre son application ? A quoi ca sert ?
J'ai ruiné ma productivité du lundi à commenter l'événement !!
À l'heure qu'il est, il me semble assez improbable que la preuve soit juste (~1%). Mais bon, attendons de voir ce que disent les experts...
Python ♥️
je viens d'entendre que l'hypothèse de riemann aurait été prouvée. Vous en avez entendu parlé ?
Oui ! J'ai passé ma journée à commenter l'événement sur Twitter :
twitter.com/science__4__all/status/1044142402309685248?s=19
OK ce que j'ai lu a suffi à répondre à mes deux principales questions : 1) je n'ai pas du tout le niveau pour comprendre la preuve et 2) il va falloir encore attendre un moment avant qu'on sache si la preuve est valide ou non. Cela m’étonne que la validité d'une preuve demande tant de temps à être ou non confirmée. Je pensais que les expert du domaine en lisant la preuve disaient soit "génial tout est justifié" ou "erreur : pas le droit de déduire ça à partir de ces hypothèses" par exemple..
Il n'est en fait pas si rare que la validité ou non d'une preuve tarde à faire consensus au sein de la communauté mathématique. La palme revient sans doute à la "preuve de la conjecture abc" de Mochizuki, qui remonte à 2012 mais reste d'actualité...
www.quantamagazine.org/titans-of-mathematics-clash-over-epic-proof-of-abc-conjecture-20180920/
@@zylmanu j'avoue c'est long^^ en même temps la preuve nécessite la compréhension de plus de 1000 pages !!
Certes. Dans le cas présent on va sans doute être fixé bien plus rapidement... Mais je crains que ce ne soit que pour bien comprendre où est l'erreur et à quel point l'approche proposée n'apporte finalement pas de réel éclairage nouveau au problème.
Tenser Flow n'est pas un langage de programmation mais une bibliothèque! Tu n'as pas répondu correctement à la question de gamermachin, je dirais d'ailleurs que c'est le python le langage le plus utilisé pour les réseaux de neurones.
Je note que la réponse est donc bien 42 XD
Je rappelle une énième fois que cette méthode n'est pas "meilleur que l'homme" (si on suppose que c'est comparable en prenant en compte l'environnement et ses contraintes au minimum), de part la consommation, la vitesse de convergence, l'instabilité etc... Même la vitesse d'analyse est pas terrible. ça reste tout de même potable. Comparer cette méthode à l'homme c'est tout simplement comparé des Volt et des Ampères, où comparer des choses qui n'ont strictement rien à voir. Après si vous aimez mélanger les unités n'importes comment et comparer n'importe quoi, la comparaison peut se faire.
Y a un truc qui s'appelle le contexte/les hypothèses c'est chiant mais faut le prendre en compte pour toute comparaison sinon on peut raconter tout et son contraire et ça deviens foireux.
Moi qui suis dejà renseigné sur le sujet, je trouve trouve ta maitrise du sujet un peu approximative et tes explications beaucoup trop simple et imprécise! Mais tout était plus clair quand de ton propre aveu ne jamais avoir programmé un réseau de neurones!
Je suis désolé j'essaye vraiment d'etre constructif et je me dois de prévenir ton audience de prendre ton contenu avec des pincettes