08 · Projet personnel · Réseaux neuronaux / C++

Neural Boundary Lab
Comprendre une frontière de décision 2D

Un laboratoire d’apprentissage supervisé écrit en C++17 : génération de jeux de points, propagation avant, rétropropagation, descente de gradient et visualisation dynamique des frontières de décision.

C++17Réseau neuronal MLPBackpropagationSDL2 natifWebAssembly

Objectif

Le problème logiciel

Rendre observable le mécanisme d’apprentissage d’un réseau simple, plutôt que le masquer dans une bibliothèque de machine learning. L’utilisateur doit voir comment les paramètres se modifient et comment le modèle généralise.

Architecture

Un cœur C++ séparé des interfaces

  1. Dataset : 4 répartitions 2D et séparation entraînement/test
  2. Network : couches denses, tanh, sigmoïde et gradient analytique
  3. Trainer : mini-batches de 32, mesure de perte et précision
  4. Rendu SDL2 / CLI : affichage de la carte et courbes de métriques

Choix techniques

Comportements testables et explicables

01 / CONCEPTION

Équations explicites

Les paramètres sont des matrices de poids et des biais ; la dérivée est calculée par propagation arrière, sans framework ML.

02 / CONCEPTION

Expériences contrôlées

Répétition des scénarios XOR, cercles, lunes et frontière linéaire avec graines reproductibles et niveau de bruit configurable.

03 / CONCEPTION

Évaluation hors entraînement

20 % des échantillons sont réservés au test, afin de visualiser le comportement sur des points non utilisés pour mettre à jour les poids.

04 / CONCEPTION

Architecture réglable

L’utilisateur peut comparer 1 ou 2 couches cachées de 8 neurones et modifier le taux d’apprentissage.

Démonstration

Exécuter le C++ dans le navigateur

Le réseau C++17 compilé en WebAssembly calcule ses prédictions et effectue les étapes de descente de gradient. Dans le navigateur, les points synthétiques et les Canvas sont produits par JavaScript ; les fonctions mathématiques de base sont importées du navigateur.

Qualification

Compilation, tests et sources

  • Compilation native du cœur et de la CLI réussie (GUI désactivée).
  • Tests nnviz_core_tests et nnviz_cli_smoke : réussis.
  • Sources originelles : include/nnviz, src/core, src/gui et tests/test_core.cpp.
  • Compilation WASM reproductible dans demos/engine ; visualisation sans serveur.

Les dépôts sources complets sont fournis dans les archives de projet. Le code C++ des adaptations WebAssembly est inclus et reproductible depuis le portfolio, dossier demos/engine.

Périmètre

Ce que montre — et ne montre pas — le portage

L’adaptation web préserve les principales équations du réseau, mais utilise un générateur de nombres pseudo-aléatoires différent de celui du projet original. Les résultats ne sont pas identiques bit à bit. Les performances graphiques ne sont pas représentatives des applications natives SDL2.

Autre réalisationTetris AutoCPP