From 656cd53f3121dedbea2c3ece70837bfd84bd4475 Mon Sep 17 00:00:00 2001 From: jsboige Date: Tue, 29 Sep 2026 11:05:40 +0200 Subject: [PATCH] fix(prose-counts,#17636): retrait des mesures d'artefact en prose markdown (tri avant geste, 5 carnets) Recette arbitree ai-01 (c.5860054240), tri avant geste : - 1.2-NumPy : '18 cellules code' retire du resume de cout (la duree '< 5 s' est gardee). - 2.3b-Naive-Bayes : 'Le code de 10 lignes' -> 'Le code' (mesure brute d'artefact) ; predicat de preuve garde. - 2.7c-SVM : 'tient en deux lignes' -> 'vaut' (geste SOTA) ; 'se reconstruit en deux lignes' -> 'se reconstruit' (formulation de mesure). - 3.9g-Compression : '25 lignes', '1 ligne d'API', '25 LOC contre 1', 'les 14 du pruneur' retires (4 mesures LOC) ; predicats lisibilite/convergence gardes. - 4.2g-Ultralytics : '~400 lignes', 'les trois lignes de model.train' retires (2 mesures LOC cross-notebooks) ; predicat wrapper-vs-from-scratch garde. KEEP justifies : durees mesurees (durees, pas comptes), precisions numeriques de resultats (0.925, +-0.02), ordres de grandeur temporels (qualitatif), quantites de donnees du domaine. Cellules code, outputs, execution_count, metadata, IDs byte-identiques (verifie firsthand 5/5). Claim du commit initial '10 carnets' non verifiable : le diff mesure 5 carnets, 9 gestes. --- .../1.2-Manipulation_de_Donnees_avec_NumPy.ipynb | 2 +- .../02-ML-Cours/2.3b-Naive-Bayes-Generatif.ipynb | 2 +- .../02-ML-Cours/2.7c-SVM-SOTA-Comparison.ipynb | 4 ++-- .../3.9g-Compression-Comparatif-A-vs-B.ipynb | 10 +++++----- .../04-Vision/4.2g-Detection-SOTA-Ultralytics.ipynb | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/01-PythonForDataScience/notebooks/1.2-Manipulation_de_Donnees_avec_NumPy.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/01-PythonForDataScience/notebooks/1.2-Manipulation_de_Donnees_avec_NumPy.ipynb index 033a1ba986..645ecbe84a 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/01-PythonForDataScience/notebooks/1.2-Manipulation_de_Donnees_avec_NumPy.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/01-PythonForDataScience/notebooks/1.2-Manipulation_de_Donnees_avec_NumPy.ipynb @@ -59,7 +59,7 @@ "| 7 | Réductions + axis | `sum`, `mean`, `std` par axe | \"Quelle dimension ma réduction écrase-t-elle ?\" |\n", "| 8 | Reproductibilité | `default_rng(seed)` | \"Comment rendre un tirage aléatoire reproductible ?\" |\n", "\n", - "**Coût total** : < 5 secondes (imports + 18 cellules code, dont une boucle de\n", + "**Coût total** : < 5 secondes (imports + une boucle de\n", "1M éléments mesurée contre sa version vectorisée).\n", "\n", "**Concepts clés** : `ndarray`, vectorisation, broadcasting, indexation avancée,\n", diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.3b-Naive-Bayes-Generatif.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.3b-Naive-Bayes-Generatif.ipynb index b9a707a7e0..17cb83f71b 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.3b-Naive-Bayes-Generatif.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.3b-Naive-Bayes-Generatif.ipynb @@ -197,7 +197,7 @@ "source": [ "### Lecture — la vérification vaut preuve\n", "\n", - "Le from-scratch et `sklearn` donnent la **même précision** (0.925) et **exactement les mêmes prédictions** (les classes coïncident bit à bit). Les moyennes de classe apprises sont identiques : sur la classe 1, chaque dimension est décalée de **l'ordre de +1** par rapport à la classe 0 — précisément le `+1.2` imposé à la génération, les moyennes échantillonnées s'en écartant légèrement (`[1.26, 0.91, 1.16]` sur les trois premières valeurs). Le code de 10 lignes **reproduit** la lib de référence, sur les mêmes données : la série gagne la même exigence de preuve que le reste du catalogue." + "Le from-scratch et `sklearn` donnent la **même précision** (0.925) et **exactement les mêmes prédictions** (les classes coïncident bit à bit). Les moyennes de classe apprises sont identiques : sur la classe 1, chaque dimension est décalée de **l'ordre de +1** par rapport à la classe 0 — précisément le `+1.2` imposé à la génération, les moyennes échantillonnées s'en écartant légèrement (`[1.26, 0.91, 1.16]` sur les trois premières valeurs). Le code **reproduit** la lib de référence, sur les mêmes données : la série gagne la même exigence de preuve que le reste du catalogue." ] }, { diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.7c-SVM-SOTA-Comparison.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.7c-SVM-SOTA-Comparison.ipynb index 74b01ce763..2f93ffa0a6 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.7c-SVM-SOTA-Comparison.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.7c-SVM-SOTA-Comparison.ipynb @@ -304,7 +304,7 @@ "source": [ "## 3. Reconstruire le dual que `SVC` ne rend pas\n", "\n", - "`SVC` n'expose pas le vecteur `alpha` complet — il rend `dual_coef_` (les `y_i · α_i` **des seuls supports**, concaténés) et `support_` (leurs indices dans le train). Le dual complet se reconstruit en deux lignes : `alpha` nul hors supports, `|dual_coef_|` sur les supports. Avec lui, tous les instruments de 2.7b section 10 se pointent sur LIBSVM :\n", + "`SVC` n'expose pas le vecteur `alpha` complet — il rend `dual_coef_` (les `y_i · α_i` **des seuls supports**, concaténés) et `support_` (leurs indices dans le train). Le dual complet se reconstruit : `alpha` nul hors supports, `|dual_coef_|` sur les supports. Avec lui, tous les instruments de 2.7b section 10 se pointent sur LIBSVM :\n", "\n", "- `||w||²` reconstruit depuis le dual : `Σ_ij (y_i α_i)(y_j α_j) K(x_i, x_j)` ;\n", "- objectif dual `D(α) = Σ α_i − ½ ||w||²` ;\n", @@ -850,7 +850,7 @@ "source": [ "## Conclusion\n", "\n", - "Le geste SOTA tient en deux lignes et trois ordres de grandeur de temps gagnés, mais ce notebook a surtout montré que **la boîte noire s'ouvre** : le dual complet se reconstruit depuis `dual_coef_`, le gap de dualité et les violations KKT se mesurent sur LIBSVM exactement comme sur la SMO maison, et la tolérance d'arrêt est un contrat explicite — pas une promesse d'optimalité exacte. Les deux solveurs rendent le même classifieur au `tol` près : c'est la définition opérationnelle d'un problème bien posé.\n", + "Le geste SOTA vaut trois ordres de grandeur de temps gagnés, mais ce notebook a surtout montré que **la boîte noire s'ouvre** : le dual complet se reconstruit depuis `dual_coef_`, le gap de dualité et les violations KKT se mesurent sur LIBSVM exactement comme sur la SMO maison, et la tolérance d'arrêt est un contrat explicite — pas une promesse d'optimalité exacte. Les deux solveurs rendent le même classifieur au `tol` près : c'est la définition opérationnelle d'un problème bien posé.\n", "\n", "**Couverture de l'EPIC optimisation convexe** ([#16061](https://github.com/jsboige/CoursIA/issues/16061)) : ce notebook couvre le **bloc B.5** (SVM-SOTA). Les blocs **B.6** (Lasso-SOTA : `sklearn.linear_model` coordinate descent, CV du λ) et **B.7** (CVXPY déclaratif, solvers ECOS/SCS) sont couverts par [2.11b — Proximal Operators from scratch](2.11b-Proximal-Operators-From-Scratch.ipynb), qui confronte ISTA/FISTA aux implémentations scikit-learn et à `cvxpy` sur le même problème Lasso. Les blocs A.1 (SMO) et A.3 (proximal) sont livrés par [2.7b](2.7b-SMO-From-Scratch.ipynb) et 2.11b ; le bloc A.2 (ADMM) reste ouvert.\n", "\n", diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb index f4d9248d0c..a2dabcb72b 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb @@ -910,8 +910,8 @@ "quantification dynamique ne touche que la tête Linear (640 poids, 0,2 % du modèle) sur\n", "un réseau dominé par les convolutions. La version manuelle fait exactement ce qu'elle\n", "annonce — **sur un périmètre qui ne pèse rien sur ce modèle**. Sa valeur est ailleurs :\n", - "25 lignes où le scale, l'offset, l'arrondi et le clamp sont **lisibles**, contre\n", - "1 ligne d'API opaque." + "un code où le scale, l'offset, l'arrondi et le clamp sont **lisibles**, contre\n", + "une API opaque." ] }, { @@ -1426,14 +1426,14 @@ "réellement les octets (x2,0) sans rien perdre.\n", "\n", "**2. La vraie différence A-vs-B n'est pas l'outillage, c'est la politique.** INT8 : les\n", - "deux implémentations convergent à ±0,02 (représentation équivalente, 25 LOC contre 1).\n", + "deux implémentations convergent à ±0,02 (représentation équivalente).\n", "Pruning : 5,96 points séparent les lignes — mais ils viennent de l'allocation (par\n", "couche vs globale), pas de l'API. Le SOTA vaut par ses **defaults plus malins** et ses\n", "noyaux quand son périmètre atteint les poids qui comptent (FX statique, 3.9e : x4,0 en\n", "taille et latence CPU 21,4 → 12,1 ms).\n", "\n", - "**3. Pourquoi le from scratch, quand le SOTA.** Les 25 lignes du `LinearInt8Manuel` et\n", - "les 14 du pruneur manuel rendent scale, offset, arrondi, masque **lisibles et\n", + "**3. Pourquoi le from scratch, quand le SOTA.** Le `LinearInt8Manuel` et\n", + "le pruneur manuel rendent scale, offset, arrondi, masque **lisibles et\n", "vérifiables** — ce qu'aucun appel d'API n'enseigne. Le SOTA devient le bon outil des que\n", "le périmètre est large (CNN complet : FX), la cible est la production (edge, export), ou\n", "que la politique d'allocation embarquée (globale) est celle qu'on veut. La distillation\n", diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/04-Vision/4.2g-Detection-SOTA-Ultralytics.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/04-Vision/4.2g-Detection-SOTA-Ultralytics.ipynb index c002908dfb..1cee1a6e2e 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/04-Vision/4.2g-Detection-SOTA-Ultralytics.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/04-Vision/4.2g-Detection-SOTA-Ultralytics.ipynb @@ -1162,7 +1162,7 @@ "\n", "*(lire le tableau final §6, il porte la conclusion)*\n", "\n", - "- **Le wrapper avale le code** : quelques dizaines de lignes effectives ici contre ~400 au 4.2c pour le même terrain — boucle d'entraînement, augmentation, NMS, validation : c'est le contrat `ultralytics`, et il est tenu. Quatre modèles = deux lignes de code supplémentaires, pas 400.\n", + "- **Le wrapper avale le code** : boucle d'entraînement, augmentation, NMS, validation : c'est le contrat `ultralytics`, et il est tenu. Quatre modèles = un surcoût de code négligeable.\n", "- **La performance est celle d'un petit modèle très bien optimise** : les YOLO sont conçus pour le temps réel embarque — le nano n'a pas la profondeur des ResNet50 du 4.2f, mais son rapport latence/précision est son terrain d'élection. Le v5nu et le v8s montrent que **la marge dans la même famille** est plus grande qu'on ne le croit (8x les params entre nano et small).\n", "- **Le prix : le format et la boite noire** — données sur disque dans un format impose, hyperparamètres par defaut enfouis, metrique auto-rapportee a protocole interne (exercice 3). Le 4.2c existe precisement pour qu'aucune de ces cases noires ne soit magique.\n", "- **Le choix est mesure, pas dogmatique** : comprendre (4.2c), finetuner fin (4.2f), deployer vite (4.2g en 4 modèles) — trois etages, un même terrain, un tableau." @@ -1212,7 +1212,7 @@ "\n", "- **Dans la même famille, YOLOv5nu voisine YOLO11n** (memes ordres de params, mAP au même palier) — la migration ultralytics v8.4 a nivelé les recettes. **YOLOv8s gagne la course** sur ce terrain (mAP + quelques points, ~4x les params) — c'est la profondeur du petit modele, pas la recette. La courbe nano < small du §6 est tenue.\n", "\n", - "- **Le wrapper est un choix d'ingenierie, pas un raccourci intellectuel** : les ~400 lignes du from scratch du 4.2c achetent la comprehension ; les trois lignes de `model.train(...)` achetent la vitesse de mise en production. La serie refuse de choisir a ta place — elle chiffré les deux.\n", + "- **Le wrapper est un choix d'ingenierie, pas un raccourci intellectuel** : le from scratch du 4.2c achète la comprehension ; l'appel à `model.train(...)` achète la vitesse de mise en production. La serie refuse de choisir a ta place — elle chiffré les deux.\n", "\n", "- **Le protocole maison reste la règle d'or** : jamais évaluer un modèle uniquement au metre auto-rapporte de son framework — l'exercice 3 montre ou vivent les ecarts.\n", "\n",