Réseaux de neurones convolutifs
dans Statistiques
Bonjour
Concernant ce type de réseaux, je n'ai pas trop de problèmes pour comprendre les outils mathématiques utilisés et la mise en application mais je suis dépourvu quant, au sens (s'il y en a un), des différentes couches notamment celle de convolution. Alors soit, je les prends comme des structures très efficaces soit un de vous pourrait-il m'expliquer ce mécanisme sous-jacent en des termes profanes ?
Cordialement.
Concernant ce type de réseaux, je n'ai pas trop de problèmes pour comprendre les outils mathématiques utilisés et la mise en application mais je suis dépourvu quant, au sens (s'il y en a un), des différentes couches notamment celle de convolution. Alors soit, je les prends comme des structures très efficaces soit un de vous pourrait-il m'expliquer ce mécanisme sous-jacent en des termes profanes ?
Cordialement.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En gros, un filtre de convolution 2D appliqué à une image permet de quantifier le degré de présence d'une forme particulière dans l'image (par exemple des rayures ou des motifs plus sophistiqués).
On peut même visualiser le résultat d'une convolution, voir https://towardsdatascience.com/visual-interpretability-for-convolutional-neural-networks-2453856210ce ou la fin du chapitre sur les réseaux convolutifs dans le livre Deep learning with Python de François Chollet.
Entendu. Je vais prendre le temps d'intégrer cela et, peut-être revenir avec une nouvelle question.
Merci et bon dimanche.
J'ai réussi à trouver ce post grâce à la barre de recherche du forum (:D . Du coup j'aimerais ajouter quelques questions.
Tout d'abord voici un début de réseau de neurones convolutif
Quand je demande
Et j'obtient
Que ce passe-t-il on a $32$ filtres de taille $3 \times 3$ et on convole des matrces $28 \times 28$. Vous trouver pas ça bizarre qu'on obtient des matrices $26 \times 26$ ?
Sur ce code : Je ne comprends pas l'intérêt des batch ici train_generator fournit des sample de 20 images et on fait 100 étapes donc on couvre 2000 images. Moi ce que je me dis c'est qu'on a une fonction de perte $l$ et une somme
$$
s(p) = \sum_{i=1}^{2000} l \left( f(x_{i},p), y_{i}) \right)
$$ à minimiser selon les poids du CNN modélisé par $f$. Et pour cela on fait une descente de gradient pour approcher les valeurs des poids qui réalisent la perte minimale.
$$
p_{k+1} = p_{k} - \delta \nabla_{\text{poids}}{s}.
$$ Donc on voit bien qu'on a besoin de toutes les images pas juste de lots de 20 enfin bref ça ma parait bizarre.
$$
s(p) = \sum_{i \in I } l \left( f(x_{i},p), y_{i}) \right)
$$
Et à chaque itération on tire un nouveau sous ensemble $I$.
Par exemple pour epochs = 5 et batch_size = 128.
Pourquoi est-ce différent d'utiliser data augmentation pendant l'entraînement et d'utiliser data augmentation en amont pour enrichir le data set puis faire l'entraînement ?
Et google est aussi ton ami. D'ailleurs sur ta question, Goodfellow en personne répond sur Quora et renvoie à son bouquin : https://www.quora.com/In-deep-learning-why-dont-we-use-the-whole-training-set-to-compute-the-gradient
Et enfin, lis des papiers et expérimente.
Je n'ai pas le temps de regarder tous tes messages, mais on procède par mini-batch pour plusieurs raisons :
- C'est hyper coûteux de prendre le dataset d'un seul coup, ça permet certes de faire des pas de descente un peu plus grand mais l'un dans l'autre c'est très largement perdant, le loss étant très escarpé.
- La descente par mini-batch se rapproche théoriquement de la descente de gradient stochastique qui a des propriétés théoriques (démontrées ou supposées) très intéressantes. En particulier, le vrai but n'est pas de minimiser le loss empirique, mais le loss en espérance sur la distribution des données (qu'on ne connaît justement pas, n'ayant accès qu'à des samples, i.e. le training set).
En pratique ça peut changer pas mal de choses, ça dépend de l'implémentation. Typiquement l'augmentation de données est souvent faite en parallèle par le CPU sur le batch suivant pendant que le batch précédent est utilisé en GPU pour la descente de gradient. Cela fait partie du pre-fetching des données. Mais le faire à l'avance permet aussi potentiellement d'accélérer les choses ou de les simplifier si l'augmentation des données est complexe, c'est très dépendant du scénario exact.
Chalk, peux tu préciser ce que tu veux dire par là ?
Cordialement,
Rescassol
Cela démontre selon moi une compréhension limitée autant des mathématiques que du deep learning.
Oui, effectivement, mais en tant que mathématicien, je ne me sens pas énormément visé, ce n'est peut-être qu'une boutade.
Si tu t'y connais en "deep learning" est ce que son bouquin est quand même un bon bouquin pour quelqu'un qui sait programmer, mais ne connait pas ce domaine ?
Il a l'avantage d'être en français.
Cordialement,
Rescassol
Mais en même temps il n'a pas pleinement conscience du rôle fondamental des mathématiques qu'il voit davantage comme un outil ou un langage, à l'instar de la plupart des professionnels du domaine, plutôt que comme une matière à même de permettre de raisonner et comprendre les limitations en vue de les dépasser, en particulier à un niveau théorique plus avancé.
Son livre est probablement bien pour devenir data scientist, mettre les mains dans le code, appliquer des modèles classiques, prendre en main des librairies. Ce n'est pas un livre qui permet de comprendre profondément les mathématiques du deep learning (car oui, même si les maths ne démontrent pas encore beaucoup de théorèmes dans ce domaine, elles sont primordiales à sa compréhension), ce qui me paraît essentiel pour un chercheur du domaine. Pour prendre du recul et conceptualiser les modèles futurs, il faut s'élever au-dessus des couches de convolution ou du learning rate, en caricaturant.
En deep learning, on reconnaît très vite celui qui comprend vraiment ce qu'il fait et celui qui bidouille. Et en général, c'est fortement corrélé avec le niveau en maths (si tant est que le background en learning est présent évidemment, un matheux qui débarque ne va rien comprendre non plus).
Attention, je ne prétends pas que Chollet n'est pas bon en maths, il comprend très bien ce qu'il fait. Je m'inscris simplement en faux sur tous ceux qui sous-estiment l'importance des maths dans ce domaine, sous prétexte que le data scientist qui déploie des modèles existants n'a pas besoin d'avoir un M2 en géométrie riemannienne pour les implémenter.
Ok, merci, Chalk.
Je m'y intéresse pour ne pas mourir idiot, comme on dit, pas dans un but professionnel.
Et le côté mathématique ne me fait pas peur.
Cordialement,
Rescassol
J'ai reçu son bouquin aujourd'hui..
Un truc m'avait échappé, je suis sous Windows 10, pas sous Linux, j'espère que ça ne va pas me pénaliser.
Cordialement,
Rescassol
> ce n'est pas un bouquin théorique mais vraiment de code et de praticien
Ça veut dire qu'il me faudra à un moment ou un autre un bouquin plus mathématique.
Tu en connais, en français de préférence ?
Cordialement,
Rescassol
Si tu veux comprendre le domaine, il n'y a aucun livre idéal, c'est un champ trop en ébullition. Mais il y a largement mieux que le bouquin de Chollet !
Une référence c'est celui-ci : https://www.deeplearningbook.org/
Il a l'avantage de ne parler que de deep learning, d'aborder certaines thématiques très récentes de recherche, d'être gratuit en ligne, d'exister sur papier, et même d'avoir une "traduction" française en livre papier ... Bon la traduction a été faite automatiquement avec du deep learning justement, elle n'est donc pas parfaite, d'autant plus que les algorithmes de langage naturel se sont encore grandement améliorés très récemment avec les mecanismes d'attention qui n'existaient pas à l'époque.
Après il y a des bouquins plus théoriques, mais ils sont beaucoup moins récents et très peu orientés deep.
Sur l'apprentissage par renforcement (deep ou non, AlphaGo pour ceux qui se demandent ce que c'est), qui n'est pas abordé dans le livre précédent, ce livre est une référence : https://www.google.com/url?q=https://web.stanford.edu/class/psych209/Readings/SuttonBartoIPRLBook2ndEd.pdf&sa=U&ved=2ahUKEwj4iK7PhqTvAhWoy4UKHermB00QFjABegQIAxAB&usg=AOvVaw31hDTh8nB7NZqgPWmg8Sjo
Et enfin ne pas oublier comme je disais plus haut, que pour aller plus loin, le domaine étant très vaste et très actuel, il ne faut pas hésiter à se plonger dans des papiers.
Parmi les innombrables applications du deep learning, un petit deep fake à la fois flippant mais impressionnant pour la route, surtout en sachant que c'est complètement non supervisé, donc très facilement adaptable à n'importe qui :
Parce que contrairement à ce que disait le huffpost il y a quelques jours, ce n'est justement PAS la technologie utilisée par Hollywood, où ils ont des gros efforts de supervision pour que ce soit parfait, même si peut-être qu'ils utilisent du deep pour aller plus vite.
@Rescassol : il y a ce livre en français de S.Tufféry, (2019), "Big Data, Machine Learning et Apprentissage Profond", Technip.
Cordialement.
Merci, Chalk et Jma.
Cordialement,
Rescassol
@Rescassol : bien de rien. Je voulais te signaler le cours de Stéphane Mallat au Collège de France mais cela représente un volume horaire conséquent que l'on ne peut pas toujours se permettre. Ce lien dirige vers ses cours sur l'apprentissage profond : https://www.college-de-france.fr/site/stephane-mallat/_course.htm
Cordialement.
Merci, Jma, ça va m'occuper.
Cordialement,
Rescassol