neural_network
Janvier 2026Janvier 2026

Réseaux de neurones sans bibliothèques tierces

Quelle est la demande du projet ?

La demande consiste à concevoir et programmer en C++ un réseau de neurones complet sans utiliser de bibliothèques externes. Le projet inclut plusieurs étapes : la construction des structures de base (neurones, couches et réseau), l’implémentation de la descente de gradient pour l’optimisation, puis l’apprentissage du réseau grâce à la rétropropagation du gradient. Ce travail permet d’explorer les mécanismes mathématiques et algorithmiques qui sont au cœur des systèmes d’intelligence artificielle modernes.

Quelles sont les grandes lignes du cahier des charges ?

  • Objectif principal : Créer un réseau de neurones artificiels en C++ capable de

    • traiter des données d’entrée,
    • produire une sortie calculée par propagation dans les couches,
    • ajuster ses paramètres grâce à des méthodes d’optimisation.
  • Fonctionnalités demandées

    • Fonction d’activation : Création d’une classe abstraite représentant une fonction d’activation et implémentation de la fonction ReLU
    • Modélisation d’un neurone : Création d’une classe contenant les poids, le biais et la fonction d’activation
    • Évaluation d’un neurone : Calcul de la sortie d’un neurone à partir d’un vecteur d’entrée
    • Couche de neurones : Structure contenant plusieurs neurones et produisant un vecteur de sortie
    • Réseau de neurones : Ensemble de couches connectées entre elles
    • Descente de gradient : Algorithme d’optimisation permettant de minimiser une fonction d’erreur
    • Rétropropagation : Calcul des dérivées nécessaires à l’apprentissage du réseau
    • Applications pratiques : Utilisation du réseau pour des problèmes réels comme la régression linéaire ou l’analyse de données climatiques
  • Contraintes techniques

    • Programmation uniquement en C++.
    • Interdiction d’utiliser des bibliothèques externes d’intelligence artificielle.
    • Implémentation complète des classes et algorithmes.
    • Tests avec des exemples numériques fournis.

Description détaillée des différentes étapes

La première partie du projet consiste à construire les différents composants nécessaires à la création d’un réseau de neurones en C++. La première étape est la création des fonctions d’activation. Pour cela, une classe abstraite représentant une fonction d’activation est mise en place. Cette classe permet de définir le comportement général d’une fonction d’activation ainsi que le calcul de sa dérivée, nécessaire pour la phase d’apprentissage. Une implémentation concrète de la fonction ReLU (Rectified Linear Unit) est ensuite réalisée. Cette fonction retourne 0 si la valeur d’entrée est négative et la valeur elle-même si elle est positive. Sa dérivée est également implémentée afin de permettre les calculs lors de l’optimisation du réseau.

La seconde étape consiste à créer la classe représentant un neurone. Chaque neurone est défini par un vecteur de poids correspondant aux connexions avec les entrées, un biais permettant d’ajuster la sortie, et une fonction d’activation. Le neurone reçoit un vecteur de valeurs en entrée et calcule une sortie en appliquant une combinaison linéaire des entrées pondérées par les poids, à laquelle est ajouté le biais. Le résultat est ensuite passé dans la fonction d’activation pour produire la sortie finale du neurone.

La troisième étape consiste à implémenter une fonction d’évaluation du neurone. Cette fonction permet de calculer la sortie du neurone à partir d’un vecteur d’entrée donné. Afin de vérifier que l’implémentation fonctionne correctement, plusieurs tests sont réalisés avec des valeurs précises pour les entrées, les poids et le biais. Cela permet de comparer les résultats obtenus avec les résultats attendus et de valider le bon fonctionnement du calcul.

La quatrième étape est la création d’une couche de neurones. Une couche correspond à un ensemble de neurones qui reçoivent tous le même vecteur d’entrée. Chaque neurone effectue son propre calcul et produit une sortie. L’ensemble des sorties des neurones constitue alors un nouveau vecteur qui représente la sortie de la couche. Ce vecteur pourra ensuite être utilisé comme entrée pour une autre couche du réseau.

La cinquième étape consiste à construire le réseau de neurones complet. Le réseau est composé de plusieurs couches connectées entre elles. Les données d’entrée sont transmises à la première couche, qui calcule un vecteur de sortie. Ce vecteur est ensuite utilisé comme entrée pour la couche suivante, et ainsi de suite jusqu’à la dernière couche. Ce processus est appelé propagation avant (forward propagation). La sortie de la dernière couche constitue la prédiction finale du modèle.

