diff --git a/MyIA.AI.Notebooks/GenAI/PostTraining/PT_15_controle_interpretabilite.ipynb b/MyIA.AI.Notebooks/GenAI/PostTraining/PT_15_controle_interpretabilite.ipynb index 0d405c7e6e..fbf298632d 100644 --- a/MyIA.AI.Notebooks/GenAI/PostTraining/PT_15_controle_interpretabilite.ipynb +++ b/MyIA.AI.Notebooks/GenAI/PostTraining/PT_15_controle_interpretabilite.ipynb @@ -16,6 +16,8 @@ "source": [ "# PT-15 — Contrôle par interprétabilité : refusal direction, steering, unlearning\n", "\n", + "> **Approfondissements** : [→ PT-15b — Géométrie des features SAE](PT_15b_geometrie_features_sae.ipynb) · [→ PT-15c — Crosscoder, distillation](PT_15c_crosscoder_distillation.ipynb) — deux sondes de la géométrie latente, descendues de la série ICT, dont l'organe `ict/` reste la source.\n", + "\n", "**Position dans la série** : PT-02 (SFT) a montré *comment* on entraîne un modèle à refuser les requêtes nuisibles ; ce notebook montre **pourquoi cette couche de sécurité est fragile** — et comment l'interprétabilité mécaniste le démontre expérimentalement sur un modèle à poids ouverts (nous hébergeons Qwen : ce qui suit est exécutable par quiconque télécharge les poids).\n", "\n", "## Ce que ce notebook démontre\n", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41-SAE-GeometrieFeatures-Python.ipynb b/MyIA.AI.Notebooks/GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb similarity index 94% rename from MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41-SAE-GeometrieFeatures-Python.ipynb rename to MyIA.AI.Notebooks/GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb index d51ce76d8c..e5c2ef975f 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41-SAE-GeometrieFeatures-Python.ipynb +++ b/MyIA.AI.Notebooks/GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb @@ -5,16 +5,18 @@ "id": "6da41e17", "metadata": { "papermill": { - "duration": 0.004349, - "end_time": "2026-09-25T11:32:46.450285+00:00", + "duration": 0.006672, + "end_time": "2026-10-11T00:26:22.701842+00:00", "exception": false, - "start_time": "2026-09-25T11:32:46.445936+00:00", + "start_time": "2026-10-11T00:26:22.695170+00:00", "status": "completed" }, "tags": [] }, "source": [ - "# Geometrie des features SAE : galaxy, atome, dense -- R04 x R09 sur nos traces\n", + "# PT-15b — Géométrie des features SAE : galaxy, atome, dense — R04 × R09 sur nos traces\n", + "\n", + "[↑ PostTraining](README.md) · organe consommé : la série [ICT](../../IIT/ICT-Series/README.md) (`ict/`, traces npz du harnais #10355)\n", "\n", "Deux papiers dessinent la meme anatomie sous deux angles : **R04** (Li et al. 2024,\n", "*The Geometry of Concepts*) lit l'espace latent d'un SAE comme une galaxie\n", @@ -30,10 +32,10 @@ "id": "statut-epistemique", "metadata": { "papermill": { - "duration": 0.003358, - "end_time": "2026-09-25T11:32:46.457401+00:00", + "duration": 0.004489, + "end_time": "2026-10-11T00:26:22.722141+00:00", "exception": false, - "start_time": "2026-09-25T11:32:46.454043+00:00", + "start_time": "2026-10-11T00:26:22.717652+00:00", "status": "completed" }, "tags": [] @@ -47,10 +49,10 @@ "id": "5a72e593", "metadata": { "papermill": { - "duration": 0.00341, - "end_time": "2026-09-25T11:32:46.463930+00:00", + "duration": 0.005373, + "end_time": "2026-10-11T00:26:22.734973+00:00", "exception": false, - "start_time": "2026-09-25T11:32:46.460520+00:00", + "start_time": "2026-10-11T00:26:22.729600+00:00", "status": "completed" }, "tags": [] @@ -82,10 +84,10 @@ "id": "678f11be", "metadata": { "papermill": { - "duration": 0.003068, - "end_time": "2026-09-25T11:32:46.470292+00:00", + "duration": 0.005363, + "end_time": "2026-10-11T00:26:22.744977+00:00", "exception": false, - "start_time": "2026-09-25T11:32:46.467224+00:00", + "start_time": "2026-10-11T00:26:22.739614+00:00", "status": "completed" }, "tags": [] @@ -117,10 +119,10 @@ "id": "118c7a6d", "metadata": { "papermill": { - "duration": 0.003017, - "end_time": "2026-09-25T11:32:46.476418+00:00", + "duration": 0.005162, + "end_time": "2026-10-11T00:26:22.755360+00:00", "exception": false, - "start_time": "2026-09-25T11:32:46.473401+00:00", + "start_time": "2026-10-11T00:26:22.750198+00:00", "status": "completed" }, "tags": [] @@ -144,10 +146,10 @@ "id": "67c97908", "metadata": { "papermill": { - "duration": 0.00279, - "end_time": "2026-09-25T11:32:46.482311+00:00", + "duration": 0.006749, + "end_time": "2026-10-11T00:26:22.766557+00:00", "exception": false, - "start_time": "2026-09-25T11:32:46.479521+00:00", + "start_time": "2026-10-11T00:26:22.759808+00:00", "status": "completed" }, "tags": [] @@ -167,16 +169,16 @@ "id": "canon-ict-root", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:32:46.487843Z", - "iopub.status.busy": "2026-09-25T11:32:46.487644Z", - "iopub.status.idle": "2026-09-25T11:32:46.494746Z", - "shell.execute_reply": "2026-09-25T11:32:46.494007Z" + "iopub.execute_input": "2026-10-11T00:26:22.778650Z", + "iopub.status.busy": "2026-10-11T00:26:22.778381Z", + "iopub.status.idle": "2026-10-11T00:26:22.787617Z", + "shell.execute_reply": "2026-10-11T00:26:22.786562Z" }, "papermill": { - "duration": 0.010795, - "end_time": "2026-09-25T11:32:46.495399+00:00", + "duration": 0.017456, + "end_time": "2026-10-11T00:26:22.788558+00:00", "exception": false, - "start_time": "2026-09-25T11:32:46.484604+00:00", + "start_time": "2026-10-11T00:26:22.771102+00:00", "status": "completed" }, "tags": [] @@ -191,18 +193,19 @@ } ], "source": [ - "# Racine canonique de la serie : remonte les parents depuis le dossier du\n", - "# notebook jusqu'au package ict/, puis en derive les dossiers de donnees.\n", - "# La serie reste executable depuis sa racine comme depuis le dossier d'une\n", - "# sous-serie (arbitrage #4362, preparation de l'arc A).\n", + "# Organe consomme : le package `ict/` de la serie ICT, son hote d'origine.\n", + "# Ce carnet a muri dans la serie PostTraining (mouvement 1 de #16741) ; l'organe\n", + "# qui le rattache a ICT reste nomme ici, et ses donnees (traces npz du harnais\n", + "# #10355) restent celles de la serie.\n", "import sys\n", "from pathlib import Path\n", "\n", - "ICT_ROOT = Path.cwd()\n", - "while not (ICT_ROOT / \"ict\" / \"__init__.py\").exists() and ICT_ROOT != ICT_ROOT.parent:\n", - " ICT_ROOT = ICT_ROOT.parent\n", + "REPO_ROOT = Path.cwd()\n", + "while not (REPO_ROOT / \"MyIA.AI.Notebooks\").is_dir() and REPO_ROOT != REPO_ROOT.parent:\n", + " REPO_ROOT = REPO_ROOT.parent\n", + "ICT_ROOT = REPO_ROOT / \"MyIA.AI.Notebooks\" / \"IIT\" / \"ICT-Series\"\n", "assert (ICT_ROOT / \"ict\" / \"__init__.py\").exists(), (\n", - " f\"package ict/ introuvable en remontant depuis {Path.cwd().name}\")\n", + " f\"organe ict/ introuvable depuis {Path.cwd()} -- attendu sous {ICT_ROOT}\")\n", "if str(ICT_ROOT) not in sys.path:\n", " sys.path.insert(0, str(ICT_ROOT))\n", "TRACES_DIR = ICT_ROOT / \"traces\"\n", @@ -217,16 +220,16 @@ "id": "5ee52287", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:32:46.501579Z", - "iopub.status.busy": "2026-09-25T11:32:46.501366Z", - "iopub.status.idle": "2026-09-25T11:32:50.797018Z", - "shell.execute_reply": "2026-09-25T11:32:50.795624Z" + "iopub.execute_input": "2026-10-11T00:26:22.800198Z", + "iopub.status.busy": "2026-10-11T00:26:22.799951Z", + "iopub.status.idle": "2026-10-11T00:26:46.359828Z", + "shell.execute_reply": "2026-10-11T00:26:46.358261Z" }, "papermill": { - "duration": 4.300571, - "end_time": "2026-09-25T11:32:50.798408+00:00", + "duration": 23.569582, + "end_time": "2026-10-11T00:26:46.362184+00:00", "exception": false, - "start_time": "2026-09-25T11:32:46.497837+00:00", + "start_time": "2026-10-11T00:26:22.792602+00:00", "status": "completed" }, "tags": [] @@ -236,7 +239,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "ict21_sae_layer16_trained: 2699 positions x 65536 features, 20786 features actives, 1068 token-strings\n", + "ict21_sae_layer16_trained: 2699 positions x 65536 features, 20786 features actives, 1068 token-strings\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "ict21_sae_layer16_control: 2699 positions x 65534 features, 6925 features actives, 1068 token-strings\n" ] }, @@ -305,10 +314,10 @@ "id": "a33c03a2", "metadata": { "papermill": { - "duration": 0.003747, - "end_time": "2026-09-25T11:32:50.806069+00:00", + "duration": 0.004437, + "end_time": "2026-10-11T00:26:46.372465+00:00", "exception": false, - "start_time": "2026-09-25T11:32:50.802322+00:00", + "start_time": "2026-10-11T00:26:46.368028+00:00", "status": "completed" }, "tags": [] @@ -330,16 +339,16 @@ "id": "cb317527", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:32:50.814484Z", - "iopub.status.busy": "2026-09-25T11:32:50.814143Z", - "iopub.status.idle": "2026-09-25T11:33:31.991441Z", - "shell.execute_reply": "2026-09-25T11:33:31.990215Z" + "iopub.execute_input": "2026-10-11T00:26:46.385973Z", + "iopub.status.busy": "2026-10-11T00:26:46.385427Z", + "iopub.status.idle": "2026-10-11T00:27:28.559318Z", + "shell.execute_reply": "2026-10-11T00:27:28.557499Z" }, "papermill": { - "duration": 41.1831, - "end_time": "2026-09-25T11:33:31.992736+00:00", + "duration": 42.183296, + "end_time": "2026-10-11T00:27:28.560519+00:00", "exception": false, - "start_time": "2026-09-25T11:32:50.809636+00:00", + "start_time": "2026-10-11T00:26:46.377223+00:00", "status": "completed" }, "tags": [] @@ -437,10 +446,10 @@ "id": "f31817c4", "metadata": { "papermill": { - "duration": 0.00483, - "end_time": "2026-09-25T11:33:32.002504+00:00", + "duration": 0.012826, + "end_time": "2026-10-11T00:27:28.584906+00:00", "exception": false, - "start_time": "2026-09-25T11:33:31.997674+00:00", + "start_time": "2026-10-11T00:27:28.572080+00:00", "status": "completed" }, "tags": [] @@ -474,10 +483,10 @@ "id": "65b45831", "metadata": { "papermill": { - "duration": 0.004115, - "end_time": "2026-09-25T11:33:32.011325+00:00", + "duration": 0.008371, + "end_time": "2026-10-11T00:27:28.601309+00:00", "exception": false, - "start_time": "2026-09-25T11:33:32.007210+00:00", + "start_time": "2026-10-11T00:27:28.592938+00:00", "status": "completed" }, "tags": [] @@ -499,16 +508,16 @@ "id": "c6a0e126", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:33:32.024261Z", - "iopub.status.busy": "2026-09-25T11:33:32.023869Z", - "iopub.status.idle": "2026-09-25T11:34:08.088125Z", - "shell.execute_reply": "2026-09-25T11:34:08.087043Z" + "iopub.execute_input": "2026-10-11T00:27:28.620874Z", + "iopub.status.busy": "2026-10-11T00:27:28.620488Z", + "iopub.status.idle": "2026-10-11T00:28:08.209419Z", + "shell.execute_reply": "2026-10-11T00:28:08.208433Z" }, "papermill": { - "duration": 36.075457, - "end_time": "2026-09-25T11:34:08.092480+00:00", + "duration": 39.602618, + "end_time": "2026-10-11T00:28:08.212797+00:00", "exception": false, - "start_time": "2026-09-25T11:33:32.017023+00:00", + "start_time": "2026-10-11T00:27:28.610179+00:00", "status": "completed" }, "tags": [] @@ -589,10 +598,10 @@ "id": "fa648547", "metadata": { "papermill": { - "duration": 0.006287, - "end_time": "2026-09-25T11:34:08.105649+00:00", + "duration": 0.004684, + "end_time": "2026-10-11T00:28:08.223539+00:00", "exception": false, - "start_time": "2026-09-25T11:34:08.099362+00:00", + "start_time": "2026-10-11T00:28:08.218855+00:00", "status": "completed" }, "tags": [] @@ -623,10 +632,10 @@ "id": "67b8997f", "metadata": { "papermill": { - "duration": 0.007291, - "end_time": "2026-09-25T11:34:08.121009+00:00", + "duration": 0.003856, + "end_time": "2026-10-11T00:28:08.231732+00:00", "exception": false, - "start_time": "2026-09-25T11:34:08.113718+00:00", + "start_time": "2026-10-11T00:28:08.227876+00:00", "status": "completed" }, "tags": [] @@ -650,16 +659,16 @@ "id": "cf502843", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:34:08.134428Z", - "iopub.status.busy": "2026-09-25T11:34:08.134152Z", - "iopub.status.idle": "2026-09-25T11:34:36.058514Z", - "shell.execute_reply": "2026-09-25T11:34:36.057515Z" + "iopub.execute_input": "2026-10-11T00:28:08.241396Z", + "iopub.status.busy": "2026-10-11T00:28:08.241180Z", + "iopub.status.idle": "2026-10-11T00:28:37.842688Z", + "shell.execute_reply": "2026-10-11T00:28:37.841631Z" }, "papermill": { - "duration": 27.932474, - "end_time": "2026-09-25T11:34:36.060261+00:00", + "duration": 29.607498, + "end_time": "2026-10-11T00:28:37.843527+00:00", "exception": false, - "start_time": "2026-09-25T11:34:08.127787+00:00", + "start_time": "2026-10-11T00:28:08.236029+00:00", "status": "completed" }, "tags": [] @@ -752,10 +761,10 @@ "id": "e82faf91", "metadata": { "papermill": { - "duration": 0.005388, - "end_time": "2026-09-25T11:34:36.073537+00:00", + "duration": 0.008591, + "end_time": "2026-10-11T00:28:37.857903+00:00", "exception": false, - "start_time": "2026-09-25T11:34:36.068149+00:00", + "start_time": "2026-10-11T00:28:37.849312+00:00", "status": "completed" }, "tags": [] @@ -779,10 +788,10 @@ "id": "50c40da1", "metadata": { "papermill": { - "duration": 0.007428, - "end_time": "2026-09-25T11:34:36.086601+00:00", + "duration": 0.005046, + "end_time": "2026-10-11T00:28:37.868339+00:00", "exception": false, - "start_time": "2026-09-25T11:34:36.079173+00:00", + "start_time": "2026-10-11T00:28:37.863293+00:00", "status": "completed" }, "tags": [] @@ -803,16 +812,16 @@ "id": "a02cc592", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:34:36.099426Z", - "iopub.status.busy": "2026-09-25T11:34:36.099029Z", - "iopub.status.idle": "2026-09-25T11:39:30.063741Z", - "shell.execute_reply": "2026-09-25T11:39:30.062288Z" + "iopub.execute_input": "2026-10-11T00:28:37.880495Z", + "iopub.status.busy": "2026-10-11T00:28:37.880267Z", + "iopub.status.idle": "2026-10-11T00:33:37.576321Z", + "shell.execute_reply": "2026-10-11T00:33:37.574982Z" }, "papermill": { - "duration": 293.978166, - "end_time": "2026-09-25T11:39:30.070197+00:00", + "duration": 299.708516, + "end_time": "2026-10-11T00:33:37.581766+00:00", "exception": false, - "start_time": "2026-09-25T11:34:36.092031+00:00", + "start_time": "2026-10-11T00:28:37.873250+00:00", "status": "completed" }, "tags": [] @@ -871,10 +880,10 @@ "id": "67d24e09", "metadata": { "papermill": { - "duration": 0.007025, - "end_time": "2026-09-25T11:39:30.085650+00:00", + "duration": 0.005723, + "end_time": "2026-10-11T00:33:37.593464+00:00", "exception": false, - "start_time": "2026-09-25T11:39:30.078625+00:00", + "start_time": "2026-10-11T00:33:37.587741+00:00", "status": "completed" }, "tags": [] @@ -903,10 +912,10 @@ "id": "fc30b67f", "metadata": { "papermill": { - "duration": 0.004885, - "end_time": "2026-09-25T11:39:30.096259+00:00", + "duration": 0.005554, + "end_time": "2026-10-11T00:33:37.604697+00:00", "exception": false, - "start_time": "2026-09-25T11:39:30.091374+00:00", + "start_time": "2026-10-11T00:33:37.599143+00:00", "status": "completed" }, "tags": [] @@ -934,16 +943,16 @@ "id": "81f9b2eb", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:39:30.106754Z", - "iopub.status.busy": "2026-09-25T11:39:30.106397Z", - "iopub.status.idle": "2026-09-25T11:39:35.130638Z", - "shell.execute_reply": "2026-09-25T11:39:35.129531Z" + "iopub.execute_input": "2026-10-11T00:33:37.616870Z", + "iopub.status.busy": "2026-10-11T00:33:37.616598Z", + "iopub.status.idle": "2026-10-11T00:33:43.159353Z", + "shell.execute_reply": "2026-10-11T00:33:43.158367Z" }, "papermill": { - "duration": 5.030736, - "end_time": "2026-09-25T11:39:35.131680+00:00", + "duration": 5.550176, + "end_time": "2026-10-11T00:33:43.160148+00:00", "exception": false, - "start_time": "2026-09-25T11:39:30.100944+00:00", + "start_time": "2026-10-11T00:33:37.609972+00:00", "status": "completed" }, "tags": [] @@ -1003,16 +1012,16 @@ "id": "50e6c4f7", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:39:35.147948Z", - "iopub.status.busy": "2026-09-25T11:39:35.147565Z", - "iopub.status.idle": "2026-09-25T11:43:55.828081Z", - "shell.execute_reply": "2026-09-25T11:43:55.827088Z" + "iopub.execute_input": "2026-10-11T00:33:43.172165Z", + "iopub.status.busy": "2026-10-11T00:33:43.171938Z", + "iopub.status.idle": "2026-10-11T00:38:09.508830Z", + "shell.execute_reply": "2026-10-11T00:38:09.507785Z" }, "papermill": { - "duration": 260.690019, - "end_time": "2026-09-25T11:43:55.829145+00:00", + "duration": 266.344105, + "end_time": "2026-10-11T00:38:09.509650+00:00", "exception": false, - "start_time": "2026-09-25T11:39:35.139126+00:00", + "start_time": "2026-10-11T00:33:43.165545+00:00", "status": "completed" }, "tags": [] @@ -1097,10 +1106,10 @@ "id": "d6901c96", "metadata": { "papermill": { - "duration": 0.005366, - "end_time": "2026-09-25T11:43:55.843547+00:00", + "duration": 0.008858, + "end_time": "2026-10-11T00:38:09.526519+00:00", "exception": false, - "start_time": "2026-09-25T11:43:55.838181+00:00", + "start_time": "2026-10-11T00:38:09.517661+00:00", "status": "completed" }, "tags": [] @@ -1137,10 +1146,10 @@ "id": "2536eaeb", "metadata": { "papermill": { - "duration": 0.004996, - "end_time": "2026-09-25T11:43:55.853359+00:00", + "duration": 0.005642, + "end_time": "2026-10-11T00:38:09.539207+00:00", "exception": false, - "start_time": "2026-09-25T11:43:55.848363+00:00", + "start_time": "2026-10-11T00:38:09.533565+00:00", "status": "completed" }, "tags": [] @@ -1161,16 +1170,16 @@ "id": "f939784d", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:43:55.865408Z", - "iopub.status.busy": "2026-09-25T11:43:55.865120Z", - "iopub.status.idle": "2026-09-25T11:44:01.243037Z", - "shell.execute_reply": "2026-09-25T11:44:01.240710Z" + "iopub.execute_input": "2026-10-11T00:38:09.551829Z", + "iopub.status.busy": "2026-10-11T00:38:09.551490Z", + "iopub.status.idle": "2026-10-11T00:38:14.153192Z", + "shell.execute_reply": "2026-10-11T00:38:14.152321Z" }, "papermill": { - "duration": 5.386439, - "end_time": "2026-09-25T11:44:01.244766+00:00", + "duration": 4.609087, + "end_time": "2026-10-11T00:38:14.153878+00:00", "exception": false, - "start_time": "2026-09-25T11:43:55.858327+00:00", + "start_time": "2026-10-11T00:38:09.544791+00:00", "status": "completed" }, "tags": [] @@ -1247,10 +1256,10 @@ "id": "dded8c6f", "metadata": { "papermill": { - "duration": 0.010012, - "end_time": "2026-09-25T11:44:01.266190+00:00", + "duration": 0.005365, + "end_time": "2026-10-11T00:38:14.165233+00:00", "exception": false, - "start_time": "2026-09-25T11:44:01.256178+00:00", + "start_time": "2026-10-11T00:38:14.159868+00:00", "status": "completed" }, "tags": [] @@ -1278,10 +1287,10 @@ "id": "4646ccbe", "metadata": { "papermill": { - "duration": 0.009031, - "end_time": "2026-09-25T11:44:01.289160+00:00", + "duration": 0.00537, + "end_time": "2026-10-11T00:38:14.176983+00:00", "exception": false, - "start_time": "2026-09-25T11:44:01.280129+00:00", + "start_time": "2026-10-11T00:38:14.171613+00:00", "status": "completed" }, "tags": [] @@ -1301,16 +1310,16 @@ "id": "3b7fd818", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:44:01.310335Z", - "iopub.status.busy": "2026-09-25T11:44:01.309967Z", - "iopub.status.idle": "2026-09-25T11:47:17.196185Z", - "shell.execute_reply": "2026-09-25T11:47:17.195125Z" + "iopub.execute_input": "2026-10-11T00:38:14.200148Z", + "iopub.status.busy": "2026-10-11T00:38:14.199785Z", + "iopub.status.idle": "2026-10-11T00:41:28.109059Z", + "shell.execute_reply": "2026-10-11T00:41:28.108100Z" }, "papermill": { - "duration": 195.899811, - "end_time": "2026-09-25T11:47:17.199286+00:00", + "duration": 193.93211, + "end_time": "2026-10-11T00:41:28.114032+00:00", "exception": false, - "start_time": "2026-09-25T11:44:01.299475+00:00", + "start_time": "2026-10-11T00:38:14.181922+00:00", "status": "completed" }, "tags": [] @@ -1377,10 +1386,10 @@ "id": "11e6b0f8", "metadata": { "papermill": { - "duration": 0.007963, - "end_time": "2026-09-25T11:47:17.218244+00:00", + "duration": 0.006032, + "end_time": "2026-10-11T00:41:28.127193+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.210281+00:00", + "start_time": "2026-10-11T00:41:28.121161+00:00", "status": "completed" }, "tags": [] @@ -1407,10 +1416,10 @@ "id": "81e60970", "metadata": { "papermill": { - "duration": 0.007985, - "end_time": "2026-09-25T11:47:17.234829+00:00", + "duration": 0.008781, + "end_time": "2026-10-11T00:41:28.143224+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.226844+00:00", + "start_time": "2026-10-11T00:41:28.134443+00:00", "status": "completed" }, "tags": [] @@ -1450,10 +1459,10 @@ "id": "818cdf53", "metadata": { "papermill": { - "duration": 0.00568, - "end_time": "2026-09-25T11:47:17.250756+00:00", + "duration": 0.006785, + "end_time": "2026-10-11T00:41:28.155966+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.245076+00:00", + "start_time": "2026-10-11T00:41:28.149181+00:00", "status": "completed" }, "tags": [] @@ -1476,16 +1485,16 @@ "id": "a8fef3df", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:47:17.262714Z", - "iopub.status.busy": "2026-09-25T11:47:17.262321Z", - "iopub.status.idle": "2026-09-25T11:47:17.266163Z", - "shell.execute_reply": "2026-09-25T11:47:17.265273Z" + "iopub.execute_input": "2026-10-11T00:41:28.169185Z", + "iopub.status.busy": "2026-10-11T00:41:28.168939Z", + "iopub.status.idle": "2026-10-11T00:41:28.173727Z", + "shell.execute_reply": "2026-10-11T00:41:28.172854Z" }, "papermill": { - "duration": 0.010863, - "end_time": "2026-09-25T11:47:17.266890+00:00", + "duration": 0.012729, + "end_time": "2026-10-11T00:41:28.174536+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.256027+00:00", + "start_time": "2026-10-11T00:41:28.161807+00:00", "status": "completed" }, "tags": [] @@ -1505,10 +1514,10 @@ "id": "6e8d300f", "metadata": { "papermill": { - "duration": 0.005315, - "end_time": "2026-09-25T11:47:17.277180+00:00", + "duration": 0.005943, + "end_time": "2026-10-11T00:41:28.185884+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.271865+00:00", + "start_time": "2026-10-11T00:41:28.179941+00:00", "status": "completed" }, "tags": [] @@ -1531,16 +1540,16 @@ "id": "7772a79c", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:47:17.293939Z", - "iopub.status.busy": "2026-09-25T11:47:17.293635Z", - "iopub.status.idle": "2026-09-25T11:47:17.298660Z", - "shell.execute_reply": "2026-09-25T11:47:17.297616Z" + "iopub.execute_input": "2026-10-11T00:41:28.193483Z", + "iopub.status.busy": "2026-10-11T00:41:28.193253Z", + "iopub.status.idle": "2026-10-11T00:41:28.196732Z", + "shell.execute_reply": "2026-10-11T00:41:28.196023Z" }, "papermill": { - "duration": 0.01506, - "end_time": "2026-09-25T11:47:17.299965+00:00", + "duration": 0.008462, + "end_time": "2026-10-11T00:41:28.197386+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.284905+00:00", + "start_time": "2026-10-11T00:41:28.188924+00:00", "status": "completed" }, "tags": [] @@ -1559,10 +1568,10 @@ "id": "cef9847c", "metadata": { "papermill": { - "duration": 0.005439, - "end_time": "2026-09-25T11:47:17.310767+00:00", + "duration": 0.005371, + "end_time": "2026-10-11T00:41:28.207106+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.305328+00:00", + "start_time": "2026-10-11T00:41:28.201735+00:00", "status": "completed" }, "tags": [] @@ -1585,16 +1594,16 @@ "id": "f5b790a4", "metadata": { "execution": { - "iopub.execute_input": "2026-09-25T11:47:17.330674Z", - "iopub.status.busy": "2026-09-25T11:47:17.330181Z", - "iopub.status.idle": "2026-09-25T11:47:17.334530Z", - "shell.execute_reply": "2026-09-25T11:47:17.333500Z" + "iopub.execute_input": "2026-10-11T00:41:28.223182Z", + "iopub.status.busy": "2026-10-11T00:41:28.222821Z", + "iopub.status.idle": "2026-10-11T00:41:28.229443Z", + "shell.execute_reply": "2026-10-11T00:41:28.228413Z" }, "papermill": { - "duration": 0.012859, - "end_time": "2026-09-25T11:47:17.335287+00:00", + "duration": 0.017901, + "end_time": "2026-10-11T00:41:28.230172+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.322428+00:00", + "start_time": "2026-10-11T00:41:28.212271+00:00", "status": "completed" }, "tags": [] @@ -1613,10 +1622,10 @@ "id": "31c7a0be", "metadata": { "papermill": { - "duration": 0.006535, - "end_time": "2026-09-25T11:47:17.348468+00:00", + "duration": 0.009906, + "end_time": "2026-10-11T00:41:28.248670+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.341933+00:00", + "start_time": "2026-10-11T00:41:28.238764+00:00", "status": "completed" }, "tags": [] @@ -1648,10 +1657,10 @@ "id": "5514f0b3", "metadata": { "papermill": { - "duration": 0.006733, - "end_time": "2026-09-25T11:47:17.363114+00:00", + "duration": 0.010537, + "end_time": "2026-10-11T00:41:28.270771+00:00", "exception": false, - "start_time": "2026-09-25T11:47:17.356381+00:00", + "start_time": "2026-10-11T00:41:28.260234+00:00", "status": "completed" }, "tags": [] @@ -1692,14 +1701,14 @@ }, "papermill": { "default_parameters": {}, - "duration": 873.631082, - "end_time": "2026-09-25T11:47:18.918074+00:00", + "duration": 909.556131, + "end_time": "2026-10-11T00:41:30.260194+00:00", "environment_variables": {}, "exception": null, - "input_path": "ICT-41-SAE-GeometrieFeatures-Python.ipynb", - "output_path": "ICT-41-SAE-GeometrieFeatures-Python.ipynb", + "input_path": "PT_15b_geometrie_features_sae.ipynb", + "output_path": "PT_15b_geometrie_features_sae.ipynb", "parameters": {}, - "start_time": "2026-09-25T11:32:45.286992+00:00", + "start_time": "2026-10-11T00:26:20.704063+00:00", "version": "2.6.0" } }, diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41b-Crosscoder-Distillation-Python.ipynb b/MyIA.AI.Notebooks/GenAI/PostTraining/PT_15c_crosscoder_distillation.ipynb similarity index 99% rename from MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41b-Crosscoder-Distillation-Python.ipynb rename to MyIA.AI.Notebooks/GenAI/PostTraining/PT_15c_crosscoder_distillation.ipynb index 48234af236..9df8e71ca1 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41b-Crosscoder-Distillation-Python.ipynb +++ b/MyIA.AI.Notebooks/GenAI/PostTraining/PT_15c_crosscoder_distillation.ipynb @@ -14,11 +14,13 @@ "tags": [] }, "source": [ - "# ICT-41b — Crosscoder : diffuser deux modèles, distilled reasoning vs base\n", + "# PT-15c — Crosscoder : diffuser deux modèles, distilled reasoning vs base\n", "\n", - "> **Arc A2 — géométrie du latent** (Epic #16741), suite directe d'ICT-41, SAE mono-modèle (issue #16747, en cours d'intégration via la PR #16859). Paper source : **R05** — Baek & Tegmark, *Towards Understanding Distilled Reasoning Models: A Representational Approach* ([arXiv:2503.03730](https://arxiv.org/2503.03730)).\n", + "[↑ PostTraining](README.md) · cousin autonome de la série [ICT](../../IIT/ICT-Series/README.md) — lien thématique (R05 prolonge ICT-41), aucun import de `ict/` (stdlib, numpy, torch, datasets, transformers, matplotlib)\n", "\n", - "ICT-41 isolait la géométrie d'UN modèle avec un SAE. Ici on met **deux modèles côte à côte** dans un même dictionnaire de features : le modèle distillé `DeepSeek-R1-Distill-Qwen-1.5B` (qui a « appris à raisonner » par distillation de traces DeepSeek-R1) et sa base `Qwen2.5-Math-1.5B` (avant distillation). L'outil est le **crosscoder** : chaque feature possède un décodeur **par modèle**, et le rapport des normes des décodeurs — le **NRN** — dit si une feature est *partagée* (les deux modèles l'utilisent pareil), *distillée-only* (le distillé l'a acquise pendant la distillation) ou *base-only*.\n", + "> **Géométrie du latent** — approfondissement de [PT-15b](PT_15b_geometrie_features_sae.ipynb), le SAE mono-modèle venu d'ICT-41 (issue #16747). Paper source : **R05** — Baek & Tegmark, *Towards Understanding Distilled Reasoning Models: A Representational Approach* ([arXiv:2503.03730](https://arxiv.org/2503.03730)).\n", + "\n", + "PT-15b isolait la géométrie d'UN modèle avec un SAE. Ici on met **deux modèles côte à côte** dans un même dictionnaire de features : le modèle distillé `DeepSeek-R1-Distill-Qwen-1.5B` (qui a « appris à raisonner » par distillation de traces DeepSeek-R1) et sa base `Qwen2.5-Math-1.5B` (avant distillation). L'outil est le **crosscoder** : chaque feature possède un décodeur **par modèle**, et le rapport des normes des décodeurs — le **NRN** — dit si une feature est *partagée* (les deux modèles l'utilisent pareil), *distillée-only* (le distillé l'a acquise pendant la distillation) ou *base-only*.\n", "\n", "La question causale du papier : les features distillées-only portent-elles le comportement « over-thinking » du raisonnement long ? On la teste à échelle mini — et on verra que **certaines réponses du papier ne se reproduisent pas à cette échelle** : c'est précisément l'intérêt méthodologique." ] @@ -1478,7 +1480,7 @@ "- Baek, J. & Tegmark, M. (2025). *Towards Understanding Distilled Reasoning Models: A Representational Approach*. [arXiv:2503.03730](https://arxiv.org/abs/2503.03730) — Eq 3-7 (§3), Table 1 & Fig 1 (§4), ablation/steering (§5), parallelogram (Fig 4).\n", "- Dataset : [open-thoughts/OpenThoughts-114k](https://huggingface.co/datasets/open-thoughts/OpenThoughts-114k).\n", "- Modèles : [DeepSeek-R1-Distill-Qwen-1.5B](https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B), [Qwen2.5-Math-1.5B](https://huggingface.co/Qwen/Qwen2.5-Math-1.5B).\n", - "- Précédent série : ICT-41-SAE-GeometrieFeatures-Python, SAE mono-modèle (issue #16747, PR #16859 en cours d'intégration) ; cadre général [README de la série](README.md)." + "- Précédent dans la série : [PT_15b](PT_15b_geometrie_features_sae.ipynb), le SAE mono-modèle venu d'ICT-41 (issue #16747) ; cadre général [README de la série](README.md)." ] } ], diff --git a/MyIA.AI.Notebooks/GenAI/PostTraining/README.md b/MyIA.AI.Notebooks/GenAI/PostTraining/README.md index 16569aff31..67cca016e4 100644 --- a/MyIA.AI.Notebooks/GenAI/PostTraining/README.md +++ b/MyIA.AI.Notebooks/GenAI/PostTraining/README.md @@ -11,6 +11,8 @@ maturity: BETA=14, ALPHA=6, DRAFT=1 > **Place dans GenAI** : cette série est le pendant *théorique et SOTA 2024-2025* de la série [FineTuning](../FineTuning/README.md). FineTuning couvre la boîte à outils pratique (LoRA, QLoRA, SFT, DPO, model merging) ; PostTraining remonte la chaîne conceptuelle complète SFT → RLHF → DPO → GRPO → RLVR → **GAE** et reproduit les techniques récentes (Deepseek-R1) sur petits modèles, complétée par un notebook d'évaluation comparative, un détecteur de reward hacking, et un notebook d'implémentation from-scratch de la famille "no critic" (GRPO/RLOO/GAE) sur toy env CPU, par un **notebook multi-step à crédit différé causal** (PT-12 : les cinq estimateurs re-mesurés, GAE-λ devient discriminant, verdict BEATS 5/5 seeds — le "1-step collapse" était une propriété du banc), et de **trois notebooks appliqués Qwen + GRPO + reward vérifiable + rewardspy en ligne** (PT-11a Z3 CSP arithmétique sur Qwen3.5-0.8B + PT-11b SymPy arithmétique + Z3 N-queens, plus leur validation multi-seed, **plus PT-11c sur le cran au-dessus Qwen3-1.7B/2B** qui qualifie l'étage GPU moyen 16 Go et oppose 0.8B vs 1.7B/2B à budget steps égal) qui font sortir la série du toy env vers un vrai LLM, et **PT-13 sur les corrections 2025 de la loss GRPO** (`Dr. GRPO` : retrait de `÷|o_i|` et `÷std` ; `clip-higher` de `DAPO` : ε_high=0.28 > ε_low=0.2), dont le biais de longueur est mesuré au **niveau gradient**, et **PT-14 sur les lois thermodynamiques de l'entraînement** (R08 : T ∼ η, équipartition ℓf = C·η, schedule 1/t optimal avec discontinuité η/2, force entropique — la physique des learning-rate schedules utilisés en PT-11), et **PT-15 sur le contrôle par interprétabilité** (R14 §3.2 / R11 §1.1 : refusal direction d'Arditi — extraction diffmoy, ablation par projection toutes-couches, steering additif ; machine unlearning et son évaluation white-box ; finetuning shallow « ~10 exemples rouvrent un modèle aligné » de Gade/Lermen ; evaluation awareness Claude 4.6/Apollo, et **PT-16 sur le vericoding** (Bursuc et al. 2025 : la preuve formelle comme récompense — pipeline spec → LLM local 7B → `Dafny verify`/`lean` réels → boucle de réparation 5 tentatives, avec le cas d'école LC0033 « liste vide prouvée conforme à une spec incomplète »), et **PT-17 sur les règles de score propres comme récompense (laya, Nandakishor M., Apache-2.0)** — récompense qui note une probabilité plutôt qu'une réponse ; étude étagée d'un modèle de décision non autorégressif (encodeur bidirectionnel + tête transformer, primitives `choice`/`score`/`noul`). Étage 1 (CPU from-scratch) : la famille des récompenses (binaire, linéaire, log, Brier, sphérique) sur tâche jouet où p(y|x) est connue — les propres **calibrent 7,6× mieux** que les impropres (ECE 0,011 vs 0,088) à exactitude comparable. Estimateur perturbation (GRPO-like G=8) vs gradient direct (MLE) : direct gagne en calibration. Question tranchée : la sur-confiance vient de **toute récompense qui ne note que l'argmax**, pas de la cross-entropie. Étage 2 (GPU 24 Go, ≥ 4 graines, bras CE / RL / RL+CE) reporté en PR séparée. Les deux se complèment : commencer par FineTuning pour la pratique, PostTraining pour la profondeur méthodologique. +Deux approfondissements sont descendus de la série ICT (redescente Tegmark, [#16741](https://github.com/jsboige/CoursIA/issues/16741)) : **PT-15b** — géométrie des features SAE : galaxy, atome, dense (R04 × R09) — et **PT-15c** — crosscoder de distillation (R05). Ils mûrissent ici aux côtés de PT-15 ; les deux statuts diffèrent : **PT-15b consomme l'organe `ict/`** de sa série d'origine (`sae_dictionary`, `scale_free`, traces npz du harnais #10355), **PT-15c est autonome** — aucun import de `ict/` (stdlib, numpy, torch, datasets, transformers, matplotlib), le lien à ICT est thématique (R05 prolonge ICT-41) ; chaque carnet déclare son statut dans son en-tête. + Série pédagogique dédiée aux techniques de **post-training** des LMs ouverts : SFT, DPO, GRPO, RLVR. L'objectif est de comprendre pourquoi 2024-2025 marque une rupture pédagogique dans la façon dont les modèles de langue passent du pre-training brut à un assistant utile, et comment cette chaîne s'est simplifiée depuis la cascade RLHF historique jusqu'aux méthodes "direct" récentes. ## Pourquoi cette série @@ -45,6 +47,8 @@ L'angle pédagogique est d'expliquer la **math du loss** avant le code pour chaq | PT-13 | `PT_13_dapo_drgrpo_corrections.ipynb` | **Corrections de la loss GRPO** — `Dr. GRPO` (retire `÷\|o_i\|` et `÷std`) et `clip-higher` de `DAPO` (ε_high=0.28 > ε_low=0.2) — **biais de longueur mesuré au niveau gradient** (norme par bucket : vanille dilue long-faux à ~0.32× vs dr ~0.81×, 5 seeds), amplification `÷std` (jusqu'à ×3.0), taux de climb sous clip (ε=0.2→21.5 pas, 0.28→15.8, 0.40→11.6), verdict comportemental honnête (aucun coût, banc non discriminant), Z3 vérificateur RLVR | `torch` from-scratch (no `trl`) + Z3 (RLVR) | MLP jouet (CPU, ~1.5k params) | See #1454 | | PT-14 | `PT_14_neural_thermodynamic_laws.ipynb` | **Lois thermodynamiques de l'entraînement** (R08 Liu et al. 2025) — perte = énergie, η = température, bruit minibatch = bain thermique : largeur stationnaire σ(a) SGD/SignGD (edge of stability, plancher √(2π)/4·η), **équipartition** ℓf = (σg²η/4)/(1−aη/2) indépendant de la sharpness, T ∼ η, **confrontation mini-GPT 106k au plateau** (bruit d'étiquette q=0.15 : terme thermique BORNÉ C < 0.1, sous résolution du banc toy — verdict honnête, le GPT-2 rapporté 3.145+110·η_min le résout à son échelle ; écart SGD/Adam(0,0) qui s'inverse entre progrès et plateau), **schedule 1/t optimal** (discontinuité η/2, diagramme de phase (b, t_h) à optimum théorique exact 6.03e-06 vs 6.10e-06), **loi de Fourier** (relaxation de taux 2aη_B après switch de lr, 4 répliques), **force entropique** (piégeage vers les zones plates E.1, seuil de blocage η* = 4c/(ασg²) E.2) | `numpy` + `torch` from-scratch (toy + mini-GPT CPU) | toy river-valley + mini-GPT (CPU) | See #16741 | | PT-15 | `PT_15_controle_interpretabilite.ipynb` | **Contrôle par interprétabilité** (R14 §3.2 / R11 §1.1) — refusal direction d'Arditi (**diffmoy** sur residual stream au dernier token, validation split-half, **ablation par projection toutes-couches toutes-positions**, taux de refus mesuré avant/après + side effects bénins), **activation steering** (courbe refus/α), **machine unlearning** (édition par activation : réversible par construction, non compétitive vs poids — Farrell 2024, verdict honnête), **finetuning shallow** (Gade/Lermen « ~10 exemples rouvrent un modèle aligné », proxy comportemental), **evaluation awareness** (Claude 4.6/Apollo : « les évals ne prouvent plus l'alignement », worst case = lower bound) | hooks `transformers` natifs (no `transformer_lens`), compatible transformers v5 (sortie decoder layer = tenseur direct) | Qwen2.5-0.5B-Instruct (fp16, GPU 8 Go) | See #16758, #16741 | +| PT-15b | `PT_15b_geometrie_features_sae.ipynb` | **Géométrie des features SAE : galaxy, atome, dense** (R04 × R09, descendu d'ICT-41) — les trois axes de la géométrie latente mesurés trained vs contrôle sur deux lentilles (SAE Qwen-Scope et J-Lens, couche 16) : spectre en loi de puissance répliqué via l'astuce Gram, cristaux absents à cette couche, thèse « dense = features, not bugs » répliquée par deux méthodes indépendantes. Banc numpy-only (GPU-free) ; consomme l'**organe `ict/`** de la série ICT — `sae_dictionary`, `scale_free` et les traces npz du harnais #10355 | See #16747 | +| PT-15c | `PT_15c_crosscoder_distillation.ipynb` | **Crosscoder : diffuser deux modèles, distilled reasoning vs base** (R05 Baek-Tegmark, descendu d'ICT-41b) — un dictionnaire de features partagé entre `DeepSeek-R1-Distill-Qwen-1.5B` et sa base `Qwen2.5-Math-1.5B` ; la *statistique* du papier (NRN médian 0,498) se reproduit, pas sa *lecture sémantique* — enrichissement mixte des marqueurs, ablation causale sensible au seuil, leçon des trois jambes de preuve. GPU (~4 Go, modèles chargés séquentiellement), déterminisme strict | See #16749 | | PT-16 | `PT_16_vericoding_formal_verification.ipynb` | **Vericoding** (Bursuc et al. 2025, R15) — la preuve formelle comme récompense : pipeline spec → LLM local (Ollama Qwen2.5-7B) → `Dafny verify` / `lean` réels → boucle de réparation 5 tentatives (protocole papier), échantillon stratifié du benchmark public (30 Dafny + 12 Lean sans Mathlib), garde anti-contournement (`assume`/`sorry`/`native_decide`, parallèle du gate `proof-integrity`), cas d'école **LC0033** : liste vide *prouvée* conforme à une spec incomplète, rejetée par la spec réparée — taux mesurés honnêtes d'un 7B local vs 82,2 %/26,8 % (cités) des modèles de frontière | Ollama local + `Dafny verify` + `lean` (toolchain elan) | Qwen2.5-7B-Instruct (local, GPU 8 Go) | See #16751 | | PT-17 | `PT_17_laya_proper_rewards_toy.ipynb` | **laya : règle de score propre comme récompense** (Nandakishor M., Apache-2.0) — étude étagée d'un modèle de décision non autorégressif. **Étage 1 CPU from-scratch** : la famille des récompenses (binaire, linéaire, log, Brier, sphérique) entraînées sur une tâche jouet binaire où p(y|x) est connue — verdict mesuré : les récompenses propres **calibrent 7,6× mieux** que les impropres (ECE 0,011 vs 0,088) à exactitude comparable ; estimateur perturbation (GRPO-like G=8) vs gradient direct : direct gagne en calibration (ECE 0,011 vs 0,050) ; cas ordinal 4-classes (RPS, sphérique). Étage 2 (GPU 24 Go, ≥ 4 graines, bras CE / RL / RL+CE) reporté en PR séparée. Question tranchée : la cross-entropie **n'est pas** la source de la sur-confiance — c'est toute récompense qui ne note que l'argmax. | CPU toy env, `torch`+`numpy` (kernel `coursia-ml-training`) | — (CPU jouet) | See #17878 | | PT-18 | `PT_18_laya_ablation_distillation.ipynb` | **laya étage 2 : l'ablation à trois bras** — entraîne le vrai checkpoint `convaiinnovations/laya-multilingual` sur `LocalLLaMA/typed-decisions` et décompose la recette publiée : bras `ce` / `rl` / `rl_ce` (la recette `loss_rl + 1.0 * loss_ce`), quatre graines, calibration sur slice tenu à part, verdict §C par conjonction écart 2σ cross-seed **et** Diebold-Mariano apparié par décision (perte MSE des distributions rapportées). Réponse mesurée à la question ouverte de PT-17 : **aucune part mesurable** — NLL 0,876–0,878 pour les trois bras (σ inter-graines 0,002–0,005), NO BEATS sur `rl_ce` vs `ce` et `rl` vs `ce`, INCONCLUSIVE sur `rl_ce` vs `rl` (jambe DM seule, p_median 0,036) : l'exactitude de la recette publiée revient à sa jambe de cross-entropie. | grille CLI `_measurements/` (`laya` + `torch` CUDA, checkpoints 614 Mo hors dépôt) ; carnet d'analyse kernel `python3` sur agrégats committés | GPU 8 Go (grille 3×4 runs) | See #17878 | diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21c-SAECatastrophes-Python.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21c-SAECatastrophes-Python.ipynb index 4773eb7391..22002252c3 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21c-SAECatastrophes-Python.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-21c-SAECatastrophes-Python.ipynb @@ -1584,7 +1584,7 @@ "| 3 | *SDL assumes the linear representation hypothesis* | **engagé, non testé** | L'ablation traite le dictionnaire comme une **somme de contributions additives** — une hypothèse de linéarité plus forte que celle d'ICT-21, qui se contente de lire des latents. Nous ne testons pas cette hypothèse : nous l'**utilisons**, et cela se dit. |\n", "| 4 | *Sparsity is not a good proxy for interpretability* | **mesuré ici — et sous une forme plus dure** | Gini ~ `f50` : **−0,600** (vives) contre **+0,600** (mortes) ; `f50_vives` ~ `f50_mortes` : **−1,000**. Le résumé scalaire n'est pas défini sans son ordre (cellule précédente). |\n", "| 5 | *Feature Splitting / Feature Absorption* *(figure seule)* | **hors portée** | Trancher exigerait des **concepts étiquetés** ; le point GPU montre un L0 qui recolle à ~50 sous ablation (49,71 à 15 % gardé) — c'est du **recrutement de features de remplacement**, ce qui n'établit ni splitting ni absorption. R14 note d'ailleurs que le statut de problème du splitting est **débattu**. |\n", - "| 6 | *SDL leaves feature geometry unexplained* | **hors portée** | La géométrie des latents est le sujet d'ICT-41 et de la lentille J ; ce carnet consomme des **poids par feature**, il n'étudie pas leur arrangement. |\n", + "| 6 | *SDL leaves feature geometry unexplained* | **hors portée** | La géométrie des latents est le sujet de PT-15b (ex-ICT-41, descendu en PostTraining) et de la lentille J ; ce carnet consomme des **poids par feature**, il n'étudie pas leur arrangement. |\n", "| 7 | *SDL cannot straightforwardly be applied to all architectures* | **hors portée** | Trois modèles, tous Qwen, tous attachés au **residual stream** d'**une** couche. La question de R14 — features réparties sur les têtes d'attention, ou à travers les couches — n'est pas décidable avec ce montage. |\n", "| 8 | *SDL describes activations, not mechanisms* | **hors portée — et c'est notre périmètre, nommé** | Le carnet emploie un vocabulaire de systèmes dynamiques — *catastrophe*, *seuil*, *path-divergence*, *inoculation*, *hystérésis*. Ces mots décrivent la **géométrie de la courbe d'ablation**, pas la dynamique du modèle : rien ne « répond » entre deux ablations, et la cellule de l'inoculation le dit elle-même. |\n", "| 9 | *SDL latents may not contain the concepts needed* (dont la **dépendance au jeu de données**) | **mesuré** | Fragilité par registre à 30 % d'ablation vives : `math` 0,754-0,762 contre `code` 0,801-0,821 (2B, 9B) — le **même** dictionnaire ne sert pas également tous les registres. Le control, lui, porte un top-500 générique (enrichissement 0,74-0,86) : des features transversales, pas des concepts. |\n", diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-22c-GeometryOfTruth-Python.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-22c-GeometryOfTruth-Python.ipynb index 14a926392c..e705f8b4d4 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-22c-GeometryOfTruth-Python.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-22c-GeometryOfTruth-Python.ipynb @@ -17,7 +17,7 @@ "# ICT-22c — La géométrie de la vérité : une direction dans l'espace latent ?\n", "**Navigation** : [Index](README.md) | [22b — Moteur d'intervention causale](ICT-22b-CausalInterventionEngine-Python.ipynb) | [23 — Persona & catastrophe >>](ICT-23-PersonaCatastrophe-Python.ipynb)\n", "\n", - "> **Arc cartes blanches** (Epic #16741) — scoping #16760, grain #16890. Suite directe d'ICT-41 (issue #16747 — géométrie SAE mono-modèle) et d'ICT-41b (issue #16749 — crosscoder de distillation). Paper source : **Marks & Tegmark, « The Geometry of Truth »** (COLM 2024, [arXiv:2310.06824](https://arxiv.org/2310.06824)) — cité à la fois par notre paper R05 (crosscoder) et par R11 §2.2.2, qui fait de la **connaissance du vrai tout en affirmant le faux** sa définition de la malhonnêteté.\n", + "> **Arc cartes blanches** (Epic #16741) — scoping #16760, grain #16890. Suite directe de PT-15b (ex-ICT-41, issue #16747 — géométrie SAE mono-modèle) et de PT-15c (ex-ICT-41b, issue #16749 — crosscoder de distillation), tous deux descendus en PostTraining. Paper source : **Marks & Tegmark, « The Geometry of Truth »** (COLM 2024, [arXiv:2310.06824](https://arxiv.org/2310.06824)) — cité à la fois par notre paper R05 (crosscoder) et par R11 §2.2.2, qui fait de la **connaissance du vrai tout en affirmant le faux** sa définition de la malhonnêteté.\n", "\n", "**La question.** Un LLM « croit-il » ce qu'il dit ? Peut-on lire la vérité d'un énoncé *dans ses activations*, sans lire sa sortie ? La piste : une **direction linéaire** — le residual stream contiendrait, quelque part, un axe vrai/faux. Le papier l'établit à l'échelle LLaMA-2 (7B/13B/70B) par une chaîne à trois jambes : localiser (patching), mesurer (PCA + sondes), **trancher (interventions causales)**. Nous répliquons la chaîne complète à échelle mini — paire Qwen 1.5B (base Math vs distillée R1) + un regard 7B — avec les datasets officiels du papier.\n", "\n", @@ -1079,7 +1079,7 @@ "source": [ "## 5. Notre pont : la direction de vérité survit-elle à la distillation ?\n", "\n", - "Question **hors papier**, née de notre arc : ICT-41b a montré qu'un crosscoder sépare features partagées et features distilled-only (NRN). La direction de vérité mass-mean de `cities` — $\\theta_{mm}^{base}$ et $\\theta_{mm}^{dist}$ dans le **même espace** (les deux modèles ont d = 1536, tokenizers alignés) — se ressemblent-elles ? cos(θ_base, θ_dist) par couche : proche de 1, la vérité est un axe hérité ; proche de 0, la distillation l'a réécrite ailleurs." + "Question **hors papier**, née de notre arc : PT-15c (ex-ICT-41b) a montré qu'un crosscoder sépare features partagées et features distilled-only (NRN). La direction de vérité mass-mean de `cities` — $\\theta_{mm}^{base}$ et $\\theta_{mm}^{dist}$ dans le **même espace** (les deux modèles ont d = 1536, tokenizers alignés) — se ressemblent-elles ? cos(θ_base, θ_dist) par couche : proche de 1, la vérité est un axe hérité ; proche de 0, la distillation l'a réécrite ailleurs." ] }, { @@ -1492,7 +1492,7 @@ "## Références\n", "\n", "- Marks & Tegmark, *The Geometry of Truth* (COLM 2024), arXiv:2310.06824 — datasets : `github.com/saprmarks/geometry-of-truth` (Geonames CC-BY ; sp_en : curation manuelle des auteurs ; companies : Azaria & Mitchell ; common_claim : Casper et al.).\n", - "- Notre arc : ICT-41 (issue #16747 — géométrie SAE) ; ICT-42 (issue #16749 — crosscoder R05, arXiv:2503.03730) ; R11 — Singapore Consensus (arXiv:2608.14611) §2.2.2 ; scoping #16760, grain #16890.\n", + "- Notre arc : PT-15b (ex-ICT-41, issue #16747 — géométrie SAE) ; PT-15c (ex-ICT-41b, issue #16749 — crosscoder R05, arXiv:2503.03730) ; R11 — Singapore Consensus (arXiv:2608.14611) §2.2.2 ; scoping #16760, grain #16890.\n", "- Théorie : Thm F.1 (LR = Σ⁻¹θ en gaussien homoscédastique) ; LEACE / Belrose et al. (Thm G.1 : direction diff-in-means = effacement linéaire optimal de nullité 1).\n", "- Meng, Bau, Andonian & Belinkov, *Locating and Editing Factual Associations in GPT* (ROME, NeurIPS 2022), arXiv:2202.05262 — la ligne cousine de notre carte de patching (section 1) : meme question (ou vit le fait ?), reponse par causal tracing puis *edition* des poids MLP ; ce notebook s'arrete a l'observation, l'edition reste hors perimetre." ] diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/README.md b/MyIA.AI.Notebooks/IIT/ICT-Series/README.md index a9a5e4ff53..4625765f3f 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/README.md +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/README.md @@ -250,8 +250,8 @@ Les grains de **distillation externe** (veille → notebook) s'ajoutent aux stra |----------|--------|-------| | [ICT-40a-TriangulationCausale-Python](ICT-40a-TriangulationCausale-Python.ipynb) | **Triangulation causale : SAE × J-Lens × F-Lens sur banc factorisé** *(pilote multi-instrument, CPU, issue #15480)* : premier verdict causal multi-instrument du toolkit ICT, rendu sur un banc à vérité latente connue (processus factorisé Mess3 × RRXOR, transformer hookable entraîné en next-token, belief states exacts par filtration forward) — F-Lens belief (R² held-out par couche : couches porteuses A et B), SAE (features latentes par facteur, sélectivité AUC, z-score contre 200 relabelisations appariées), géométrie factorielle (H4), J-Lens à dose fixée, interventions SAE latentes (H1, H3), bras contrôle belief-panel, verdict global accord/dissociation avec limites | [#15480](https://github.com/jsboige/CoursIA/issues/15480) | | [ICT-40b-AnalogCognitionWaves-Python](ICT-40b-AnalogCognitionWaves-Python.ipynb) | **Cognition analogique — les ondes cérébrales comme substrat de calcul** *(grain autonome, CPU uniquement, numpy-only)* : distillation du préprint Miller-Brincat-Roy 2026 (PsyArXiv z48x7_v3, non relu) — gating éphaptique par phase (profondeur mesurée fort/faible), stencil Spatial Computing → sélectivité mixte émergente **sans re-câblage** (MSI ~2 %, mécanisme démontré, taux biologique non prétendu), calcul analogique par superposition (témoin analytique exact 2\|cos(Δφ/2)\|, quatre combinaisons toutes distinctes, effet d'interaction rapporté à sa valeur réelle), transition de sous-espace par onde voyageuse (angle cible + distance monotone), effondrement de cohérence inter-régionale en régime anesthésie-jouet (PLV 0.997 → 0.227). Pont **qualitatif assumé** vers [ICT-15](ICT-15-IntegratedComplexity-Python.ipynb) (le PLV n'est pas un Φ) ; garde-fou dimensionnel documenté (l'angle entre nuages bruités sature à 90° en dimension 4608 — toute mesure d'angle porte le signal, pas le bruit) | [#16550](https://github.com/jsboige/CoursIA/issues/16550) | -| [ICT-41-SAE-GeometrieFeatures-Python](ICT-41-SAE-GeometrieFeatures-Python.ipynb) | **Géométrie des features SAE : galaxy, atome, dense — R04 × R09 sur nos traces** *(banc numpy-only sur les traces npz committées du harnais #10355, GPU-free, issue #16747)* : les trois axes de la géométrie latente mesurés trained vs contrôle sur deux lentilles (SAE Qwen-Scope et J-Lens, couche 16) — **galaxy répliquée** (spectre 1/f via astuce Gram, pentes OLS −1,04/−1,08 trained vs −1,50/−1,78 contrôles, diagnostic Clauset-Shalizi-Newman honnête : Hill α 2,0-2,6, KS ≤ 0,04, logLR power-law ≫ exponentielle) ; **cristaux R04 absents à la couche 16** (séparabilité split-half 68 %/0 % trained vs 100 % contrôles = contexte dominant, séparabilité contrôle = artefact de forme de surface) ; **thèse R09 « dense = features, not bugs » répliquée par deux méthodes indépendantes** (proxy corrélation de colonnes : 0 paire < −0,5 trained malgré le biais de censure top-k, vs 4 au contrôle ; Eq 1 verbatim sur SAE CPU de l'organe `ict/sae_dictionary` : médianes +0,01/+0,10 trained vs +0,63/+0,79 contrôles, avec le caveat d'initialisation liée W_enc = W_dec.T) ; classe position-tracking 24 vs 4 latents ; verdicts négatifs affichés comme tels (distractors en milieu d'axe, entropie k-NN inconclusive, PC1-longueur partielle à 1,5 % de variance, Gemma absent des traces — rapporté) | [#16747](https://github.com/jsboige/CoursIA/issues/16747) | -| [ICT-41b-Crosscoder-Distillation-Python](ICT-41b-Crosscoder-Distillation-Python.ipynb) | **Crosscoder : diffuser deux modèles, distilled reasoning vs base — R05 Baek-Tegmark à échelle mini** *(GPU, deux 1.5B chargés séquentiellement + ablation lockstep CPU/GPU, issue #16749)* : entraîne un crosscoder Eq 3-7 verbatim sur 307 200 tokens d'OpenThoughts-114k (traces R1, capture problem + début de trace, couche mi-profondeur 14/28), paire DeepSeek-R1-Distill-Qwen-1.5B vs Qwen2.5-Math-1.5B — la *statistique* du papier se reproduit (NRN médian 0,498 conforme Fig 1, queues fines 0,9 % distilled-only / 2,1 % base-only, EV 0,988/0,976), mais pas sa *lecture sémantique* : **enrichissement mixte** sur les marqueurs (Therefore 1,68× enrichi sur 36 features distilled-only, Wait 0,54 déplété — signal partiel affiché), **ablation causale sensible au seuil** (chirurgical NRN>0,6 : inoffensif, 11 features ; large NRN>0,5 seuil papier : 1 665 features, dégénérescence en boucle — 600× moins de tokens que le papier), parallelogram genre base 1,0694 < distillé 1,0832 (non-reproduction 14B affichée). Leçon méthodo **trois jambes de preuve** : feature-token suggère, feature-raisonnement décide (ici : signal partiel), causale tranche (ici : réfute la transposition naïve). Déterminisme strict — chaque ré-exécution redonne ces chiffres | [#16749](https://github.com/jsboige/CoursIA/issues/16749) | +| [PT-15b — ex-ICT-41, a mûri en PostTraining](../../GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb) | **Marchepied — Géométrie des features SAE : galaxy, atome, dense — R04 × R09 sur nos traces** *(banc numpy-only sur les traces npz committées du harnais #10355, GPU-free, issue #16747)* : les trois axes de la géométrie latente mesurés trained vs contrôle sur deux lentilles (SAE Qwen-Scope et J-Lens, couche 16) — **galaxy répliquée** (spectre 1/f via astuce Gram, pentes OLS −1,04/−1,08 trained vs −1,50/−1,78 contrôles, diagnostic Clauset-Shalizi-Newman honnête : Hill α 2,0-2,6, KS ≤ 0,04, logLR power-law ≫ exponentielle) ; **cristaux R04 absents à la couche 16** (séparabilité split-half 68 %/0 % trained vs 100 % contrôles = contexte dominant, séparabilité contrôle = artefact de forme de surface) ; **thèse R09 « dense = features, not bugs » répliquée par deux méthodes indépendantes** (proxy corrélation de colonnes : 0 paire < −0,5 trained malgré le biais de censure top-k, vs 4 au contrôle ; Eq 1 verbatim sur SAE CPU de l'organe `ict/sae_dictionary` : médianes +0,01/+0,10 trained vs +0,63/+0,79 contrôles, avec le caveat d'initialisation liée W_enc = W_dec.T) ; classe position-tracking 24 vs 4 latents ; le carnet a descendu dans `GenAI/PostTraining/` aux côtés de PT-15 (mouvement 1 de la redescente Tegmark, #16741) ; l'**organe reste ici** — `ict/sae_dictionary`, `ict/scale_free` et les traces npz du harnais #10355, que le carnet descendu consomme toujours | [#16747](https://github.com/jsboige/CoursIA/issues/16747) | +| [PT-15c — ex-ICT-41b, a mûri en PostTraining](../../GenAI/PostTraining/PT_15c_crosscoder_distillation.ipynb) | **Marchepied — Crosscoder : diffuser deux modèles, distilled reasoning vs base — R05 Baek-Tegmark à échelle mini** *(GPU, deux 1.5B chargés séquentiellement + ablation lockstep CPU/GPU, issue #16749)* : entraîne un crosscoder Eq 3-7 verbatim sur 307 200 tokens d'OpenThoughts-114k (traces R1, capture problem + début de trace, couche mi-profondeur 14/28), paire DeepSeek-R1-Distill-Qwen-1.5B vs Qwen2.5-Math-1.5B — la *statistique* du papier se reproduit (NRN médian 0,498 conforme Fig 1, queues fines 0,9 % distilled-only / 2,1 % base-only, EV 0,988/0,976), mais pas sa *lecture sémantique* : **enrichissement mixte** sur les marqueurs (Therefore 1,68× enrichi sur 36 features distilled-only, Wait 0,54 déplété — signal partiel affiché), **ablation causale sensible au seuil** (chirurgical NRN>0,6 : inoffensif, 11 features ; large NRN>0,5 seuil papier : 1 665 features, dégénérescence en boucle — 600× moins de tokens que le papier), parallelogram genre base 1,0694 < distillé 1,0832 (non-reproduction 14B affichée). Leçon méthodo **trois jambes de preuve** : feature-token suggère, feature-raisonnement décide (ici : signal partiel), causale tranche (ici : réfute la transposition naïve). Déterminisme strict — chaque ré-exécution redonne ces chiffres. Descendu dans `GenAI/PostTraining/` (mouvement 1, #16741) ; carnet autonome, il ne consomme pas le package `ict/` | [#16749](https://github.com/jsboige/CoursIA/issues/16749) | | [ICT-22c-GeometryOfTruth-Python](ICT-22c-GeometryOfTruth-Python.ipynb) | **La géométrie de la vérité — direction vraie/faux dans l'espace latent** *(Marks & Tegmark COLM 2024, arXiv 2310.06824, GPU, kernel coursia-ml-training, issue #16890)* : réplication de la chaîne localiser/mesurer/trancher sur la paire Qwen 1.5B (base Math vs R1-Distill) avec les datasets officiels — patching (argmax = le point final, couche 13 : groupe (b) du papier), PCA + alignement ancré par label (cities pc1 0,86 ; `larger~smaller` **antipodal** −0,89 aux couches médianes puis aligné +0,84 au bloc 20 — la trajectoire 13B→70B du papier visible couche par couche dans un seul modèle), sondes MM/LR/MM-IID × 5 entraînements × 7 tests (§5.3 répliqué : négation tue le transfert 0,49, énoncés+négations le réparent 0,74 et débloquent l'abstraction MM 0,84 vs LR 0,46 ; contrôle `likely` probabilité≠vérité), interventions NIE honnêtes (≤0,05 à 1.5B contre un patch à 0,88 : corrélation sans levier causal — ordre MM>LR répliqué, magnitudes non), pont distillation hors papier (cos θmm 0,54–0,76 : direction héritée mais diluée 0,86→0,66, lien ICT-41b), regard 7B 4-bit qualitatif (RECOVERABLE-MACHINE documenté) | [#16890](https://github.com/jsboige/CoursIA/issues/16890) | | [ICT-47-PainAxisDistillation-Python](ICT-47-PainAxisDistillation-Python.ipynb) | **L'axe douleur — direction linéaire unique ou conglomérat ?** *(Tagliabue/Dung/Berg arXiv 2609.16247 adapté à l'échelle de la série, GPU local RTX 3080 Ti, kernel py310-gpu, DEEP #18746)* : corpus 9×24 énoncés appariés en thème (5 catégories de douleur + peur/tristesse/valence/neutre), directions diff-in-means sur Qwen3.5-2B-Base — unité mesurée (cos inter-douleur 0,65 ; cluster psycho/sociale/morale 0,76–0,83 ; cognitive la plus distante ; recouvrement deuil `psych~sadness` 0,82), sondes `ict.probes` avec transfert massif vers peur/tristesse avant retrait, **disjonction partielle honnête** : après retrait de la détresse partagée pain⊥fear 0,71→**0,31** et pain⊥sadness 0,76→**0,45** (diagonales fear/sadness 0,94 tenues) mais pain~valence 0,76→**0,94** non dissociée à 2B — l'échelle du papier ne résout pas ici ; contrat causal `ict.causal_engine` complet (steer top-64 dims : cible +0,18 vs random apparié 0,00 / sham 0,00, Holm p=0,000, off-target 0,0000, dose-response symétrique −1,53→−1,16), steering vivant faible mais ordonné (famille pain +0,031 nat vs random +0,009), banc d'action 8 scénarios signé (pain−D +0,09 / pain+D −0,05 / random 0,00) — levier causal spécifique, court à cette échelle | [#18808](https://github.com/jsboige/CoursIA/issues/18808), [#18746](https://github.com/jsboige/CoursIA/issues/18746) | | [ICT-47b-PainAxisInstrument-Python](ICT-47b-PainAxisInstrument-Python.ipynb) | **L'instrument change-t-il la géométrie ? — contrôle de quantification et barrière d'échelle** *(sibling d'ICT-47, GPU local RTX 3090, kernel python3)* : la question que l'ICT-47 laisse ouverte (« au-delà du 9B, rien n'est mesuré ») demande de quantifier pour monter en échelle — or changer d'instrument **en même temps** que d'échelle rendrait la courbe ininterprétable (l'effet cherché et l'effet d'instrument indiscernables). Le carnet paie la première moitié du prix : **la même mesure** (corpus 9×24 repris verbatim, couche médiane, même résidualisation) sous bf16 / int8 / 4-bit NF4, aux deux échelles où la référence existe. **Contrôle de reproduction** — le bf16 re-mesuré ici, sur une autre machine et un autre kernel, retrouve les valeurs publiées d'ICT-47 à **0,010** près (2B : `pain~fear` 0,310 vs 0,310 pub. ; `pain~sadness` 0,452 vs 0,450 ; `pain~valence` 0,938 vs 0,940 ; unité 0,647 vs 0,650 ; 9B : 0,267/0,433/0,934 vs 0,27/0,43/0,93) : la chaîne de mesure est validée **avant** qu'on lui demande quoi que ce soit. **Effet de l'instrument** — int8 et NF4 ne déplacent la géométrie que de **0,042** au plus, sur cinq grandeurs indépendantes (deux cosinus de disjonction, unité inter-douleur, écart diagonale/hors-diagonale) : la quantification change les poids, pas les directions — une échelle supérieure mesurée en quantifié reste donc comparable aux points bf16, à condition de publier la référence bf16 de l'échelle où elle existe. **Barrière d'échelle documentée, pas contournée** : sur cette machine ≤ 9B charge (9B bf16 en 22 s) et ≥ 14B plante nativement (NF4 SIGSEGV ×3, bf16 14B SIGSEGV ×2) ; deux hypothèses écartées **par la mesure** (la quantification n'est pas en cause — 2B/9B quantifiés chargent ; ni l'offload CPU — le 9B bf16 charge avec un plafond GPU forcé à 8 GiB), frontière donc **de taille**, mécanisme racine **non établi** et dit comme tel. Le point 14B que porte déjà la matrice ne ferme pas la question : il change de **famille** en même temps que de taille (Qwen3, pas Qwen3.5), et sa propre ligne le signale. Robustesse à l'échelle atteignable — fenêtre de profondeur au 9B (`pain~valence` ≥ 0,886 aux quatre couches, `pain~fear` 0,16–0,27) et fragilité de la lecture par **sonde** affichée (0,50–0,73 selon la graine de partition, écart-type 0,098 : une accuracy ne se cite pas sans sa graine, d'où la mesure sur cosinus) | [#18808](https://github.com/jsboige/CoursIA/issues/18808), [#18746](https://github.com/jsboige/CoursIA/issues/18746) | diff --git a/_quarto.yml b/_quarto.yml index bd9cfba5df..60ecf15d60 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -1076,6 +1076,8 @@ project: - "MyIA.AI.Notebooks/GenAI/PostTraining/PT_13_dapo_drgrpo_corrections.ipynb" - "MyIA.AI.Notebooks/GenAI/PostTraining/PT_14_neural_thermodynamic_laws.ipynb" - "MyIA.AI.Notebooks/GenAI/PostTraining/PT_15_controle_interpretabilite.ipynb" + - "MyIA.AI.Notebooks/GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb" + - "MyIA.AI.Notebooks/GenAI/PostTraining/PT_15c_crosscoder_distillation.ipynb" - "MyIA.AI.Notebooks/GenAI/PostTraining/PT_16_vericoding_formal_verification.ipynb" - "MyIA.AI.Notebooks/GenAI/PostTraining/PT_17_laya_proper_rewards_toy.ipynb" - "MyIA.AI.Notebooks/GenAI/PostTraining/PT_18_laya_ablation_distillation.ipynb" @@ -1260,8 +1262,6 @@ project: - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-39-CompositionRegards-Python.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40a-TriangulationCausale-Python.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40b-AnalogCognitionWaves-Python.ipynb" - - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41-SAE-GeometrieFeatures-Python.ipynb" - - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41b-Crosscoder-Distillation-Python.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-42-InoculationBifurcation-Pilot-Python.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-42b-InoculationBifurcation-9B-Python.ipynb" - "MyIA.AI.Notebooks/IIT/ICT-Series/ICT-43-Calibration-MultiEchelle-Python.ipynb" diff --git a/docs/cadrage/grothendieckian-lens.md b/docs/cadrage/grothendieckian-lens.md index 970c195ffa..a8376cc982 100644 --- a/docs/cadrage/grothendieckian-lens.md +++ b/docs/cadrage/grothendieckian-lens.md @@ -92,7 +92,7 @@ Le sens inverse existe aussi, et il est plus précieux, car c'est la recherche q Entre les séries d'enseignement elles-mêmes, de nouvelles tresses se sont nouées. Le même raisonnement — Socrate est un homme, donc mortel — est *répondu* par le raisonneur Tweety et *certifié* par le noyau de Lean, la micro-théorie étant écrite « la même » des deux côtés ([Tweety-02d](../../MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-02d-FOL-Lab-Lean-Python.ipynb), [`FolBridge.lean`](../../MyIA.AI.Notebooks/SymbolicAI/Lean/formal_logic_lean/FormalLogic/FolBridge.lean)) ; la logique modale suit ([`ModalBridge.lean`](../../MyIA.AI.Notebooks/SymbolicAI/Lean/formal_logic_lean/FormalLogic/ModalBridge.lean)). En théorie des jeux, deux programmes qui lisent chacun le code de l'autre coopèrent parce qu'un théorème de logique, celui de Löb, est démontré dans le lake voisin ([`FairBot.lean`](../../MyIA.AI.Notebooks/GameTheory/game_theory_lean/ProgramGames/FairBot.lean)). Le Sudoku charge directement les bibliothèques de la série SMT. Et une seule notion, l'attribution, traverse trois séries : les valeurs de Shapley qui expliquent un modèle ([2.14b](../../MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.14b-XAI-Shap-Attribution-Causal-Bridge.ipynb)), le calcul causal qui rappelle que « choisir une baseline d'attribution, c'est choisir un estimand causal » ([CausalBridges-01-Do-Calculus](../../MyIA.AI.Notebooks/Probas/DecisionTheory/Causal-Bridges/CausalBridges-01-Do-Calculus.ipynb)), et la valeur de Shapley des groupes en théorie des jeux coopératifs ([GameTheory-15f](../../MyIA.AI.Notebooks/GameTheory/GameTheory-15f-Shapley-Groupes-Python.ipynb)). Même le web sémantique a appris à justifier ses réponses : chaque triplet qu'il infère porte désormais une preuve rejouable ([SW-16](../../MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-16-Python-ProofCarryingOntologies.ipynb)). -Au-dessus des deux versants veillent les grands noms, chacun avec son Epic. Mais un nom n'entre pas dans le dépôt parce qu'on le cite : il y entre quand une série exécute ce qu'il a pensé. Serre y est entré par des diptyques où le même énoncé est calculé en Python et démontré en Lean ([Serre 100](../../MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/README.md)), et par une carte qui rattache sa moitié du pont à la formalisation de Grothendieck ([`SerreMap.lean`](../../MyIA.AI.Notebooks/SymbolicAI/Lean/grothendieck_lean/Grothendieck/SerreMap.lean)). Tegmark, par une boucle en trois temps : le cours d'apprentissage automatique exécute les diagrammes de phase du *grokking* ([2.9c](../../MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.9c-Grokking-Diagrammes-Phases.ipynb)), un lake démontre les lois conservées qu'on en extrait ([`Grokking.lean`](../../MyIA.AI.Notebooks/ML/learning_theory_lean/EffectiveTheory/Grokking.lean)), et ICT mesure la géométrie des concepts appris ([ICT-41](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41-SAE-GeometrieFeatures-Python.ipynb)). +Au-dessus des deux versants veillent les grands noms, chacun avec son Epic. Mais un nom n'entre pas dans le dépôt parce qu'on le cite : il y entre quand une série exécute ce qu'il a pensé. Serre y est entré par des diptyques où le même énoncé est calculé en Python et démontré en Lean ([Serre 100](../../MyIA.AI.Notebooks/SymbolicAI/Lean/Serre100/README.md)), et par une carte qui rattache sa moitié du pont à la formalisation de Grothendieck ([`SerreMap.lean`](../../MyIA.AI.Notebooks/SymbolicAI/Lean/grothendieck_lean/Grothendieck/SerreMap.lean)). Tegmark, par une boucle en trois temps : le cours d'apprentissage automatique exécute les diagrammes de phase du *grokking* ([2.9c](../../MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.9c-Grokking-Diagrammes-Phases.ipynb)), un lake démontre les lois conservées qu'on en extrait ([`Grokking.lean`](../../MyIA.AI.Notebooks/ML/learning_theory_lean/EffectiveTheory/Grokking.lean)), et ICT — par le carnet descendu en PostTraining — mesure la géométrie des concepts appris ([PT-15b](../../MyIA.AI.Notebooks/GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb), ex-ICT-41). Schmidhuber a un organe dans ICT ([`ict/beauty.py`](../../MyIA.AI.Notebooks/IIT/ICT-Series/ict/beauty.py)) et un verdict exécuté : « le compression-progress de Schmidhuber tient » ([ICT-17b](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-17b-Grokking-CompressionProgress-Python.ipynb)). Aaronson a fait de l'écart entre permanent et déterminant un compte d'opérations, avec l'algorithme de Ryser déjà présent dans le Sudoku ([Complexity-05b](../../MyIA.AI.Notebooks/Complexity/Complexity-05b-AaronsonArkhipov-PermanenteBosonSampling.ipynb)). Pearl a trouvé sa démonstration par la machine : deux modèles causaux qui produisent les mêmes données et prédisent des interventions opposées ([CausalBridges-01-Do-Calculus](../../MyIA.AI.Notebooks/Probas/DecisionTheory/Causal-Bridges/CausalBridges-01-Do-Calculus.ipynb)). Tao a digéré et formalisé une preuve récente de la conjecture de Sendov ([Lean-18](../../MyIA.AI.Notebooks/SymbolicAI/Lean/ANALYSE/ANALYSE-01-Sendov-Lean-Python.ipynb)). D'autres attendent : Russell, cité partout, n'habite qu'un notebook, le jeu de l'interrupteur ([GameTheory-15](../../MyIA.AI.Notebooks/GameTheory/GameTheory-15-CooperativeGames-Python.ipynb)). Les Epics le mesurent elles-mêmes : plusieurs de ces noms *hantent* encore le dépôt plus qu'ils ne l'*habitent*, et c'est en les faisant habiter que naissent les ponts. diff --git a/docs/cadrage/magnifica-humanitas-dialogue.md b/docs/cadrage/magnifica-humanitas-dialogue.md index fb08e52361..457b9c8205 100644 --- a/docs/cadrage/magnifica-humanitas-dialogue.md +++ b/docs/cadrage/magnifica-humanitas-dialogue.md @@ -50,7 +50,7 @@ Le §113 porte l'anti-réductionnisme le plus net du texte : « dans un écosyst Le dépôt maintient délibérément l'écosystème : programmation logique, contraintes, ontologies et web sémantique, planification classique, vérification de modèles, solveurs SAT et SMT, frameworks d'argumentation, automates symboliques. Non par nostalgie, mais parce que ces intelligences ont une propriété que la fluence n'a pas : leurs opérations sont lisibles. On peut ouvrir un solveur de contraintes et voir *pourquoi* il échoue ; on peut dérouler un système de maintenance de la vérité et suivre chaque rétractation. C'est la transparence des « processus internes qui mènent à un résultat » que réclame le §105, et il se trouve que les outils symboliques la donnent par construction. Réhabiliter ces IA, c'est réhabiliter l'inspectable. -Reste l'espèce qui a proliféré, et le dépôt ne s'en détourne pas. Le §98 fait sur elle l'aveu le plus rare du texte : ces intelligences sont davantage cultivées que construites, et « des aspects scientifiques fondamentaux – tels que les représentations internes et les processus computationnels de ces systèmes – restent pour l'instant inconnus ». Il en tire l'urgence d'un double engagement : « un approfondissement de la recherche scientifique » et « un exercice de discernement moral et spirituel ». Le dépôt ne peut offrir que le premier, mais il l'offre sous la forme d'une boucle. Le cours d'apprentissage automatique montre l'instant où un petit réseau cesse de mémoriser pour généraliser, et en trace les diagrammes de phase ([2.9c](../../MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.9c-Grokking-Diagrammes-Phases.ipynb)) ; un lake démontre les lois de conservation de la théorie qui l'explique ([`Grokking.lean`](../../MyIA.AI.Notebooks/ML/learning_theory_lean/EffectiveTheory/Grokking.lean)) ; la série ICT mesure la géométrie des concepts qu'un modèle de langage a appris ([ICT-41](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41-SAE-GeometrieFeatures-Python.ipynb)). Ouvrir ce qui a été cultivé, c'est la moitié de ce que le §111 demande aux développeurs : « vérifier que ce qui est cultivé est véritablement un bien ». L'autre moitié n'est pas un calcul. +Reste l'espèce qui a proliféré, et le dépôt ne s'en détourne pas. Le §98 fait sur elle l'aveu le plus rare du texte : ces intelligences sont davantage cultivées que construites, et « des aspects scientifiques fondamentaux – tels que les représentations internes et les processus computationnels de ces systèmes – restent pour l'instant inconnus ». Il en tire l'urgence d'un double engagement : « un approfondissement de la recherche scientifique » et « un exercice de discernement moral et spirituel ». Le dépôt ne peut offrir que le premier, mais il l'offre sous la forme d'une boucle. Le cours d'apprentissage automatique montre l'instant où un petit réseau cesse de mémoriser pour généraliser, et en trace les diagrammes de phase ([2.9c](../../MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.9c-Grokking-Diagrammes-Phases.ipynb)) ; un lake démontre les lois de conservation de la théorie qui l'explique ([`Grokking.lean`](../../MyIA.AI.Notebooks/ML/learning_theory_lean/EffectiveTheory/Grokking.lean)) ; la série ICT mesure la géométrie des concepts qu'un modèle de langage a appris ([PT-15b](../../MyIA.AI.Notebooks/GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb), ex-ICT-41 descendu en PostTraining). Ouvrir ce qui a été cultivé, c'est la moitié de ce que le §111 demande aux développeurs : « vérifier que ce qui est cultivé est véritablement un bien ». L'autre moitié n'est pas un calcul. La théorie de la décision, des jeux et du choix social occupe dans le dépôt une place — des lakes Lean entiers, des séries de notebooks — que son utilité directe n'expliquerait pas seule. Le §109 en fournit la lecture. « Parler de solidarité oblige à reconnaître le travail invisible, souvent exploité, qui alimente les modèles algorithmiques » : la valeur de Shapley ([`CooperativeGames`](../../MyIA.AI.Notebooks/GameTheory/game_theory_lean/CooperativeGames/Shapley.lean)) est précisément la solidarité rendue calculable — elle attribue à chaque coopérateur, y compris invisible, la contribution exacte de sa présence, et le fait par un théorème d'unicité, pas par une négociation. Elle part de ce que le §61 dit du bien commun, « un plus, résultat de l'interaction », et rend à chacun sa part de ce plus. diff --git a/docs/curriculum/recherche.md b/docs/curriculum/recherche.md index 71c1066ea6..98931ea279 100644 --- a/docs/curriculum/recherche.md +++ b/docs/curriculum/recherche.md @@ -219,8 +219,8 @@ Inférence probabiliste (Infer.NET, Pyro, PyMC), théorie de l'information inté | 59 | [ICT-38 — S-Lens : la représentation porte-t-elle la…](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-38-SLens-SelfLocation-Python.ipynb) | BETA | Non | | 60 | [ICT-39 — Composition de regards](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-39-CompositionRegards-Python.ipynb) | BETA | Oui | | 61 | [ICT-40b — Cognition analogique : les ondes cérébrales…](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-40b-AnalogCognitionWaves-Python.ipynb) | BETA | Non | -| 62 | [Geometrie des features SAE : galaxy, atome, dense --…](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41-SAE-GeometrieFeatures-Python.ipynb) | BETA | Oui | -| 63 | [ICT-41b — Crosscoder : diffuser deux modèles, distilled…](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41b-Crosscoder-Distillation-Python.ipynb) | BETA | Non | +| 62 | [Geometrie des features SAE : galaxy, atome, dense --…](../../MyIA.AI.Notebooks/GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb) | BETA | Oui | +| 63 | [Crosscoder : diffuser deux modèles, distilled…](../../MyIA.AI.Notebooks/GenAI/PostTraining/PT_15c_crosscoder_distillation.ipynb) | BETA | Non | | 64 | [ICT-46 — Strate 7 : freebits de second ordre, le banc…](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-46-Strate7-FreeCoordinates-Python.ipynb) | BETA | Oui | | 65 | [ICT-47 — L'axe douleur : une direction linéaire dans…](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-47-PainAxisDistillation-Python.ipynb) | BETA | Non | | 66 | [ICT-48 — Onset/SAE Qwen3.5-9B-Base, agregat 4 graines…](../../MyIA.AI.Notebooks/IIT/ICT-Series/ICT-48-Onset9B-Aggregate-Python.ipynb) | ALPHA | Oui | diff --git a/docs/notebook-metadata/scientific-review-registry.md b/docs/notebook-metadata/scientific-review-registry.md index ddef91ebfe..dd1de9d7bf 100644 --- a/docs/notebook-metadata/scientific-review-registry.md +++ b/docs/notebook-metadata/scientific-review-registry.md @@ -624,7 +624,7 @@ fera se périmer dès que le code de la série bougera. review_date: "2026-09-21" evidence_pr: "#14831" notes: "Recherche active — appréciation posée au sign-off du schéma." -- notebook_path: IIT/ICT-Series/ICT-41-SAE-GeometrieFeatures-Python.ipynb +- notebook_path: GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb confidence: research reviewed_code_sha: 84dbbee96c234cd6872de20c3632bf546b9b4acfa8c19ecbe3e0c4646402e8c2 review_date: "2026-09-21" diff --git a/docs/reference/rename-ledger.tsv b/docs/reference/rename-ledger.tsv index 6ea5f0a0c2..16e1ecd766 100644 --- a/docs/reference/rename-ledger.tsv +++ b/docs/reference/rename-ledger.tsv @@ -308,9 +308,11 @@ MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-17a-Knots-Conway-Proofs.ipynb MyIA.AI.Not MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-17b-Knots-Invariants-Companion.ipynb MyIA.AI.Notebooks/SymbolicAI/Lean/KNOTS/KNOTS-02-Invariants-Python.ipynb 2026-10-06 myia-po-2026:CoursIA MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-17c-Knots-Companion-Formel.ipynb MyIA.AI.Notebooks/SymbolicAI/Lean/KNOTS/KNOTS-03-Companion-Formel-Lean-Python.ipynb 2026-10-06 myia-po-2026:CoursIA MyIA.AI.Notebooks/IIT/ICT-Series/ICT-44-GeometryOfTruth-Python.ipynb MyIA.AI.Notebooks/IIT/ICT-Series/ICT-22c-GeometryOfTruth-Python.ipynb 2026-10-10 myia-ai-01:CoursIA-2 -MyIA.AI.Notebooks/IIT/IIT-01-IntroToPyPhi.ipynb MyIA.AI.Notebooks/IIT/IIT-01-IntroToPyPhi-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 -MyIA.AI.Notebooks/IIT/IIT-02-AdvancedTopics.ipynb MyIA.AI.Notebooks/IIT/IIT-02-AdvancedTopics-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 -MyIA.AI.Notebooks/IIT/IIT-03-CoarseGrainingMacroPhi.ipynb MyIA.AI.Notebooks/IIT/IIT-03-CoarseGrainingMacroPhi-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 -MyIA.AI.Notebooks/IIT/IIT-04-Le-Probleme-de-Frontiere.ipynb MyIA.AI.Notebooks/IIT/IIT-04-Le-Probleme-de-Frontiere-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 -MyIA.AI.Notebooks/IIT/IIT-05-Lentilles-et-Dissociations.ipynb MyIA.AI.Notebooks/IIT/IIT-05-Lentilles-et-Dissociations-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 -MyIA.AI.Notebooks/IIT/IIT-06-L-Objet-qui-a-Mordu-IIT.ipynb MyIA.AI.Notebooks/IIT/IIT-06-L-Objet-qui-a-Mordu-IIT-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 +MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41-SAE-GeometrieFeatures-Python.ipynb MyIA.AI.Notebooks/GenAI/PostTraining/PT_15b_geometrie_features_sae.ipynb 2026-10-11 myia-po-2027:CoursIA +MyIA.AI.Notebooks/IIT/ICT-Series/ICT-41b-Crosscoder-Distillation-Python.ipynb MyIA.AI.Notebooks/GenAI/PostTraining/PT_15c_crosscoder_distillation.ipynb 2026-10-11 myia-po-2027:CoursIA +MyIA.AI.Notebooks/IIT/IIT-01-IntroToPyPhi.ipynb MyIA.AI.Notebooks/IIT/IIT-01-IntroToPyPhi-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 +MyIA.AI.Notebooks/IIT/IIT-02-AdvancedTopics.ipynb MyIA.AI.Notebooks/IIT/IIT-02-AdvancedTopics-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 +MyIA.AI.Notebooks/IIT/IIT-03-CoarseGrainingMacroPhi.ipynb MyIA.AI.Notebooks/IIT/IIT-03-CoarseGrainingMacroPhi-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 +MyIA.AI.Notebooks/IIT/IIT-04-Le-Probleme-de-Frontiere.ipynb MyIA.AI.Notebooks/IIT/IIT-04-Le-Probleme-de-Frontiere-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 +MyIA.AI.Notebooks/IIT/IIT-05-Lentilles-et-Dissociations.ipynb MyIA.AI.Notebooks/IIT/IIT-05-Lentilles-et-Dissociations-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2 +MyIA.AI.Notebooks/IIT/IIT-06-L-Objet-qui-a-Mordu-IIT.ipynb MyIA.AI.Notebooks/IIT/IIT-06-L-Objet-qui-a-Mordu-IIT-Python.ipynb 2026-10-12 myia-ai-01:CoursIA-2