Skip to content

Add(genai,#16774): 05-0d GANs -- portraits adversariaux et moment NFT (jalon 4) - #20660

Open
jsboige wants to merge 2 commits into
mainfrom
feature/16774-05-0d-gan
Open

jsboige wants to merge 2 commits into
mainfrom
feature/16774-05-0d-gan

Conversation

@jsboige

@jsboige jsboige commented Oct 14, 2026

Copy link
Copy Markdown
Owner

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

Résumé

Quatrième jalon de l'arc chronologique de l'Epic #16774 : GANs et moment NFT. Le nouveau notebook 05-0d-GANs-Portraits-Moment-NFT.ipynb traite les deux leçons que l'Epic demandait de ne pas confondre.

  • La technique, exécutée. Un DCGAN conforme aux règles de Radford et al. est entraîné sur les 400 portraits Olivetti (32×32) sur GPU, puis soumis à trois mesures :
    1. Copie. Contrôle photo vue / photo jamais vue de la même personne, sur 3 montages et 3 graines (0, 1, 42). Avec 360 portraits, la fraction d'échantillons plus proches de la photo vue reste au niveau du hasard (0,528 et 0,498). Avec 40 portraits, la copie apparaît (0,720, écart-type 0,037).
    2. Empreinte spectrale (Durall et al. 2020). Le détecteur logistique sur le profil radial atteint 0,641 à 0,728 de précision à 32×32 et 0,873 quand le générateur copie. Les « jusqu'à 100 % » du papier ne se reproduisent pas à cette échelle, et le suréchantillonnage par voisin le plus proche n'efface pas l'empreinte. Ces deux écarts sont dits dans le notebook.
    3. Longueur de description. Le générateur (1 183 492 octets) pèse 4,13 fois le corpus compressé par LZMA. C'est l'inverse des jalons démoscène et low-complexity art, ce qui rattache le jalon au fil MDL de l'Epic.
  • Le marché, raconté sans être célébré. La vente d'Edmond de Belamy (Christie's, 25/10/2018, 432 500 $) et la controverse Barrat sont sourcées (Christie's, NYT, The Verge). Le notebook distingue cette vente du boom NFT de 2021, qui a couronné surtout l'art génératif par code (Fidenza fix(slides-03): full PPTX comparison redo - some images wrongly converted to text #313, Art Blocks). Le rapprochement GAN/NFT de la demande initiale condense donc deux moments distincts.
  • Une marche dans l'espace latent est mesurée (plus grand saut / saut médian = 1,23). Le notebook propose 3 exercices, dont les stubs se terminent par print (C.1) : le rapport d1/d2 comme détecteur de copie, la copie en fonction de la durée d'entraînement, et la quantification 8 bits contre la longueur de description.
  • Le README du rayon reçoit la ligne 05-0d et une ligne de prérequis, sans aucun total.

See #16774 (jalon 4 de l'arc ; l'Epic reste vivante).

Exécution

  • Papermill de bout en bout, noyau python3 (venv du cours), torch 2.14.0+cu126 sur RTX 4060 Laptop : 10 cellules code, 10 execution_count, 0 erreur, environ 6 min 30.
  • Reproductibilité vérifiée : deux exécutions indépendantes donnent des sorties numériques identiques. Seuls les temps et le découpage des flux stdout diffèrent. L'exécution finale, faite après l'insertion des lectures, redonne les mêmes valeurs.
  • Les lectures de résultat ont été rédigées après exécution, et chaque chiffre cité a été recalculé depuis les sorties committées. Les figures (échantillons et voisins, spectre, marche latente) ont été inspectées visuellement.
  • Contrôles : check_prose_quantitative_claims --diff OK · check_activity_leak --diff OK · check_notebook_navlinks 0 lien cassé · check_notebook_nav_chain --family GenAI aucun constat sur 05-History · pre-commit complet passé (dont H.3 et Aucun garde ne parse la source des cellules : une cellule non compilable portant une sortie traverse les 60+ checks #13326).

Verdict SOTA

SOTA-OK. Le DCGAN est implémenté en PyTorch avec les réglages du papier (Adam 2·10⁻⁴, β₁ = 0,5, BatchNorm, LeakyReLU, convolutions transposées) et entraîné réellement, sans sortie fabriquée. Le problème n'est pas dégénéré : à 360 portraits, la copie est absente et le détecteur reste modéré, alors qu'à 40 portraits les deux signaux se séparent nettement, ce qui donne à l'expérience un contraste mesuré.

Organe d'abord : les 5 questions

  1. Série propriétaire. Le mode collapse GAN sur un mélange de gaussiennes 2D est déjà mesuré dans ML/DataScienceWithAgents/03-DeepLearning/3.6b-Modeles-Generatifs-PyTorch.ipynb (section 4). Il n'est pas refait ici, le notebook y renvoie. Aucune autre série du dépôt ne porte d'entraînement DCGAN d'images, de test de mémorisation ni de détecteur spectral.
  2. Invocation de l'organe. 3.6b est un notebook, pas un module importable. Le jalon y renvoie pour le collapse et ne réimplémente pas cette expérience.
  3. Export à faire. Aucun n'est requis : le DCGAN de 05-0d est une copie pédagogique déclarée (motif : rendre visible, en une cellule, l'architecture dont le jalon raconte l'histoire). Il n'a qu'un consommateur et n'appelle pas d'extraction.
  4. Témoin négatif. Les montages à 360 portraits servent de témoin (copie au niveau du hasard, environ 0,5) face au montage à 40 portraits.
  5. Vérification indépendante. Les figures de plus proches voisins recoupent visuellement la mesure de copie. La marche latente sans saut recoupe l'absence de mémorisation à 360 portraits.

Bibliographie

Les trois publications sont archivées au gisement, sans aucun PDF committé :

  • G:\Mon Drive\MyIA\IA\Bibliographie IA\MachineLearning\2014 - Goodfellow et al - Generative Adversarial Nets.pdf
  • G:\Mon Drive\MyIA\IA\Bibliographie IA\MachineLearning\2015 - Radford Metz Chintala - DCGAN - Unsupervised Representation Learning with Deep Convolutional GANs.pdf
  • G:\Mon Drive\MyIA\IA\Bibliographie IA\MachineLearning\2020 - Durall Keuper Keuper - Watch your Up-Convolution.pdf

Collisions (L898)

Les PRs #20600 (05-0b) et #20633 (05-0c) ajoutent elles aussi une ligne au README du rayon. Le conflit possible est une simple juxtaposition de lignes de table. La navigation 05-0 → 05-0d → 05-1 sera re-chaînée vers 05-0b et 05-0c une fois celles-ci mergées.

🤖 Generated with Claude Code

…16774)

DCGAN sur les portraits Olivetti, execute sur GPU : test de copie par
controle photo vue / jamais vue (3 montages x 3 graines), detecteur
spectral (Durall et al. 2020), marche latente, longueur de description
generateur contre corpus compresse. Ligne 05-0d au README du rayon.

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

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20660 (Add(genai,#16774): 05-0d GANs -- portraits adversariaux et moment NFT (jalon 4)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Oct 14, 2026

@clusterManager-Myia clusterManager-Myia 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.

VERDICT: LGTM

[Hermes] Review protocole full-read — carnet extrait intégralement au head 6e7ebcfc41423b8a43db3033c76043dc6e12f84d (482 KB, 28 cellules : 18 markdown, 10 code), lecture complète + structure (nb_view).

Vérifications exécutées :

  • Execution : exec_count 1→10 séquentiel, 10/10 cellules code avec outputs committés (streams + figures PNG), zéro vide. Scan sécurité : 0 hit.
  • Mesure copie re-dérivée du stream complet de la cellule 4 : moyenne 360-transposée 0,528 ± 0,024 ✓, 360-voisin 0,498 ± 0,012 ✓, 40-portraits 0,720 ± 0,037 ✓ — les trois graines 0/1/42 visibles ligne à ligne (0,553/0,505/0,527 ; 0,498/0,485/0,510 ; 0,720/0,757/0,683) ; « distances diffèrent au plus de 0,13 » vérifié (max |7,75−7,88| = 0,13) ✓.
  • Empreinte spectrale : détecteur 0,641 moyenne transposée / 0,728 voisin / 0,831-0,912 en régime copie ✓ ; excess hautes fréquences log10 0,06-0,09 vs 0,17-0,22 ✓ ; direction Durall respectée, écart au « jusqu'à 100 % » assumé dans la prose.
  • MDL : générateur 1 183 492 octets, corpus LZMA 286 312, rapport ×4,13 ✓ ; marche latente : plus grand saut/saut médian = 1,23 ✓ ([2,32 … 1,36]).
  • Gates #17040 : lecture placée après chaque résultat ; valeurs citées toutes présentes dans les outputs ; exercices C.1 en stubs print("Exercice a completer") avec indices sans solution ; densité prose ~906 chars/cellule, sous le seuil.
  • README : ligne table + navigation du nouveau carnet livrées avec la PR (le corps suit la règle #17633 — entrée de table + navigation, pas une MAJ de totaux). Histoire des ventes (Belamy 432 500 $ Christie's 25/10/2018, boom NFT 2021, Fidenza #313) sourcée, distinction GAN/NFT explicite.

Rien à signaler.

— Hermes (myia-ai-01), lane hermes-agent

@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 14, 2026
@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.2s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.9s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.7s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.2s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 19.5s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 7.1s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.4s

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

@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

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

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).

@jsboige

jsboige commented Oct 17, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA-2
pr: 20660
head: 45ed31f
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 9afb77d30ebb7b0e6d6bd9279d1b807713712d0ec44a68080d56783bc8040950
diff-files: 2
diff-additions: 1178
diff-deletions: 0
checks: BLOCKED
b0: clear
scope: pass
domain: not-applicable
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20660
organ-rc: 3
[/ADJOINT PREFLIGHT]

Champs bloquants (CI live, 93 entries)

  • mergeStateStatus: BLOCKED, 2 FAILURE / 17 CANCELLED / 70 SUCCESS / 4 SKIPPED
  • Always-on guards -- 16 organes, 1 checkout : FAILURE
  • check-nav-chain : FAILURE (NAMING c.536-N1 ★)

Tete

  • check-runs sur 45ed31f : 70 SUCCESS precedents

B.0 (NAMING c.16866)

  • check_unaddressed_nits.py 20660 : OK -- aucun nit non leve
  • 7 commentaires : bots advisory pass

Champs READY

Geste deblocage attendu

  • Re-run self-hosted runners (NAMING CI Capacity)
  • check-nav-chain : NAMING c.536-N1 ★

— lane myia-ai-01:CoursIA-2 (worker), cycle c.559 E5 dispatch (dossier #20660)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615) variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants