À propos du projet

NEAT-AI est une bibliothèque de neuroévolution écrite en Deno/TypeScript qui implémente et étend l'algorithme NEAT (NeuroEvolution of Augmenting Topologies) publié à l'origine par Stanley et Miikkulainen en 2002. Le projet est devenu un système hybride combinant évolution et gradient, qui superpose des techniques de recherche modernes à l'approche classique de NEAT. L'architecture centrale repose sur des « créatures » — des génomes qui mutent et se reproduisent en TypeScript, les passages avant (forward passes) étant exécutés dans un module WebAssembly (WASM) intégré. Une extension Rust facultative (NEAT-AI-Discovery) fournit une analyse structurelle accélérée par GPU via Deno FFI et propose de nouvelles synapses fondées sur une analyse guidée par l'erreur. Principales fonctionnalités : 1. **Observations extensibles** : les entrées et sorties sont identifiées par des UUID stables plutôt que par indices positionnels, ce qui permet d'ajouter de nouvelles observations sans redémarrer l'évolution et de recombiner entre plusieurs machines. 2. **Entraînement distribué** : l'entraînement et l'évolution peuvent s'exécuter sur plusieurs nœuds indépendants, les meilleures créatures étant combinées sur un contrôleur central, comme dans le modèle insulaire des algorithmes évolutionnaires. 3. **Apprentissage tout au long de la vie** : conçu pour l'apprentissage continu dans des environnements changeants, prenant en charge l'apprentissage permanent à mesure que de nouvelles données arrivent sur des semaines ou des mois. 4. **Activation WASM** : la bibliothèque initialise automatiquement le backend WASM ; l'appelant n'a qu'à invoquer `activate()` pour un unique passage avant. 5. **Fonctions de compression uniques** : prend en charge des fonctions d'activation comme IF, MAX et MIN en plus des options standard. 6. **Élagage des neurones** : supprime les neurones dont les activations ne varient pas pendant l'entraînement, en utilisant un critère de saillance d'ordre zéro. 7. **CRISPR** : permet d'injecter des gènes créés manuellement (neurones et synapses) dans une population pendant l'évolution, empruntant l'acronyme biologique pour l'ensemencement de population. 8. **Grafting** : permet le croisement inter-îles entre parents génétiquement incompatibles, en préservant la diversité. 9. **Évolution mémétique** : enregistre et utilise les biais et poids des créatures les plus adaptées pour affiner les générations futures, réécrivant les poids appris dans le génome (approche lamarckienne). 10. **Évolution structurelle guidée par l'erreur (Discovery)** : identifie et crée dynamiquement de nouvelles synapses en analysant les activations et erreurs des neurones. L'extension Rust effectue une analyse accélérée par GPU et propose des candidats structurels via FFI. 11. **Taux de mutation adaptatif** : ajuste automatiquement la stratégie de mutation en fonction de la taille des créatures et de la progression de la fitness, en équilibrant exploration et exploitation. 12. **Apprentissage par transfert** : exporte les créatures entraînées comme points de contrôle avec métadonnées, les importe dans de nouvelles tâches avec correspondance des UUID, et ensemence des populations avec des créatures pré-entraînées. 13. **Export ONNX** : exporte les créatures entraînées au format ONNX pour un déploiement dans les pipelines d'inférence ML standard. 14. **Acceptation des mutations par MCMC** : utilise le critère de Metropolis-Hastings pour l'acceptation des mutations, avec un ajustement adaptatif de la température vers un taux d'acceptation d'environ 23,4 %. 15. **Stratégies de croisement avancées** : plusieurs stratégies pour les créatures génétiquement incompatibles, notamment la similarité cosinus des poids d'entrée, la transplantation de sous-graphes et le croisement guidé par la diversité. 16. **Entraînement des synapses synthétiques** : densifie temporairement la connectivité inter-couches pendant la rétropropagation, puis élague les synapses proches de zéro après l'entraînement. 17. **Immigrants aléatoires** : lorsque la population stagne, remplace les créatures non-élites les plus faibles par des génomes fraîchement ensemencés pour introduire du nouveau matériel génétique. Le projet est publié sur le JavaScript Registry (JSR) et ne nécessite aucune installation — le backend WASM s'initialise de lui-même lors de la première utilisation. Il fait partie d'une famille de dépôts comprenant NEAT-AI-core (caisse Rust partagée pour le calcul), NEAT-AI-Discovery (extension Rust FFI pour l'analyse structurelle accélérée par GPU), NEAT-AI-scorer (application Rust de scoring), NEAT-AI-Backpropagation (rétropropagation native en Rust), NEAT-AI-Lamarck (optimiseur expérimental Rust), NEAT-AI-Explore (outil de visualisation TypeScript), ainsi que plusieurs autres optimiseurs et outils expérimentaux. La bibliothèque est conçue pour être utilisée dans un environnement DenoJS et fournit une boîte à outils complète pour la neuroévolution, de la création et l'activation de base des créatures à l'entraînement distribué avancé, la découverte structurelle et le déploiement en production via l'export ONNX.