Cypha · v2.4.0

Une architecture d’IA construite à partir des premiers principes, pas un fork

Presque toute l’intelligence artificielle (IA) moderne est une variation sur les mêmes quelques conceptions. Cypha part d’ailleurs : un seul type C++, avec une règle d’apprentissage tirée des mathématiques plutôt qu’empruntée, qui se met à jour à chaque exemple qu’elle voit au lieu d’être entraînée une fois puis figée. C’est un projet de recherche, et les échecs sont publiés à côté des résultats.

LangageC++
Versionv2.4.0
WikiText-2, bits par caractère (BPC)2,664 BPC
Dernier envoirécemment
Quatre programmes, une seule règle d’apprentissage
  • AIXI / Solomonoff — les priors de longueur de description minimale (MDL) décident ce que le modèle a le droit de croire à bas coût.
  • Géométrie de l’information — les mises à jour suivent le gradient naturel, si bien que l’apprentissage respecte la courbure de l’espace des paramètres.
  • Inférence active / énergie libre — donne la décomposition structurelle en prior, différentiel et contexte.
  • Goulot d’étranglement informationnel — fixe l’objectif de l’encodeur : garder ce qui prédit, jeter le reste.
En clair

Ce que c’est, en une minute

Le problème

Presque tous les systèmes d’IA en service sont une variation sur une poignée de conceptions. Ils sont entraînés une fois sur une grosse machine puis livrés figés, donc suivre quelque chose qui bouge — une nouvelle fraude, une nouvelle panne — oblige à revenir les entraîner. Ils sont aussi gros, ce qui les met dans un centre de données plutôt que sur l’équipement, et rend difficile l’explication de la moindre décision.

La solution

Cypha est un seul type C++ qui classe, prédit des nombres et génère des séquences. Sa règle d’apprentissage est dérivée de quatre corpus mathématiques plutôt que copiée sur une architecture existante, et elle se met à jour à chaque exemple qu’elle voit — pas de lot, pas d’époque, pas de réentraînement. Elle est assez petite pour tourner sur le matériel qui collecte les données.

À qui cela s’adresse

Aujourd’hui, les chercheurs et les ingénieurs prêts à essayer une autre conception. Les problèmes visés sont ceux où les données bougent sans arrêt — fraude, pannes d’équipement, comportements qui changent — où le modèle doit tenir sur l’appareil plutôt que dans un centre de données, et où quelqu’un doit ensuite expliquer la décision.

Jugez-le comme de la recherche. Les chiffres plus bas viennent des propres campagnes de mesure du dépôt, vérifiés face à des références de test versionnées plutôt qu’à une place au classement. Une section intitulée Ce que Cypha n’est pas expose les limites, dont le test standard où il reste près du hasard tant qu’un composant précis n’est pas activé. Le reste de cette page, c’est l’architecture et les mesures.
La bibliothèque elle-même

Des caractéristiques aléatoires, mesurées plutôt que décrites

L’argument de Cypha pour les caractéristiques de Fourier aléatoires (RFF), c’est qu’elles permettent à une tête linéaire de séparer ce qu’une tête linéaire ne peut pas. C’est une affirmation mesurable, donc on la mesure — avec cypha::rff_features compilé en WebAssembly, pas une transposition en JavaScript.

cypha::rff_features — WebAssembly

non chargée

Le noyau exact à fonction de base radiale (RBF) sur n points échantillonnés donne une matrice K. Les caractéristiques aléatoires en reconstruisent une approximation K̂. Ce qui est tracé, c’est ‖K − K̂‖F à mesure que le nombre de caractéristiques augmente : plus de caractéristiques, approximation plus proche.

Bibliothèque
—
La compiler a révélé un bug. Les caractéristiques aléatoires orthogonales (ORF) — la variante dense — normalisaient chaque ligne à la longueur unité, alors que Yu et al. tirent la norme de ligne de chi_d de sorte qu’une ligne orthogonale corresponde à la ligne gaussienne qu’elle remplace. Les lignes étaient trop courtes d’un facteur √d, donc les caractéristiques approchaient le mauvais noyau et l’erreur plafonnait au lieu de converger. Une ligne. C’est maintenant la meilleure des trois.
Mono-thread volontairement : le WebAssembly multithread a besoin de SharedArrayBuffer, qui a besoin des en-têtes Cross-Origin-Opener-Policy (COOP) et Cross-Origin-Embedder-Policy (COEP) que GitHub Pages ne peut pas envoyer.
Architecture

