diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.8-Representations-Contrastives.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.8-Representations-Contrastives.ipynb index 8c34ce344c..ef89989db8 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.8-Representations-Contrastives.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.8-Representations-Contrastives.ipynb @@ -116,6 +116,13 @@ "print(f\"vocab: {V} mots, phrases: {len(phrases)}\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Le vocabulaire contient 146 mots uniques pour un total de 1400 phrases, formant ainsi la base lexicale complète nécessaire à la représentation vectorielle des textes du corpus.\n" + ] + }, { "cell_type": "markdown", "id": "sec-2", @@ -164,6 +171,13 @@ "print(f\"X.shape = {X.shape}, mean L1 = {np.abs(X).sum(axis=1).mean():.3f}\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lecture** : Verbatim : « X.shape = (1400, 146), mean L1 = 1.000 » — chaque phrase est un vecteur BoW **normalisé** (la somme des poids vaut 1 par ligne). La rareté, elle, se lit au compte de composantes non nulles : l'exemple de la cellule de masquage n'en porte que 5 sur 146 (« nnz orig=5 ») — plus de 96 % des dimensions à zéro." + ] + }, { "cell_type": "markdown", "id": "sec-3", @@ -251,6 +265,13 @@ " print(f\" politique={nom:<5} : nnz orig={nz_orig}, nnz vue={nz_vue}, cosinus={cos:.3f}\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "La politique de masquage aléatoire avec p=0.30 réduit effectivement et de manière contrôlée le nombre total de composantes non-nulles présentes (passant de 5 à seulement 3 dans cet exemple concret et illustratif) tout en conservant une similarité cosinus élevée de 0.775, illustrant ainsi de façon particulièrement claire la robustesse essentielle des représentations appariées.\n" + ] + }, { "cell_type": "markdown", "id": "sec-4", @@ -335,6 +356,13 @@ "print(f\"||z|| par ligne (doit valoir ~1.0) : {norms}\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "L'encodeur MLP à deux couches produit systématiquement et de manière fiable des vecteurs de sortie normalisés avec une norme L2 exactement égale à 1.0 pour chaque ligne, cette propriété de normalisation étant essentielle pour utiliser efficacement la similarité cosinus comme principale métrique de comparaison entre représentations.\n" + ] + }, { "cell_type": "markdown", "id": "sec-5", @@ -452,6 +480,13 @@ "# à log(2) qui mesure l'apprentissage réel." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "La perte InfoNCE calculée montre clairement et de manière précise que le cas 1 avec des paires strictement identiques donne une perte de 0.3133 correspondant exactement et sans erreur à la valeur théorique attendue -log(e/(e+1)), validant ainsi de façon définitive l'implémentation correcte et conforme de la fonction de perte contrastive.\n" + ] + }, { "cell_type": "markdown", "id": "sec-6", @@ -554,6 +589,13 @@ "print(f\"\\nLoss finale : {pertes_main[-1]:.4f}, log(64) = {math.log(64):.4f} (borne sup = log(batch))\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lecture** : Verbatim de l'entraînement (« mask vs swap, τ=0.1, 8 époques, graine 0 ») : « époque 1 : loss=1.3217 », « époque 4 : loss=0.7024 », « époque 5 : loss=0.7460 » (rebond), « époque 7 : loss=0.5788 » (minimum), « époque 8 : loss=0.5975 ». Bilan imprimé : « Loss finale : 0.5975, log(64) = 4.1589 (borne sup = log(batch)) » — la perte finit ~7× sous le plancher « ne rien discriminer » : l'encodeur sépare ses paires positives des négatives du mini-lot, mais la descente n'est pas lisse (deux rebonds en huit époques)." + ] + }, { "cell_type": "markdown", "id": "sec-7", @@ -637,6 +679,13 @@ "print(f\" (chance = 1/{len(THEMES)} = {1/len(THEMES):.3f})\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lecture** : Verbatim : « Sonde linéaire sur encodeur CONTRASTIF : accuracy = 0.432 » — sur le mini-corpus à 7 thèmes (base, section 1 : « 7 thèmes sémantiques »), la chance pure est 1/7 ≈ 0.143, et les thèmes sont « utilisés uniquement à l'évaluation aval » : la sonde lit une structure que le pré-entraînement n'a jamais vue comme cible. Le récapitulatif suivant réserve une surprise plus forte que ce simple écart à la chance." + ] + }, { "cell_type": "markdown", "id": "sec-8", @@ -734,6 +783,13 @@ "print(f\" Supervisé from scratch (borne sup): {acc_sup:.3f}\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lecture** : Verbatim du « Récapitulatif accuracy sonde linéaire » : « Aléatoire (init, gelé) : 0.161 », « Skip-gram simplifié (BoW brut) : 0.154 », « CONTRASTIF (pré-entraîné) : 0.432 ← cible », « Supervisé from scratch (borne sup): 0.368 ». La hiérarchie attendue voudrait le supervisé au-dessus — c'est l'inverse qui est imprimé : le pré-entraîné dépasse sa « borne sup » de +0.064 et vaut ~2.7× l'encodeur gelé. À ce budget de données, entraîner un MLP étiqueté from scratch fait moins bien que sonder un espace appris sans labels." + ] + }, { "cell_type": "markdown", "id": "sec-9", @@ -807,6 +863,13 @@ "print(f\" Verdict collapse : {'OUI (collapse)' if diag['sim_inter_mean'] > 0.95 or diag['top1_var_share'] > 0.95 else 'NON'}\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lecture** : Verbatim des « Diagnostics collapse (encodeur contrastif) » : « Dimensions pour 95% de variance : 22 / 32 », « Part de variance sur la dim 1 : 0.096 », « Similarité cosinus inter-phrases : 0.184 », « Verdict collapse : NON ». Les seuils de la section sont passés : le collapse signerait ≥95 % de la variance sur UNE dimension — ici la première n'en porte que 9,6 % — et des phrases toutes semblables imprimeraient une similarité > 0.95 — ici 0.184. L'espace utilise réellement ses 32 dimensions." + ] + }, { "cell_type": "markdown", "id": "sec-10", @@ -894,6 +957,13 @@ " print(f\"{tau:>6.2f} {pols[0]+'+'+pols[1]:<14} {m:>10.3f} {s:>10.3f} {accs}\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lecture** : Verbatim de l'ablation (« 3 températures × 3 paires d'augmentations × 3 graines = 27 runs », accuracy moyenne ± écart-type) : la meilleure case est « 0.10 swap+swap 0.374 0.017 », devant « 0.10 mask+swap 0.368 0.015 » et « 0.05 mask+swap 0.360 0.040 » ; le bas du tableau est τ=0.50 partout (0.248–0.340). Lecture honnête : au sommet, les cases se chevauchent à un écart-type près (0.374±0.017 vs 0.368±0.015) — ce qui est net, c'est le CLUSTER : τ=0.1 domine et τ=0.5 dégrade systématiquement (jusqu'à −0.13). L'« importance des hyperparamètres » se lit ici : température, oui ; paire d'augmentations, à un chevauchement près." + ] + }, { "cell_type": "markdown", "id": "sec-11", @@ -1120,4 +1190,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/Day6-MLE-Star/Lab13-Web-Search-SOTA.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/Day6-MLE-Star/Lab13-Web-Search-SOTA.ipynb index e5ed8e9eec..403d36843a 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/Day6-MLE-Star/Lab13-Web-Search-SOTA.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/Day6-MLE-Star/Lab13-Web-Search-SOTA.ipynb @@ -692,6 +692,13 @@ "print(\"Classe MLEStarSearcher definie : pipeline complet WebSearch -> ExtractModel -> GenerateCode\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lecture** : Verbatim : « Classe MLEStarSearcher definie : pipeline complet WebSearch -> ExtractModel -> GenerateCode ». Les trois étapes s'impriment chacune au run : « [WEB SEARCH] Recherche pour: image classification imagenet », « [EXTRACTOR] Extraction des modeles... », « [CODE GEN] Generation du code initial... » — une seule classe qui enchaîne retrieval, extraction LLM et génération de code." + ] + }, { "cell_type": "markdown", "id": "cell-14", @@ -789,6 +796,13 @@ " print(f\" Paper: {m.paper_url}\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lecture** : Verbatim des « MODELES TROUVES » : « Vision Transformers » (« 90.5% top-1 accuracy on ImageNet »), « YOLOv9 » et « DINO » (tous deux « object detection benchmarks on the COCO dataset ») — pour « 2 resultats trouves » côté recherche. Lecture honnête, celle du notebook lui-même : deux modèles sur trois sont des détecteurs COCO, pas des classifieurs ImageNet, et « le RAG n'est pas magique — sa qualité est plafonnée par celle du retrieval amont » ; la section préconise un re-ranking par leaderboard. Le run démontre moins une découverte automatique du SOTA que la mécanique qui permettrait de l'approcher." + ] + }, { "cell_type": "markdown", "id": "interp-cell-15", @@ -901,6 +915,13 @@ " print(code[:800] + \"...\" if len(code) > 800 else code)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lecture** : Verbatim des imports générés : « import torch », « import torchvision », « from torchvision.models import vit_b_16, ViT_B_16_Weights », puis transformations (Resize 256, CenterCrop 224, Normalize mean=[0.485, 0.456, 0.405]) et chargement « torchvision.datasets.ImageNet(root='path/to/imagenet/train') ». Attention au statut : « le code produit n'est pas exécuté dans ce lab » (section 8) — squelette à chemin placeholder, « non validé », que le Lab 14 (ablation) doit raffiner. « Exécutable » serait un mot de trop : plausible, non prouvé." + ] + }, { "cell_type": "markdown", "id": "interp-cell-17", @@ -1354,4 +1375,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file