Projet

 

L'apprentissage par réseau de neurones

 

Auteur :   Simon Vézina (svezina@cmaisonneuve.qc.ca)

               Département de physique

               Collège de Maisonneuve


https://www.rsipvision.com/deep-learning/
Réseau de neurones à 5 couches.

 

 

Description du sujet

 

 

Le réseau de neurone artificiel est "un système dont la conception est à l'origine schématiquement inspirée du fonctionnement des neurones biologiques, et qui par la suite s'est rapproché des méthodes statistiques" (Gerstner 2004, p. 3). Sous une représentation mathématique, le rôle d'un réseau de neurones est d'approximer avec le plus de fidélité possible une fonction à plusieurs variables. Plus le réseau de neurones est apte à générer "les bonnes réponses", plus celui-ci est dit "intelligent".

 

L'intelligence du réseau ne réside pas dans la capacité du programmeur à trouver les formules à intégrer au réseau de neurones afin que celui-ci donne toujours la "bonne réponse", mais dans la capacité du réseau à se calibrer à l'aide d'un processus itératif d'entraînement afin que celui-ci puisse donner une "bonne réponse" à une question dont il n'a pas eu exemple lors de son entraînement. Par exemple, un réseau dont le but est d'identifier des photos de chat sera bien calibré lorsqu'il pourra affirmer avec un haut niveau de certitude si une photo vue pour une première fois est un chat ou non.

 

Pourquoi emprunter cette voie ? La raison est simple : Écrire une règle permettant d'identifier si une photo est un chat ou non est extrêmement difficile ! Par contre, la structure de données d'un réseau de neurones avec un bon algorithme d'apprentissage et une très grande collection d'image de chat est suffisante pour enseigner au réseau comment identifier de telle image.

 

Dans le cadre de ce laboratoire, il sera possible de se familiariser avec le concept de réseau de neurones, d'implémenter des algorithmes simples en lien avec le fonctionnement et l'entraînement d'un réseau de neurones et appliquer ce concept à quelques collections de données.


https://www.wikichat.fr/tout-sur-mon-chat/au-quotidien/hygiene-au-quotidien/soigner-plaie-chez-chat/

Image de chat pouvant être identifiée par un réseau de neurones.

https://towardsdatascience.com/how-to-build-your-own-neural-network-from-scratch-in-python-68998a08e4f6

Visualisation artistique du comportement des neurones lors du processus d'activation d'un réseau.

 

Description du projet

 

Ce projet consiste à établir des liens entre les mathématiques et l'informatique à l'aide du sujet de l'intelligence artificielle par l'usage de réseau de neurones. Un réseau de neurones est une structure mathématique qui nécessite un très grand volume d'opérations mathématiques pour son fonctionnement. C'est pourquoi la puissance calculatoire de l'informatique est requis pour son exécution. Voici une liste abrégée de quelques contributions disciplinaires :

 

Informatique Mathématique       Physique      
• Étude de la structure de donnée d'un réseau de neurones.

• Implémentation de l'algorithme de l'activation d'un réseau de neurones.

• Implémentation de l'algorithme de la descente du gradient stochastique de la fonction d'erreur.

• Analyse de l'entraînement d'un réseau de neurone sous différent protocole d'entraînement. 
• Interprétation du vecteur et la matrice comme outil permettant de décrire un réseau de neurones.

Application du produit scalaire entre vecteur et de la multiplication de matrice.

Application de la dérivée d'une fonction à une et plusieurs variables.

Application de la dérivée en chaîne dans le but d'évaluer le gradient d'une fonction de plusieurs variables.
Aucun

 

 

Documentation du projet

 

Pour réaliser ce projet, il est important de se documenter sur le sujet du réseau de neurones. À partir des notes de cours disponible ici-bas, une lecture permettra de s'initier à plusieurs caractéristiques du réseau de neurones ainsi qu'aux différents calculs réalisés lors de l'exécution du programme.

 

Référence :   Note de cours en lien avec le cours d'algèbre linéaire porteur du laboratoire.

Note de cours rédigée par Mélisande Fortin-Boisvert, Collège de Maisonneuve :

 