Sept couches, chacune avec un seul rôle

Chaque composant ci-dessous existe parce que l’un des quatre programmes l’exige — pas parce qu’il est apparu dans un article ce trimestre-là.

Le pipeline Cypha dans l’ordre : encodeur, projection, prior du monde, différentiels de classe, mémoire et contexte par paliers, produisant une classe avec une confiance, un score d’anomalie et un indicateur hors distribution
faites défiler pour voir tout le schéma →
Un seul type, quatre rôles. La démonstration plus bas sur cette page est exactement ce pipeline en deux dimensions — le prior du monde est l’ellipse en pointillés, les différentiels sont les barres.
Encodeur

Étage d’entrée interchangeable

De l’entrée brute au vecteur de caractéristiques. Fournit VectorEncoder, RFFEncoder (caractéristiques de Fourier aléatoires) et ConcatEncoder. Remplacez-le sans toucher à quoi que ce soit en aval.

Projection

EncoderProjection

Des caractéristiques vers l’espace latent par mises à jour contrastives de Fisher–Rao, avec plafonnement de la norme de Frobenius pour qu’une seule valeur aberrante ne fasse pas exploser la géométrie.

θ₀

WorldPrior

Une gaussienne diagonale partagée, ajustée en ligne par Welford et par des mises à jour en moyenne mobile exponentielle (EMA). C’est le “contexte infini” qui n’oublie jamais — et dont le mouvement est le signal de dérive.

Δₖ

ClassDifferential

Des décalages de paramètres naturels par classe, attirés vers les observations et rappelés par la décroissance MDL. Une classe est un déplacement par rapport au monde, pas un modèle à part.

Mémoire

DIFMemory

Calcule des rapports de log-vraisemblance sous des postérieures hyperboliques généralisées, avec des tables de rapports de Bessel pour que les queues lourdes ne coûtent pas une transcendante par échantillon.

Contexte

TieredContextBuffer

Paliers court, moyen et long pondérés par la confiance NIGField, si bien que les indices récents peuvent dominer sans effacer ce que le palier long a établi.

Classification, de bout en bout : encoder → projeter → noter le rapport de log-vraisemblance de chaque classe face au prior du monde → renvoyer l’argmax, avec une confiance, un score d’anomalie et un indicateur hors distribution. La démonstration ci-dessous est exactement ce pipeline, en miniature.
Interactif

Entraînez un classifieur au clic

Une miniature 2-D fidèle du pipeline Cypha : un prior du monde ajusté en ligne, des différentiels par classe attirés vers ce que vous placez, et une classification par rapport de log-vraisemblance. Elle apprend de chaque clic — pas de lot, pas d’époque, pas de redémarrage.

cypha::Cypha — classifieur en ligne

Cliquez sur le canevas pour ajouter un échantillon de la classe sélectionnée. Faites glisser pour peindre un groupe.

Classe à placer

Charger un jeu de données

Échantillons
0
Exactitude
—
LLR max
—
Dérive du prior
0.00

Dernière inférence

Inactif
Survolez le canevas pour classer un point sans l’apprendre.

Différentiels de classe Δₖ

Une implémentation pédagogique 2-D écrite pour cette page — même structure que le vrai pipeline, rien de son échelle. L’implémentation C++ est dans native/.
Essayez le OU exclusif (XOR) avec l’encodeur RFF désactivé. L’exactitude s’effondre vers le hasard, et ce n’est pas un bug de cette démonstration — c’est la limite documentée d’un rapport de log-vraisemblance linéaire, énoncée clairement dans le README de Cypha. Activez l’encodeur RFF latent et regardez-la remonter. Publier le mode de défaillance à côté du correctif, c’est tout le propos.
Mesuré

Résultats, avec la comparaison qui compte

Chiffres issus des propres campagnes de mesure du dépôt, après le correctif de diagnostic. La correction est prouvée par une matrice CTest qui correspond à des références versionnées — pas par une place dans un classement.

Abréviations du tableau : descente de gradient stochastique (SGD), mémoire à court et long terme (LSTM), rétropropagation dans le temps (BPTT).