La deuxième partie du projet porte sur l’implémentation de la descente de gradient, une méthode d’optimisation utilisée pour trouver le minimum d’une fonction. Le principe consiste à partir d’une valeur initiale et à améliorer progressivement cette estimation en se déplaçant dans la direction opposée au gradient de la fonction. Mathématiquement, la mise à jour d’une variable s’effectue selon la formule : 𝑥 𝑛 + 1 = 𝑥 𝑛 − 𝛼 𝑓 ′ ( 𝑥 𝑛 ) x n+1 ​ =x n ​ −αf ′ (x n ​ ), où 𝛼 α représente le taux d’apprentissage, 𝑓 ′ ( 𝑥 𝑛 ) f ′ (x n ​ ) la dérivée de la fonction au point courant et 𝑥 𝑛 x n ​ l’estimation actuelle. Plusieurs exercices sont réalisés afin de comprendre et d’appliquer cette méthode, notamment la recherche du minimum d’une fonction simple, l’optimisation d’une fonction d’erreur, le calcul d’une régression linéaire et l’ajustement des paramètres d’un neurone.

La troisième partie introduit la phase d’apprentissage des réseaux de neurones grâce à la rétropropagation du gradient. L’objectif est de calculer les dérivées partielles de la fonction d’erreur par rapport aux différents paramètres du réseau, c’est-à-dire les poids et les biais. La fonction d’erreur globale mesure l’écart entre les valeurs prédites par le réseau et les valeurs attendues. À partir de cette erreur, il est possible de calculer le gradient et d’ajuster les paramètres du réseau afin d’améliorer les prédictions. Cette partie comprend la démonstration mathématique des dérivées nécessaires, l’implémentation d’un calcul récursif des gradients à travers les différentes couches du réseau, ainsi que la mise à jour des paramètres à l’aide de la descente de gradient.

La dernière partie du projet consiste à appliquer le réseau de neurones développé à différents problèmes pratiques. Dans un premier temps, le réseau est utilisé pour réaliser une régression simple avec un seul neurone afin d’approximer une relation linéaire entre des données. Un second exercice permet d’analyser les problèmes liés aux gradients nuls, qui peuvent empêcher l’apprentissage du réseau. Le projet inclut également l’analyse d’un jeu de données climatiques afin de prédire les anomalies de température à partir des années. Enfin, un réseau plus complexe composé de plusieurs couches de neurones est utilisé afin d’améliorer la qualité des prédictions. Ces différentes applications permettent d’observer concrètement comment un réseau de neurones peut apprendre à partir de données et ajuster ses paramètres pour produire des résultats plus précis.

Compétences développées

  • Compétences techniques

    • Programmation avancée en C++.
    • Implémentation de structures orientées objet.
    • Compréhension des réseaux de neurones artificiels.
    • Utilisation des méthodes d’optimisation comme la descente de gradient.
    • Manipulation de données et analyse de résultats.
    • Compréhension des concepts d’apprentissage automatique.
  • Compétences transversales

    • Analyse d’un problème mathématique complexe.
    • Traduction d’un modèle théorique en algorithme informatique.
    • Résolution de problèmes techniques.
    • Organisation et structuration d’un projet de programmation.
  • Compétences humaines

    • Développement de la rigueur scientifique.
    • Autonomie dans la recherche et l’apprentissage.
    • Capacité d’analyse et de réflexion critique.
    • Persévérance face à des problèmes algorithmiques complexes.
neural_network_result

Capture d'écran des résultats obtenus

Conclusion

Ce projet constitue une expérience approfondie dans la compréhension des réseaux de neurones et de l’apprentissage automatique. En implémentant chaque composant à partir de zéro en C++, les étudiants découvrent les mécanismes fondamentaux qui se cachent derrière les bibliothèques modernes d’intelligence artificielle.

Le travail permet de relier les concepts mathématiques (algèbre, dérivées, optimisation) avec leur application informatique concrète, ce qui est essentiel pour comprendre le fonctionnement réel des modèles d’intelligence artificielle.

Ce projet représente ainsi une étape importante dans la formation aux technologies d’IA, en développant à la fois des compétences techniques, analytiques et méthodologiques.

roadmania

RoadMania : Génération procédurale

jardiland

Jardiland 3 : Le Potager Solarpunk

TRAVAILLONS

ENSEMBLE