Lien

Titre

THEORIEPARTIE1.pdf L'apprentissage par réseau de neurone
Derivees_partielles_pour_IA.pdf Fonctions à plusieurs variables et dérivées partielles

      

Référence :   Note de cours en lien avec la réalisation du laboratoire (L'apprentissage par réseau de neurones).

                    Note de cours rédigée par Simon Vézina, Collège de Maisonneuve

 

Lien

Titre

MAT - Chapitre 6.1 L'algèbre linéaire du réseau de neurones
MAT - Chapitre 6.2 Le réseau de neurones
MAT - Chapitre 6.3 (facultatif) Le réseau de neurones et l'activation par batch

 

Collection de vidéos

 

Voici une collection de vidéo à visionner en lien avec la réalisation de ce projet :

 

Collection 3Blue1Brown

 

1- But what *is* a Neural Network ? | Deep learning, chapter 1 :

https://www.youtube.com/watch?v=aircAruvnKk

 

2- La descente du gradient, ou comment un réseau neuronal apprend | Deep learning, chapter 2 :

https://www.youtube.com/watch?v=IHZwWFHWa-w&list=PLLMP7TazTxHrgVk7w1EKpLBIDoC50QrPS&index=2

 

3- What is backpropagation really doing ? | Deep learning, chapter 3 :

https://www.youtube.com/watch?v=Ilg3gGewQ5U&list=PLLMP7TazTxHrgVk7w1EKpLBIDoC50QrPS&index=3 

 

4- Backpropagation calculus | Deep learning, chapter 4 :

https://www.youtube.com/watch?v=tIeHLnjs5U8&list=PLLMP7TazTxHrgVk7w1EKpLBIDoC50QrPS&index=4 

 

Voici d'autres vidéos traitant d'intelligence artificielle qui sont complémentaire à ce projet pour votre culture personnelle :

1- Introduction à une formation en Deep learning

https://www.youtube.com/watch?v=XUFLq6dKQok 

 

2- Une intelligence artificielle peut-elle être créative ? — Science étonnante #57 :

https://www.youtube.com/watch?v=xuBzQ38DNhE

Articles scientifiques

Voici quelques articles scientifiques qui ont été consultés pour l'élaboration de ce projet. Cependant, ces articles ne sont présentement pas à l'étude dans ce projet puisqu'ils traitent de sujets avancés en lien avec l'apprentissage par réseau de neurones. Ils sont sujet à consultation pour enrichissement seulement.

 

- Mini-batch_vs_Normalized_batch.pdf

- Quadratic_Aggregation_function1808.00098.pdf

- Dropout-srivastava14a.pdf

- Physics_and_Deep_learning-1608.08225.pdf

- ModernTrainableActivationFunction2005.00817.pdf

Réalisation du projet : L'apprentissage par réseau de neurones

 

La réalisation de ce projet se fera lors d'une activité de laboratoire informatique. Pour ce faire, il faudra réaliser l'installation d'une plateforme de développement JAVA, télécharger le code source en lien avec le laboratoire.

 

Installation de la plateforme de développement JAVA (JDK : java developpment kit)

Voici les liens vous permettant de télécharger l'environnement JDK de développement JAVA :

• Installation de la plateforme JDK :     https://www.oracle.com/ca-fr/java/technologies/javase-downloads.html
• Installation du logiciel de développement Eclipse : https://eclipse.org/downloads/ 

 

Laboratoire : L'apprentissage par réseau de neurones

version : 1.5.1

L'objectif de ce laboratoire consiste à compléter un programme informatique rédigé en JAVA permettant à un réseau de neurones de réaliser un apprentissage. Tout au long du laboratoire, l'étudiant ajoutera des fonctionnalités au programme correspondant à l'écriture d'équations mathématiques directement liées à des algorithmes d'intelligence artificielle avec réseaux de neurones. Parmi les équations mathématiques, nous retrouverons les concepts d'activation d'un réseau, propagation du gradient stochastique et la descente du gradient de la fonction d'erreur.

Pour accompagner l'élève, un structure de test unitaire (Java Unit Test) sera mise en place pour valider et certifier le fonctionnement du programme. Ceci permettra d'encadrer l'élève dans ses réalisations pas à pas dans le laboratoire.

Pour apprécier le comportement du programme, les élèves pourront classifier plusieurs type de base de données : la base de donnée WDBC (Breast Cancer Wisconsin Data Set) et  la collection MNIST (Mixed National Institute of Standards and Technology).

https://www.apsl.net/blog/2017/11/20/use-convolutional-neural-network-image-classification/

Représentation visuelle d'une donnée de l'ensemble d'entraînement de la collection MNIST.

 

Laboratoire : L'apprentissage par réseau de neurone - Partie 1  

version : 1.5.1

La 1re partie du laboratoire consistera à réaliser l'activation d'un réseau. L'élève pourra implémenter quelques fonctions de base comme la fonction d'activation tangent hyperbolique et sigmoïde et la fonction d'agrégation de la somme pondérée. Avec ces fonctions, le programme réalisera l'activation en séquence de plusieurs couches de neurones. Par la suite, l'exécution du programme permettra de comparer le comportement d'un réseau non entraîné avec le comportement d'un réseau entraîné avec deux types de données par le calcul de l'erreur avec une fonction d'erreur. Le taux de classification sera le critère utilisé pour comparer la performance des réseaux.

 

• Pré requis : Avoir des connaissances sur l'algèbre linéaire et le calcul différentiel.
Avoir des connaissance de base en JAVA

https://gfycat.com/fr/gifs/search/deep+learning+activation+function
 
Représentation de la propagation d'un vecteur d'entrée dans un réseau pour classifier des images de chiffre écrit à la main dans les donnée MNIST.
• Lecture préalable : MAT - Chapitre 6.1  et MAT - Chapitre 6.2
• Prélaboratoire : Prelaboratoire-ApprentissageReseau-Partie1.pdf
• Document de laboratoire : Laboratoire-ApprentissageReseau-Partie1.pdf
• Questions conceptuelles : Conceptuelles-ApprentissageReseau-Partie1.pdf
• Cahier de réponse : Cahier-ApprentissageReseau-Partie1.docx
• Projet Java (code source) : SIM-ApprentissageReseau.zip
• Base de données MNIST (en png) : mnist_png.zip

 

Laboratoire : L'apprentissage par réseau de neurone - Partie 2  

version : 1.5.2

La 2e partie du laboratoire consistera à réaliser l'apprentissage d'un réseau. L'élève pourra ajouter quelques fonctionnalités aux fonctions développées dans la 1re partie comme l'opérateur de la dérivée partielle. Avec ce nouveau type de calcul, l'élève devra implémenter l'algorithme de la propagation du gradient afin d'utiliser ce résultat dans l'algorithme de la descente du gradient et utiliser ce gradient dans l'algorithme de l'entrainement du réseau. Par la suite, l'exécution du programme permettra d'apprendre à un réseau comment bien classifier deux types de données.

 

• Pré requis : Avoir des connaissances sur l'algèbre linéaire et le calcul différentiel.
Avoir des connaissance de base en JAVA
Avoir complété la 1re partie.


https://commons.wikimedia.org/wiki/File:Gradient_descent.gif

Illustration de la descente du gradient d'une fonction d'erreur (Loss function) à partir de trois réseaux quelconques. On constate que l'un d'entre eux ne minimisera pas globalement l'erreur en raison de la présence d'un minimum local.
• Lecture préalable : Aucune
• Prélaboratoire : Prelaboratoire-ApprentissageReseau-Partie2.pdf
• Document de laboratoire : Laboratoire-ApprentissageReseau-Partie2.pdf
• Questions conceptuelles : Conceptuelles-ApprentissageReseau-Partie2.pdf
• Cahier de réponse : Cahier-ApprentissageReseau-Partie2.docx
• Projet Java (code source) : Réutiliser le programme réalisé en 1re partie.
• Base de données MNIST (en png) : mnist_png.zip

 

Retour à la page d'accueil  

 

Dernière mise à jour : 2022-11-30