Jeu de donnéesTâcheCyphaSGD en ligneNote
Linéairement séparable2 classes0.7830.644Même budget en ligne
Iris3 classes0.900—Jeu de référence classique
Wine3 classes0.969— 
Digits10 classes0.922— 
Breast cancer2 classes0.957— 
WikiText-2Séquence, 300k jetons2,664 BPC—Hybride GRIA+LSTM L2+Wave2 BPTT
XOR2 classes, RFF latent~0.763—Le LLR linéaire seul plafonne près du hasard
Génération

À température ajustée, conditionnée par le champ, interpolation de frontière latente, adverse (maximisant l’entropie), échantillonnage OOD, sous contrainte MDL, ancestral, et échantillonnage KDE depuis le tampon de rejeu.

Anomalie & apprentissage actif

Scores d’anomalie issus des valeurs de porte, scores de requête active comme entropie × proximité de la frontière, et détection de dérive lue directement sur le mouvement du prior du monde.

Rejeu

Un tampon de priorité d’une capacité de 10 000, pondéré par la récence et la surprise, rejoué à un ratio de 0,30 — pour que l’échantillon rare et informatif ne soit pas noyé par le banal.

Valeurs par défaut de référence

Profilées, pas devinées

Elles sortent d’une optimisation profilée sur grille moyenne et sont livrées comme configuration de référence.

Dim. des caractéristiques128
Budget RFF256
Ratio de rejeu0.30
Fenêtre de contexte32
LR du prior du monde0.008
LR des diff. de classe0.05
LR de l’encodeur0.002
Lambda MDL0.001
Cadrage honnête

Ce que Cypha n’est pas

  • Pas un habillage. Faite sur mesure à partir des premiers principes — ce qui veut aussi dire qu’elle n’hérite du réglage de personne.
  • Le LLR linéaire a un plafond. XOR reste près du hasard sans l’encodeur RFF latent, qui le fait monter à environ 76,3 %.
  • La validation repose sur la parité. CTest face à des références versionnées. Aucune revendication de classement n’est faite.
  • CUDA sert uniquement à l’inférence. L’entraînement reste sur le processeur central (CPU), parce que sur cette architecture le CPU est plus rapide.
  • La théorie est ailleurs. Les travaux sur le spectre harmonique et NMP font l’objet d’un article distinct sur les algorithmes de compression ; Cypha est la couche d’implémentation.
Démonstration produit

Cypha, distillée depuis un vrai moteur d’échecs

26 568 positions étiquetées avec les évaluations de recherche d’un moteur alpha-bêta classique, ajustées avec le même blanchiment WorldPrior et les mêmes mises à jour par gradient naturel qu’ailleurs dans l’architecture. Elle reproduit l’évaluation de l’enseignant à R² 0,866 sur des positions réservées, et fait 5V–19D–6N contre cet enseignant à profondeur de recherche égale.

À qui cela s’adresse

Une petite IA qui continue d’apprendre

La plupart des IA sont entraînées une fois dans un centre de données puis livrées figées. Cypha est assez petite pour tourner sur du matériel ordinaire et continue d’apprendre de chaque nouvel exemple qu’elle voit.

01

Des appareils trop petits pour une grosse IA

Capteurs, caméras, automates et autre matériel qui n’a pas la place d’avoir un centre de données derrière lui. Cypha est assez petite pour tourner sur l’appareil lui-même, donc rien n’a besoin de sortir du bâtiment.

02

Tout ce qui doit suivre le changement

Schémas de fraude, pannes d’équipement, comportements clients qui bougent. Un modèle entraîné l’an dernier est déjà dépassé. Celui-ci se met à jour au fil de l’eau, sans être retiré du service et réentraîné.

03

Un travail qu’il faut expliquer après coup

Banques, assureurs et services de santé doivent souvent justifier une décision. Cypha est assez petite pour être inspectée, et elle publie ce qu’elle fait mal au lieu de le cacher.

Vous reconnaissez votre situation ? C’est ouvert aux tests bêta dès maintenant, et ce sont les retours des gens pour qui c’est construit qui le font réellement changer. Devenir bêta-testeur →
La compiler

Trois commandes

$ cmake -S native -B /tmp/cypha_build -DCMAKE_BUILD_TYPE=Release -G Ninja
$ cmake --build /tmp/cypha_build --parallel
$ ctest --test-dir /tmp/cypha_build -R native_ --output-on-failure

# REST service
$ cypha_rest --listen 127.0.0.1:8099 --cypha fixtures/reference.cypha
# Qt shell (build with -DCYPHA_BUILD_QT=ON)
$ cypha_qt_shell
Conditions de licence