Skip to content

feat(ml,#18209): contre-sens usuels en 3.0 et 3.1 -- cloture du pilote 03-DeepLearning - #20237

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/18209-contresens-3.0-3.1
Oct 11, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/18209-contresens-3.0-3.1

Conversation

@jsboige

@jsboige jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2027:CoursIA-2 — prev: DEEP/notebook-python #19876

Contre-sens usuels en 3.0 et 3.1 — clôture du pilote #18209

Cadrage

Le pilote #18209 (tables des contre-sens + glossaire de série sur ML/DataScienceWithAgents/03-DeepLearning, carnets 3.0 à 3.4) a été livré en partie par la PR #18712 (MERGED) : 3.2 (c28-contresens-optim-3.2), 3.3 (c24-contresens-regul-3.3) et 3.4 (c40-contresens-attn-3.4) portent le dispositif.

Mesure du 2026-10-09 sur origin/main (par myia-po-2024:CoursIA, relais de périmètre) : 3.0-Theorie-Information.ipynb et 3.1-Retropropagation.ipynb portent 0 occurrence du dispositif. Cette PR ferme ce reliquat.

Forme livrée — reproduite, pas inventée

La forme des trois carnets-modèles a été relevée puis reproduite à l'identique : titre ## Contre-sens usuels sur <sujet>, chapeau « Six confusions revenaient dans le carnet et qu'il vaut mieux trancher net : », table 6 lignes | terme | ce qu'on croit souvent | ce qu'il faut retenir |, clôture « Le point commun aux six : la mesure tranche ce que l'intuition seule laisse ouvert. ». Chaque ligne cite un numéro de cellule réel du carnet et une valeur mesurée — jamais un argument général.

Emplacement : après le dernier exercice, avant la section de clôture (## Conclusion et transition), comme en 3.2 (avant le *** final) et en 3.4 (8.5, après l'exercice 3).

Les douze lignes, et leur provenance

3.0 — cellule ajoutée c28-contresens-info-3.0 (index 22)

terme cellule citée valeur mesurée
Entropie vs cross-entropy 5 écart de l'identité H(p,q) = H(p) + D(p‖q) : 0.00e+00
Divergence de KL 5 D(p‖q) = 0,4980 contre D(q‖p) = 0,8270
Le log de zéro 5 inf sans clip, 11,301650997556088 avec EPS
MSE pour un classifieur 9 0,882 (CE) contre 0,393 (MSE) ; gradient 51× plus faible
Un modèle plus riche 12 unigramme 4,533 vers bigramme 4,009 bits/car. ; gain 0,525
La température 13 KL 1,7047 / -0.0000 / 0,1424 ; minimum en T = 1,00

3.1 — cellule ajoutée c28-contresens-retro-3.1 (index 30)

terme cellule citée valeur mesurée
La vérification du gradient 10 écart max 1.286e-11, seuil 1e-6
PyTorch est magique 18 loss 1,11e-16, poids 2,78e-17, 3000 iters 1,11e-16
L'initialisation aléatoire 23 ‖grad W1‖ = 0.000000e+00, accuracy 0,500, loss 0.6931
float64 vs float32 19 parité 1,1 × 10⁻¹⁶ valable en float64 seulement
Un modèle linéaire suffit-il 2 et 13 linéaire 0,873 en test, réseau 0,967
La perte initiale 5 (lecture 6) 0,6165, sous ln 2 ≈ 0,693

Convention de citation : indice de cellule 0-based (celui de nb.cells[i]), confirmé par le glossaire de série, qui cite « 3.2 cellule 11 (implémentation NumPy) + cellule 12 (validation) » pour le couple code/lecture des indices 11 et 12.

Validation

  • Markdown seul : le diff porte 42 insertions(+) et 0 deletion. Aucune cellule de code modifiée, aucune sortie touchée, aucun metadata.papermill retiré.
  • Cellules d'origine intactes : sha256 de chaque cellule (JSON canonique, sort_keys=True) comparé avant/après — identique pour les 23 cellules de 3.0 et les 34 de 3.1.
  • Sérialisation inchangée : le fichier est réécrit avec json.dumps(indent=1, ensure_ascii=False) + "\n", vérifié byte-identique sur un aller-retour sans modification. (L'outil NotebookHelper.save() a été écarté : il strippe les metadata.papermill de toutes les cellules, hors périmètre.)
  • Sécurité tableau : 16 lignes de tableau ajoutées, chacune à exactement 4 | — la barre verticale de la notation KL est écrite ‖ (U+2016), jamais |, pour ne pas casser la table.
  • Hooks pre-commit : H.3 (notebooks non exécutés), Aucun garde ne parse la source des cellules : une cellule non compilable portant une sortie traverse les 60+ checks #13326 (source compilable), source-list-newlines, gitleaks, probeAddresses, scrub papermill — tous Passed.
  • prose-counts (check_prose_quantitative_claims.py --diff origin/main...HEAD) : [OK] aucun compteur quantitatif en prose.
  • Aucune ré-exécution due : markdown seul (exception C.2). execution_count reste renseigné partout, 0 cellule null.

Relevé de divergences (critère 3 du body de #18209)

  • Le critère 2 du pilote (« les notebooks renvoient au glossaire ») n'est implémenté dans aucun des cinq carnets : mesure sur origin/main, 0 occurrence de « glossaire » dans la source de 3.0 à 3.4. Je n'ai pas ajouté ce renvoi dans 3.0/3.1 : l'ajouter à deux carnets sur cinq créerait une convention divergente en plein pilote. Le constat est remonté ici, pas corrigé d'office.
  • Périmètre du glossaire : GLOSSAIRE.md déclare couvrir 3.2/3.3/3.4 et tenir 3.0/3.1 « hors-périmètre de cette note ». Cette PR ne l'étend pas — le glossaire sort du périmètre revendiqué ici. Étendre le glossaire aux termes de 3.0/3.1 est un grain distinct, si le coordinateur le juge utile.

Hors périmètre

  • Pas d'extension de GLOSSAIRE.md.
  • Pas de renvoi notebooks vers glossaire (voir le relevé ci-dessus).

See #18209

🤖 Generated with Claude Code

…e 03-DeepLearning

Complete le pilote #18209 (tables des contre-sens + glossaire de serie) sur les
deux carnets qui en etaient depourvus. Le dispositif etait deja livre en 3.2
(c28-contresens-optim-3.2), 3.3 (c24-contresens-regul-3.3) et 3.4
(c40-contresens-attn-3.4) par la PR #18712 ; 3.0 et 3.1 portaient 0 occurrence.

Ajout d'une cellule markdown par carnet, sur la forme livree stable (titre
`## Contre-sens usuels sur <sujet>`, chapeau, table 6 lignes
`terme | ce qu'on croit souvent | ce qu'il faut retenir`, cloture), chaque ligne
citant un numero de cellule reel et une valeur mesuree du carnet lui-meme.

Six contre-sens mesures par carnet :
- 3.0 : identite H(p,q) = H(p) + D(p||q) (ecart 0.00e+00) ; KL non metrique
  (0,4980 vs 0,8270) ; log 0 (inf -> 11,30 avec clip) ; MSE bloquee face a la
  cross-entropy (0,393 vs 0,882, gradient 51x plus faible) ; gain du bigramme
  (0,525 bit/car.) ; minimum de KL en T = 1,00.
- 3.1 : verification du gradient (1.286e-11 contre un seuil de 1e-6) ; parite
  PyTorch (1,11e-16 / 2,78e-17) ; init nulle = gradient exactement nul
  (0.000000e+00, accuracy 0,500) ; float64 vs float32 ; lineaire 0,873 contre
  reseau 0,967 ; perte initiale 0,6165, sous ln 2.

Markdown seul : aucune cellule de code modifiee, aucune sortie touchee, aucun
metadata.papermill retire. Diff purement additif (42 insertions, 0 suppression),
cellules d'origine verifiees byte-identiques par sha256.

See #18209

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 2
  • Code cells validated: 21
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.3s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.7s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 22.1s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.5s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 12.3s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

Rouges de cette PR — deux causes mesurees, aucune reparable par la lane.

1. Exec-sequence ratchet (base vs PR) — le verdict CI est refute localement

La jambe tombe sur chacun des carnets touches (CLEAN at origin/main, is PARSE_ERROR in this PR), alors que le meme organe rejoue localement a la meme tete contre origin/main rend l'inverse :

execution_count ratchet -- base origin/main (merge-base 07593d0bde0c)
changed notebooks : 6
regressions       : 0
  CLEAN->CLEAN (les six carnets)

Mecanisme, lu dans scripts/notebook_tools/check_exec_ratchet.py : la base est lue par blob git (verdict_at_base, l.113), la tete est lue dans l'arbre de travail (verdict_at_head, l.128, Path(path).read_text(...)), le tout sous un except Exception -> PARSE_ERROR (l.201). Un arbre CI incomplet produit donc un PARSE_ERROR indiscernable d'une regression de contenu.

Deja tracke, rien a corriger de mon cote :

Le rouge est partage : mesure aussi sur #20231.

cell-source-parses — 0 finding localement, a la meme tete

--- scanned: 1 notebook(s), findings: 0   (3.0-Theorie-Information.ipynb)
--- scanned: 1 notebook(s), findings: 0   (3.1-Retropropagation.ipynb)

Le hook pre-commit equivalent (#13326) est passe au commit sur ces deux carnets. Kernel drift guard porte la meme signature d'arbre ampute (« Path 'MyIA.AI.Notebooks/SymbolicAI/Lean/ANALYSE/...' not uptodate; will not remove from working tree » — des carnets d'une autre serie).

Ce que je fais : rien a corriger cote contenu — le geste est dans l'organe, pas dans la lane. La candidate reste en attente de ces jambes ; je poursuis ma file. Pas de update-branch : une fusion content-free perimerait les dossiers exact-head sans rien lever.

See #20195 · #20202

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA-2
pr: 20237
head: a670fda
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 860e4cb5358a02cae3eb5337dcdbac99500c4a0f1f43dcb86bfc62f8b7621dad
diff-files: 2
diff-additions: 42
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20237
organ-rc: 0
[/ADJOINT PREFLIGHT]

Lecture tierce a la tete a670fda. Cloture du reliquat du pilote #18209 (3.0/3.1 restaient sans dispositif contre-sens, mesure po-2024 relayee au body).

Verifications :

  • nature du diff : cellules markdown AJOUTEES (une par carnet, plus reprises mineures) — 0 cellule code touchee, 0 output/execution_count change : exception C.2 valide, +42/-0 coherent ;
  • forme : la table 6 lignes reproduit le dispositif des carnets-modeles 3.2/3.3/3.4 (titre, chapeau, colonnes, cloture) ;
  • ancrage des valeurs mesurees, echantillonne : 1.286e-11 (verification gradient), 1.11e-16 (loss initiale identique), 0.000000e+00 (gradient nul a poids nuls) — 3/3 presents dans les sorties commitees du carnet 3.1 a la tete ; les lignes citent des numeros de cellule avec valeurs, conforme au corps.

Checks : 95/95 latest-wins verts. B.0 rc=0 (8 commentaires, 0 review). MED/notebook-python, prev DEEP #19876 — G-VAR coherent.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Relue a la tete a670fdaa9a par le coordinateur, sur dossier tiers de myia-ai-01:CoursIA-2.

Deux cellules markdown ajoutees (tables de contre-sens en 3.0 et 3.1), sur la forme deja posee par #18712 en 3.2-3.4. L'avis automatique « Prose/output review needed » est non bloquant ; j'ai verifie moi-meme que chaque valeur citee par les douze lignes figure dans la sortie de la cellule nommee : en 3.0, 0.4980 / 0.8270 / 11.30165 (cellule 5), 0.882 / 0.393 (cellule 9), 4.533 / 4.009 / 0.525 (cellule 12), 1.7047 / 0.1424 (cellule 13) ; en 3.1, 1.286e-11 (cellule 10), 1.11e-16 / 2.78e-17 (cellule 18), 0.000000e+00 (cellule 23). Aucune cellule de code modifiee.

@myia-ai-01
myia-ai-01 merged commit c721309 into main Oct 11, 2026
99 of 110 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants