{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6f0dc057",
   "metadata": {},
   "source": [
    "# Ch 18 — Generative Models (notebook)\n",
    "\n",
    "`[← 17 efficient-inference]` · **this notebook** · `[19 rl-and-rlhf →]`\n",
    "\n",
    "Runs top-to-bottom in ~6 min on free Colab CPU. Last verified 2026-06-11.\n",
    "\n",
    "**What you'll build**\n",
    "- PCA reframed as a linear autoencoder, checked numerically against a torch autoencoder you train: the two agree on reconstruction error.\n",
    "- A stacked (deep) autoencoder on an MNIST subset, plus a denoising variant, plus the closed-form VAE KL term computed both ways.\n",
    "- A GAN on a *known* 2D mixture of Gaussians, so \"did it recover the distribution?\" is an assertion, not a vibe. Then a deliberate mode collapse, diagnosed from samples, then fixed.\n",
    "- A mini DDPM (a few hundred steps, not 700k) on the same 2D mixture, and the one-line proof that the regress-to-noise loss is what makes diffusion stable.\n",
    "\n",
    "**How this notebook works.** Code cells with a `# TODO` are yours to fill in. Run the cell to grade yourself: `[ ok ]` passed, `[FAIL]` shows what went wrong, `[ -- ]` means not attempted yet. Every exercise has a hint ladder (open only as many as you need) and a folded solution below it. The notebook runs top-to-bottom even if you fill in nothing, because the solution cells redefine the pieces the later cells need. See Ch 00 for the full protocol.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e05ba1ec",
   "metadata": {},
   "source": [
    "## Before you start\n",
    "\n",
    "1. A vanilla autoencoder with a 2-unit bottleneck on MNIST. You sample a *random* point in that 2D latent space and decode it. What do you expect to see? <details><summary>Answer</summary>Almost certainly garbage. A plain autoencoder puts no probability structure on the latent space, so most points decode to nothing. Fixing that is exactly what the VAE prior does, and what the GAN and diffusion sections do differently.</details>\n",
    "2. The diffusion forward process adds Gaussian noise to data over many steps. Is the forward process *learned*? <details><summary>Answer</summary>No. It is a fixed recipe (a variance schedule chosen ahead of time). Only the reverse process is learned. This asymmetry is the whole reason diffusion training is a plain regression problem.</details>\n",
    "3. Predict before you run: you train a generator to match a 2D mixture of three Gaussians, but it collapses to producing only one of the three blobs. Will the *loss curve* tell you this happened? <details><summary>Answer</summary>Usually not. GAN losses are nearly uninformative because the two networks move the target for each other. You diagnose mode collapse by looking at samples (here, by counting how many of the three modes got covered), which is exactly the check we build.</details>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "49cfe7a2",
   "metadata": {},
   "source": [
    "## Setup\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8ececd95",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:29.216549Z",
     "iopub.status.busy": "2026-06-10T19:50:29.216460Z",
     "iopub.status.idle": "2026-06-10T19:50:30.016100Z",
     "shell.execute_reply": "2026-06-10T19:50:30.015708Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy 2.2.6 · torch 2.12.0+cpu · device cpu\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import torch\n",
    "import matplotlib.pyplot as plt\n",
    "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
    "print(f\"numpy {np.__version__} · torch {torch.__version__} · device {device}\")\n",
    "if np.__version__ < \"2.0\":\n",
    "    print(\"WARN: written for NumPy 2.x; older versions may shift the last digit\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "4c73a02e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:30.017197Z",
     "iopub.status.busy": "2026-06-10T19:50:30.017046Z",
     "iopub.status.idle": "2026-06-10T19:50:30.025705Z",
     "shell.execute_reply": "2026-06-10T19:50:30.025354Z"
    }
   },
   "outputs": [],
   "source": [
    "import os, random\n",
    "SEED = 0\n",
    "FAST = bool(os.environ.get('NB_FAST'))  # CI smoke mode: ~10x fewer steps, same code paths\n",
    "rng = np.random.default_rng(SEED)            # the one numpy generator we thread everywhere\n",
    "torch.manual_seed(SEED); random.seed(SEED)\n",
    "\n",
    "# Step budgets. The experiment-log tables quote expected losses for BOTH settings.\n",
    "AE_EPOCHS  = 1 if FAST else 8       # stacked-autoencoder passes over the MNIST subset\n",
    "GAN_STEPS  = 300 if FAST else 2000  # generator/critic updates on the 2D mixture\n",
    "DDPM_STEPS = 300 if FAST else 3000  # gradient steps for the mini denoiser\n",
    "\n",
    "# Plot helper (defined here, never imported): scatter a 2D point cloud.\n",
    "def scatter2d(ax, pts, title=\"\", c=\"#1E40FF\", s=6, alpha=0.5):\n",
    "    pts = np.asarray(pts)\n",
    "    ax.scatter(pts[:, 0], pts[:, 1], s=s, c=c, alpha=alpha, linewidths=0)\n",
    "    ax.set_title(title); ax.set_aspect(\"equal\"); ax.set_xlim(-4, 4); ax.set_ylim(-4, 4)\n",
    "\n",
    "# Param counter (Tier-2 house habit: print this after every module init).\n",
    "def n_params(module):\n",
    "    return sum(p.numel() for p in module.parameters())\n",
    "\n",
    "# ── house self-check harness (identical across all chapter notebooks) ──\n",
    "import numpy as _np\n",
    "\n",
    "def check(label, test_fn, required=False):\n",
    "    \"\"\"Run one self-check. test_fn raises AssertionError (with a teaching\n",
    "    message) on failure, NotImplementedError if the stub is unfilled.\n",
    "    required=True is used only in solution cells; it is what CI grades.\"\"\"\n",
    "    try:\n",
    "        test_fn()\n",
    "    except NotImplementedError:\n",
    "        if required:\n",
    "            raise AssertionError(f\"{label}: reference solution incomplete\")\n",
    "        print(f\"[ -- ] {label}: not attempted yet — fill in the TODO above, then re-run.\")\n",
    "        return False\n",
    "    except AssertionError as e:\n",
    "        if required:\n",
    "            raise\n",
    "        print(f\"[FAIL] {label}: {e}\")\n",
    "        return False\n",
    "    print(f\"[ ok ] {label}\")\n",
    "    return True\n",
    "\n",
    "def attempted(*vals):\n",
    "    \"\"\"Treat None placeholders as 'not attempted'.\"\"\"\n",
    "    if any(v is None for v in vals):\n",
    "        raise NotImplementedError\n",
    "\n",
    "def check_shape(x, want):\n",
    "    assert tuple(x.shape) == tuple(want), \\\n",
    "        f\"shape {tuple(x.shape)}, expected {tuple(want)} — check your reshape/transpose order\"\n",
    "\n",
    "def check_close(got, want, atol=1e-5, rtol=1e-4, msg=\"\"):\n",
    "    g, w = _np.asarray(got, dtype=float), _np.asarray(want, dtype=float)\n",
    "    assert g.shape == w.shape, f\"shape {g.shape} vs expected {w.shape}. {msg}\"\n",
    "    bad = ~_np.isclose(g, w, atol=atol, rtol=rtol)\n",
    "    assert not bad.any(), \\\n",
    "        f\"{bad.mean():.2%} of values wrong (max diff {abs(g - w).max():.3g}). {msg}\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "12471b63",
   "metadata": {},
   "source": [
    "> **Note:** seeds make this notebook's printed numbers reproduce on CPU. Library versions and BLAS threading can shift the last digit or two; quoted losses hold for the pinned environment. If your GAN mode-coverage is 3/3 and a printed loss is 0.071 where the page says 0.069, you did nothing wrong.\n",
    "\n",
    "> **Note:** every training loop honors `FAST`. With `NB_FAST=1` the step counts above drop ~10x so CI can smoke-test the same code paths in seconds. The full run (no env var) is what produces the committed figures.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4b99bf47",
   "metadata": {},
   "source": [
    "## The map\n",
    "\n",
    "> **Part 1 — Autoencoders as compression.** Reframe PCA as a linear autoencoder, then train a real one and check the two agree on reconstruction error. Build a stacked autoencoder and a denoising variant on an MNIST subset.\n",
    "> **Part 2 — The VAE building blocks.** Derive the closed-form KL to the unit Gaussian, implement the reparameterization trick, and verify the sampled latent has the mean and variance the math predicts.\n",
    "> **Part 3 — A GAN on a known distribution.** Train a generator to recover a 2D mixture of three Gaussians, then *break* it into mode collapse and diagnose it from samples, then fix it.\n",
    "> **Part 4 — A mini DDPM.** Write the forward noising in closed form, train a tiny noise-predictor for a few hundred steps, sample, and watch the regress-to-noise loss recover the same 2D distribution stably.\n",
    "> **Safety lens.** Why a prompt-following generator is a misuse surface, and the one logging habit that makes misuse detectable.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b1bff24",
   "metadata": {},
   "source": [
    "## Part 1 — Autoencoders as compression\n",
    "\n",
    "> **Objectives.**\n",
    "> - See that PCA *is* a linear autoencoder: encode by projecting onto the top components, decode by projecting back.\n",
    "> - Train a torch autoencoder and confirm its reconstruction error agrees with PCA when both are linear with the same bottleneck width.\n",
    "> - Stack nonlinear layers and watch reconstruction sharpen, then add input corruption to get a denoising autoencoder.\n",
    "> - Carry one fact forward: a vanilla autoencoder is **not** a generative model, because its latent space has no probability structure.\n",
    "\n",
    "An autoencoder is two functions back to back. An encoder $g_\\phi:\\mathbb{R}^d\\to\\mathbb{R}^k$ with $k<d$, and a decoder $f_\\theta:\\mathbb{R}^k\\to\\mathbb{R}^d$, trained jointly so that $f_\\theta(g_\\phi(\\mathbf{x}))\\approx\\mathbf{x}$. The $k$-dimensional bottleneck is forced to keep only what is needed to reconstruct. That is dimensionality reduction, the way PCA is dimensionality reduction, and PCA is the special case where both maps are linear.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2dc90410",
   "metadata": {},
   "source": [
    "### The anchor data: an MNIST subset\n",
    "\n",
    "We use a small MNIST subset as the image anchor. torchvision caches it under `root=\"data\"`, so the second run is a no-op (idempotent loader, the single most copied dataset pattern in the field). We flatten each 28x28 image to a 784-vector in `[0, 1]` and keep a few thousand for speed.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e2d60a2b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:30.027078Z",
     "iopub.status.busy": "2026-06-10T19:50:30.026928Z",
     "iopub.status.idle": "2026-06-10T19:50:30.910775Z",
     "shell.execute_reply": "2026-06-10T19:50:30.910376Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST subset: X_img (4000, 784) in [0.00, 1.00], 784 pixels/image\n"
     ]
    }
   ],
   "source": [
    "from torchvision.datasets import MNIST\n",
    "from torchvision import transforms\n",
    "\n",
    "# idempotent: download once, cache under data/; second run is a no-op.\n",
    "_mnist = MNIST(root=\"data\", train=True, download=True,\n",
    "               transform=transforms.ToTensor())\n",
    "N_SUB = 800 if FAST else 4000          # subset size: enough signal, seconds on CPU\n",
    "idx = rng.permutation(len(_mnist))[:N_SUB]\n",
    "X_img = torch.stack([_mnist[i][0].view(-1) for i in idx])  # (N_SUB, 784) in [0,1]\n",
    "y_img = torch.tensor([_mnist[i][1] for i in idx])          # (N_SUB,) digit labels\n",
    "print(f\"MNIST subset: X_img {tuple(X_img.shape)} in [{X_img.min():.2f}, {X_img.max():.2f}], \"\n",
    "      f\"{X_img.shape[1]} pixels/image\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ff10edd",
   "metadata": {},
   "source": [
    "> **Interpretation.** 784 pixels per image, values in `[0, 1]`. The whole point of an autoencoder is to find a much smaller representation that still reconstructs these.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e2af478",
   "metadata": {},
   "source": [
    "### PCA is a linear autoencoder\n",
    "\n",
    "Center the data, take the top $k$ right singular vectors $V_k$ (the principal axes). The encoder is $\\mathbf{z}=(\\mathbf{x}-\\boldsymbol\\mu)V_k$, a projection. The decoder is $\\hat{\\mathbf{x}}=\\mathbf{z}V_k^\\top+\\boldsymbol\\mu$, the same projection run backward. There is no nonlinearity and the two weight matrices are tied (one is the transpose of the other). That is an autoencoder with a closed-form solution.\n",
    "\n",
    "> **Predict:** with a 32-dim bottleneck on these 784-pixel images, will reconstruction error be closer to 0.0 (perfect) or to the error of reconstructing from the mean alone? <details><summary>Answer</summary>Much closer to perfect. The top 32 principal components of MNIST capture most of the pixel variance; reconstructing from the mean alone is the baseline these components beat by a wide margin.</details>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "5bc27594",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:30.911776Z",
     "iopub.status.busy": "2026-06-10T19:50:30.911640Z",
     "iopub.status.idle": "2026-06-10T19:50:31.151955Z",
     "shell.execute_reply": "2026-06-10T19:50:31.151515Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PCA-32 reconstruction MSE: 0.0172  (mean-only baseline: 0.0674)\n"
     ]
    }
   ],
   "source": [
    "K_LATENT = 32                              # bottleneck width, reused by the torch AE below\n",
    "Xc = X_img.numpy()\n",
    "mu = Xc.mean(axis=0, keepdims=True)        # per-pixel mean: the decoder's bias\n",
    "Xz = Xc - mu\n",
    "# SVD of the centered data: columns of Vt[:K] are the top-K principal axes.\n",
    "U, S, Vt = np.linalg.svd(Xz, full_matrices=False)\n",
    "Vk = Vt[:K_LATENT].T                        # (784, K) projection matrix\n",
    "Z_pca = Xz @ Vk                             # encode: (N, K)\n",
    "Xhat_pca = Z_pca @ Vk.T + mu                # decode: (N, 784)\n",
    "pca_mse = float(((Xhat_pca - Xc) ** 2).mean())\n",
    "mean_mse = float(((mu - Xc) ** 2).mean())   # baseline: reconstruct everything as the mean\n",
    "print(f\"PCA-{K_LATENT} reconstruction MSE: {pca_mse:.4f}  (mean-only baseline: {mean_mse:.4f})\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4daaee80",
   "metadata": {},
   "source": [
    "> **Interpretation.** The 32-component reconstruction crushes the mean-only baseline. The principal axes are a linear bottleneck that keeps the reconstructable structure and throws away the rest, exactly the autoencoder's job description.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "3e040b6d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:31.153276Z",
     "iopub.status.busy": "2026-06-10T19:50:31.153087Z",
     "iopub.status.idle": "2026-06-10T19:50:31.236316Z",
     "shell.execute_reply": "2026-06-10T19:50:31.235833Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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evXqJdOnT5f169d77cOJxpsjR47IyJEjpWnTplKqVCmpXLmyDBw4UHbt2uVsZ8KECdK5c2dJSUmR1NRUadu2rfNL4smMfxs2bJBu3bpJuXLlJCMjQ+655x7nldt//OMf0rp169hnNm/eXJ555hkROXoer7vuOhERueiii2LXa96v63n3m0mTJkmbNm2kdOnSMmrUqNi95NixM4++3kVENmzYIP3795dq1apJcnKy1K5dW2677TY5cOBAvvtgxdBt3bpV+vfvL5UrV5ZSpUpJixYt5LXXXgu1OfZ+9/LLL8fud23btpW5c+eG2m7evFluueUWqV69uiQnJ0vVqlXl2muv5RVQ4D/4Z27gP7p37y7Lli2Tt956S/785z9Lenq6iEjs4XfAgAHy2muvSc+ePeXuu++Wf//73zJ8+HBZsmSJ/O///m9oW8uXL5cbbrhBBg0aJH369JHRo0fLddddJxMnTpTLLrss330ZPXq07Nu3T2699VZJTk6WihUrykcffSRXXHGF1KlTR4YOHSp79+6V5557Ti688EL56quvJCsrS5o1ayZpaWmxOB8RkRkzZkixYsVk/vz5snv3bklNTZUjR47I7Nmz5dZbbxURkc8//1wuuugieeihh8yYq2O9+uqrcsstt0jbtm1l+PDhsmXLFnnmmWdk1qxZMm/ePElLS4u1PXTokGRnZ0uHDh3kqaeekjJlypjbPHLkiHTt2lU+//xzue2226RRo0Yyfvx46dOnT77HKs/MmTPln//8pwwePFhSUlLk2WeflR49esjatWulUqVKIiIyd+5cmT17tvTq1UuqV68uq1evlhdffFG6dOkiixcvPu7+HThwQLKzs2X//v1y5513SpUqVWTDhg3ywQcfSE5OjpQvX957P/Pzpz/9SZKSkuR3v/udbN26VUaOHCmXXnqpfP3117F/dfc5BwMHDpSNGzfKlClT5PXXX49tPyMjQ1588UW57bbb5Oc//7l0795dRETOOeccERGvfnasG264QRo3biyPPfaY/N///Z/88Y9/lIoVK8qoUaPk4osvlscff1zGjBkj99xzj7Rt21Y6deqU7zGYOnWqvPPOO3LHHXdIenq6ZGVlyaJFi6Rjx46Smpoqv/3tb6VEiRIyatQo6dKli3z66afSrl07SUtLk2bNmsn06dNlyJAhInK0XyQlJcnOnTtl8eLF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xo0bQ5kvd+/eLX//+9+lZcuWsVTpJ6Nq1arSsmVLee2110L7tnDhQpk8eXLoFS6Row+0//73v2XatGmxCV16ero0btw4lkktr17Ef9mCNm3aSGZmprz00kuh5RomTJggS5YscY6Dr+zsbDl48GBoYeQjR46YD8A/RfHixZ1fIZ577rl8/9V69+7dTnxU8+bNpVixYs6yFT/V3//+99CrauPGjZNNmzbJFVdcISIndw6O15/zJs26/mT72alSvHhxufzyy2X8+PGhV5a3bNkib775pnTo0CH2mp/I0b69evVqefvtt2P9vFixYnLBBRfI008/LQcPHgz1/5NZtiDvFb1j5eTkyLvvvis1atSQzMzMWP306dOlV69e0qlTJxkzZoz5i2CpUqXk0ksvDf2vQoUKUrx4ccnOzpb33ntP1q5dG2u/ZMkSmTRpUr77eboNGzZMduzYIQMGDDBjCydPniwffPCBiBx93bJOnToyaNAg6dmzZ+h/99xzj5QrV877tUvt+uuvl8OHD8sjjzzi/LdDhw7F+vnll18uKSkpMnz4cNm3b1+oXd6YURDj344dO0LlYsWKxf7xJu8zjncdn0hqaqqkp6fL9OnTQ/V/+ctfnM/r1q2b/Otf/5IvvvjC2U7edz+Zfbjyyitl8+bN8vbbb8fqDh06JM8995yUK1dOOnfu7P09RI7en/Q5qVu3rqSkpCR8/AWiil/ogGO0bt1aRETuv/9+6dWrl5QoUUK6du0qLVq0kD59+sjLL78sOTk50rlzZ/n888/ltddek27duslFF10U2k6DBg2kf//+MnfuXKlcubK88sorsmXLFhk9enTc+/bkk0/KFVdcIe3bt5f+/fvH0smXL1/eeaWvY8eO8qc//UnWrVsXenDt1KmTjBo1SrKyskKvCfouW1CiRAl5/PHH5ZZbbpHOnTvLjTfeGEvbnZWVJb/+9a/j+m7dunWT8847T+6++25ZsWKFNGrUSN5//33ZuXOniCTuVderr75aXn/9dSlfvrw0adJEPvvsM/noo49iyxocz9SpU+WOO+6Q6667Tho0aCCHDh2S119/XYoXLy49evRIyL7lqVixonTo0EFuueUW2bJli4wcOVLq1asXSxhzMucgrz8PGTJEsrOzpXjx4tKrVy8pXbq0NGnSRN5++21p0KCBVKxYUZo1aybNmjU7qX52Kv3x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0AEAAABARDGhAwAAAICIYmFxTxUrVnTq+vbtm+/fjRw5MlR++OGHnTZ6QdbTHS9XlJx//vlO3WeffXYa9uSn0zELPjF91113nVN3ut/DR8HT79qPHTv2NO0JCkI88XJRphefLsgYOrjHu0ePHk6b3r17h8opKSlOm927dzt127ZtC5Wt+9F7770XKp9zzjlOm/POOy9UrlatmtOmWbNmTt3ChQudOvhp1aqVU6dj5vbs2eO0efTRR0PlwhYvJ+LGzL344otOG594uS1btjh1v/3tb0Nln3i5ePALHQAAAABEFBM6AAAAAIgoJnQAAAAAEFFM6AAAAAAgokiKYihevLhT98orrzh1devWDZUXLFjgtBk6dGiobAWMkrCg4GzYsMGp0wt0i7gJRqw28SzIbSVgsfZJ04t1irj7qBdDF7EXEkfR1qRJk3zb5OTkFPyOoMA88MADp/Xzv/jii1BZJ7bwVbZs2VBZJ984nu7du4fKo0ePjuvz4br88sudurfffjtUTk1NddroxEsff/yx06Z///5O3fr16092F2Xz5s35trEWFicBSvzKlCnj1L377rv5/t3y5cudurfeeish+5QoehwSEenTp0+ofOONN3pta9q0aaHybbfd5rTZuXPnSexd/PiFDgAAAAAiigkdAAAAAEQUEzoAAAAAiChi6AxpaWlOnbVAtV4Qc/DgwU4bK2YOp44VC3fhhRc6dWeffXaoHE+8XEHT32XcuHFOG58YOqsvF8bvCz/WYq/arl27TsGeoKBUqlTplH2Wdc+65557QuWZM2fGte169eqFykuXLo1rO4ifjlvU8XIi7iLh48ePd9rouM5ly5Y5bQpqAWWLtY+In5VLomrVqvn+3ZIlSwpidxLq/vvvd+r04t+W//mf/3Hqhg8fHiqvXr067v36qfiFDgAAAAAiigkdAAAAAEQUEzoAAAAAiCgmdAAAAAAQUSRFMfz+97936qyg9E2bNoXKhw8fLrB9QuJYiVKsusLOWljcBwlQipabb77ZqdMJm6ZOnXqqdgc/UUZGhlPnuwD3ybIWCp4wYYJTF28SFBQ+Y8eODZWtRcN1ghG9sHsilSpVyql74YUXQmXrmvj8889D5YceeiixO3aGGzRokFe73bt3h8rPPPNMQeyOtxYtWjh1uv9Yi39rW7ZsceqefPJJp+50JkHR+IUOAAAAACKKCR0AAAAARBQTOgAAAACIKGLoRKRBgwahct++fZ021iKLjz76aKj8xRdfJHS/gBO57rrr8m3js9A4oqNLly5OXXp6ulO3devWUPnTTz8tqF1CgpUvX96ps+JC8rNixQqnrmHDhqFy586dnTaLFi066c/y9eyzz4bKOtZTRKRYMfffmX/1q18V1C4VaTVq1HDqSpYsGSoHQeC00YuGJ1J2dnao/PDDDzttWrduHSpb+zhixIhQeefOnQnYO+R58MEHvdrt378/VM7JyUnI5zdp0sSpu+SSS5y6u+++O1SuUKGC00aPM2XKlHHabNu2LVS+9tprnTbWmFqY8AsdAAAAAEQUEzoAAAAAiCgmdAAAAAAQUUzoAAAAACCiSIoiIr/+9a9DZWsRcSsY8vnnny+wfQK066+/PlRu3759vn8zcuTIAtobnA46oYGInUTiyJEjofKBAwcKbJ+QWFYyAisphKaD+ocMGZLv3xRkshwr4UqHDh1CZet76b6L+FmLhusEbxs3bsx3O5mZmfm2KV26tFP35ptvOnVt2rQJlQ8dOpTvtnHqlS1b1qmzrle9aLe1wPvixYvz/bxGjRqFyj179nTaJCcn57sdK9GSz/g5duzYUDmKSQ75hQ4AAAAAIooJHQAAAABEFBM6AAAAAIgoJnQAAAAAEFEkRRE3UNvy5JNPnoI9AY6qUaOGU/fUU0/l+3c6sHfdunUJ2ycAiaUTRIiIZGdnx7WtCRMmhMqTJk2KazuJUqZMGa86LScnx6k7ePBgInbpjLNo0SKnLjc3N1SuVq2a0+abb74JleNNNGGdy5deeilUtu5111xzTai8ZMkSp82cOXPy/XzE75FHHnHqrIRN2k033ZSQz9f9VERk+PDhTp3uBx988IHTRida+tvf/ua08UkiVdjxCx0AAAAARBQTOgAAAACIKCZ0AAAAABBRZ1wMXbNmzZy6Bg0ahMpW3NGUKVMKbJ8A7e2333bqdKyB1U/14uMoWqpWrerUWfEtmzZtOhW7g59IL8orIpKenh7Xtv70pz/91N1JqO7du8f1d6+//rpTt3bt2p+6O/iPe+65J1S24qLq1q170tv9y1/+4tSNGDHCqbvgggtC5TvuuMNpo+PzevTo4bRZv379ye4iTsKjjz7q1LVu3dqpu+KKK0JlK951+/btofIbb7zhtNmwYUOobI0DVr6LcePGhco6Xk5E5PDhw6Hy1KlTnTZFAb/QAQAAAEBEMaEDAAAAgIhiQgcAAAAAEcWEDgAAAAAi6oxLitK1a1enrkSJEqGytWDl6tWrC2qXACeZSfv27fP9mwsvvLCgdgeF1MUXX+zUWQv8fvTRR6did1AArCQ3UTB27NhQOd6kKL/61a8SsDc4Hp2QwkpQUZAef/zxULlYMfd3Bb34+LJlywp0n+A6cOCAU3fDDTc4dfrZZefOnU6b999/PyH79PLLLzt1+vl9//79TptbbrklVLaSzhUF/EIHAAAAABHFhA4AAAAAIooJHQAAAABEVJGPoUtJSQmVrRg6bcmSJQW1O4Ccf/75Tp3PO906RsVaWBxF29VXX+3VjjEsuqyYyMKmSZMmTp2OmfP5Hn/84x8Ttk8ofHr27OnUXXnllaHyqlWrnDZ/+MMfCmyfEL/c3Fyn7tVXXy2Qz+rVq5dTl5qamu/fvfPOO05dUY2Z0/iFDgAAAAAiigkdAAAAAEQUEzoAAAAAiCgmdAAAAAAQUUU+KYpefNlKSKEXDX/xxRcLcpdwBrH622effZbv31kJT/QCnij6Lr300lC5QoUKTpuVK1c6de+++26B7RPOPA8//HCo/Itf/CKu7cyfPz9UHj16dNz7hMLFWiD8l7/8pVNXpkyZUPmTTz5x2uTk5CRqtxARGRkZobJegF5EpHTp0k6dflZ65JFHnDYlS5YMla376JYtW7z2szDjFzoAAAAAiCgmdAAAAAAQUUzoAAAAACCiilQMXWZmplM3aNCgfP/um2++CZX37t2bsH3CmaVGjRqhsrXIpeWGG26I6+9QtFWtWjVUTkpKctr8+OOPTt0PP/xQYPuEwkkv4mzFoPh48MEHnTodM1erVq18t7N48WKnTi8+vmbNmpPcOxRW9957r1N39dVXO3UbN24Mld9///0C2ydER//+/UPls88+2+vvdE6CBg0aOG1uu+22UHnSpElOmylTpnh9XmHGL3QAAAAAEFFM6AAAAAAgopjQAQAAAEBEMaEDAAAAgIgqUklRqlWr5tRdc801+f7dPffcEyrv3r07YfuEM8uIESNCZZ0kRURk7NixTh1JUGDRC6AGQeC0+fLLL0/V7iDBrKQga9eudep8kpA8+uijoXLNmjWdNkuXLg2Vn332WafNkSNH8v0si15YesyYMU4bkqAUXb/+9a+92o0fPz5Ufu+99wpgb1CYDRgwwKm7//7749rW9ddfHyrrBHMiIlOnTg2V9TN/UcEvdAAAAAAQUUzoAAAAACCimNABAAAAQEQxoQMAAACAiCpSSVHuuuuufNu89NJLTt3KlSsLYndQxOlgXBGR6667LlT+7LPPvP4OsFx55ZX5tpk3b94p2BMUhMWLFzt1N910k1M3c+bMk972wIED821jJUCxEu/4+P3vfx8qP/3003FtB9Gg+1dGRobT5vPPP3fqHnrooQLbJ0TDzTff7NSVLl06IdueM2eOU9ezZ8+EbLuw4xc6AAAAAIgoJnQAAAAAEFFM6AAAAAAgoiIdQ6cXbe7Ro4fTZteuXaHyvffe67SJN2YAZxYd+/b222/n+zfWIpeAL70gatOmTZ02b7zxxqnaHZwCCxYscOpeeeWVULlfv36nandERGT+/Pmh8n333ee0mTRp0qnaHZxiWVlZTp1eyN56jhoxYoRTt3PnzoTtVyKUKlXKqUtPTw+V169ff6p2Byfpiy++CJUvv/xyp82ePXtO1e6cVvxCBwAAAAARxYQOAAAAACKKCR0AAAAARBQTOgAAAACIqEgnRfHx4YcfhspnSnAkfhqdcEfELwmKXkx33bp1CdsnnHmeeOKJE5ZR9Fj3KL2I8zfffOO0eeCBB0JlndjBMn36dKfu3Xffder+9a9/hcpr1qzJd9soOsqWLevUlS9fPlTOzc112ixevLjA9ilRihcv7tSlpqaehj05c1iJvOrXrx8qZ2ZmOm2effZZp+7BBx8Mlc/kZ3x+oQMAAACAiGJCBwAAAAARxYQOAAAAACIqKfBcVTspKamg9wWFWCIXXy+MfUnHzK1duzbfvxk7dqxTpxcfhyuRfUmkcPYnnDr0JyRSUb/XxePXv/61U/fkk0+Gytu2bXPaVK1atcD2KQoYm5BI+fUnfqEDAAAAgIhiQgcAAAAAEcWEDgAAAAAiigkdAAAAAERUkV9YHPDhs2i4ToJCAhQAQFE3d+7cfNv84x//OAV7AuB4+IUOAAAAACKKCR0AAAAARBQTOgAAAACIKBYWh5eivtiqXlh81qxZTpuaNWueqt0p0lhsFYlEf0IiFfV7HU4dxiYkEguLAwAAAEARxYQOAAAAACKKCR0AAAAARBQTOgAAAACIKO+kKAAAAACAwoVf6AAAAAAgopjQAQAAAEBEneXb8Pzzzy/I/UAhN2fOnIRti750ZktkXxIRadmyZUK3h2j5+uuvE7q9Ro0aJXR7iJalS5cmbFtt27ZN2LYQPXPnzk3o9s6kZycrGuxMX4cvv2cnfqEDAAAAgIhiQgcAAAAAEcWEDgAAAAAiyjuGLqr0O7en+r1cVoVAQeEdc4jEP8bQV4o26/yeyvvR6f58AIVTvOOAz9+dyfc1fqEDAAAAgIhiQgcAAAAAEcWEDgAAAAAiqsjH0GnW+7XFiuU/r7X+7vDhw6HywYMH821jOeus8GkoXry41+f7IGYhcRL1bvaRI0e86rR43h+3+rbP9yA+L7HiPea6zrfv6M/zGVP0OOS7j9YYx7iTWD7H02cM0XzvNXocsT5L7yN94PSzxv94+gmKvkTFYvvc63zaWGOT5dChQycsi7j3KOu68JkHWOL5u4J6luIXOgAAAACIKCZ0AAAAABBRTOgAAAAAIKKY0AEAAABARBWppCjxJjzRbXwDiXUSlD179jhtdKCptY+lSpUKlX2SE/jyWVi9KPNN7uGTTMSnL+lAXithhNWXDhw4ECr7nCefJBrxijdAGEcVVHIanyRLIu4YUrJkSadNmTJlQuUSJUo4bXS/3L9/f777KOL28TNt3PkpfI6nFfiv28SbLMf6fH3efRIP+NzrrH7pc//zTZgAlz521nnyaeMj3kRPun/5JHJJZKILEsckls8ztu5zvudOj00+9yhr/NCfZ41DPuPl6Uwex1MbAAAAAEQUEzoAAAAAiCgmdAAAAAAQUYUihs7nHdR430v1iRnQddb707m5uU7d7t27Q2XrnduMjIxQuVKlSk4bHbuyb98+p41Vt3fv3lDZJ17rTFscOt7vG2/8iebzrrZV5xNzZcWx6H6iY6Cs7RxvP/PbR0uU+lc87777xmT6nE9d5zPulS1b1mmTnp7u1FWtWjVULleunNNGy8nJceo2bNgQKm/bts1pY/UxYuZs8S4Ur8d2nxg6636UkpISKleoUMFpY/XDH374IVTetGmT0+b7778PlXWMuYjbf63+nJyc7NTFO9YWZT5jjNUH9PG1Ymd9Yuh8rnHrmUTHOOm+JSLy448/5rtt/d2sfpOoWPCiFlMX7/hsHQd9jK3+pOt0/LZVl5qa6rVP+jl8y5YtTputW7eGyvrZWcT9Hjre19pHq511rejx2rouEnHP5Bc6AAAAAIgoJnQAAAAAEFFM6AAAAAAgopjQAQAAAEBEFYqkKPEmI/BdZPdYPgsDWkG6VqClVqNGDaeuWbNmoXL9+vWdNvr7r1u3zmmzevVqp84KOtd0oKdPcG9UEhr47Kdvgh19XHwSPfgkobG2YwXk6gDv0qVLO210Ygsr4F3vk5XMx6IX+PVZ8Dfqi4/rfuCzoLPFOg/xLFRv9Qt9PnVSCxGRmjVrOnVt2rQJla3kFzrhycKFC502eoyxxhzrGPlcKz7jfpQTXcS7QLjPuGIlHtBJBGrVquW0qVevXqhcp04dp43Vn3VSAet+9N1334XKOkmKiJvswvr+Fn0sfRb9LUoL3lvXgb5+rGNiJXaw+o6mE5dYSUp8EnD53EetNvrz402UY31XvS1rbNbjnE8SoiglTvHZV9+ETbqPWfconQywYsWKThud3Mvqu1Y/9EkqqBOnWG10P7Q+3/pu+lnNGlP0c5h1r0+EaD+RAQAAAMAZjAkdAAAAAEQUEzoAAAAAiKhCEUOn+cbL6fecrXehfRbI1O/TWu/+W+9Q63d+mzdv7rS57LLLQmUdUycisnnz5lDZeqd848aNTp3+Ltb74vqdZ+s4xhOLWFjpY+K7IKruAz4xP1Y8kU/sgfX+tH6v34oP0H3Qesdb11mfb9XpBTN94iws8SzWXVj4xIL5fh+fReD1e/XWwt66X1oLMVt1tWvXDpWtmMgVK1aEyjoGSkRk7dq1obLu3yL29RRPfKUVA1TU+lO89HhQvnx5p02LFi1OWBYRad26dahcuXJlp401Puh+YI0Puh9aY6ge+6zYdB3vImL3O00fI+tvrNiZosK6Z1jnQB8Dn5wBO3bscNro+5+16LIVK5WWlhYqn3322U4bHZdkjQ36Ocl6brJY9838WGNcYY2/9Nkvn2dsa/yyxl8du5uVleW00XU6pk7EHXdWrVrltNGxvBbrOtDjpc8C6VZODGu81H3TGj99nsN1/43n/sEvdAAAAAAQUUzoAAAAACCimNABAAAAQEQxoQMAAACAiCrwpCjxBLFbAYNWgLNONGAtPqmDa61gbh3EaH2+ToAiInLuueeGyl26dHHaXHDBBaFylSpVnDaa9T2sgF/9/a1EBFFKInAsa799EtzogGfrfFsBwTpQ22dhb122WIlTrPPkkxRF/53VT3TSAZ34QkRk5cqVTp1PUhh9bH0TzkSZT1KOeBeQ1te0T8IGK6C/atWqTp0er7Zv3+60Wb58eai8YMECp826detCZSsZh7VouT4miUqcUpjpvhHvouhWMLwej6wFwc8///xQuW3btk6bzMzMUNkncYmIm9zCSu6lkwhYiSz0eLxp0yanjZWcZ+fOnaGylUBIJ1Oxvpvuc4U1IZjeT5/7ofVd9uzZ49Tt2rUrVLYSnujja407NWvWDJUbN27stGnUqJFTp5+BfBaZtpI66b6zaNEip83q1audOt2/retN913rPh4lPkk5fJJwWGN93bp1Q+WWLVvm28a67ufMmRMqW/cj6z6akZERKlvPbj4JBHU/tJJKVatWzanT14q+Z4q4c4yCSs5UtO6oAAAAAHAGYUIHAAAAABHFhA4AAAAAIooJHQAAAABEVIEnRfGhA+at4EwrKYgO7NQr1ouIlC1bNlS2kqvo7egEGSIiDRs2dOrOO++8fNvo4MstW7Y4bdasWRMqWwGjOuBbRCQ3N/eEnyXiBk7Hs/r86WAlTNCB2VagtA6QTUlJcdr4JDyxktfoRASVKlVy2uj9tpJBWMlUdLutW7c6bXQfsL6HDra1gnitv1u2bFmoXFiTBRQkq8/5JHmxEhbo68y67vT1ap0Xff3q/i1i90M97m3YsMFpo/uYlThFj5dWIh6rP+skAtb4rb9blJKkWOdcJ1Kw+o5PkiprXNNJIqx7TZMmTUJlnaRExD0vVtIM3XdE7GQ4mr4fWUlh9HZ0shMRe+xdtWpVqLxkyRKnje6ren9ECmeSsEQlM7MSRljJF3QfsK7pNm3ahMqtW7d22rRq1SpUzsrKctpYCU/0uGd9Vz3OWUnp9HhlJeGxnpt0X4p6whMfPkmq9D3fuh+dffbZTp0ed3S/EHH75sKFC502n3zySai8efNmp41OxCPijjPWvUYnAtJJSkTc/tu0adN824i4ieese20897p4xoDo3EEBAAAAACFM6AAAAAAgopjQAQAAAEBEFXgMnc+7ovrdXetd8HhjUDTrvXq9bStOxXp3tl69eqGy9Q63XuzSWuhy6dKlofK3337rtLEW/9Tvx5cpU8ZpE28M0Olm9RsdW2LFdeg6ayFM6/xWrlw5VK5du7bTpn79+ifcHxH3nX3r/XxrkVafhb31u+FWrKdeZNo6t9a76Tpu84cffnDa6H2y+rv+vKgvNO5zbfjESlnnXB8/K55Jj03WdWFd97pv+iyea51P3cf0dSJix6nq/mN9vv4u8cYwFlZWDJk+Dtb3s/qKjkWyYln0tW+NT3oM8Y2J1Ne+dR/VddZ30/F51mdZfcwnXkrvozWGRqU/6fHD5znKamOdX724fK1atZw2Xbp0CZXbtWvntNE5C6x4PSuGTccYWfFMOvbbWuRZfzcr9tMnnsp63tTbLozPSHl8clBoPjHA1nNSgwYNnDodX2mNTTNnzgyV//3vfzttdCyaFRuuxzgR9/5n5R/Q9yPrWtHXhRWvZ+2TXkjc2rbuhwWVy4Jf6AAAAAAgopjQAQAAAEBEMaEDAAAAgIhiQgcAAAAAEZXQpCg+C+xafAKVrQBzHQRrLaytgyGthUx18LiVbMJKkqGDRrdt2+a0+eyzz0LluXPnOm3031nHwyepgNXGJ6lCVFn9TQefWkHRVp3elhVQrxeAtxaJ1+fSCrjWweQiIjk5OaGylRhH75Ne/FXEDeStXr2608Za7NUniUZUFqW3+CQu8fnO1vm0rimd2MJKXKITBlgJBPQ590k0IeKOlz5JdqwkGjrJkJWIyBqbfcaZojw2HY/VfzQrkYVONGAl6dLjijU+6sQV1jG3+qFONLBs2TKnjR4fre/RrFmzUFknFhOx91sfNysBx969e/NtE+UxTPNJhmGNDbovderUyWlz4YUXhso+Cd90UgsRkY0bNzp1+l5n3Y91EhQrGYWus873999/79Tp/u3zbGV9/6JG95UqVao4berUqePU6XbWMf/qq69C5cWLFztt9H3EZ4wTcZ/xrQSC+hxb36N58+ahstXnrMRlek5hJYzSfdxKlpeIhE1F/w4KAAAAAEUUEzoAAAAAiCgmdAAAAAAQUaf8xeB43xO13sfX7/xa8Ql6QVLrPWv9DnCjRo2cNueee65Tp9/n1e8Ji4h8/PHHofKCBQucNjqmyVpY1Vo03fou+SmsC2T6xDPp72u9z6xZ7+db7zjrba9cudJpoxdEteID9H5bC+dadXpbS5YscdroxVZ1PIq1bd8+4hOP4RPPVdTo42D1Jyu+QtdZcWb63FiLuevtWOOgtRC1fkffWrxXx5JY+6jHHSvmyooH0MfJJ/bQ6k+6rrCOXyJ+8XG6jXWdWeczPT09VLZiGfW2rAV2169fn+8+6numiMiqVatCZWth4E2bNoXKeqFeEfec6+8lYl9j8cTH+ZyPKPPpSxUqVHDqmjRpEio3bdrUaaPPgV4YWkRk4sSJobLVt6xzqccL635Yv379UNknXt6KndLxeiLu/d9nkfooxfda+6r7hvWd9fOs9RxqLRqux2grPk7H3Fr7qONprfh/6x6hz7H13Ro3bhwqW3Gj+jqwYgGt2GG9sLhPDB0LiwMAAAAAQpjQAQAAAEBEMaEDAAAAgIhiQgcAAAAAEZXQpCg+SRJ8gtqtgElr0VvdTgdOi4js378/VLYWDa9Vq1ao3Lp1a6eNDtIVcRNZWMGgOlGKFSSsFzm0Fk+0vluiklToc3I6kl34JOXQwdRWYLzejnXcfBJEWAlPVq9eHSpbQbN6McqqVas6baxrQAfbrl271mmjk+dYC4TrgGArKFwvhCniHlvrGizMCSnyE++++wQvW8dKnwcrcYjuv9Y+6sRP1mKn1qLlOmGClehC91/rutf7rcdTEb/EB1aCCj2mRynJjs++Wm30cbDua9Y9SicIyMjIcNrovmolqdD3KGss0MlNRNwkUd9++63TxhoPNT0e+/QdEfe4Wf3J2pYWlT7mcz/UdVZSI6ufNGjQIFS2EqcsXbo0VP7000+dNvrZxucaF3GT/lj7qJNvWEnhdBIU655tJZrSz01WEo2o9JN4+STAshIWWfcaPYYsX77caaMT2FnJVfTnWX3Huv/o/mPtd9u2bUNlK8mhPibW91i4cKFTp5NPWeOQ3rZ1PSciARi/0AEAAABARDGhAwAAAICIYkIHAAAAABGV0Bi6eOPj9Puk1ruzVp3+POvde/3uqhWfkJWVFSpbC4tb+60XFJw/f77TRr/DrRdPFHHjI6zv6vPd9LvhlijHQel+Yh2TeGIPRNy4ESuOZNu2baGytQCwfsfcej9/165dTp2OB7D6QN26dUNl6z10/a76ihUrnDabN2926vS76VFaSLUg+cTQWdeUz6LZuo0VE1mlSpVQWY9VInbMrR4LrP6sY0l9Fk3XsabH4xPfW1CLqxYWPt/Pig2yrmt9T7LiRPQ5XrRokdNm3rx5obK1GLMVb6nbWbG5mtUvrTrNZ2Fxq43PQuKFIV7ch89+6f5lxTdZMbd6wXcrnsqKM9d07gEd73u8Ov0M1rBhQ6eNXgjauh/pGFEr7tz6HonK9VBYxNOnfeK1rQXfrW373BOqVat2wrKIOxZaz04W3Z9btmzptLHqND02fvnll04bq4/pccfqqz7PU4noczy1AQAAAEBEMaEDAAAAgIhiQgcAAAAAEcWEDgAAAAAiqsAXFteBfj4JBHzppBhWoLROLpGSkuK00UHoVhtrAdYlS5aEytbCljpw2Eq4ooNRfRbMFnGDRq1jqwM2C2sQuOaTRMFKAqPrrGNpLU6p+5KVcEUvYGkFnFuJLXw+X/c5K3nOpZdeGipbC8LqhYM///xzp41O5iPiHicrUN6qK+p0P7SOQYkSJU56OyLu2FS+fHmnjU6KogPARexkCHqRZysRjz7nVlIJn+vJordlXas+x62o0WO2da+pWrWqU6f7gWXVqlWhsg7yF3ETpeTm5jptrGQuesyy+rMeD2vUqOG00XXJycn5fpaIm9zC2m+fpChR4ZPoQj83+SzibbGuTZ10p0OHDk4bfY+0Evz41NWsWdNpoxc/t56tdMIvK9mXNV7pMfxMvK/Fm7hDJycScfum9eyik6BYY7/uh9bzvNWfdf+xnrH1s5KVMEovJG4lQLHmAfr+a+2jTx9jYXEAAAAAOIMxoQMAAACAiGJCBwAAAAARxYQOAAAAACIqoUlR4qWDsK0AYCvgWf+dFdSpA4WtIF2d7CInJ8dpYwXc6qBzK2BUB7hbQfA6wNv6fCtwOZ6kKD6BllFJnGL1CR1Iq4Ppj/d3OpBV9wkRkbS0tFBZJ7MRcQPFd+zY4bSxgv7r1q0bKl9zzTVOm0suuSRUtvrEF198ESrPnTvXaWP1ZX2dWMkKzsTgcX29+CaL0WOTT8IGfT2LuOOVFXBt9QMdvG2NKT6f73POre/mk0RD11nJOOJNmFUYWPuuj7GVCEcnpBBxr0crOF8nRNJB/iJucgnrnJcrV86p0/3O2m+dEKp+/fpOm4YNG+b7+VYiC91/f/jhB6dNVJOiWP1eX3c+baxrzHom2bp1a6hsPRNVrlw5VLb6pN4n6762Z88ep84nKYrub5s2bXLarFy5MlS2xjjrmOiEHFYf1H/nk/CvMNNjkdWf9HfcvXu302bLli1OXWpqaqhcvXp1p41OSmJ9/oYNG0Jl677m01ctetyzxkadBMX6rr6JWk6X6N4tAQAAAOAMx4QOAAAAACKKCR0AAAAARNQpj6HzWSDTek/VJ4bOei9Xv9+qF/oWcWOhrEVL9SLiIiILFy4Mla13sfW7w9Y75fqddiuGwIrXshYS1ax9iiqfuCR97KxjaR0THR9nxTrqOBa9eLOI+66/FUNnLUh+3nnnhcrZ2dlOG70o78yZM502Oq5z/fr1ThvrGtRxM9bCn/G8hx8lVryYPufxLixu0f3XGvd0X7U+34pd0f3OGnf0tWEtUK7joqy4Busa0/sUb/xllOJUfGIC9ffR8Sci9iLiuh9Y8R06BsSKO9ILzOtxT8QvTtTqqzpeXMcFi4jUrl37hPsjYsdC6XZWbLQ+3tY4b/XfwshnHNXx2tYx2bZtm1O3bNmyUNmKs7P6pabjGK24TuserRd+tsYPHR83f/58p83q1avz3Y4VC67vY1Y/iXLsrsVnHNUxc9b4ofuciBtfafUnff+xtq1j+61Y3qysLKdO97F169Y5bXRf0c/uIu51sX37dqeNRcf1WcdaHzfr3pAIRavXAgAAAMAZhAkdAAAAAEQUEzoAAAAAiCgmdAAAAAAQUQWeMUMH91oBg7qNFUhrBfxq1gJ/1apVC5VbtWrltNGLSFvJLqykKDrgWCdAEXG/rxXMrgNErcUTrYVcdVIU67jpIPCoLr5qsQLHdfCp1cZKMKMDcK2+pIN9rYBzfX6tzzrnnHOcOp0UJTMz02mjF8dcsGCB00YHBFvJC6yAd/19rWByn4QCOti3MCdJ0demFQiv21iJiKy+opNIWAsh68Qh1ufr5DzWgvfW+dRjmLWYvE4iYC0erJOiWOOwlQzBZ0F2n+MfJT5Jm3ySD1n3EX09WskJ9Pm0EuFYf6dZSSL0floJC5o2bRoq16tXz2mj/04nvxBxk7uIuPdIK3GZvg4LKvFAosXb7/XYbo31+p4h4h4X6z7mkyhOnxMrOZPVB1q3bh0qW8knZs+eHSpbCcD0QtTWvcZK9ORDj1fWc6tPkrDCQh8bK4GMvkdY44CV8ET3H2tM0/cja2FvPTade+65Tpuzzz7bqdP3JCspyhdffBEqf/31104b3Z+sPm8dE+u60/S1YfWVRNz/on0HBQAAAIAzGBM6AAAAAIgoJnQAAAAAEFEFHkOn3z223kXWdda70FY8gq6zYkCaN28eKjds2NBpo2MWrPd7rXf99buzVuybfi/YWjRVv89sLfZqxeno93l94uOs93QL47vfPrFXVhtd5xO7I+LGh1nxJzpWyIod0vFM7dq1c9p06dLFqatevXqobMU+rFq1KlRevHix00a/424tkG7FXFl9V9PHKEqLPvuwrg1dZ8XQWcdBX1NWzIKu0/FqIm7MQOPGjZ021jnWsZxWnIw+n1acro5BsWIBrWtMHyerjR6/otSfrLFHn3MrtkL/ndWfrPhVHZfiE29hHXP9+db3sGJg9L1Vj1ciIm3btg2Vdfy6iNsvv/nmG6eNNa75xEvp4x+VmMx442l0GyuGbceOHU6dz3ODrrPuR3pMseK+O3fu7NTpcU4v6CwiMn369FB56dKlThs9flnjp3V96e9mHf+o9iURv+cb636knx2seDErBlc/m+oFykVEVqxYESpb/Un3n5YtWzptrLFJf54VQ6fHFKuNjpnzfS7Wx8Q6RrrP+TwzxNPnotNLAQAAAAAhTOgAAAAAIKKY0AEAAABARDGhAwAAAICIKvCkKJoVqB1vsgUdPF61alWnjV7Y0kqcooMhraQoVhCn/nyfxaitgEmdeMBaDNMKUNVBlFYQpw4eL4wJUCw+fcAniYW1HSsIXCd7sBIa6IU3rb6sFw2/6KKLnDZ6EXERN0h53rx5Thu9OKYV2KuDhq2FqK1+qvuJT4KdwrxouGb1A33+rGvMh5WMQF/n1oLc+vOtc1W/fv1Q2Vp0Wi/aKuIu1mstkqr7ipVAwKdf+ARvW4k+fBbvLax9zCeRgtVGX+f63me1EXGPu5UcQCc70otDW3XWWGAl5dL9sE2bNk6bRo0ahcrWdTF37txQefLkyU6b+fPnO3U6AZWV2Ekf78Lad3z4JEjQ14vVJ6y/0+fFSu6lx4/169cff2f/o0WLFk6dldhC90GdMEPETUJnLWitk2hUqlQp330Uca8v615vPadFhU+/t8YdfRysxHA+if+sheL1s5N1H9HP5tYi4tZ1r5Oi+CQetK4Layz0Yd1bNf1sYT1r+Dy75odf6AAAAAAgopjQAQAAAEBEMaEDAAAAgIhKaAydzzuf1ru7+t1v6/1S6/1WvRBurVq1nDZ6sUnrfWm9aOXChQudNlacin6f2CcGxPpu1rvvmhWPoN9Dtt77to53VOnjm8j3oPU71tY7+zrGqGbNmk4bHR9nxctZMZI6bmTatGlOGx3bacXo6O9vvfNu9VP9Hrj1Hn6U+5JPXIFPLJi1HWtM0cfT6k86lsRaiFnHBVvn3Irv1TEvVlyW7s8+8Ta+C1H7tInSQuKadax84pX18dy1a5fTZtOmTU6djgW34uP0eFSjRg2njR57rLgjHQcsInLBBReEyk2aNHHa6PM5e/Zsp8348eND5U8++cRpoxcfF3Hvmz4Li1ttotrnrL6kj4l1jfnE6uj4cRE3rs56/sjKygqVO3Xq5LRp3ry5U6f7/NatW502+l5j3TN1PLF17/eJFbP6hD5GVl+KcoymTy4Lq19Yx1g/Y1jxcTou18pl0aFDh1BZjzki9jOXjs9LSUlx2uix0PoeOvbOumdadfq4WfcG63gXBH6hAwAAAICIYkIHAAAAABHFhA4AAAAAIooJHQAAAABEVEKTosQbJKr/zmdBVBE3iYAVMKmDaa0EAt98802o/N133zltrKBkHXxp7aMOhrSCe31YwZh6n6wA4KgGgVt0P7GCT3UQuG+SFJ8+qIPArUVT27dvHyrrxD0iIkuWLHHqPv3001BZLyIu4gYp64Q/In79y0qe47OAtE9filKguL5erOtHX79WG2ts0AuJW0kFdFB/lSpVnDY6mNxKzqST5Yi4iQes86KvH2sfNeu7WgHfRa2vaNb302OPtVC7TsigA/pF7PuPTopSuXJlp41e7Nsa+7Zt2xYqWwvVN2vWzKlr0KBBqGwl29CJnayEJ3phcb0/x9u2Ho+tPueT1CiqfBK8+CaT80nek5ycHCpbizzre12XLl2cNlbyi8WLF4fKVhIcPc763Met+5pPnfX9tSiPVRYrgY6+pqz7QbyLdtevXz9Utp6dunXrFiq3bdvWaWMledP7ZLXRz2FWkjK9kLrVxqK/r/X9fRL6JULRHQEBAAAAoIhjQgcAAAAAEcWEDgAAAAAiigkdAAAAAERUQpOiWHQwoE9wqU9Qo4ibpKJWrVr5bmv9+vVOm507d+a7j1bweGpqaqhsBWr7rCKv21gJKSw+x7IoBfP6JFqwzoFPGx0kbCUcadiwYajcokULp43uJ5s2bXLazJkzx6n77LPPQuUNGzY4bXRiACsIXgd4+yS6EHH7iXWso9yXfPbduu58EghYCYt8rmGdNMNKxKNZSSS2bt3q1OmAbmtM1efYCgL3ueasAHvNOv4+5yRKSZ30uGIlRdGsY2AlidDJvKykKE2bNg2VrSRhu3fvDpWtPpeZmenU6WQuCxYscNpMnTo1VP7666/z/fxy5co5bazjppN0+CRFiUrfsZ4J4knUYfUlnzHNop+3rL6kk/BYCVBWr17t1M2aNStUXrVqldNG9zerT+jxyve76mNrHWufNlGi+5i+nkTchGo+iUNE3PuflZitbt26obJ+lhJxxx3r+cZKCqbHxh07djhtdEI5azu6z8WbAMznGdSSiPGKX+gAAAAAIKKY0AEAAABARDGhAwAAAICIKvAYOh/63VHrfWnrvVy9sLf1zquOR7De19aLu1qLB1vvHPsszKvf6/ZZkNZifbeoxAgkik+cl89iq1adjuXQCzqLuPFxPgv3Wos+f/XVV06dfu/b6m86ZtNnsVXrGFn9u6jzuVas46LrrOvQit3Q7aw4Mx3XZsV76PgAK77KitP0iQfQ41e8i8kXtXjLeOnj4LN4r9Xn9KLwIu59q1KlSk4bHVOuxwsRd1yxPn/NmjVO3YoVK0JlKw5YLxq+ffv2fD/fGsOsmDJ93Kw+F2/syukWb3yWvsasRbR9xnrr8/WzlRUfp5/JrHud7jcibt+x+olPDJser3xjEfXf+YxV8cY5FlbWtaKvRauN9Yyrj4P1fKXj8XTeChGRtWvXhso//vij08bqK/PmzQuVrT6n48x1LK+Iff1o1ncrTM/h/EIHAAAAABHFhA4AAAAAIooJHQAAAABEFBM6AAAAAIioAk+KogNOrSBdHYxoBSfqhQFF3OBtq41eCNFa6FJvx1o80UpSodtZyVx0wKgVaKrbWAG4JCdw+Xw3K4jVJ0GFlVBAB4HrxBMi7oKV1gLhVv/SQec+C39ai0Vr1vXms9hqUe43x+Pzna1AeKuP6aQCPgtrW8Hcuj9Zi5ivW7fOqbOSp2h6nLH2UY8pvv0inv5TmILLE8Hn+1j3uvXr1zt1OpGDNa5Uq1YtVLYWDdfJCazFg3Nycpw6/XlWIh6dEMrqA9a45iOqi4Ynik8CMJ8xxvo7K+FcxYoVQ2WdEEzEvY8tXbrUabNo0SKnTvcv6/P1OGv1G59nS6vOJ+GK7m9RToBisfqTfn61nlWt86Cfp6zzqZ9VdLIvEXeMs56vrPuaHi+teYC+b/pcFxafvmI5VeMVv9ABAAAAQEQxoQMAAACAiGJCBwAAAAARVSgWFtfvpVoxRlasgX7HVi8QLuIuIGgt2mp9nma9A6v3O1ELNvu+b3umxRH48IkriHfhWr2oZrzvalepUsWp0++v++635rOgtG9cHfyOixVroOPqrNgDHeNkLeytY5Vyc3OdNtYiqT6L7up9LGpxIqebT6yqdV+zzqc+71bcZDz3A2sfrfFB9yerr+jPt/o8sboFx3exdR3zVK5cOaeNHpuseG19r7EWgrZifvW2rHHPp7/l9zciftegJcpjoc844HPd+fYnK4Zc07G61nO47j9W39Ex5SLuc5h1j9R9w/puVm6FRNHHu6Ce3fmFDgAAAAAiigkdAAAAAEQUEzoAAAAAiCgmdAAAAAAQUac8KYpPkKoV3GoFqeqAcmvbOnDXSg5gLcCqWYGfels+SVFYNPz0s/qXToxjLWCpg3StBTR9AsWtRAg62NjnOvFZSNX6rrD5XE8+iWmsdtb1q/uKFSiuz59PcigRN8mOFfCt98kKeEfBsu5rPvc/n3uNTxvrnPuMPb7JVFD46HOnk32JuIt/r1ixwmmzatWqUNkah6wkFvqeGO9zE+Ln8zwZ77OqT6Inn0SEPsmZROx+p+nvEm9/KkyLiFu4SgAAAAAgopjQAQAAAEBEMaEDAAAAgIgqFAuL63d3rXdnfWINfGJgrFgSHW9SGBEv50cfJ6vfWDED+r1va3HfjRs3/sS9Oz6fd7N9Yk3pJ/GLN07V5++suIJ4xi9LvIvQ49TzWWDWGrN8rv14FGSMLWPR6Wc9S/mMTXpx5u3bt8f1+VYfSFS/8LnXw1+8sV8+i3Zr8fYLn3Ns3ft87oc+ce+FHXd9AAAAAIgoJnQAAAAAEFFM6AAAAAAgopjQAQAAAEBEJQVELgMAAABAJPELHQAAAABEFBM6AAAAAIgoJnQAAAAAEFFM6AAAAAAgopjQAQAAAEBEMaEDAAAAgIhiQgcAAAAAEcWEDgAAAAAiigkdAAAAAETU/wNMFkKF/q5L5AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 900x320 with 12 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# viz: original vs PCA reconstruction for a handful of digits\n",
    "fig, axes = plt.subplots(2, 6, figsize=(9, 3.2))\n",
    "for j in range(6):\n",
    "    axes[0, j].imshow(Xc[j].reshape(28, 28), cmap=\"gray\"); axes[0, j].axis(\"off\")\n",
    "    axes[1, j].imshow(Xhat_pca[j].reshape(28, 28), cmap=\"gray\"); axes[1, j].axis(\"off\")\n",
    "axes[0, 0].set_ylabel(\"orig\", rotation=0, ha=\"right\"); axes[1, 0].set_ylabel(\"PCA-32\", rotation=0, ha=\"right\")\n",
    "fig.suptitle(\"top row: originals · bottom row: 32-dim PCA reconstructions\")\n",
    "plt.tight_layout(); plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed9a772c",
   "metadata": {},
   "source": [
    "> **Interpretation.** Recognizable digits, slightly blurred. The blur is the information the 32-dim bottleneck dropped. A wider bottleneck blurs less; an unconstrained one would copy the input perfectly and learn nothing. The bottleneck width *is* the regularizer.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "775d8097",
   "metadata": {},
   "source": [
    "### Exercise 18.1 — Reconstruct through a linear bottleneck\n",
    "`Difficulty 2/5 · ~10 min`\n",
    "\n",
    "Given a centered data matrix and a projection matrix `V` whose columns are orthonormal axes, write `linear_ae_mse(Xc, mu, V)`: encode by projecting onto `V`, decode by projecting back and adding the mean, and return the mean squared reconstruction error. This is the PCA autoencoder, parameterized so you can hand it any bottleneck.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f2ebeb53",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:31.237273Z",
     "iopub.status.busy": "2026-06-10T19:50:31.237195Z",
     "iopub.status.idle": "2026-06-10T19:50:31.242488Z",
     "shell.execute_reply": "2026-06-10T19:50:31.242115Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ -- ] 18.1 toy (drop one axis): not attempted yet — fill in the TODO above, then re-run.\n",
      "[ -- ] 18.1 matches PCA: not attempted yet — fill in the TODO above, then re-run.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def linear_ae_mse(X, mu, V):\n",
    "    \"\"\"X: (N, d) raw data. mu: (1, d) mean. V: (d, k) orthonormal axes.\n",
    "    Return float mean-squared reconstruction error of encode-then-decode.\"\"\"\n",
    "    Xz = X - mu\n",
    "    # TODO 1: z = project the centered data onto V          (encode)  -> (N, k)\n",
    "    z = None\n",
    "    # TODO 2: x_hat = project z back and add the mean        (decode)  -> (N, d)\n",
    "    x_hat = None\n",
    "    attempted(z, x_hat)\n",
    "    return float(((x_hat - X) ** 2).mean())\n",
    "\n",
    "# self-checks (run this cell): a hand value, then agreement with the PCA numbers above.\n",
    "def _toy_ae():\n",
    "    # 1D bottleneck keeps the x-axis of a 2-point set: y=+-1 is dropped (error 1 each),\n",
    "    # x is perfect (error 0). MSE averages over ALL 4 elements: (0+1+0+1)/4 = 0.5.\n",
    "    Xt = np.array([[3.0, 1.0], [-3.0, -1.0]]); mut = np.zeros((1, 2)); Vt1 = np.array([[1.0], [0.0]])\n",
    "    got = linear_ae_mse(Xt, mut, Vt1)\n",
    "    assert abs(got - 0.5) < 1e-9, \\\n",
    "        f\"dropping y=+-1 over 4 elements gives MSE (0+1+0+1)/4 = 0.5, got {got}\"\n",
    "\n",
    "def _matches_pca():\n",
    "    got = linear_ae_mse(Xc, mu, Vk)\n",
    "    assert abs(got - pca_mse) < 1e-6, \\\n",
    "        f\"your linear AE MSE {got:.5f} should match the PCA reconstruction {pca_mse:.5f}\"\n",
    "\n",
    "check(\"18.1 toy (drop one axis)\", _toy_ae)\n",
    "check(\"18.1 matches PCA\", _matches_pca)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "325cef7d",
   "metadata": {},
   "source": [
    "<details><summary>Hint 1 (conceptual)</summary>Encoding is one matrix multiply (centered data times `V`); decoding is the transpose multiply plus the mean back. No loops.</details>\n",
    "\n",
    "<details><summary>Hint 2 (pseudocode)</summary>\n",
    "\n",
    "```python\n",
    "z = Xz @ V            # (N, d) @ (d, k) -> (N, k)\n",
    "x_hat = z @ V.T + mu  # (N, k) @ (k, d) -> (N, d), then add mean\n",
    "```\n",
    "</details>\n",
    "\n",
    "<details><summary>Help — \"shapes (N,k) and (d,k) not aligned\"</summary>You projected back with `V` instead of `V.T`. Decode multiplies `z` by `V` transposed: `z @ V.T`.</details>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "bdcdc341",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:31.243555Z",
     "iopub.status.busy": "2026-06-10T19:50:31.243485Z",
     "iopub.status.idle": "2026-06-10T19:50:31.257343Z",
     "shell.execute_reply": "2026-06-10T19:50:31.256917Z"
    },
    "collapsed": true,
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ ok ] 18.1 toy (drop one axis)\n",
      "[ ok ] 18.1 matches PCA\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#@title Solution { display-mode: \"form\" }\n",
    "# solution: redefines linear_ae_mse; the checks below re-verify the reference.\n",
    "def linear_ae_mse(X, mu, V):\n",
    "    Xz = X - mu\n",
    "    z = Xz @ V              # encode: project onto the k axes\n",
    "    x_hat = z @ V.T + mu    # decode: project back, restore the mean\n",
    "    return float(((x_hat - X) ** 2).mean())\n",
    "\n",
    "check(\"18.1 toy (drop one axis)\", _toy_ae, required=True)\n",
    "check(\"18.1 matches PCA\", _matches_pca, required=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "096636f3",
   "metadata": {},
   "source": [
    "> **Interpretation.** Your from-scratch linear autoencoder reproduces the PCA reconstruction error to within floating-point noise. PCA and a linear autoencoder are the same computation. The next cell trains a *nonlinear* one and beats this number.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c55265e",
   "metadata": {},
   "source": [
    "### A torch autoencoder, trained\n",
    "\n",
    "Now the nonlinear version: ReLU layers in the encoder and decoder, a sigmoid on the output (pixels live in `[0, 1]`), MSE reconstruction loss. We use the four-comment training-loop skeleton you will see in every Tier-2 notebook: forward, backward, update, track stats. We print the parameter count after init (a house habit) and a `randn` shape smoke test before training (catches wiring bugs in one second, not after an epoch).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "39f571c6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:31.258235Z",
     "iopub.status.busy": "2026-06-10T19:50:31.258151Z",
     "iopub.status.idle": "2026-06-10T19:50:31.264172Z",
     "shell.execute_reply": "2026-06-10T19:50:31.263842Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Autoencoder params: 419,120\n",
      "smoke test ok: (5, 784) round-trip\n"
     ]
    }
   ],
   "source": [
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "class Autoencoder(nn.Module):\n",
    "    def __init__(self, d_in=784, d_h=256, d_latent=K_LATENT):\n",
    "        super().__init__()\n",
    "        self.encoder = nn.Sequential(nn.Linear(d_in, d_h), nn.ReLU(), nn.Linear(d_h, d_latent))\n",
    "        self.decoder = nn.Sequential(nn.Linear(d_latent, d_h), nn.ReLU(),\n",
    "                                     nn.Linear(d_h, d_in), nn.Sigmoid())\n",
    "    def encode(self, x): return self.encoder(x)\n",
    "    def forward(self, x): return self.decoder(self.encoder(x))\n",
    "\n",
    "torch.manual_seed(SEED)\n",
    "ae = Autoencoder().to(device)\n",
    "print(f\"Autoencoder params: {n_params(ae):,}\")\n",
    "# shape smoke test BEFORE training: feed random data, confirm the round-trip shape.\n",
    "_probe = ae(torch.randn(5, 784))          # (5, 784) -> (5, 784)\n",
    "check_shape(_probe, (5, 784))\n",
    "print(f\"smoke test ok: {tuple(_probe.shape)} round-trip\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d3759504",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:31.264953Z",
     "iopub.status.busy": "2026-06-10T19:50:31.264880Z",
     "iopub.status.idle": "2026-06-10T19:50:31.722400Z",
     "shell.execute_reply": "2026-06-10T19:50:31.722018Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "trained autoencoder MSE: 0.0282  (PCA-32 was 0.0172)\n"
     ]
    }
   ],
   "source": [
    "# Train the autoencoder. Four-comment loop: forward / backward / update / track stats.\n",
    "torch.manual_seed(SEED)\n",
    "ae = Autoencoder().to(device)\n",
    "opt = torch.optim.Adam(ae.parameters(), lr=1e-3)\n",
    "Xtr = X_img.to(device)\n",
    "ae_log = []\n",
    "for ep in range(AE_EPOCHS):\n",
    "    perm = torch.randperm(Xtr.size(0))     # reshuffle each epoch\n",
    "    ep_loss = 0.0\n",
    "    for i in range(0, Xtr.size(0), 128):\n",
    "        xb = Xtr[perm[i:i + 128]]\n",
    "        recon = ae(xb)                       # forward\n",
    "        loss = F.mse_loss(recon, xb)\n",
    "        opt.zero_grad(); loss.backward()     # backward\n",
    "        opt.step()                           # update\n",
    "        ep_loss += loss.item() * xb.size(0)  # track stats\n",
    "    ae_log.append(ep_loss / Xtr.size(0))\n",
    "with torch.no_grad():\n",
    "    ae_mse = F.mse_loss(ae(Xtr), Xtr).item()\n",
    "print(f\"trained autoencoder MSE: {ae_mse:.4f}  (PCA-{K_LATENT} was {pca_mse:.4f})\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4f07e92",
   "metadata": {},
   "source": [
    "> **Interpretation.** The nonlinear autoencoder reaches a reconstruction MSE in the neighborhood of PCA's, and with enough epochs it dips below, because ReLU layers can bend the latent manifold in ways a linear projection cannot. The two are the same idea; the nonlinearity is the only difference, and it buys a little sharpness. (Under `FAST` the single epoch lands above PCA; that is the budget, not a bug.)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22c16ba7",
   "metadata": {},
   "source": [
    "### Denoising: the same net, a corrupted input\n",
    "\n",
    "A denoising autoencoder is the identical architecture trained with one change: corrupt the input, ask the network to reconstruct the *clean* target. The loss becomes $\\|\\mathbf{x}-f_\\theta(g_\\phi(\\tilde{\\mathbf{x}}))\\|^2$ where $\\tilde{\\mathbf{x}}$ is $\\mathbf{x}$ plus noise. To repair a corrupted image the network has to learn the joint structure of the pixels, not copy values across the bottleneck. Hold this thought: predicting the clean signal from a noised input is, almost exactly, what a diffusion model does in Part 4.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "5f673594",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:31.723390Z",
     "iopub.status.busy": "2026-06-10T19:50:31.723294Z",
     "iopub.status.idle": "2026-06-10T19:50:32.364324Z",
     "shell.execute_reply": "2026-06-10T19:50:32.363949Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "noisy passthrough MSE: 0.1155  ->  after denoising: 0.0390\n"
     ]
    }
   ],
   "source": [
    "# Train a denoising autoencoder: input = x + noise (clamped), target = clean x.\n",
    "torch.manual_seed(SEED)\n",
    "dae = Autoencoder().to(device)\n",
    "opt = torch.optim.Adam(dae.parameters(), lr=1e-3)\n",
    "NOISE_STD = 0.5                              # corruption strength; 0.5 is heavy enough that raw passthrough is genuinely bad\n",
    "for ep in range(AE_EPOCHS):\n",
    "    perm = torch.randperm(Xtr.size(0))\n",
    "    for i in range(0, Xtr.size(0), 128):\n",
    "        xb = Xtr[perm[i:i + 128]]\n",
    "        x_noisy = (xb + NOISE_STD * torch.randn_like(xb)).clamp(0, 1)  # corrupt\n",
    "        recon = dae(x_noisy)                 # forward on corrupted input\n",
    "        loss = F.mse_loss(recon, xb)         # target is the CLEAN image\n",
    "        opt.zero_grad(); loss.backward(); opt.step()\n",
    "# Evaluate on held-back-style noisy inputs: does denoising beat passing the noise through?\n",
    "torch.manual_seed(SEED + 10)                 # +10 sampling offset, deterministic eval noise\n",
    "with torch.no_grad():\n",
    "    x_noisy = (Xtr + NOISE_STD * torch.randn_like(Xtr)).clamp(0, 1)\n",
    "    denoised_mse = F.mse_loss(dae(x_noisy), Xtr).item()\n",
    "    passthrough_mse = F.mse_loss(x_noisy, Xtr).item()\n",
    "print(f\"noisy passthrough MSE: {passthrough_mse:.4f}  ->  after denoising: {denoised_mse:.4f}\")\n",
    "msg = \"the denoiser must beat doing nothing; if not, training failed or noise is too strong\"\n",
    "assert denoised_mse < passthrough_mse, msg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "4e34f77d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:32.365411Z",
     "iopub.status.busy": "2026-06-10T19:50:32.365312Z",
     "iopub.status.idle": "2026-06-10T19:50:32.423090Z",
     "shell.execute_reply": "2026-06-10T19:50:32.422723Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAekAAAHqCAYAAAAgWrY5AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAO99JREFUeJzt3We4VdW59vEHqSIQivQOgqKoNAUEIzbAYFCPgnoUy9EokoOKFY+XJWJQg6CxJKhRUYMGsMTEigQ1FopIRECUJh0EpYOKCu+XN+/Ju597xDH33HszNvx/H+9rzbnmXnuuNVgX935GmV27du0yAACQnH129wUAAACNRRoAgESxSAMAkCgWaQAAEsUiDQBAolikAQBIFIs0AACJYpEGACBRLNIAACSqXOwDq1Wr5rLu3bu77NVXX5XHt2jRwmWLFy+OfXppxIgRLps8ebLLTj75ZJf98pe/zPXcyjXXXCPzI4880mX9+/ePOudBBx0k808//dRlDz/8sMsuueQSl9WpU0eeU+Xlyvlb5KOPPpLHK0U50K5MmTJFdq5/ql+/vstWr16d65zLly93WaNGjVyW9+e59957XXbllVfKx1500UUua9asWdTz3HTTTTJfs2aNy+rVq+ey/fff32WdO3eW53zyySddVqtWrR+7RDMz22+//WS+bds2l+W5L6+44gqX3XfffYU+X1Fo166dyzZu3OiyJUuWuEz9fszMvvzyS5f9+te/dtnIkSNdtn79ennOhg0bumzlypXysQX16NFD5hMnTnRZhQoVXDZw4ECXjR49Ouq5zczOO+88l61bt85loTVQibkP+SYNAECiWKQBAEgUizQAAIlikQYAIFFlYreqVCWXnj17uuyUU06Rx5966qkue+CBB1x2xx13uKxq1arynFu2bHGZKlqpklVeJ510ksuyFAb+8Ic/uGzZsmUuu+2227JdWAHDhg1zWagIVLNmTZeFCiCxHnzwQZcNGjSoUOdS96AqzGzfvl0ev3DhQpft3LmzUNfyT+rtE3udqtxipguA7733nsuKo/xYUp566imZ/+pXv3LZ0KFDXXbxxRe77KyzzpLn/NOf/uSyPMUx9fsdPHiwy1q3bi2PV8XC3/zmN1HPfcstt8hcvW55jRs3zmVnnnmmyy688EKXVapUSZ7z97//fdRz33jjjS7r1KmTfOykSZNcpgpd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",
      "text/plain": [
       "<Figure size 500x500 with 9 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# viz: corrupted input -> denoised output -> clean target, three digits\n",
    "with torch.no_grad():\n",
    "    sample = Xtr[:3]\n",
    "    noisy = (sample + NOISE_STD * torch.randn_like(sample)).clamp(0, 1)\n",
    "    clean_hat = dae(noisy)\n",
    "fig, axes = plt.subplots(3, 3, figsize=(5, 5))\n",
    "for j in range(3):\n",
    "    axes[0, j].imshow(noisy[j].cpu().reshape(28, 28), cmap=\"gray\"); axes[0, j].axis(\"off\")\n",
    "    axes[1, j].imshow(clean_hat[j].cpu().reshape(28, 28), cmap=\"gray\"); axes[1, j].axis(\"off\")\n",
    "    axes[2, j].imshow(sample[j].cpu().reshape(28, 28), cmap=\"gray\"); axes[2, j].axis(\"off\")\n",
    "for r, lab in enumerate([\"noisy in\", \"denoised\", \"clean\"]):\n",
    "    axes[r, 0].set_ylabel(lab, rotation=0, ha=\"right\")\n",
    "plt.tight_layout(); plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a6b2911",
   "metadata": {},
   "source": [
    "> **Interpretation.** The middle row is cleaner than the top row: the network used the learned pixel structure to fill in what the noise destroyed. That \"predict the clean signal underneath the noise\" objective is the conceptual seed of diffusion.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16e6f4be",
   "metadata": {},
   "source": [
    "### A vanilla autoencoder is not a generative model\n",
    "\n",
    "Here is the claim from the chapter prose, made into a test. If the latent space had a usable probability structure, decoding a *random* latent (drawn from a unit Gaussian) would give something digit-like. It does not. We measure it: the reconstruction error of decoded random latents is far worse than the error on real encoded latents. The latent space has structure only where real data landed; everywhere else is empty.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "bd4041d7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:32.424173Z",
     "iopub.status.busy": "2026-06-10T19:50:32.424089Z",
     "iopub.status.idle": "2026-06-10T19:50:32.450180Z",
     "shell.execute_reply": "2026-06-10T19:50:32.449797Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "decoded-real nearest-real distance: 4.51\n",
      "decoded-RANDOM nearest-real distance: 7.49  (larger = less digit-like)\n",
      "[ ok ] random latents decode to junk: the plain AE latent space has no prior. The VAE fixes this.\n"
     ]
    }
   ],
   "source": [
    "# Falsification: decode random latents vs decode real-encoded latents.\n",
    "torch.manual_seed(SEED + 10)                 # +10 offset for sampling (does not perturb training)\n",
    "with torch.no_grad():\n",
    "    z_real = ae.encode(Xtr)                  # latents the encoder actually produces\n",
    "    z_rand = torch.randn_like(z_real)        # latents drawn from a unit Gaussian prior\n",
    "    # \"error\" = distance from each decoded image to the nearest real image (a crude realism proxy)\n",
    "    dec_real = ae.decoder(z_real)\n",
    "    dec_rand = ae.decoder(z_rand)\n",
    "    err_real = (dec_real - Xtr).pow(2).mean().item()\n",
    "    # nearest-real distance for random decodes, on a small reference set\n",
    "    ref = Xtr[:500]\n",
    "    d_rand = torch.cdist(dec_rand[:200], ref).min(dim=1).values.mean().item()\n",
    "    d_real = torch.cdist(dec_real[:200], ref).min(dim=1).values.mean().item()\n",
    "print(f\"decoded-real nearest-real distance: {d_real:.2f}\")\n",
    "print(f\"decoded-RANDOM nearest-real distance: {d_rand:.2f}  (larger = less digit-like)\")\n",
    "assert d_rand > d_real, \"random latents should decode to less-realistic images than real latents\"\n",
    "print(\"[ ok ] random latents decode to junk: the plain AE latent space has no prior. The VAE fixes this.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5fcaff61",
   "metadata": {},
   "source": [
    "> **Key takeaways**\n",
    "> - PCA *is* a linear autoencoder; a nonlinear one generalizes it and reconstructs a little sharper.\n",
    "> - The bottleneck width is the regularizer; an unconstrained bottleneck learns the identity and is useless.\n",
    "> - A denoising autoencoder predicts the clean signal from a corrupted input. Remember this for diffusion.\n",
    "> - A vanilla autoencoder is **not** generative: its latent space has no prior, so random latents decode to garbage. The VAE prior is the fix.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0263efa8",
   "metadata": {},
   "source": [
    "## Part 2 — The VAE building blocks\n",
    "\n",
    "> **Objectives.**\n",
    "> - Write the closed-form KL divergence between a diagonal Gaussian and the unit Gaussian, and verify it against a Monte-Carlo estimate.\n",
    "> - Implement the reparameterization trick and confirm the sampled latent has the mean and variance the math predicts, and that gradients flow through it.\n",
    "> - Understand why the KL term is the difference between an autoencoder and a generative model.\n",
    "\n",
    "A VAE turns the encoder into a *distribution* over latents: $q_\\phi(\\mathbf{z}\\mid\\mathbf{x})=\\mathcal{N}(\\mathbf{z};\\boldsymbol\\mu_\\phi(\\mathbf{x}),\\boldsymbol\\sigma_\\phi^2(\\mathbf{x})\\mathbf{I})$. The training objective is the evidence lower bound,\n",
    "\n",
    "$$\\mathcal{L}_\\text{VAE}=\\underbrace{\\mathbb{E}_{q_\\phi}[\\log p_\\theta(\\mathbf{x}\\mid\\mathbf{z})]}_\\text{reconstruction}-\\underbrace{D_\\text{KL}\\!\\left(q_\\phi(\\mathbf{z}\\mid\\mathbf{x})\\,\\|\\,p(\\mathbf{z})\\right)}_\\text{pull toward the prior}.$$\n",
    "\n",
    "The reconstruction term is the autoencoder you already have. The new piece is the KL term, which pulls the encoder distribution toward the prior $p(\\mathbf{z})=\\mathcal{N}(\\mathbf{0},\\mathbf{I})$. That pull is what fills the latent space, so that random latents decode to something. We build the two new pieces, the KL and the sampling, in isolation, since they are where people get confused.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d1bf03b",
   "metadata": {},
   "source": [
    "### The closed-form KL, checked against Monte Carlo\n",
    "\n",
    "The KL between a diagonal Gaussian $\\mathcal{N}(\\boldsymbol\\mu,\\boldsymbol\\sigma^2\\mathbf{I})$ and $\\mathcal{N}(\\mathbf{0},\\mathbf{I})$ has a closed form, summed over dimensions:\n",
    "\n",
    "$$D_\\text{KL}=-\\tfrac12\\sum_i\\left(1+\\log\\sigma_i^2-\\mu_i^2-\\sigma_i^2\\right).$$\n",
    "\n",
    "This is one of the most copy-pasted formulas in the field. We will write it, then sanity-check it against a brute-force Monte-Carlo estimate of the same KL, which needs no formula at all (just sample and average a log-density ratio). If they disagree, the formula is wrong.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "817be6cc",
   "metadata": {},
   "source": [
    "### Exercise 18.2 — The diagonal-Gaussian KL term\n",
    "`Difficulty 2/5 · ~10 min`\n",
    "\n",
    "Implement `kl_unit_gaussian(mu, logvar)` returning the KL of $\\mathcal{N}(\\mu,\\exp(\\text{logvar}))$ from the unit Gaussian, summed over the latent dimension and meaned over the batch. The encoder outputs `logvar` (log of the variance) rather than the variance directly, because log-variance is unconstrained and numerically friendlier. Two hand anchors: at $\\mu=0,\\sigma=1$ the KL is exactly 0; at $\\mu=1,\\sigma=1$ it is $0.5$ per dimension.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "9f8581f8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:32.451229Z",
     "iopub.status.busy": "2026-06-10T19:50:32.451144Z",
     "iopub.status.idle": "2026-06-10T19:50:32.458814Z",
     "shell.execute_reply": "2026-06-10T19:50:32.458427Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ -- ] 18.2 KL=0 at the prior: not attempted yet — fill in the TODO above, then re-run.\n",
      "[ -- ] 18.2 KL=0.5/dim hand value: not attempted yet — fill in the TODO above, then re-run.\n",
      "[ -- ] 18.2 closed-form vs Monte Carlo: not attempted yet — fill in the TODO above, then re-run.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def kl_unit_gaussian(mu, logvar):\n",
    "    \"\"\"mu, logvar: (B, k) tensors. Return scalar: KL to N(0,I), summed over k, meaned over B.\"\"\"\n",
    "    # TODO 1: per-element KL contribution is -0.5 * (1 + logvar - mu^2 - exp(logvar))\n",
    "    per_elem = None\n",
    "    attempted(per_elem)\n",
    "    # TODO 2: sum over the latent dim (k), then mean over the batch (B)\n",
    "    return per_elem.sum(dim=1).mean()\n",
    "\n",
    "# self-checks (run this cell): two hand values, then agreement with a Monte-Carlo estimate.\n",
    "def _kl_zero():\n",
    "    val = kl_unit_gaussian(torch.zeros(1, 5), torch.zeros(1, 5)).item()\n",
    "    assert abs(val) < 1e-6, f\"KL of the unit Gaussian from itself must be 0, got {val:.4g}\"\n",
    "\n",
    "def _kl_half_per_dim():\n",
    "    # mu=1, sigma=1 (logvar=0): KL = -0.5*(1+0-1-1) = 0.5 per dim; 5 dims -> 2.5\n",
    "    val = kl_unit_gaussian(torch.ones(1, 5), torch.zeros(1, 5)).item()\n",
    "    assert abs(val - 2.5) < 1e-5, f\"mu=1,sigma=1 gives 0.5/dim => 2.5 for 5 dims, got {val:.4g}\"\n",
    "\n",
    "def _kl_vs_montecarlo():\n",
    "    torch.manual_seed(SEED)\n",
    "    mu = torch.tensor([[0.7, -1.3]]); logvar = torch.tensor([[0.2, -0.5]])\n",
    "    std = torch.exp(0.5 * logvar)\n",
    "    z = mu + std * torch.randn(200_000, 2)                      # sample q\n",
    "    log_q = (-0.5 * (((z - mu) / std) ** 2) - torch.log(std) - 0.5 * np.log(2 * np.pi)).sum(1)\n",
    "    log_p = (-0.5 * z ** 2 - 0.5 * np.log(2 * np.pi)).sum(1)    # log N(0,I)\n",
    "    mc = (log_q - log_p).mean().item()                          # E_q[log q - log p] = KL\n",
    "    closed = kl_unit_gaussian(mu, logvar).item()\n",
    "    assert abs(mc - closed) < 0.05, f\"closed-form KL {closed:.4f} disagrees with MC estimate {mc:.4f}\"\n",
    "\n",
    "check(\"18.2 KL=0 at the prior\", _kl_zero)\n",
    "check(\"18.2 KL=0.5/dim hand value\", _kl_half_per_dim)\n",
    "check(\"18.2 closed-form vs Monte Carlo\", _kl_vs_montecarlo)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1dffc69",
   "metadata": {},
   "source": [
    "<details><summary>Hint 1 (conceptual)</summary>Translate the formula symbol for symbol. `logvar` is $\\log\\sigma^2$, so $\\sigma^2=\\exp(\\text{logvar})$ and $\\log\\sigma^2=\\text{logvar}$ directly.</details>\n",
    "\n",
    "<details><summary>Hint 2 (pseudocode)</summary>\n",
    "\n",
    "```python\n",
    "per_elem = -0.5 * (1 + logvar - mu.pow(2) - logvar.exp())\n",
    "return per_elem.sum(dim=1).mean()\n",
    "```\n",
    "</details>\n",
    "\n",
    "<details><summary>Help — \"my KL is negative\"</summary>KL is always >= 0. A negative value means a sign slip: the formula is $-\\tfrac12(1+\\log\\sigma^2-\\mu^2-\\sigma^2)$. Check you negated the whole parenthesis, and that you used `logvar.exp()` for $\\sigma^2$, not `logvar`.</details>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "134b3988",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:32.459793Z",
     "iopub.status.busy": "2026-06-10T19:50:32.459721Z",
     "iopub.status.idle": "2026-06-10T19:50:32.465137Z",
     "shell.execute_reply": "2026-06-10T19:50:32.464867Z"
    },
    "collapsed": true,
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ ok ] 18.2 KL=0 at the prior\n",
      "[ ok ] 18.2 KL=0.5/dim hand value\n",
      "[ ok ] 18.2 closed-form vs Monte Carlo\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#@title Solution { display-mode: \"form\" }\n",
    "# solution: redefines kl_unit_gaussian; the checks below re-verify the reference.\n",
    "def kl_unit_gaussian(mu, logvar):\n",
    "    per_elem = -0.5 * (1 + logvar - mu.pow(2) - logvar.exp())\n",
    "    return per_elem.sum(dim=1).mean()\n",
    "\n",
    "check(\"18.2 KL=0 at the prior\", _kl_zero, required=True)\n",
    "check(\"18.2 KL=0.5/dim hand value\", _kl_half_per_dim, required=True)\n",
    "check(\"18.2 closed-form vs Monte Carlo\", _kl_vs_montecarlo, required=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3701369f",
   "metadata": {},
   "source": [
    "> **Interpretation.** The closed form matches the brute-force estimate to two decimals. You never need the Monte-Carlo version in practice (the closed form is exact and differentiable), but proving they agree is how you trust the one-liner you will paste into every VAE.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d34dfe14",
   "metadata": {},
   "source": [
    "### Exercise 18.3 — The reparameterization trick\n",
    "`Difficulty 3/5 · ~12 min`\n",
    "\n",
    "Sampling $\\mathbf{z}\\sim\\mathcal{N}(\\mu,\\sigma^2)$ is not differentiable in $\\mu,\\sigma$, so gradients cannot flow back to the encoder. The trick: write $\\mathbf{z}=\\mu+\\sigma\\odot\\boldsymbol\\epsilon$ with $\\boldsymbol\\epsilon\\sim\\mathcal{N}(\\mathbf{0},\\mathbf{I})$. The randomness now lives in $\\boldsymbol\\epsilon$, which has no parameters, and $\\mathbf{z}$ is a differentiable function of $\\mu$ and $\\sigma$. Implement `reparameterize(mu, logvar)`. The checks confirm (a) the sample's empirical mean and std match $\\mu$ and $\\sigma$, and (b) gradients actually reach `mu`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "f5bd745b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:32.466213Z",
     "iopub.status.busy": "2026-06-10T19:50:32.466127Z",
     "iopub.status.idle": "2026-06-10T19:50:32.471196Z",
     "shell.execute_reply": "2026-06-10T19:50:32.470835Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ -- ] 18.3 sample moments match mu,sigma: not attempted yet — fill in the TODO above, then re-run.\n",
      "[ -- ] 18.3 gradient flows to mu: not attempted yet — fill in the TODO above, then re-run.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def reparameterize(mu, logvar):\n",
    "    \"\"\"mu, logvar: (B, k). Return a sample z = mu + sigma * eps, eps ~ N(0,I), same shape.\"\"\"\n",
    "    # TODO 1: std = exp(0.5 * logvar)            (logvar is log-variance, so 0.5*logvar is log-std)\n",
    "    std = None\n",
    "    # TODO 2: eps = standard normal noise, same shape as std, via torch.randn_like\n",
    "    eps = None\n",
    "    attempted(std, eps)\n",
    "    # TODO 3: return mu + std * eps\n",
    "    return mu + std * eps\n",
    "\n",
    "def _reparam_moments():\n",
    "    torch.manual_seed(SEED)\n",
    "    mu = torch.tensor([2.0, -1.0]).expand(100_000, 2)\n",
    "    logvar = torch.tensor([0.0, np.log(0.25)]).expand(100_000, 2)  # std = [1.0, 0.5]\n",
    "    z = reparameterize(mu, logvar)\n",
    "    assert (z.mean(0) - mu[0]).abs().max() < 0.03, f\"empirical mean {z.mean(0)} should match mu {mu[0]}\"\n",
    "    assert (z.std(0) - torch.exp(0.5 * logvar[0])).abs().max() < 0.03, \"empirical std should match sigma\"\n",
    "\n",
    "def _reparam_grad():\n",
    "    mu = torch.zeros(4, 3, requires_grad=True)\n",
    "    logvar = torch.zeros(4, 3, requires_grad=True)\n",
    "    z = reparameterize(mu, logvar)\n",
    "    z.sum().backward()\n",
    "    assert mu.grad is not None and mu.grad.abs().sum() > 0, \\\n",
    "        \"no gradient reached mu. Did you sample with torch.randn_like (which has no grad) for eps?\"\n",
    "\n",
    "check(\"18.3 sample moments match mu,sigma\", _reparam_moments)\n",
    "check(\"18.3 gradient flows to mu\", _reparam_grad)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "016df3bb",
   "metadata": {},
   "source": [
    "<details><summary>Hint 1 (conceptual)</summary>`logvar` is $\\log\\sigma^2$. Half of it is $\\log\\sigma$, so `std = (0.5*logvar).exp()`. The noise `eps` must be the same shape as `std`; `torch.randn_like(std)` does that.</details>\n",
    "\n",
    "<details><summary>Hint 2 (pseudocode)</summary>\n",
    "\n",
    "```python\n",
    "std = torch.exp(0.5 * logvar)\n",
    "eps = torch.randn_like(std)\n",
    "return mu + std * eps\n",
    "```\n",
    "</details>\n",
    "\n",
    "<details><summary>Help — \"gradient flows to mu fails\"</summary>The point of the trick is that `eps` is parameter-free. If you wrote `eps = torch.randn(...).requires_grad_()` or sampled `z` with `torch.normal(mu, std)` directly, the graph is broken. Use `torch.randn_like(std)` and combine arithmetically.</details>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "736d05a3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:32.471908Z",
     "iopub.status.busy": "2026-06-10T19:50:32.471844Z",
     "iopub.status.idle": "2026-06-10T19:50:32.478858Z",
     "shell.execute_reply": "2026-06-10T19:50:32.478445Z"
    },
    "collapsed": true,
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ ok ] 18.3 sample moments match mu,sigma\n",
      "[ ok ] 18.3 gradient flows to mu\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#@title Solution { display-mode: \"form\" }\n",
    "# solution: redefines reparameterize; the checks below re-verify the reference.\n",
    "def reparameterize(mu, logvar):\n",
    "    std = torch.exp(0.5 * logvar)\n",
    "    eps = torch.randn_like(std)\n",
    "    return mu + std * eps\n",
    "\n",
    "check(\"18.3 sample moments match mu,sigma\", _reparam_moments, required=True)\n",
    "check(\"18.3 gradient flows to mu\", _reparam_grad, required=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e73e400",
   "metadata": {},
   "source": [
    "> **Key takeaways**\n",
    "> - The VAE adds a KL term that pulls the encoder distribution toward a unit-Gaussian prior; that pull is what makes the latent space samplable.\n",
    "> - The closed-form diagonal-Gaussian KL is exact and matches a Monte-Carlo estimate; memorize the one-liner.\n",
    "> - The reparameterization trick moves the randomness into a parameter-free $\\epsilon$, so gradients flow through $\\mu$ and $\\sigma$. Every neural generative model with a sampled latent uses some version of it, including the diffusion forward sample in Part 4.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4a57604",
   "metadata": {},
   "source": [
    "## Part 3 — A GAN on a known distribution\n",
    "\n",
    "> **Objectives.**\n",
    "> - Build a 2D mixture of three Gaussians as the target. Because we *know* the modes, \"did the GAN recover the distribution?\" becomes an assertion, not an eyeball test.\n",
    "> - Train a small generator and discriminator and confirm the generator covers most of the modes (2-3 of 3 on this CPU budget).\n",
    "> - Deliberately induce **mode collapse**, diagnose it from samples with a mode-coverage counter, then fix it.\n",
    "\n",
    "GAN images on MNIST are pretty but un-assertable. On a known 2D target, mode coverage is a number. A generator $G:\\mathbb{R}^k\\to\\mathbb{R}^2$ maps noise to fake points; a discriminator $D:\\mathbb{R}^2\\to\\mathbb{R}$ scores real vs fake. They play\n",
    "\n",
    "$$\\min_\\theta\\max_\\phi\\;\\mathbb{E}_{\\mathbf{x}\\sim p_\\text{data}}[\\log D(\\mathbf{x})]+\\mathbb{E}_{\\mathbf{z}}[\\log(1-D(G(\\mathbf{z})))].$$\n",
    "\n",
    "At the ideal equilibrium $p_G=p_\\text{data}$ and $D=\\tfrac12$ everywhere. Whether SGD finds it is the whole drama of this part.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b170ec3f",
   "metadata": {},
   "source": [
    "### The target: three Gaussians we placed ourselves\n",
    "\n",
    "Three tight Gaussian blobs at known centers. We will keep the centers around so we can ask, after training, \"how many of these three did the generator's samples land near?\" That mode-coverage count is the assertion.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "99ea2ded",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:32.479632Z",
     "iopub.status.busy": "2026-06-10T19:50:32.479562Z",
     "iopub.status.idle": "2026-06-10T19:50:32.541998Z",
     "shell.execute_reply": "2026-06-10T19:50:32.541483Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "MODES = np.array([[0.0, 2.0], [-2.0, -1.5], [2.0, -1.5]])  # three known centers\n",
    "MODE_STD = 0.25                                              # blob spread\n",
    "\n",
    "def sample_real(n, gen):\n",
    "    '''Draw n points from the 3-Gaussian mixture using numpy generator `gen`.'''\n",
    "    which = gen.integers(0, len(MODES), size=n)               # pick a mode per point\n",
    "    return (MODES[which] + MODE_STD * gen.standard_normal((n, 2))).astype(np.float32)\n",
    "\n",
    "real_pts = sample_real(2000, rng)\n",
    "fig, ax = plt.subplots(figsize=(4, 4))\n",
    "scatter2d(ax, real_pts, \"target: 3-Gaussian mixture\")\n",
    "ax.scatter(MODES[:, 0], MODES[:, 1], c=\"#FF6A00\", marker=\"x\", s=80, label=\"mode centers\"); ax.legend()\n",
    "plt.tight_layout(); plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d40348d",
   "metadata": {},
   "source": [
    "> **Interpretation.** Three clean modes. A generator that covers the distribution will spray points into all three orange crosses. One that mode-collapses will pile into one or two.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6a5c9df",
   "metadata": {},
   "source": [
    "### The diagnostic: a mode-coverage counter\n",
    "\n",
    "Before training anything, build the metric. A generated sample \"covers\" a mode if at least a few of its points land within a radius of that mode's center. Counting covered modes is how we will detect collapse, since the loss curves will not tell us.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "9886e953",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:32.542781Z",
     "iopub.status.busy": "2026-06-10T19:50:32.542710Z",
     "iopub.status.idle": "2026-06-10T19:50:32.545838Z",
     "shell.execute_reply": "2026-06-10T19:50:32.545496Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ ok ] mode_coverage reads 3 on real data, 1 on a collapsed blob\n"
     ]
    }
   ],
   "source": [
    "def mode_coverage(samples, modes=MODES, radius=0.75, min_hits=10):\n",
    "    '''How many of the known modes have >= min_hits generated points within `radius`?'''\n",
    "    samples = np.asarray(samples)\n",
    "    covered = 0\n",
    "    for c in modes:\n",
    "        d = np.linalg.norm(samples - c, axis=1)\n",
    "        if (d < radius).sum() >= min_hits:\n",
    "            covered += 1\n",
    "    return covered\n",
    "\n",
    "# sanity: the real data covers all 3; a degenerate blob at one mode covers 1.\n",
    "assert mode_coverage(real_pts) == 3, \"real data should cover all three modes\"\n",
    "degenerate = MODES[0] + 0.1 * rng.standard_normal((500, 2))\n",
    "assert mode_coverage(degenerate) == 1, \"a single-mode blob should register coverage 1\"\n",
    "print(\"[ ok ] mode_coverage reads 3 on real data, 1 on a collapsed blob\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de962c0d",
   "metadata": {},
   "source": [
    "> **Interpretation.** The metric is calibrated: 3 on real data, 1 on a degenerate single-blob generator. Now it can adjudicate the GAN.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6e1cd1bd",
   "metadata": {},
   "source": [
    "### Train the GAN\n",
    "\n",
    "Small MLPs for both networks, the non-saturating generator loss (maximize $\\log D(G(z))$ rather than minimize $\\log(1-D(G(z)))$, which gives better early gradients), and binary-cross-entropy-with-logits so we never call sigmoid by hand. We detach the fake samples in the discriminator step so its gradient does not flow into the generator. We re-seed at the top so a mid-notebook re-run reproduces.\n",
    "\n",
    "> **Runtime:** this cell takes ~30-60s on CPU at full fidelity (a few thousand alternating updates).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "290ee91d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:32.546484Z",
     "iopub.status.busy": "2026-06-10T19:50:32.546418Z",
     "iopub.status.idle": "2026-06-10T19:50:34.935441Z",
     "shell.execute_reply": "2026-06-10T19:50:34.934945Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GAN sizes: G 4,866 params · D 4,417 params\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step | lossD | lossG\n",
      "    0 | 1.405 | 0.575\n",
      "  400 | 1.083 | 1.129\n",
      "  800 | 0.886 | 1.436\n",
      " 1200 | 0.927 | 1.289\n",
      " 1600 | 1.023 | 1.333\n",
      " 1999 | 1.034 | 1.127\n"
     ]
    }
   ],
   "source": [
    "def make_gan(d_z=8, d_h=64):\n",
    "    G = nn.Sequential(nn.Linear(d_z, d_h), nn.ReLU(), nn.Linear(d_h, d_h), nn.ReLU(), nn.Linear(d_h, 2))\n",
    "    D = nn.Sequential(nn.Linear(2, d_h), nn.LeakyReLU(0.2), nn.Linear(d_h, d_h), nn.LeakyReLU(0.2), nn.Linear(d_h, 1))\n",
    "    return G, D\n",
    "\n",
    "def train_gan(steps, d_z=8, bs=256, lr=1e-3, seed=SEED):\n",
    "    torch.manual_seed(seed); g = np.random.default_rng(seed)\n",
    "    G, D = make_gan(d_z)\n",
    "    optG = torch.optim.Adam(G.parameters(), lr=lr, betas=(0.5, 0.9))\n",
    "    optD = torch.optim.Adam(D.parameters(), lr=lr, betas=(0.5, 0.9))\n",
    "    bce = nn.functional.binary_cross_entropy_with_logits\n",
    "    log = []\n",
    "    for step in range(steps):\n",
    "        x_real = torch.from_numpy(sample_real(bs, g))\n",
    "        z = torch.randn(bs, d_z)\n",
    "        x_fake = G(z)\n",
    "        # --- D step: real -> 1, fake -> 0 (detach so G is not updated here) ---\n",
    "        d_real = D(x_real); d_fake = D(x_fake.detach())\n",
    "        lossD = bce(d_real, torch.ones_like(d_real)) + bce(d_fake, torch.zeros_like(d_fake))\n",
    "        optD.zero_grad(); lossD.backward(); optD.step()\n",
    "        # --- G step: non-saturating, push D(G(z)) toward 1 ---\n",
    "        d_fake = D(G(z))\n",
    "        lossG = bce(d_fake, torch.ones_like(d_fake))\n",
    "        optG.zero_grad(); lossG.backward(); optG.step()\n",
    "        if step % max(1, steps // 5) == 0 or step == steps - 1:\n",
    "            log.append((step, lossD.item(), lossG.item()))\n",
    "    return G, D, log\n",
    "\n",
    "print(f\"GAN sizes: G {n_params(make_gan()[0]):,} params · D {n_params(make_gan()[1]):,} params\")\n",
    "G, D, gan_log = train_gan(GAN_STEPS)\n",
    "print(\"step | lossD | lossG\")\n",
    "for s, ld, lg in gan_log:\n",
    "    print(f\"{s:5d} | {ld:.3f} | {lg:.3f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "91b43a5e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:34.936264Z",
     "iopub.status.busy": "2026-06-10T19:50:34.936187Z",
     "iopub.status.idle": "2026-06-10T19:50:35.044817Z",
     "shell.execute_reply": "2026-06-10T19:50:35.044342Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGYCAYAAADfm3QmAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkFdJREFUeJzt3Xd81eX5//HXyTnJyZ4ECCNsARdUcCAWRUDcWltnW1y1tV/sT7usdvnV2mrHt3vZpdVq3ZM6QEWpe4GiCLKTsLJ3cpJzzuf3x3VOcpKchISQ5CR5Px+PPELOvJN8yOe+Pvd1XbfLcRwHERERERGRXogb6AGIiIiIiMjgp8BCRERERER6TYGFiIiIiIj0mgILERERERHpNQUWIiIiIiLSawosRERERESk1xRYiIiIiIhIrymwEBERERGRXlNgISIiIiIivabAQmSA/O///i8ul2ughyEiMqycdNJJnHTSSf3+vrW1tYwcOZJ77723399bDp5nn32W1NRUSkpKBnooMUmBhYiISAzavn0711xzDYcccgjJyckkJydz6KGHsnz5cj744INOn3f99dfjcrm48MILo96/Y8cOXC4XLpeLRx55pMP94YsepaWlB+17EfjNb35DWloaF1100UAPZcgpLCzk5ptv5phjjiErK4sRI0Zw0kkn8fzzz3f6nIqKCjweDw8++CAAP/nJTzjuuOPIzc0lMTGRadOmcd1113UIIE499VSmTp3Kbbfd1qff02ClwEJERCTGrFixgsMPP5x77rmHxYsX86tf/Yrf/OY3nHbaaTz99NPMnj2bnTt3dnie4zj8+9//ZuLEiTz11FPU1NR0+T633HILjuP01bchIc3NzfzmN7/hS1/6Em63e6CHM+Q88cQT/PSnP2Xq1Knceuut/OAHP6CmpoYlS5Zw5513Rn3Oc889h8vl4pRTTgHg3XffZfbs2Xzve9/jD3/4A+eccw533nknxx9/PHV1dW2e+5WvfIU77rhjv/+/hiPPQA9AZDCoq6sjJSVloIchIsPA1q1bueiii5gwYQIvvPACeXl5be7/6U9/yh//+Efi4jpeG3zppZcoKirixRdfZOnSpTz66KNceumlUd9n9uzZrFu3jscee4zzzjuvT74XMStWrKCkpIQLLrhgoIfSK42NjSQkJEQ99gbSwoULKSgoYMSIES23XX311cyePZsf/vCHXH755R2e8/TTTzN//nwyMzMBoq7ezZs3j8997nM89dRTbVaaPvvZz/K1r32Nhx56iCuuuOLgf0ODWGwdGSIxIJwGsGHDBi655BKysrI44YQTAPjXv/7FnDlzSEpKIjs7m4suuojCwsI2z//vf//L+eefT35+Pl6vl/Hjx/P1r3+dhoaGgfh2RGSQ+dnPfkZdXR133nlnh6ACwOPx8P/+3/9j/PjxHe679957OfTQQ1m4cCGLFy/uMp//oosu4pBDDjngVYuamhquu+46Jk6ciNfrZeTIkSxZsoT33nuv5THd/Xt42WWXkZqaSkFBAWeeeSapqamMHTuWP/zhDwCsX7+ek08+mZSUFCZMmMB9993X5vl33XUXLpeLNWvW8JWvfIWcnBzS09NZtmwZFRUV+/1efD4fN910E1OnTm0Z5/XXX4/P52vzuFWrVnHCCSeQmZlJamoq06dP57vf/e5+X//xxx9n4sSJTJkypcN9Gzdu5IILLiA3N5ekpCSmT5/O9773vTaPWbt2Laeddhrp6emkpqayaNEi3njjjZb733nnHVwuF//85z87vH74yvyKFStabtu1axdXXHEFo0aNwuv1cthhh/GPf/yjzfNeeuklXC4X999/P9///vcZO3YsycnJVFdXU15ezre+9S2OOOIIUlNTSU9P57TTTuP999/v8P47d+7k7LPPJiUlhZEjR/L1r3+9ZUwvvfRSm8e++eabnHrqqWRkZJCcnMyJJ57Iq6++ut+f72GHHdYmqADwer2cfvrpFBUVdVhZCAaDPPvss5xxxhldvu7EiRMBqKysbHP7yJEjOfLII3niiSf2O7bhRisWIp04//zzmTZtGj/5yU9wHIcf//jH/OAHP+CCCy7gS1/6EiUlJfzud79jwYIFrF27tuWqx0MPPUR9fT1f/epXycnJ4a233uJ3v/sdRUVFPPTQQwP7TYlIzFuxYgVTp07l2GOP7dHzfD4fjzzyCN/85jcBuPjii7n88svZu3cvo0eP7vB4t9vN97//fZYtW3ZAqxZXX301Dz/8MNdccw2HHnooZWVlvPLKK3z88cccddRRQM/+HgYCAU477TQWLFjAz372M+69916uueYaUlJS+N73vsfnP/95zjvvPP785z+zbNky5s2bx6RJk9q8xjXXXENmZib/+7//y6ZNm/jTn/7Ezp07WybJ0QSDQc4++2xeeeUVvvzlLzNz5kzWr1/Pr371Kz755BMef/xxAD766CPOPPNMjjzySG655Ra8Xi9btmzp1sT3tddea/mZRPrggw/49Kc/TXx8PF/+8peZOHEiW7du5amnnuLHP/5xy/t++tOfJj09neuvv574+HjuuOMOTjrpJF5++WWOPfZY5s6dy+TJk3nwwQc7rFA98MADZGVlsXTpUgD27dvHcccdh8vl4pprriE3N5dnnnmGK6+8kurqaq677ro2z//Rj35EQkIC3/rWt/D5fCQkJLBhwwYef/xxzj//fCZNmsS+ffu44447OPHEE9mwYQNjxowBbLX/5JNPZs+ePVx77bWMHj2a++67j9WrV3f4Wbz44oucdtppzJkzh5tuuom4uDjuvPNOTj75ZP773/9yzDHH7Pfn3N7evXtb6pMivf3225SUlHD66ae3ud1xHMrKyvD7/WzevJkbbrgBt9sdtdh/zpw5LceGRHBEpI2bbrrJAZyLL7645bYdO3Y4brfb+fGPf9zmsevXr3c8Hk+b2+vr6zu85m233ea4XC5n586dHd5HRCSsqqrKAZxzzz23w30VFRVOSUlJy0f7vzUPP/ywAzibN292HMdxqqurncTEROdXv/pVm8dt377dAZyf//znjt/vd6ZNm+bMmjXLCQaDjuO0/m0qKSnpcqwZGRnO8uXLu3xMd/8eXnrppQ7g/OQnP2nz/SYlJTkul8u5//77W27fuHGjAzg33XRTy2133nmnAzhz5sxxmpqaWm7/2c9+5gDOE0880XLbiSee6Jx44oktX99zzz1OXFyc89///rfNOP/85z87gPPqq686juM4v/rVr7r1c2mvubnZcblczje/+c0O9y1YsMBJS0tr87NwHKfld+E4jnPuuec6CQkJztatW1tu2717t5OWluYsWLCg5bYbb7zRiY+Pd8rLy1tu8/l8TmZmpnPFFVe03HbllVc6eXl5TmlpaZv3vOiii5yMjIyW39nq1asdwJk8eXKH32NjY6MTCATa3LZ9+3bH6/U6t9xyS8tt//d//+cAzuOPP95yW0NDgzNjxgwHcFavXt3y/U6bNs1ZunRpm++9vr7emTRpkrNkyZIOP7v92bx5s5OYmOh88Ytf7HDfD37wA2fChAkdbt+zZ48DtHyMGzfOeeCBB6K+/k9+8hMHcPbt29fjsQ1lSoUS6cTVV1/d8u9HH32UYDDIBRdcQGlpacvH6NGjmTZtWpurL0lJSS3/rquro7S0lOOPPx7HcVi7dm2/fg8iMrhUV1cDkJqa2uG+k046idzc3JaPcJpQ2L333svcuXOZOnUqAGlpaZxxxhldpkOFVy3ef//9Hl99zczM5M0332T37t2dPqanfw+/9KUvtXn96dOnk5KS0qY2Yfr06WRmZrJt27YOz//yl79MfHx8y9df/epX8Xg8PP30052O8aGHHmLmzJnMmDGjzd/3k08+GaDl73t4VfqJJ54gGAx2+nrtlZeX4zgOWVlZbW4vKSlhzZo1XHHFFeTn57e5L7y6EggEWLlyJeeeey6TJ09uuT8vL49LLrmEV155peWYufDCC2lububRRx9tedzKlSuprKxs6RDmOA6PPPIIZ511Fo7jtPl+ly5dSlVVVZtUNoBLL720ze8RLM0oXGcRCAQoKytrSQ2LfP6zzz7L2LFjOfvss1tuS0xM5KqrrmrzeuvWrWPz5s1ccskllJWVtYyprq6ORYsWsWbNmh79zOvr6zn//PNJSkri9ttv73D/008/HTUNKjs7m1WrVvHUU09xyy23MGLECGpra6O+R/j3qe5pbSkVSqQTkUvsmzdvxnEcpk2bFvWxkSeygoICfvjDH/Lkk092yO2tqqrqm8GKyJCQlpYGEHUyE+5Cs2/fPr7whS+0ua+yspKnn36aa665hi1btrTcPn/+fB555BE++eQTDjnkkKjv+fnPf54f/ehH3HLLLZx77rndHuvPfvYzLr30UsaPH8+cOXM4/fTTWbZsWZsJcE/+HiYmJpKbm9vmtoyMDMaNG9chjSkjIyNq7UT7v9Gpqank5eWxY8eOTr+PzZs38/HHH3d477Di4mLAJu5/+9vf+NKXvsQNN9zAokWLOO+88/jc5z7XrWJmp10dSzgwOvzwwzt9TklJCfX19UyfPr3DfTNnziQYDFJYWMhhhx3GrFmzmDFjBg888ABXXnklYGlQI0aMaAmSSkpKqKys5C9/+Qt/+ctfuvx+w9qnm4Glj/3mN7/hj3/8I9u3bycQCLTcl5OT0/LvnTt3MmXKlA6/v3DwG7Z582aAThsNgB0v7YOzaAKBABdddBEbNmzgmWeeaUnLCtu7dy/vvfcet9xyS4fnJiQksHjxYgDOPPNMFi1axPz58xk5ciRnnnlmm8eGf5/aj6otBRYinYi8QhMMBnG5XDzzzDNRWwWGry4GAgGWLFlCeXk53/nOd5gxYwYpKSns2rWLyy67rEdXXERk+MnIyCAvL48PP/yww33hmotok+SHHnoIn8/H//3f//F///d/He6/9957ufnmm6O+Z3jV4rLLLutRMeoFF1zApz/9aR577DFWrlzJz3/+c37605/y6KOPctppp/X472FnbVg7u739RP1ABYNBjjjiCH75y19GvT9cJJ+UlMSaNWtYvXo1//nPf3j22Wd54IEHOPnkk1m5cmWn48zOzsblcnWriLy3LrzwQn784x9TWlpKWloaTz75JBdffDEej033wj/zL3zhC51O4o888sg2X7dfrQDb8+EHP/gBV1xxBT/60Y/Izs4mLi6O66677oDOc+Hn/PznP2f27NlRHxNtFS+aq666ihUrVnDvvfe2BFSRnnnmGRITE1m4cOF+X+v4448nLy+Pe++9t0NgEf59ti8aH+4UWIh0w5QpU3Ach0mTJnV61Q+sc8knn3zCP//5T5YtW9Zy+6pVq/pjmCIyBJxxxhn87W9/46233up2weq9997L4Ycfzk033dThvjvuuIP77ruv08ACbKJ56623cvPNN7dJW9mfvLw8/ud//of/+Z//obi4mKOOOoof//jHnHbaaQPy93Dz5s1tJoy1tbXs2bOnQ5FupClTpvD++++zaNGi/V59jouLY9GiRSxatIhf/vKX/OQnP+F73/seq1evbrnS3Z7H42HKlCls3769ze3hlZ1oQWRYbm4uycnJbNq0qcN9GzduJC4urk13sAsvvJCbb76ZRx55hFGjRlFdXd2mTWpubi5paWkEAoFOx9sdDz/8MAsXLuTvf/97m9srKyvbTLQnTJjAhg0bcBynzc82clUNaOmWlZ6e3qtxffvb3+bOO+/k17/+NRdffHHUx/znP/9h4cKFUQOmaBobG6NmG2zfvp0RI0Z0utI1XKnGQqQbzjvvPNxuNzfffHOHq2ROqIsEtF5Zi3yM4zj85je/6b/Bisigdv3115OcnMwVV1zBvn37Otzf/m9QYWEha9as4YILLuBzn/tch4/LL7+cLVu28Oabb3b6nuFVi3Xr1vHkk0/ud4yBQKDDZGvkyJGMGTOmpUXrQPw9/Mtf/kJzc3PL13/605/w+/2cdtppnT7nggsuYNeuXfz1r3/tcF9DQ0PL5mjl5eUd7g9fXW/flra9efPm8c4777S5LTc3lwULFvCPf/yDgoKCNveFf2Zut5tTTjmFJ554os1K1b59+7jvvvs44YQTSE9Pb7l95syZHHHEETzwwAM88MAD5OXlsWDBgpb73W43n/3sZ3nkkUeiBjTtd5nujNvt7nAcPvTQQ+zatavNbUuXLmXXrl1tjqnGxsYOP+s5c+YwZcoUfvGLX0RNA+zOuH7+85/zi1/8gu9+97tce+21UR/T3NzMqlWrOtRX1NXVUV9f3+HxjzzyCBUVFcydO7fDfe+++y7z5s3b77iGG61YiHTDlClTuPXWW7nxxhvZsWMH5557LmlpaWzfvp3HHnuML3/5y3zrW99ixowZTJkyhW9961vs2rWL9PT0lj9MIiLdMW3aNO677z4uvvhipk+fzuc//3lmzZqF4zhs376d++67j7i4OMaNGwfAfffdh+M4na40nH766Xg8Hu69994uW9iGay3WrVu33zHW1NQwbtw4Pve5zzFr1ixSU1N5/vnnefvtt1tSsQbi72FTUxOLFi3iggsuYNOmTfzxj3/khBNO6HIV5otf/CIPPvggV199NatXr2b+/PkEAgE2btzIgw8+yHPPPcfcuXO55ZZbWLNmDWeccQYTJkyguLiYP/7xj4wbN65lr6POnHPOOdxzzz0dal1++9vfcsIJJ3DUUUfx5S9/mUmTJrFjxw7+85//tPwebr311pb9M/7nf/4Hj8fDHXfcgc/n42c/+1mH97rwwgv54Q9/SGJiIldeeWWH+o/bb7+d1atXc+yxx3LVVVdx6KGHUl5eznvvvcfzzz8fNYBq78wzz+SWW27h8ssv5/jjj2f9+vXce++9beprwHao/v3vf8/FF1/Mtdde25JWlJiYCLTWJ8TFxfG3v/2N0047jcMOO4zLL7+csWPHsmvXLlavXk16ejpPPfVUp+N57LHHuP7665k2bRozZ87kX//6V5v7lyxZwqhRo1qK3dsHFps3b2bx4sVceOGFzJgxg7i4ON555x3+9a9/MXHixA6BSnFxMR988AHLly/f789q2OnPFlQig0FXrRYfeeQR54QTTnBSUlKclJQUZ8aMGc7y5cudTZs2tTxmw4YNzuLFi53U1FRnxIgRzlVXXeW8//77DuDceeedHd5HRCSaLVu2OF/96ledqVOnOomJiU5SUpIzY8YM5+qrr3bWrVvX8rgjjjjCyc/P7/K1TjrpJGfkyJFOc3Nzm3az7YXbtnb2NzDM5/M53/72t51Zs2Y5aWlpTkpKijNr1iznj3/8Y5vHdffv4aWXXuqkpKR0eJ8TTzzROeywwzrcPmHCBOeMM87oMO6XX37Z+fKXv+xkZWU5qampzuc//3mnrKysw2tGtpt1HMdpampyfvrTnzqHHXaY4/V6naysLGfOnDnOzTff7FRVVTmO4zgvvPCCc8455zhjxoxxEhISnDFjxjgXX3yx88knn3T6c4r8eY0YMcL50Y9+1OG+Dz/80PnMZz7jZGZmOomJic706dOdH/zgB20e89577zlLly51UlNTneTkZGfhwoXOa6+9FvW9Nm/e3PI7fOWVV6I+Zt++fc7y5cud8ePHO/Hx8c7o0aOdRYsWOX/5y19aHhNuN/vQQw91eH5jY6PzzW9+08nLy3OSkpKc+fPnO6+//nrUn+22bducM844w0lKSnJyc3Odb37zm84jjzziAM4bb7zR5rFr1651zjvvPCcnJ8fxer3OhAkTnAsuuMB54YUXon4fYeHzaWcf4ba23/rWt5xDDz20w/NLSkqcL3/5y86MGTOclJQUJyEhwZk2bZpz3XXXRf1/8Kc//clJTk52qquruxzXcORynINU/SQiIiIyAO666y4uv/xy3n777ahpK7HgRz/6EXfeeSebN2/utNB7uPj1r3/N17/+dYqKihg7dmy/ve+hhx7KmWeeGXWlpyc+9alPcdJJJ/GrX/3qII1s6FCNhYiIiEgf+/rXv05tbS3333//QA+lXzU0NLT5urGxkTvuuINp06b1a1DR1NTEhRdeyOWXX96r13n22WfZvHkzN95440Ea2dCiGgsRERGRPpaamtphj4jh4LzzziM/P5/Zs2dTVVXFv/71LzZu3Njlxo19ISEhIWrXtJ469dRTO900TxRYiIiIiEgfWbp0KX/729+49957CQQCHHroodx///0tu4HL0NJvNRa33347N954I9deey2//vWv++MtRURkkNA5QkRk8OuXGou3336bO+64o8NujiIiIjpHiIgMDX2eClVbW8vnP/95/vrXv3Lrrbd2+Vifz9dmk5lgMEh5eTk5OTn73Q1TRES6x3EcampqGDNmTIce9/1N5wgRkdjSm3NEnwcWy5cv54wzzmDx4sX7PWncdttt3HzzzX09JBERwXZsDm+yNlB0jhARiU0Hco7o08Di/vvv57333uPtt9/u1uNvvPFGvvGNb7R8XVVVRX5+PoWFhW22rBcRkQNXXV3N+PHjSUtLG9Bx6BwhIhJ7enOO6LPAorCwkGuvvZZVq1a1bN2+P16vF6/X2+H29PR0nTRERA6ygUwf0jlCRCS2Hcg5os+6Qj3++ON85jOfabO7ZCAQwOVyERcXh8/n2+/Ok9XV1WRkZFBVVaWThojIQRILf1t1jhARiU29+dvaZysWixYtYv369W1uu/zyy5kxYwbf+c53hv129iIiw5nOESIiQ0+fBRZpaWkcfvjhbW5LSUkhJyenw+0iIjK86BwhIjL0DGyfQRERERERGRL6vN1spJdeeqk/305ERAYRnSNERAY3rViIiIiIiEivKbAQEREREZFeU2AhIiIiIiK9psBCRERERER6TYGFiIiIiIj0mgILERERERHpNQUWIiIiIiLSawosRERERESk1xRYiIiIiIhIrymwEBERERGRXlNgISIiIiIivabAQkREREREek2BhYiIiIiI9JoCCxERERER6TUFFiIiIiIi0msKLEREREREpNcUWIiIiIiISK8psBARERERkV5TYCEiIiIiIr2mwEJERERERHpNgYWIiIiIiPSaAgsREREREek1BRYiIiIiItJrCixERERERKTXFFiIiIiIiEivKbAQEREREZFeU2AhIiIiIiK9psBCRERERER6TYGFiIiIiIj0mgILERERERHpNQUWIiIiIiLSawosRERERESk1/o0sPjTn/7EkUceSXp6Ounp6cybN49nnnmmL99SREQGAZ0fRESGnj4NLMaNG8ftt9/Ou+++yzvvvMPJJ5/MOeecw0cffdSXbysiIjFO5wcRkaHH5TiO059vmJ2dzc9//nOuvPLKDvf5fD58Pl/L19XV1YwfP56qqirS09P7c5giIkNWdXU1GRkZMfe3tavzA+gcISLSH3pzjui3GotAIMD9999PXV0d8+bNi/qY2267jYyMjJaP8ePH99fwRERkgHTn/AA6R4iIxLo+X7FYv3498+bNo7GxkdTUVO677z5OP/30qI/V1SgRkb4XKysWPTk/gM4RIiL9oTfnCE8fjanF9OnTWbduHVVVVTz88MNceumlvPzyyxx66KEdHuv1evF6vX09JBERiQE9OT+AzhEiIrGu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IiIi0msKLARQpycRERER6R2lQomIiIiISK8psBARERERkV5TYCEiIiIiIr2mwEJERERERHpNgYWIiIiIiPSaAgsREREREek1BRYiIiIiItJrCixERERERKTXFFiIiIiIiEivKbAQEREREZFeU2AhIiIiIiK9psBCRERERER6TYGFiIiIiIj0mgILERERERHpNQUWIiIiIiLSawosRERERESk1xRYiIiIiIhIrymwEBERERGRXlNgISIiIiIivabAQkREREREek2BhYiIiIiI9FqfBhZnn302+fn5JCYmkpeXxxe/+EV2797dl28pIiKDgM4PIiJDT58GFgsXLuTBBx9k06ZNPPLII2zdupXPfe5zffmWIiIyCOj8ICIy9Lgcx3H6682efPJJzj33XHw+H/Hx8R3u9/l8+Hy+lq+rq6sZP348VVVVpKen99cwRUSGtOrqajIyMmLqb+v+zg+gc4SISH/ozTmi32osysvLuffeezn++OM7PWncdtttZGRktHyMHz++v4YnIiIDpDvnB9A5QkQk1vV5YPGd73yHlJQUcnJyKCgo4Iknnuj0sTfeeCNVVVUtH4WFhX09PBERGSA9OT+AzhEiIrGux4HFDTfcgMvl6vJj48aNLY//9re/zdq1a1m5ciVut5tly5bRWfaV1+slPT29zYeIiAwOfXl+AJ0jRERiXY9rLEpKSigrK+vyMZMnTyYhIaHD7UVFRYwfP57XXnuNefPm7fe9YjEPWERksOurv639eX4AnSNERPpCb/62enr6Zrm5ueTm5vb0aQAEg0GANsV3IiIyNOj8ICIyvPU4sOiuN998k7fffpsTTjiBrKwstm7dyg9+8AOmTJnS7atRIiIy9Oj8ICIyNPVZ8XZycjKPPvooixYtYvr06Vx55ZUceeSRvPzyy3i93r56WxERiXE6P4iIDE19tmJxxBFH8OKLL/bVy4uIyCCl84OIyNDUb/tYiIiIiIjI0KXAQkREREREek2BhYiIiIiI9JoCCxERERER6TUFFiIiIiIi0msKLEREREREpNcUWIiIiIiISK8psBARERERkV5TYCEiIiIiIr2mwEJERERERHpNgYWIiIiIiPSaAgsREREREek1BRYiIiIiItJrCixERERERKTXFFiIiIiIiEivKbAQEREREZFeU2AhIiIiIiK9psBCRERERER6TYGFiIiIiIj0mgILERERERHpNQUWIiIiIiLSawosRERERESk1xRYiIiIiIhIrymwEBERERGRXlNgISIiIiIivabAQkREREREek2BhYiIiIiI9JoCCxERERER6TUFFiIiIiIi0msKLEREREREpNcUWIiIiIiISK8psBARERERkV7rl8DC5/Mxe/ZsXC4X69at64+3FBGRQUDnBxGRoaNfAovrr7+eMWPG9MdbiYjIIKLzg4jI0OHp6zd45plnWLlyJY888gjPPPNMl4/1+Xz4fL6Wr6uqqgCorq7u0zGKiAwn4b+pjuMM6Dh6cn4AnSNERPpDr84RTh/au3evM3bsWOftt992tm/f7gDO2rVrO338TTfd5AD60Ic+9KGPfvjYunVrX54CutTT84Pj6ByhD33oQx/9+XEg5wiX4/TNJSvHcTj99NOZP38+3//+99mxYweTJk1i7dq1zJ49O+pz2l+NqqysZMKECRQUFJCRkdEXwzxoqqurGT9+PIWFhaSnpw/0cLqksfYNjfXgGyzjhME11qqqKvLz86moqCAzM7Pf3/9Azg+gc0R/GCzjBI21r2isfWMwjbU354gep0LdcMMN/PSnP+3yMR9//DErV66kpqaGG2+8sduv7fV68Xq9HW7PyMiI+V9CWHp6usbaBzTWvjFYxjpYxgmDa6xxcQe3zK4vzw+gc0R/GizjBI21r2isfWMwjfVAzhE9Diy++c1vctlll3X5mMmTJ/Piiy/y+uuvdzgJzJ07l89//vP885//7Olbi4hIDNP5QURkeOtxYJGbm0tubu5+H/fb3/6WW2+9teXr3bt3s3TpUh544AGOPfbYnr6tiIjEOJ0fRESGtz7rCpWfn9/m69TUVACmTJnCuHHjuvUaXq+Xm266KerSd6zRWPuGxto3BstYB8s4QWPtiYNxfoCB/z56YrCMdbCMEzTWvqKx9o3hMtY+K95ur7vFeSIiMrzo/CAiMjT0W2AhIiIiIiJDV7/svC0iIiIiIkObAgsREREREek1BRYiIiIiItJrCixERERERKTXBmVg4fP5mD17Ni6Xi3Xr1g30cDo4++yzyc/PJzExkby8PL74xS+ye/fugR5WBzt27ODKK69k0qRJJCUlMWXKFG666SaampoGemhR/fjHP+b4448nOTm5x1vM97U//OEPTJw4kcTERI499ljeeuutgR5SVGvWrOGss85izJgxuFwuHn/88YEeUlS33XYbRx99NGlpaYwcOZJzzz2XTZs2DfSwovrTn/7EkUce2bKb6rx583jmmWcGelj7dfvtt+NyubjuuusGeigHVayfH0DniL6ic0TvDJbzAwyec8RgPT/AgZ8jBmVgcf311zNmzJiBHkanFi5cyIMPPsimTZt45JFH2Lp1K5/73OcGelgdbNy4kWAwyB133MFHH33Er371K/785z/z3e9+d6CHFlVTUxPnn38+X/3qVwd6KG088MADfOMb3+Cmm27ivffeY9asWSxdupTi4uKBHloHdXV1zJo1iz/84Q8DPZQuvfzyyyxfvpw33niDVatW0dzczCmnnEJdXd1AD62DcePGcfvtt/Puu+/yzjvvcPLJJ3POOefw0UcfDfTQOvX2229zxx13cOSRRw70UA66WD8/gM4RfUXniN4ZLOcHGDzniMF4foBeniOcQebpp592ZsyY4Xz00UcO4Kxdu3agh7RfTzzxhONyuZympqaBHsp+/exnP3MmTZo00MPo0p133ulkZGQM9DBaHHPMMc7y5ctbvg4EAs6YMWOc2267bQBHtX+A89hjjw30MLqluLjYAZyXX355oIfSLVlZWc7f/va3gR5GVDU1Nc60adOcVatWOSeeeKJz7bXXDvSQDprBeH5wHJ0jDjadI3pvMJ0fHGdwnSNi+fzgOL0/RwyqFYt9+/Zx1VVXcc8995CcnDzQw+mW8vJy7r33Xo4//nji4+MHejj7VVVVRXZ29kAPY9Boamri3XffZfHixS23xcXFsXjxYl5//fUBHNnQUlVVBRDzx2YgEOD++++nrq6OefPmDfRwolq+fDlnnHFGm2N2KBiM5wfQOWKo0zmifwyGc8RgOD9A788RgyawcByHyy67jKuvvpq5c+cO9HD26zvf+Q4pKSnk5ORQUFDAE088MdBD2q8tW7bwu9/9jq985SsDPZRBo7S0lEAgwKhRo9rcPmrUKPbu3TtAoxpagsEg1113HfPnz+fwww8f6OFEtX79elJTU/F6vVx99dU89thjHHrooQM9rA7uv/9+3nvvPW677baBHspBNdjOD6BzxHChc0Tfi/VzxGA5P8DBOUcMeGBxww034HK5uvzYuHEjv/vd76ipqeHGG2+M6XGGffvb32bt2rWsXLkSt9vNsmXLcPppk/OejhVg165dnHrqqZx//vlcddVV/TLOAx2rDC/Lly/nww8/5P777x/ooXRq+vTprFu3jjfffJOvfvWrXHrppWzYsGGgh9VGYWEh1157Lffeey+JiYkDPZxuGSznh56MNUzniL4bqwwvsX6OGAznBzh45wiX019/yTpRUlJCWVlZl4+ZPHkyF1xwAU899RQul6vl9kAggNvt5vOf/zz//Oc/Y2KcCQkJHW4vKipi/PjxvPbaa/2y/NXTse7evZuTTjqJ4447jrvuuou4uP6LNw/k53rXXXdx3XXXUVlZ2cej27+mpiaSk5N5+OGHOffcc1tuv/TSS6msrIzpq5Aul4vHHnuszbhjzTXXXMMTTzzBmjVrmDRp0kAPp9sWL17MlClTuOOOOwZ6KC0ef/xxPvOZz+B2u1tuCwQCuFwu4uLi8Pl8be6LBYPl/AA6R/QVnSMGxmA4P8DgPEfE4vkBDt45wtOXg+yO3NxccnNz9/u43/72t9x6660tX+/evZulS5fywAMPcOyxx/blEIHujzOaYDAIWBvE/tCTse7atYuFCxcyZ84c7rzzzn49YUDvfq6xICEhgTlz5vDCCy+0/AEOBoO88MILXHPNNQM7uEHMcRy+9rWv8dhjj/HSSy8NmhNGWDAY7Lf/7921aNEi1q9f3+a2yy+/nBkzZvCd73wn5oIKGDznB9A5oq/oHCHRDOZzRCyeH+DgnSMGPLDorvz8/DZfp6amAjBlyhTGjRs3EEOK6s033+Ttt9/mhBNOICsri61bt/KDH/yAKVOmxFyxzq5duzjppJOYMGECv/jFLygpKWm5b/To0QM4sugKCgooLy+noKCAQCDQ0qN+6tSpLcfDQPjGN77BpZdeyty5cznmmGP49a9/TV1dHZdffvmAjakztbW1bNmypeXr7du3s27dOrKzszv8HxtIy5cv57777uOJJ54gLS2tJRc5IyODpKSkAR5dWzfeeCOnnXYa+fn51NTUcN999/HSSy/x3HPPDfTQ2khLS+uQfxzO8Y/FvOSeGCznB9A5oi/pHNE7g+X8AIPnHDFYzg9wEM8RB7dJVf/Zvn17TLYT/OCDD5yFCxc62dnZjtfrdSZOnOhcffXVTlFR0UAPrYM777zTAaJ+xKJLL7006lhXr1490ENzfve73zn5+flOQkKCc8wxxzhvvPHGQA8pqtWrV0f9GV566aUDPbQ2Ojsu77zzzoEeWgdXXHGFM2HCBCchIcHJzc11Fi1a5KxcuXKgh9UtQ63dbFisnh8cR+eIvqRzRO8MlvOD4wyec8RgPj84zoGdIwa8xkJERERERAa/Ae8KJSIiIiIig58CCxERERER6TUFFiIiIiIi0msKLEREREREpNcUWIiIiIiISK8psBARERERkV5TYCEiIiIiIr2mwEJERERERHpNgYWIiIiIiPSaAgsREREREek1BRYiIiIiItJr/x8EL8Tj9yGaggAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "mode coverage: 2/3\n"
     ]
    }
   ],
   "source": [
    "# Sample the trained generator and score mode coverage (the assertion).\n",
    "torch.manual_seed(SEED + 10)                 # +10 sampling offset\n",
    "with torch.no_grad():\n",
    "    g_samples = G(torch.randn(2000, 8)).numpy()\n",
    "cov = mode_coverage(g_samples)\n",
    "fig, ax = plt.subplots(1, 2, figsize=(8, 4))\n",
    "scatter2d(ax[0], real_pts, \"real\")\n",
    "scatter2d(ax[1], g_samples, f\"GAN samples (coverage {cov}/3)\", c=\"#FF6A00\")\n",
    "for a in ax: a.scatter(MODES[:, 0], MODES[:, 1], c=\"k\", marker=\"x\", s=60)\n",
    "plt.tight_layout(); plt.show()\n",
    "print(f\"mode coverage: {cov}/3\")\n",
    "_gm = \"a healthy GAN on this easy target should cover at least 2 of 3 modes\"\n",
    "assert cov >= 2, _gm"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8cce6b7f",
   "metadata": {},
   "source": [
    "> **Interpretation.** The generator's points fall into the real modes, and `mode_coverage` certifies it numerically. Notice the loss table above is nearly flat and uninformative across training. The coverage count, computed from samples, is the signal you trust. (We require >= 2 rather than exactly 3 because a few thousand CPU steps is a tight budget; the full-scale exercise pushes for 3.)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cbfff533",
   "metadata": {},
   "source": [
    "### A deliberate failure: forcing mode collapse\n",
    "\n",
    "Now break it on purpose. Two changes that reliably collapse this GAN: give the discriminator a big head start (train it many steps per generator step) and shrink the generator's noise dimension to 1 so it has little capacity to spread. The discriminator overpowers the generator, the generator finds one mode that momentarily fools it, and it stays there. We watch the coverage drop, then fix it.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "81832bc9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:35.045787Z",
     "iopub.status.busy": "2026-06-10T19:50:35.045712Z",
     "iopub.status.idle": "2026-06-10T19:50:46.330662Z",
     "shell.execute_reply": "2026-06-10T19:50:46.330341Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "collapsed GAN mode coverage: 1/3\n"
     ]
    }
   ],
   "source": [
    "def train_gan_collapsing(steps, d_z=1, d_critic=8, bs=256, lr=2e-4, seed=SEED):\n",
    "    '''Same GAN, rigged to collapse: tiny noise dim + an over-trained discriminator.'''\n",
    "    torch.manual_seed(seed); g = np.random.default_rng(seed)\n",
    "    G, D = make_gan(d_z)\n",
    "    optG = torch.optim.Adam(G.parameters(), lr=lr, betas=(0.5, 0.9))\n",
    "    optD = torch.optim.Adam(D.parameters(), lr=lr * 4, betas=(0.5, 0.9))  # D learns 4x faster too\n",
    "    bce = nn.functional.binary_cross_entropy_with_logits\n",
    "    for step in range(steps):\n",
    "        # over-train D: d_critic discriminator updates per generator update\n",
    "        for _ in range(d_critic):\n",
    "            x_real = torch.from_numpy(sample_real(bs, g))\n",
    "            z = torch.randn(bs, d_z)\n",
    "            d_real = D(x_real); d_fake = D(G(z).detach())\n",
    "            lossD = bce(d_real, torch.ones_like(d_real)) + bce(d_fake, torch.zeros_like(d_fake))\n",
    "            optD.zero_grad(); lossD.backward(); optD.step()\n",
    "        z = torch.randn(bs, d_z)\n",
    "        lossG = bce(D(G(z)), torch.ones_like(D(G(z))))\n",
    "        optG.zero_grad(); lossG.backward(); optG.step()\n",
    "    return G\n",
    "\n",
    "torch.manual_seed(SEED + 10)\n",
    "G_bad = train_gan_collapsing(GAN_STEPS)\n",
    "with torch.no_grad():\n",
    "    bad_samples = G_bad(torch.randn(2000, 1)).numpy()\n",
    "cov_bad = mode_coverage(bad_samples)\n",
    "print(f\"collapsed GAN mode coverage: {cov_bad}/3\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "0e0641e8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:46.331746Z",
     "iopub.status.busy": "2026-06-10T19:50:46.331666Z",
     "iopub.status.idle": "2026-06-10T19:50:46.442512Z",
     "shell.execute_reply": "2026-06-10T19:50:46.442163Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGYCAYAAADfm3QmAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAgJFJREFUeJzt3Xl4k1X6N/BvmjRJ13SFFtpCC1hwARQGZFGobIqA6LiMG8s4LjO474zjqL/RQR1HnXF81RlHFAdXEEEEBaWKICoiICoUaAvd6Z7uSZM87x930iZtuhHSpOn3c125SpMneU7L05xz59z3OSpFURQQERERERF5IMjXDSAiIiIior6PgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUFjEcffRQqlarbx8+dOxc33nijF1vUu44dOwaVSoXXX3/dK6//4IMPYuLEiV55bSLynLv3gJ6+L/qr119/HSqVCseOHfN1U06pP/zhD5g1a5avm0EeaG5uRnJyMv7f//t/vm6KX2BgQf3Szp07sWXLFjzwwAMt9xUVFeG6665Deno6IiIiEBUVhQkTJuCNN96Aoig+bK1/uPPOO7F//35s2LDB100hIurUjz/+iKVLlyI1NRV6vR7h4eEYO3Ys7r//fuTk5HT4vCuvvBIqlcqlb3D2xRdfQKVSQaVSYc+ePe0eX7JkCcLDw7vVxtzcXLz66qv44x//2L0finrku+++wx/+8AeMGzcOwcHB3Qqwf/3rX2Pu3LkAgO3bt2PBggVITk6GXq9HQkICLrzwQuzcudPlOcHBwbj77rvxxBNPoKmpySs/S1/CwIL6pb/97W+YMWMGhg8f3nJfeXk5CgoKcPnll+OZZ57B448/jsTERCxZsgQPPfSQD1vrHxISEnDJJZfgmWee8XVTiIg69J///AfnnHMONm/ejMsuuwwvvPAC/va3v2HKlClYtWoVRo4cCavV2u55NTU1+OijjzB06FC8/fbbXX6g9Oijj3rUzn/84x9ITU1FRkaGR69D7m3atAmvvvoqVCoV0tLSujy+ubkZW7duxcUXXwwAOHz4MIKCgnDLLbfgxRdfxL333ouSkhKcf/75+OSTT1yeu3TpUpSXl+Ott97yys/SpyhEvayurs4rr/vII48o3bmkT5w4oWg0GuXVV1/t1uvOmzdPCQsLUywWi6dN9Krc3FwFgLJy5UqvnWPNmjWKSqVSsrOzvXYOIjo57t4Duvu+6O9WrlypAFByc3M7PW7nzp2KWq1Wzj//fKWmpqbd442Njcqf/vQnt+/nr732mhIcHKxs27ZNAaB88cUX7Y7JzMxUAChjx45VACh79uxxeXzx4sVKWFhYlz+P2WxW4uLilD/96U9dHuvPbDab0tDQ4OtmuFVSUtLStmXLlnX5d/D55593eY3V19crAwcOVObMmdPusXnz5innnXeeR20OBJyxIK9y5Pf+8ssvuOaaaxAdHY2pU6e2PP6///0P48aNQ0hICGJiYvCb3/wG+fn5Lq/x1Vdf4YorrkBKSgp0Oh2Sk5Nx1113obGx8aTa9PHHH8NisWDmzJndOn7o0KFoaGiA2Wzu9DjHz3r48GFcd911MBgMiI+Px8MPPwxFUZCfn49LLrkEkZGRSEhIwN///vd2r1FaWoobbrgBAwcOhF6vx5gxY/DGG2+0O666uhpLliyBwWBAVFQUFi9ejOrqarftOnToEC6//HLExMRAr9dj/Pjx7dKZmpub8dhjj2HEiBHQ6/WIjY3F1KlTsXXrVpfjHL+z9evXd/q7IKLuKywsxA033IBBgwZBp9MhNTUVv//9713ec3JycnDFFVcgJiYGoaGhOPfcc/Hxxx+f1PlWrlyJCy64AAMGDIBOp8Ppp5+Ol156qd1xQ4cOxbx587BlyxaMHTsWer0ep59+Oj744AOX47r7/tGd9yIA+Pnnn3HBBRcgJCQESUlJePzxx2Gz2br1sz322GNQqVRYvXo1IiIi2j2u1+vxl7/8BWq1ut1jq1evxqxZs5CRkYFRo0Zh9erVHZ7ntttuQ3R09EnPWuzYsQPl5eVu+6GmpiY8+uijOO2006DX65GYmIjLLrsM2dnZLcfU19fjnnvuQXJyMnQ6HdLT0/HMM8+4zLKceeaZbmdDbDYbBg8ejMsvv9zlvueffx5nnHEG9Ho9Bg4ciJtvvhlVVVUuz3VcE59++inGjx+PkJAQvPLKKwC6f13ZbDY8+uijGDRoEEJDQ5GRkYFffvkFQ4cOxZIlS1yOra6uxp133tnycw4fPhxPPfVUt66HgQMHIiQkpMvjHD7++GOcfvrpGDp0aIfHhIaGIj4+3m1/O2vWLOzYsQOVlZXdPmcg0vi6AdQ/XHHFFRgxYgT++te/trzxPfHEE3j44Ydx5ZVX4ne/+x3Kysrwwgsv4Pzzz8fevXsRFRUFAHj//ffR0NCA3//+94iNjcV3332HF154AQUFBXj//fd73Javv/4asbGxGDJkiNvHGxsbUV9fj7q6Onz55ZdYuXIlJk2a1O03qKuuugqjRo3Ck08+iY8//hiPP/44YmJi8Morr+CCCy7AU089hdWrV+Pee+/Fr371K5x//vkt550+fTqOHj2KW2+9FampqXj//fexZMkSVFdX44477gAAKIqCSy65BDt27MAtt9yCUaNGYd26dVi8eHG7tvz888+YMmUKBg8ejAcffBBhYWF47733sHDhQqxduxaXXnopAAmKVqxYgd/97neYMGECampq8P333+OHH35wKSw0GAwYNmwYdu7cibvuuqtHv3ciaq+oqAgTJkxAdXU1brrpJowcORKFhYVYs2YNGhoaoNVqceLECUyePBkNDQ24/fbbERsbizfeeAMLFizAmjVrWv6Ou+ull17CGWecgQULFkCj0eCjjz7CH/7wB9hsNixbtszl2CNHjuCqq67CLbfcgsWLF2PlypW44oor8Mknn7S8N3Tn/aO770UlJSXIyMiAxWJpOe7f//53t95/GxoasG3bNkyfPh1JSUk9+p0UFRUhMzOz5YOcq6++Gs899xz+9a9/QavVtjs+MjISd911F/785z/jhx9+wDnnnNOj83399ddQqVQ4++yzXe63Wq2YN28ePv/8c/zmN7/BHXfcgdraWmzduhU//fQThg0bBkVRsGDBAmRmZuKGG27A2LFj8emnn+K+++5DYWEhnnvuOQDSFz366KMoKSlBQkJCyzl27NiBoqIi/OY3v2m57+abb8brr7+OpUuX4vbbb0dubi7+9a9/Ye/evdi5cyeCg4Nbjs3KysLVV1+Nm2++GTfeeCPS09MBdP+6Wr58OZ5++mnMnz8fc+bMwf79+zFnzpx29QkNDQ2YNm0aCgsLcfPNNyMlJQVff/01li9fjuLiYjz//PM9+p13ZdOmTZg3b167+2tqamA2m1FeXo5Vq1bhp59+clsXM27cOCiKgq+//trt6/QbvpwuocDnmIa/+uqrXe4/duyYolarlSeeeMLl/gMHDigajcblfnfTrCtWrFBUKpVy/PjxdufqytSpU5Vx48Z1+PiKFSsUAC23GTNmKHl5eV2+ruP8N910U8t9FotFSUpKUlQqlfLkk0+23F9VVaWEhIQoixcvbrnv+eefVwAo//vf/1ruM5vNyqRJk5Tw8PCWaf0PP/xQAaA8/fTTLuc577zz2qVBzJgxQznrrLOUpqamlvtsNpsyefJkZcSIES33jRkzRrn44ou7/BkVRVFmz56tjBo1qlvHElHnFi1apAQFBSm7d+9u95jNZlMURVHuvPNOBYDy1VdftTxWW1urpKamKkOHDlWsVquiKN1PhXL3njpnzhwlLS3N5b4hQ4YoAJS1a9e23Gc0GpXExETl7LPPbrmvO+8f3X0vcvys3377bct9paWlisFg6DJNZf/+/QoA5c4772z3WEVFhVJWVtZyM5lMLo8/88wzSkhISMv77OHDhxUAyrp161yOc6RCvf/++0p1dbUSHR2tLFiwoOXx7qZCXXfddUpsbGy7+1977TUFgPLss8+2e8xxPTj6gMcff9zl8csvv1xRqVTK0aNHFUVRlKysLAWA8sILL7gc94c//EEJDw9vuQ6++uorBYCyevVql+M++eSTdvc7rolPPvmkXfu6c12VlJQoGo1GWbhwoctxjz76qALApU/8y1/+ooSFhSmHDx92OfbBBx9U1Gp1t/plh65SoXJychQASmZmptufwTEe0Gq1ys0336w0Nja2O66oqEgBoDz11FPdblcgYioU9YpbbrnF5fsPPvgANpsNV155JcrLy1tuCQkJGDFiBDIzM1uOdf6kqr6+HuXl5Zg8eTIURcHevXt73JaKigpER0d3+PjVV1+NrVu34q233sI111wDAD1Ku/rd737X8m+1Wo3x48dDURTccMMNLfdHRUUhPT3dZXWSTZs2ISEhAVdffXXLfcHBwbj99ttbZk8cx2k0Gvz+9793Oc9tt93m0o7Kykps27YNV155JWpra1t+xxUVFZgzZw6OHDmCwsLClvb8/PPPOHLkSJc/X3R0NMrLy7v9+yAi92w2Gz788EPMnz8f48ePb/e4YxWbTZs2YcKECS5ppOHh4bjppptw7Ngx/PLLLz06r/N7qtFoRHl5OaZNm4acnBwYjUaXYwcNGuQyIxIZGYlFixZh7969KCkpAdD1+0dP3os2bdqEc889FxMmTGh5fnx8PK699touf66amhoAcLsqU1paGuLj41tubVOwVq9e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u3f/+te/Rnl5Of71r3912Pa5c+fCarW2O+a5556DSqVqN0C+6qqr8M033+C1115DeXm5SxoUILuNW61W/OUvf2l3TovF0uFS5s66e13NmDEDGo2m3eyAu5/3yiuvxK5du/Dpp5+2e6y6utptncPJ2LRpE8aPH4+BAwe63O8u1aq6uhpr165FcnJyu9SxPXv2QKVSYdKkSaekXX0VZyzIJ4YNG4bHH38cy5cvx7Fjx7Bw4UJEREQgNzcX69atw0033YR7770XI0eOxLBhw3DvvfeisLAQkZGRWLt2rUdTyBdffDE0Gg0+++wz3HTTTS33P/HEE9i5cycuvPBCpKSkoLKyEmvXrsXu3btx2223nZKp+s7cdNNNeOWVV7BkyRLs2bMHQ4cOxZo1a7Bz5048//zzLZ9MzZ8/H1OmTMGDDz6IY8eOtawr725G5cUXX8TUqVNx1lln4cYbb0RaWhpOnDiBXbt2oaCgAPv37wcAnH766Zg+fTrGjRuHmJgYfP/991izZg1uvfVWl9f77LPPWpa7JSLP/fWvf8WWLVswbdo03HTTTRg1ahSKi4vx/vvvY8eOHYiKisKDDz6It99+GxdddBFuv/12xMTE4I033kBubi7Wrl3bri6rM7Nnz4ZWq8X8+fNx8803o66uDv/5z38wYMAAt4P+0047DTfccAN2796NgQMH4rXXXsOJEydcBozdef/o7nvR/fffjzfffBMXXngh7rjjjpblZh0zul0577zz8K9//Qu33XYbRowYgWuvvRYjR46E2WzG4cOHsXr1ami12pagaPXq1VCr1S27Lbe1YMECPPTQQ3jnnXdw9913d3heR63F/v37ERYW1mU7p06ditjYWHz22We44IILWu5ftGgRVq1ahbvvvhvfffcdzjvvPNTX1+Ozzz7DH/7wB1xyySWYP38+MjIy8NBDD+HYsWMYM2YMtmzZgvXr1+POO+/EsGHDXM515ZVX4t5778W9996LmJiYdjMA06ZNw80334wVK1Zg3759mD17NoKDg3HkyBG8//77+Mc//uGy54U73b2uBg4ciDvuuAN///vfsWDBAlx44YXYv38/Nm/ejLi4OJeZsfvuuw8bNmzAvHnzsGTJEowbNw719fU4cOAA1qxZg2PHjnWadnT8+HG8+eabANASuD/++OMAZObk+uuvByCBhbsZqYsuughJSUmYOHEiBgwYgLy8PKxcuRJFRUUuHwA6bN26FVOmTEFsbGynv6uA11vLT1H/5FjqsKyszO3ja9euVaZOnaqEhYUpYWFhysiRI5Vly5YpWVlZLcf88ssvysyZM5Xw8HAlLi5OufHGG1uWFTzZHWYXLFigzJgxw+W+LVu2KPPmzVMGDRqkBAcHKxEREcqUKVOUlStXtizzdzI/a0fLD06bNk0544wzXO47ceKEsnTpUiUuLk7RarXKWWed5XYn7YqKCuX6669XIiMjFYPBoFx//fXK3r173e68nZ2drSxatEhJSEhQgoODlcGDByvz5s1T1qxZ03LM448/rkyYMEGJiopSQkJClJEjRypPPPGEYjabXV7rqquuUqZOndrl74KIuu/48ePKokWLlPj4eEWn0ylpaWnKsmXLXJZEzc7OVi6//HIlKipK0ev1yoQJE5SNGze6vE53l5vdsGGDMnr0aEWv1ytDhw5VnnrqqZZlTp2Xcx0yZIhy8cUXK59++qkyevRoRafTKSNHjlTef/99l9fr7vtHd96LFEVRfvzxR2XatGmKXq9XBg8erPzlL39R/vvf/3Zr522HvXv3KosWLVJSUlIUrVarhIWFKaNHj1buueeeluVYzWazEhsb2+VuyampqS3L6zovN9uW43fdneVmFUVRbr/9dmX48OHt7m9oaFAeeughJTU1VQkODlYSEhKUyy+/XMnOzm45pra2Vrnrrrta+qsRI0Yof/vb3zrsq6ZMmaIAUH73u9912J5///vfyrhx45SQkBAlIiJCOeuss5T7779fKSoqajnGcU24093rymKxKA8//LCSkJCghISEKBdccIFy8OBBJTY2VrnllltcXrO2tlZZvny5Mnz4cEWr1SpxcXHK5MmTlWeeeabd9dWW4//K3W3atGmKoijKTz/9pABQvvvuu3bP/9e//qVMnTpViYuLUzQajRIfH6/Mnz9f2b59e7tjq6urFa1Wq7z66qudtqk/UCmKF6tHifzUV199henTp+PQoUMdrkxFrkpKSpCamop33nmHMxZE/cDQoUNx5plnYuPGjb5uSkDKycnByJEjsXnzZsyYMcPXzfGp6upqREdH4/HHH8dDDz3Ua+d9+umn8eyzz6K4uNij1Zyef/55PP3008jOzj7pOpVAwRoL6pfOO+88zJ49G08//bSvm9JnPP/88zjrrLMYVBAR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7dsxf/58DBo0CCqVCh9++KE3T0dERH0I+wgiosDi1cCivr4eY8aMwYsvvujN0xARUR/EPoKIKLB4dbnZiy66CBdddJE3T0FERH0U+wgiosDiV/tYmEwmmEymlu9ramp82BoiIvIn7COIiPybXxVvr1ixAgaDoeWWnJzs6yYREZGfYB9BROTf/CqwWL58OYxGY8stPz/f100iIiI/wT6CiMi/+VUqlE6ng06n83UziIjID7GPICLyb341Y0FERERERH2TV2cs6urqcPTo0Zbvc3NzsW/fPsTExCAlJcWbpyYiIj/HPoKIKLB4NbD4/vvvkZGR0fL93XffDQBYvHgxXn/9dW+emoiI/Bz7CCKiwOLVwGL69OlQFMWbpyAioj6KfQQRUWBhjQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmMgQUREREREXmsVwKLF198EUOHDoVer8fEiRPx3Xff9cZpiYjIz7F/ICIKHF4PLN59913cfffdeOSRR/DDDz9gzJgxmDNnDkpLS719aiIi8mPsH4iIAovXA4tnn30WN954I5YuXYrTTz8dL7/8MkJDQ/Haa695+9REROTH2D8QEQUWrwYWZrMZe/bswcyZM1tPGBSEmTNnYteuXe2ON5lMqKmpcbkREVHg6Wn/ALCPICLyd14NLMrLy2G1WjFw4ECX+wcOHIiSkpJ2x69YsQIGg6Hllpyc7M3mERGRj/S0fwDYRxAR+Tu/WhVq+fLlMBqNLbf8/HxfN4mIiPwE+wgiIv+m8eaLx8XFQa1W48SJEy73nzhxAgkJCe2O1+l00Ol03mwSERH5gZ72DwD7CCIif+fVGQutVotx48bh888/b7nPZrPh888/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5OTk3moeERH5SHf6B4B9BBGRv/N6YPHAAw8gLCwMsbGxyMvLw/r16zs8dvny5TAajS23/Px8bzePiIh8pCf9A8A+gojI3/U4sHjwwQehUqk6vR06dKjl+Pvuuw979+7Fli1boFarsWjRInSUfaXT6RAZGelyIyKivsGb/QPAPoKIyN/1uMairKwMFRUVnR6TlpYGrVbb7v6CggIkJyfj66+/xqRJk7o8lz/mARMR9XXeem/tzf4BYB9BROQNnry3anp6svj4eMTHx/f0aQAAm80GAC7Fd0REFBjYPxAR9W89Diy669tvv8Xu3bsxdepUREdHIzs7Gw8//DCGDRvW7U+jiIgo8LB/ICIKTF4r3g4NDcUHH3yAGTNmID09HTfccANGjx6NL7/8EjqdzlunJSIiP8f+gYgoMHltxuKss87Ctm3bvPXyRETUR7F/ICIKTL22jwUREREREQUuBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROQxBhZEREREROSxXgksTCYTxo4dC5VKhX379vXGKYmIqA9g/0BEFDh6JbC4//77MWjQoN44FRER9SHsH4iIAofG2yfYvHkztmzZgrVr12Lz5s2dHmsymWAymVq+NxqNAICamhqvtpGIqD9xvKcqiuLTdvSkfwDYRxAR9QaP+gjFi0pKSpTBgwcru3fvVnJzcxUAyt69ezs8/pFHHlEA8MYbb7zx1gu37Oxsb3YBnepp/6Ao7CN444033nrzdjJ9hEpRvPORlaIomDt3LqZMmYI//elPOHbsGFJTU7F3716MHTvW7XPafhpVXV2NIUOGIC8vDwaDwRvNPGVqamqQnJyM/Px8REZG+ro5nWJbvYNtPfX6SjuBvtVWo9GIlJQUVFVVISoqqtfPfzL9A8A+ojf0lXYCbKu3sK3e0Zfa6kkf0eNUqAcffBBPPfVUp8ccPHgQW7ZsQW1tLZYvX97t19bpdNDpdO3uNxgMfv+f4BAZGcm2egHb6h19pa19pZ1A32prUNCpLbPzZv8AsI/oTX2lnQDb6i1sq3f0pbaeTB/R48DinnvuwZIlSzo9Ji0tDdu2bcOuXbvadQLjx4/HtddeizfeeKOnpyYiIj/G/oGIqH/rcWARHx+P+Pj4Lo/75z//iccff7zl+6KiIsyZMwfvvvsuJk6c2NPTEhGRn2P/QETUv3ltVaiUlBSX78PDwwEAw4YNQ1JSUrdeQ6fT4ZFHHnE79e1v2FbvYFu9o6+0ta+0E2Bbe+JU9A+A73+Onugrbe0r7QTYVm9hW72jv7TVa8XbbXW3OI+IiPoX9g9ERIGh1wILIiIiIiIKXL2y8zYREREREQU2BhZEREREROQxBhZEREREROQxBhZEREREROSxPhlYmEwmjB07FiqVCvv27fN1c9pZsGABUlJSoNfrkZiYiOuvvx5FRUW+blY7x44dww033IDU1FSEhIRg2LBheOSRR2A2m33dNLeeeOIJTJ48GaGhoT3eYt7bXnzxRQwdOhR6vR4TJ07Ed9995+smubV9+3bMnz8fgwYNgkqlwocffujrJrm1YsUK/OpXv0JERAQGDBiAhQsXIisry9fNcuull17C6NGjW3ZTnTRpEjZv3uzrZnXpySefhEqlwp133unrppxS/t4/AOwjvIV9hGf6Sv8A9J0+oq/2D8DJ9xF9MrC4//77MWjQIF83o0MZGRl47733kJWVhbVr1yI7OxuXX365r5vVzqFDh2Cz2fDKK6/g559/xnPPPYeXX34Zf/zjH33dNLfMZjOuuOIK/P73v/d1U1y8++67uPvuu/HII4/ghx9+wJgxYzBnzhyUlpb6umnt1NfXY8yYMXjxxRd93ZROffnll1i2bBm++eYbbN26Fc3NzZg9ezbq6+t93bR2kpKS8OSTT2LPnj34/vvvccEFF+CSSy7Bzz//7OumdWj37t145ZVXMHr0aF835ZTz9/4BYB/hLewjPNNX+geg7/QRfbF/ADzsI5Q+ZtOmTcrIkSOVn3/+WQGg7N2719dN6tL69esVlUqlmM1mXzelS08//bSSmprq62Z0auXKlYrBYPB1M1pMmDBBWbZsWcv3VqtVGTRokLJixQoftqprAJR169b5uhndUlpaqgBQvvzyS183pVuio6OVV1991dfNcKu2tlYZMWKEsnXrVmXatGnKHXfc4esmnTJ9sX9QFPYRpxr7CM/1pf5BUfpWH+HP/YOieN5H9KkZixMnTuDGG2/Em2++idDQUF83p1sqKyuxevVqTJ48GcHBwb5uTpeMRiNiYmJ83Yw+w2w2Y8+ePZg5c2bLfUFBQZg5cyZ27drlw5YFFqPRCAB+f21arVa88847qK+vx6RJk3zdHLeWLVuGiy++2OWaDQR9sX8A2EcEOvYRvaMv9BF9oX8APO8j+kxgoSgKlixZgltuuQXjx4/3dXO69MADDyAsLAyxsbHIy8vD+vXrfd2kLh09ehQvvPACbr75Zl83pc8oLy+H1WrFwIEDXe4fOHAgSkpKfNSqwGKz2XDnnXdiypQpOPPMM33dHLcOHDiA8PBw6HQ63HLLLVi3bh1OP/10XzernXfeeQc//PADVqxY4eumnFJ9rX8A2Ef0F+wjvM/f+4i+0j8Ap6aP8Hlg8eCDD0KlUnV6O3ToEF544QXU1tZi+fLlft1Oh/vuuw979+7Fli1boFarsWjRIii9tMl5T9sKAIWFhbjwwgtxxRVX4MYbb+yVdp5sW6l/WbZsGX766Se88847vm5Kh9LT07Fv3z58++23+P3vf4/Fixfjl19+8XWzXOTn5+OOO+7A6tWrodfrfd2cbukr/UNP2urAPsJ7baX+xd/7iL7QPwCnro9QKb31TtaBsrIyVFRUdHpMWloarrzySnz00UdQqVQt91utVqjValx77bV44403/KKdWq223f0FBQVITk7G119/3SvTXz1ta1FREaZPn45zzz0Xr7/+OoKCei/ePJnf6+uvv44777wT1dXVXm5d18xmM0JDQ7FmzRosXLiw5f7Fixejurrarz+FVKlUWLdunUu7/c2tt96K9evXY/v27UhNTfV1c7pt5syZGDZsGF555RVfN6XFhx9+iEsvvRRqtbrlPqvVCpVKhaCgIJhMJpfH/EFf6R8A9hHewj7CN/pC/wD0zT7CH/sH4NT1ERpvNrI74uPjER8f3+Vx//znP/H444+3fF9UVIQ5c+bg3XffxcSJE73ZRADdb6c7NpsNgCyD2Bt60tbCwkJkZGRg3LhxWLlyZa92GIBnv1d/oNVqMW7cOHz++ectb8A2mw2ff/45br31Vt82rg9TFAW33XYb1q1bhy+++KLPdBgONput1/7eu2vGjBk4cOCAy31Lly7FyJEj8cADD/hdUAH0nf4BYB/hLewjyJ2+3Ef4Y/8AnLo+wueBRXelpKS4fB8eHg4AGDZsGJKSknzRJLe+/fZb7N69G1OnTkV0dDSys7Px8MMPY9iwYX5XrFNYWIjp06djyJAheOaZZ1BWVtbyWEJCgg9b5l5eXh4qKyuRl5cHq9Xaskb98OHDW64HX7j77ruxePFijB8/HhMmTMDzzz+P+vp6LF261Gdt6khdXR2OHj3a8n1ubi727duHmJiYdn9jvrRs2TK89dZbWL9+PSIiIlpykQ0GA0JCQnzcOlfLly/HRRddhJSUFNTW1uKtt97CF198gU8//dTXTXMRERHRLv/YkePvj3nJPdFX+geAfYQ3sY/wTF/pH4C+00f0lf4BOIV9xKldpKr35Obm+uVygj/++KOSkZGhxMTEKDqdThk6dKhyyy23KAUFBb5uWjsrV65UALi9+aPFixe7bWtmZqavm6a88MILSkpKiqLVapUJEyYo33zzja+b5FZmZqbb3+HixYt93TQXHV2XK1eu9HXT2vntb3+rDBkyRNFqtUp8fLwyY8YMZcuWLb5uVrcE2nKzDv7aPygK+whvYh/hmb7SPyhK3+kj+nL/oCgn10f4vMaCiIiIiIj6Pp+vCkVERERERH0fAwsiIiIiIvIYAwsiIiIiIvIYAwsiIiIiIvIYAwsiIiIiIvIYAwsiIiIiIvIYAwsiIiIiIvIYAwsiIiIiIvIYAwsiIiIiIvIYAwsiIiIiIvIYAwsiIiIiIvLY/wdzg1Fqpu0u/AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Diagnosed from samples, not loss: the generator piled into a strict subset of the modes.\n"
     ]
    }
   ],
   "source": [
    "# viz: the collapsed generator's samples next to the real target\n",
    "fig, ax = plt.subplots(1, 2, figsize=(8, 4))\n",
    "scatter2d(ax[0], real_pts, \"real (3 modes)\")\n",
    "scatter2d(ax[1], bad_samples, f\"collapsed GAN (coverage {cov_bad}/3)\", c=\"#CC0000\")\n",
    "for a in ax: a.scatter(MODES[:, 0], MODES[:, 1], c=\"k\", marker=\"x\", s=60)\n",
    "plt.tight_layout(); plt.show()\n",
    "assert cov_bad < 3, \"the rigged run should NOT cover all three modes (that's the point of the demo)\"\n",
    "print(\"Diagnosed from samples, not loss: the generator piled into a strict subset of the modes.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f135c46",
   "metadata": {},
   "source": [
    "> **Common confusion.** \"The loss looked fine, so training worked.\" GAN loss is not a quality signal. Here the rigged generator's BCE loss can sit in the same range as the healthy one while covering fewer modes. The fix is to rebalance the two networks: equal update cadence, comparable learning rates, and enough generator noise dimension to spread. The healthy `train_gan` above already does this, which is why its coverage was higher. (In the full-scale exercise you add a Wasserstein-with-gradient-penalty critic, the production-grade fix.)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3073e65d",
   "metadata": {},
   "source": [
    "> **Key takeaways**\n",
    "> - On a known target, mode coverage turns \"did it work?\" into an assertion.\n",
    "> - GAN loss curves are nearly uninformative; diagnose from samples.\n",
    "> - Mode collapse is an imbalance: an over-strong discriminator plus an under-powered generator. Rebalance cadence, learning rates, and generator capacity to fix it; WGAN-GP is the heavier-duty version of the same rebalancing.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8498fa3",
   "metadata": {},
   "source": [
    "## Part 4 — A mini DDPM (the regress-to-noise aha)\n",
    "\n",
    "> **Objectives.**\n",
    "> - Build the diffusion forward process in closed form and verify its endpoints (at $t{=}0$ you get the data back; at $t{=}T$ you get pure noise).\n",
    "> - Train a tiny noise-predictor with the DDPM `simple` loss: plain MSE between the true noise and the predicted noise. No adversary, no KL.\n",
    "> - Sample by walking the reverse chain and confirm it recovers the same 2D mixture, with most modes covered.\n",
    "> - See, in one comparison, why the regress-to-noise loss is the stable objective.\n",
    "\n",
    "The forward process adds Gaussian noise to a clean point $\\mathbf{x}_0$ over $T$ steps with a fixed variance schedule $\\{\\beta_t\\}$. The key trick is that you can jump straight to step $t$ in closed form. With $\\alpha_t=1-\\beta_t$ and $\\bar\\alpha_t=\\prod_{s\\le t}\\alpha_s$,\n",
    "\n",
    "$$\\mathbf{x}_t=\\sqrt{\\bar\\alpha_t}\\,\\mathbf{x}_0+\\sqrt{1-\\bar\\alpha_t}\\,\\boldsymbol\\epsilon,\\qquad\\boldsymbol\\epsilon\\sim\\mathcal{N}(\\mathbf{0},\\mathbf{I}).$$\n",
    "\n",
    "That is the reparameterization trick again. One Gaussian draw and a scaling, no $T$-step simulation needed.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "593e43b8",
   "metadata": {},
   "source": [
    "### The variance schedule\n",
    "\n",
    "A linear $\\beta$ schedule, then $\\alpha=1-\\beta$ and the cumulative product $\\bar\\alpha$. The cumulative product is the load-bearing piece, so read it adversarially: $\\bar\\alpha_t$ must start near 1 (barely any noise) and decay monotonically toward 0 (all noise). If you accidentally cumulative-sum instead of cumulative-product, or index off by one, the endpoints break. We assert both endpoints.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "0440fad7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:46.443620Z",
     "iopub.status.busy": "2026-06-10T19:50:46.443538Z",
     "iopub.status.idle": "2026-06-10T19:50:46.446326Z",
     "shell.execute_reply": "2026-06-10T19:50:46.446061Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "bar_alpha[0]=0.9999 -> bar_alpha[-1]=0.1322 over 200 steps\n"
     ]
    }
   ],
   "source": [
    "T_DIFF = 200                                 # diffusion steps: a few hundred, not 700k. CPU-friendly.\n",
    "beta = torch.linspace(1e-4, 0.02, T_DIFF)    # standard DDPM linear schedule endpoints\n",
    "alpha = 1.0 - beta\n",
    "bar_alpha = torch.cumprod(alpha, dim=0)      # the cumulative product, NOT a sum\n",
    "# adversarial read of the sentinel quantity: monotone down, near 1 at the start, near 0 at the end\n",
    "assert bar_alpha[0] > 0.99, \"bar_alpha must start near 1 (step 0 is almost noise-free)\"\n",
    "assert bar_alpha[-1] < 0.5, \"bar_alpha must decay toward 0 (step T is mostly noise)\"\n",
    "assert (bar_alpha[1:] <= bar_alpha[:-1]).all(), \"bar_alpha must be monotonically non-increasing\"\n",
    "print(f\"bar_alpha[0]={bar_alpha[0]:.4f} -> bar_alpha[-1]={bar_alpha[-1]:.4f} over {T_DIFF} steps\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7efa4225",
   "metadata": {},
   "source": [
    "> **Interpretation.** $\\bar\\alpha$ slides from ~0.9999 down to a small value, monotonically. That decay is the dial that turns data into noise. The three asserts are the K-means-early-break lesson applied here: any iterative or accumulated quantity gets its sentinel checked before you build on it.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d81cd7b9",
   "metadata": {},
   "source": [
    "### Exercise 18.4 — The closed-form forward sample\n",
    "`Difficulty 2/5 · ~12 min`\n",
    "\n",
    "Implement `q_sample(x0, t, noise)` returning $\\mathbf{x}_t=\\sqrt{\\bar\\alpha_t}\\,\\mathbf{x}_0+\\sqrt{1-\\bar\\alpha_t}\\,\\boldsymbol\\epsilon$, where `t` is a batch of integer timesteps (one per row). You must gather the right $\\bar\\alpha_t$ per row and reshape it to broadcast against the `(B, 2)` points. The checks verify: shape, the $t{=}0$ endpoint (you get $\\mathbf{x}_0$ back when noise is zero), and the $t{=}T{-}1$ endpoint (with zero data you get noise at unit-ish scale).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "4801efff",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:46.447105Z",
     "iopub.status.busy": "2026-06-10T19:50:46.447034Z",
     "iopub.status.idle": "2026-06-10T19:50:46.451522Z",
     "shell.execute_reply": "2026-06-10T19:50:46.451240Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ -- ] 18.4 q_sample shape: not attempted yet — fill in the TODO above, then re-run.\n",
      "[ -- ] 18.4 t=0 endpoint: not attempted yet — fill in the TODO above, then re-run.\n",
      "[ -- ] 18.4 t=T endpoint scale: not attempted yet — fill in the TODO above, then re-run.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def q_sample(x0, t, noise):\n",
    "    \"\"\"x0: (B, 2) clean points. t: (B,) long timesteps. noise: (B, 2) ~ N(0,I).\n",
    "    Return x_t: (B, 2) via the closed-form forward diffusion sample.\"\"\"\n",
    "    # TODO 1: gather bar_alpha at the per-row timesteps t          -> (B,)\n",
    "    bar_t = None\n",
    "    attempted(bar_t)\n",
    "    bar_t = bar_t.view(-1, 1)                # reshape to (B,1) so it broadcasts over the 2 coords\n",
    "    # TODO 2: return sqrt(bar_t) * x0 + sqrt(1 - bar_t) * noise\n",
    "    return torch.sqrt(bar_t) * x0 + torch.sqrt(1 - bar_t) * noise\n",
    "\n",
    "def _qs_shape():\n",
    "    x0 = torch.randn(4, 2); t = torch.randint(0, T_DIFF, (4,)); nz = torch.randn(4, 2)\n",
    "    check_shape(q_sample(x0, t, nz), (4, 2))\n",
    "\n",
    "def _qs_t0():\n",
    "    # at t=0 with zero noise, x_t should equal x0 (bar_alpha[0] ~ 1)\n",
    "    x0 = torch.randn(3, 2)\n",
    "    out = q_sample(x0, torch.zeros(3, dtype=torch.long), torch.zeros(3, 2))\n",
    "    assert torch.allclose(out, x0 * torch.sqrt(bar_alpha[0]), atol=1e-4), \\\n",
    "        \"at t=0 with zero noise, x_t must be sqrt(bar_alpha_0)*x0, which is ~x0\"\n",
    "\n",
    "def _qs_tT():\n",
    "    # at the last step with zero data, x_t is sqrt(1 - bar_alpha_{T-1}) * noise -> near unit scale\n",
    "    nz = torch.randn(5000, 2)\n",
    "    out = q_sample(torch.zeros(5000, 2), torch.full((5000,), T_DIFF - 1, dtype=torch.long), nz)\n",
    "    scale = float(torch.sqrt(1 - bar_alpha[-1]))\n",
    "    assert abs(out.std().item() - scale) < 0.05, f\"x_T std should be ~{scale:.2f} (sqrt(1-bar_alpha_T))\"\n",
    "\n",
    "check(\"18.4 q_sample shape\", _qs_shape)\n",
    "check(\"18.4 t=0 endpoint\", _qs_t0)\n",
    "check(\"18.4 t=T endpoint scale\", _qs_tT)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "76f40305",
   "metadata": {},
   "source": [
    "<details><summary>Hint 1 (conceptual)</summary>`bar_alpha` is a length-`T` tensor; `t` is a batch of indices. `bar_alpha[t]` (fancy indexing) or `bar_alpha.gather(0, t)` both pull the per-row value.</details>\n",
    "\n",
    "<details><summary>Hint 2 (pseudocode)</summary>\n",
    "\n",
    "```python\n",
    "bar_t = bar_alpha[t]          # (B,)\n",
    "bar_t = bar_t.view(-1, 1)     # (B,1) to broadcast over the 2 coordinates\n",
    "return torch.sqrt(bar_t) * x0 + torch.sqrt(1 - bar_t) * noise\n",
    "```\n",
    "</details>\n",
    "\n",
    "<details><summary>Help — \"operands could not be broadcast (B,) and (B,2)\"</summary>You forgot to reshape `bar_t` from `(B,)` to `(B,1)`. The scalar-per-row has to broadcast across both coordinates of each 2D point.</details>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "ee52d73b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:46.452408Z",
     "iopub.status.busy": "2026-06-10T19:50:46.452340Z",
     "iopub.status.idle": "2026-06-10T19:50:46.455420Z",
     "shell.execute_reply": "2026-06-10T19:50:46.455136Z"
    },
    "collapsed": true,
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ ok ] 18.4 q_sample shape\n",
      "[ ok ] 18.4 t=0 endpoint\n",
      "[ ok ] 18.4 t=T endpoint scale\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#@title Solution { display-mode: \"form\" }\n",
    "# solution: redefines q_sample; the checks below re-verify the reference.\n",
    "def q_sample(x0, t, noise):\n",
    "    bar_t = bar_alpha[t].view(-1, 1)        # (B,1), broadcasts over the 2 coords\n",
    "    return torch.sqrt(bar_t) * x0 + torch.sqrt(1 - bar_t) * noise\n",
    "\n",
    "check(\"18.4 q_sample shape\", _qs_shape, required=True)\n",
    "check(\"18.4 t=0 endpoint\", _qs_t0, required=True)\n",
    "check(\"18.4 t=T endpoint scale\", _qs_tT, required=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "c85c50d0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:46.456094Z",
     "iopub.status.busy": "2026-06-10T19:50:46.456026Z",
     "iopub.status.idle": "2026-06-10T19:50:46.648519Z",
     "shell.execute_reply": "2026-06-10T19:50:46.648115Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABPoAAAFZCAYAAAABykFLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXd4W/X59m8NW7LlPeOZOHsTCBBC9m4SCCGQFChlBAotUNpSaIEOQllltv3Rt6y2zLISCIQRMiA7IWRC9nRix3vvJem8f9w6PkeyZMuOR+w8n+vK5fjojO85kh4/+zEoiqJAEARBEARBEARBEARBEIRujbGrFyAIgiAIgiAIgiAIgiAIwtkjjj5BEARBEARBEARBEARB6AGIo08QBEEQBEEQBEEQBEEQegDi6BMEQRAEQRAEQRAEQRCEHoA4+gRBEARBEARBEARBEAShByCOPkEQBEEQBEEQBEEQBEHoAYijTxAEQRAEQRAEQRAEQRB6AOLoEwRBEARBEARBEARBEIQegDj6BEEQBEEQBEEQBEEQBKEHII4+QRAEoVPYsWMHLr/8cthsNhgMBuzdu7erl9QhrF+/HgaDAevXr2/T8UuWLIHBYHDb1qdPH9xyyy1u244dO4aZM2ciPDwcBoMBn3zyCYCOf85ne3+dxalTp2AwGPDGG2909VJa5JZbbkGfPn3cthkMBixZsqRL1gMAkydPxuTJk7vs+s3R1c+mPbnrrrswY8aMTr/uwYMHYTabsX///k6/tiAIgiAIHYs4+gRBEIQOp6GhAQsXLkRxcTH+9re/4e2330bv3r27elndmptvvhn79u3DE088gbfffhsXX3yxPOd2YuvWrViyZAlKS0u7eilCO/Pkk082OsXbE4PBAIPBgOeff77Ja2+88QYMBgN27tzptj09PR3//ve/8fDDDzc55j//+Q+GDBkCq9WKAQMG4MUXXzzr9d1zzz2Nvw8dOhRz587Fn//857M6b3tx8OBBLFmyBKdOnerqpQiCIAhCt8fc1QsQBEEQej4nTpzA6dOn8dprr+H222/v6uV0O44cOQKjUYvN1dTUYNu2bfjDH/7gZrwfPny4w5/zxIkTUVNTg8DAwA45/7nA1q1b8eijj+KWW25BREREl6yhpqYGZrOoad44m2fz5JNP4tprr8X8+fPbd1Eunn32WfziF79AcHBwi/v+4x//QFpaGqZMmeK2/ZVXXsHPf/5zXHPNNbjvvvuwadMm3Hvvvaiursbvf//7dlvrz3/+c8yZMwcnTpxAv3792u28beHgwYN49NFHMXny5CbZrYIgCIIgtA7J6BMEQRA6nPz8fABoV6dJVVVVu52rNSiKgpqamk69psViQUBAQOPvBQUFAJo+z454zp4YjUZYrVY3x6PQ/litVnH0+eBcfTajRo1CXl4eXn755Rb3bWhowP/+9z8sWrTIbXtNTQ3+8Ic/YO7cuVi2bBl+9rOf4a233sJPfvITPPbYYygpKWm39U6fPh2RkZF488032+2c3QG73Y76+vquXoYgCIIgdBiipQuCIAgdyi233IJJkyYBABYuXAiDweDW++ubb77BhAkTYLPZEBERgauuugqHDh1yO4fat+7gwYO44YYbEBkZifHjx2PFihUwGAz44YcfGvf96KOPYDAYsGDBArdzDBkyBD/+8Y8bf3/99dcxdepUxMXFwWKxYOjQoXjppZearL9Pnz644oorsGrVKlx88cUICgrCK6+8AgA4c+YM5s+fD5vNhri4OPzmN79BXV2d389m8+bNuOSSS2C1WtGvX7/G83pbg9qjb8mSJY3luA888AAMBkPj676es69+a956w73//vsYPXo0QkNDERYWhhEjRuAf//hH4+u+evQtXboUo0ePRlBQEGJiYnDjjTciKyuryfVCQkKQlZWF+fPnIyQkBLGxsbj//vvhcDjc9s3JycHhw4fR0NDQ3CMEAJSWluKWW25BeHg4IiIicPPNN3stu/3hhx9wyy23oG/fvrBarejVqxcWL16MoqKixn2WLFmCBx54AACQlpbWWJKplhT6+7nxxSeffILhw4fDarVi+PDhWL58udf9PPvQVVRU4Ne//jX69OkDi8WCuLg4zJgxA7t3727c59ixY7jmmmvQq1cvWK1WJCcn47rrrkNZWVnjPna7HY899hj69esHi8WCPn364OGHH272c5uXlwez2YxHH320yWtHjhyBwWDAP//5z8ZtpaWl+PWvf42UlBRYLBb0798fTz/9NJxOp9uxLX3WfOH5bFT5cPz48cYszPDwcNx6662orq52O66qqgpvvvlm4/uq7325Z88ezJ49G2FhYQgJCcG0adPw7bfftrgelXHjxmHq1Kl45plnWgwGbN68GYWFhZg+fbrb9nXr1qGoqAh33XWX2/a7774bVVVV+OKLL/xeT0sEBARg8uTJ+PTTT1vc9/Tp07jrrrswaNAgBAUFITo6GgsXLmxSatvQ0IBHH30UAwYMgNVqRXR0NMaPH481a9b4PPcbb7yBhQsXAgCmTJnS+N601Ad06dKlGDp0qNt3yVOmqb06n3vuOfz9739v/NwfPHgQQMt/f3744QcYDAasWLGicduuXbtgMBhw0UUXua1n9uzZGDNmTOPvO3fuxKxZsxATE4OgoCCkpaVh8eLFzd6TIAiCILQH5144VBAEQehR3HnnnUhKSsKTTz6Je++9F5dccgni4+MBAGvXrsXs2bPRt29fLFmyBDU1NXjxxRcxbtw47N69u4kTauHChRgwYACefPJJKIqC8ePHw2AwYOPGjRg5ciQAYNOmTTAajdi8eXPjcQUFBTh8+LBbmetLL72EYcOGYd68eTCbzfjss89w1113wel04u6773a77pEjR3D99dfjzjvvxM9+9jMMGjQINTU1mDZtGjIyMnDvvfciMTERb7/9Nr755hu/nsu+ffswc+ZMxMbGYsmSJbDb7XjkkUcan40vFixYgIiICPzmN7/B9ddfjzlz5iAkJATx8fE+n7O/rFmzBtdffz2mTZuGp59+GgBw6NAhbNmyBb/61a98HvfGG2/g1ltvxSWXXIKnnnoKeXl5+Mc//oEtW7Zgz549bhmGDocDs2bNwpgxY/Dcc89h7dq1eP7559GvXz/84he/aNzvoYcewptvvon09PRmS/kURcFVV12FzZs34+c//zmGDBmC5cuX4+abb/Z6fydPnsStt96KXr164cCBA3j11Vdx4MABfPvtt40O4qNHj+K9997D3/72N8TExAAAYmNjAbTuc+PJ6tWrcc0112Do0KF46qmnUFRUhFtvvRXJycnNHgewzHLZsmW45557MHToUBQVFWHz5s04dOgQLrroItTX12PWrFmoq6vDL3/5S/Tq1QtZWVn4/PPPUVpaivDwcADA7bffjjfffBPXXnstfvvb32L79u146qmncOjQIZ9Ox/j4eEyaNAkffvghHnnkEbfXPvjgA5hMpkZHTXV1NSZNmoSsrCzceeedSE1NxdatW/HQQw8hJycHf//73xvfi7Z81ppj0aJFSEtLw1NPPYXdu3fj3//+N+Li4hrP//bbb+P222/HpZdeijvuuAMAGktWDxw4gAkTJiAsLAy/+93vEBAQgFdeeQWTJ0/Ghg0b3Bw4zbFkyRJMnDgRL730Eu677z6f+23duhUGgwEXXnih2/Y9e/YAAC6++GK37aNHj4bRaMSePXtw4403+vdA/GD06NH49NNPUV5ejrCwMJ/77dixA1u3bsV1112H5ORknDp1Ci+99BImT56MgwcPNpYqL1myBE899VTjcy4vL8fOnTuxe/dun0NHJk6ciHvvvRf/93//h4cffhhDhgwBgMaf3vjiiy/w4x//GCNGjMBTTz2FkpIS3HbbbUhKSvK6/+uvv47a2lrccccdsFgsiIqK8uvvz/DhwxEREYGNGzdi3rx5ALS/Md9//33jc3M6ndi6dWvj5yo/P79Rvj/44IOIiIjAqVOn8PHHH7f8pgiCIAjC2aIIgiAIQgezbt06BYCydOlSt+2jRo1S4uLilKKiosZt33//vWI0GpWbbrqpcdsjjzyiAFCuv/76JuceNmyYsmjRosbfL7roImXhwoUKAOXQoUOKoijKxx9/rABQvv/++8b9qqurm5xr1qxZSt++fd229e7dWwGgfPXVV27b//73vysAlA8//LBxW1VVldK/f38FgLJu3brmHokyf/58xWq1KqdPn27cdvDgQcVkMimef5579+6t3HzzzY2/p6enKwCUZ5991m0/X8950qRJyqRJk5qs4eabb1Z69+7d+PuvfvUrJSwsTLHb7T7XrV5Dvb/6+nolLi5OGT58uFJTU9O43+eff64AUP785z+7XQ+A8pe//MXtnBdeeKEyevToJmsDoKSnp/tci6IoyieffKIAUJ555pnGbXa7XZkwYYICQHn99dcbt3t7z9977z0FgLJx48bGbc8++6zPa/v7ufHGqFGjlISEBKW0tLRx2+rVqxUAbu+DoigKAOWRRx5p/D08PFy5++67fZ57z549Xt97PXv37lUAKLfffrvb9vvvv18BoHzzzTeN2zw/M6+88ooCQNm3b5/bsUOHDlWmTp3a+Ptjjz2m2Gw25ejRo277Pfjgg4rJZFIyMjIURfHvs+YLz2ejyofFixe77Xf11Vcr0dHRbttsNpvbd0ll/vz5SmBgoHLixInGbdnZ2UpoaKgyceJEv9akvj9TpkxRevXq1fhZef311xUAyo4dOxr3v/HGG5usTVEU5e6771ZMJpPXa8TGxirXXXddi2tpaX163n33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v3DixAnceeedeOutt3D8+HGv527ufTxy5Ejj6x1F7969kZOT08R49lxPSUkJvv76azz44IN49NFHcfXVV2PGjBlupZoqvhxhZ/O5UZ/D2bznCQkJuOuuu/DJJ58gPT0d0dHReOKJJ9z2GTFiBP74xz82OiWysrIaS0h79+4Np9PZZA15eXkoLS1t8b2aP38+AgMD8cEHH2Dv3r04evQorrvuOrd9+vXrh8rKSkyfPt3rP33WXWs/a+2Bt/c2NjYWwcHBPmWR0WhESkpKq64zadIkTJ48GU8//bTXrL7BgwejpKSkSRboqFGjALAkXs/OnTvhdDobX28v0tPTYTQaMXDgwGb3W7ZsGW6++WY8//zzuPbaazFjxgyMHz/eq1yJiorCrbfeivfeew+ZmZkYOXKk25Rkb7TG+ax+Tr19Tvz97LTm709gYCAuvfTSJn9jJkyYgLq6Ovzvf/9DXl6e298YlcsuuwxPPPEEdu7cif/97384cOAA3n//ff9uVBAEQRDaiDj6BEEQhC4hISEBo0aNwptvvulmLO7fvx+rV6/GnDlz/D7XhAkT8M033+C7775rNMJGjRqF0NBQ/PWvf0VQUBBGjx7duL+a+aN30pWVleH111/3+5pz5sxBdnY2li1b1rituroar776aovHmkwmzJo1C5988gkyMjIatx86dAirVq3yew3+0q9fPxw+fBgFBQWN277//nts2bLFbb+ioiK3341GY+M0Y18lZxdffDHi4uLw8ssvu+2zcuVKHDp0CHPnzm3TmnNycnD48OEW+1vNmTMHdrsdL730UuM2h8OBF1980W0/b+85gMYpsHpUA9/TiXE2nxv9513v3FmzZg0OHjzY7LEOh6OJQyguLg6JiYmNz7y8vBx2u91tnxEjRsBoNDbuo36nPO/5hRdeAIAW36uIiAjMmjULH374Id5//30EBgZi/vz5bvssWrQI27Zt8/o5Li0tbVxjWz5r7YHNZvP6vs6cOROffvopTp061bg9Ly8P7777LsaPH9/sRFpfqL36vMmEsWPHQlEU7Nq1y2371KlTERUV5fZ5BjjtOTg4uM3fJ1/s2rULw4YNc+sb6Q2TydTku/Piiy82yQr2fF9DQkLQv3//Ft9TX985byQmJmL48OF466233Bz8GzZswL59+1o8Hmj9358JEyZg+/btWLduXePfmJiYGAwZMqRxqrM+o6+kpKTJ81KdtFK+KwiCIHQ05q5egCAIgnD+8uyzz2L27NkYO3YsbrvtNtTU1ODFF19EeHh4ixkgeiZMmID//e9/bs3QTSYTLr/8cqxatQqTJ092a3A/c+bMxmyiO++8E5WVlXjttdcQFxeHnJwcv675s5/9DP/85z9x0003YdeuXUhISMDbb7+N4OBgv45/9NFH8dVXX2HChAm46667YLfb8eKLL2LYsGHt3tNq8eLFeOGFFzBr1izcdtttyM/Px8svv4xhw4a5DRm4/fbbUVxcjKlTpyI5ORmnT5/Giy++iFGjRmHIkCFezx0QEICnn34at956KyZNmoTrr78eeXl5+Mc//oE+ffo0lrW2loceeghvvvkm0tPTmx3IceWVV2LcuHF48MEHcerUKQwdOhQff/xxE8dYWFgYJk6ciGeeeQYNDQ1ISkrC6tWrkZ6e3uScqlP4D3/4A6677joEBATgyiuvPOvPzVNPPYW5c+di/PjxWLx4MYqLixvf8+bK+SoqKpCcnIxrr70WF1xwAUJCQrB27Vrs2LEDzz//PADgm2++wT333IOFCxdi4MCBsNvtePvtt2EymRrLZS+44ALcfPPNePXVV1FaWopJkybhu+++w5tvvon58+djypQpLd7Dj3/8Y9x4443417/+hVmzZjUOHVB54IEHsGLFClxxxRW45ZZbMHr0aFRVVWHfvn1YtmwZTp06hZiYmDZ91tqD0aNHY+3atXjhhReQmJiItLQ0jBkzBo8//jjWrFmD8ePH46677oLZbMYrr7yCuro6PPPMM2261qRJkzBp0iRs2LChyWvjx49HdHQ01q5di6lTpzZuDwoKwmOPPYa7774bCxcuxKxZs7Bp0ya88847eOKJJ9wGR6xfvx5TpkzBI4880ip5qdLQ0IANGzbgrrvuanHfK664Am+//TbCw8MxdOhQbNu2DWvXrkV0dLTbfkOHDsXkyZMxevRoREVFYefOnVi2bBnuueeeZs8/atQomEwmPP300ygrK4PFYsHUqVMRFxfndf8nn3wSV111FcaNG4dbb70VJSUl+Oc//4nhw4f7XRrbmr8/EyZMwBNPPIHMzEw3h97EiRPxyiuvoE+fPkhOTm7c/uabb+Jf//oXrr76avTr1w8VFRV47bXXEBYW1qogliAIgiC0iS6a9isIgiCcR6xbt04BoCxdurTJa2vXrlXGjRunBAUFKWFhYcqVV16pHDx40G2fRx55RAGgFBQUeD3/gQMHFADKkCFD3LY//vjjCgDlT3/6U5NjVqxYoYwcOVKxWq1Knz59lKefflr573//qwBQ0tPTG/fr3bu3MnfuXK/XPX36tDJv3jwlODhYiYmJUX71q18pX331lQJAWbduXQtPRVE2bNigjB49WgkMDFT69u2rvPzyy433qqd3797KzTff3Ph7enq6AkB59tln3fZr7jm/8847St++fZXAwEBl1KhRyqpVq5Sbb75Z6d27d+M+y5YtU2bOnKnExcUpgYGBSmpqqnLnnXcqOTk5Ta7heX8ffPCBcuGFFyoWi0WJiopSfvKTnyhnzpxx2+fmm29WbDZbk7V5u+ebb765yXvhi6KiIuWnP/2pEhYWpoSHhys//elPlT179igAlNdff71xvzNnzihXX321EhERoYSHhysLFy5UsrOzFQDKI4884nbOxx57TElKSlKMRqPbOvz93Pjio48+UoYMGaJYLBZl6NChyscff9zkfVAUxW1NdXV1ygMPPKBccMEFSmhoqGKz2ZQLLrhA+de//tW4/8mTJ5XFixcr/fr1U6xWqxIVFaVMmTJFWbt2rdt5GxoalEcffVRJS0tTAgIClJSUFOWhhx5Samtr3fabNGmSMmnSpCbrLy8vV4KCghQAyjvvvOP1HisqKpSHHnpI6d+/vxIYGKjExMQol19+ufLcc88p9fX1iqL491nzhef75Us+vP76603el8OHDysTJ05svAf992r37t3KrFmzlJCQECU4OFiZMmWKsnXr1hbXo67p7rvvbrJd/b4AUHbs2OH22r333qv079/f6/leffVVZdCgQUpgYKDSr18/5W9/+5vidDrd9vnss88UAMrLL7/cpvWtXLlSAaAcO3asxeNLSkqUW2+9VYmJiVFCQkKUWbNmKYcPH24imx5//HHl0ksvVSIiIpSgoCBl8ODByhNPPNH4vjfHa6+9pvTt21cxmUx+ydD3339fGTx4sGKxWJThw4crK1asUK655hpl8ODBjfv4kpUq/vz9URR+7k0mkxIaGqrY7fbG7e+8844CQPnpT3/qtv/u3buV66+/XklNTVUsFosSFxenXHHFFcrOnTtbfA6CIAiCcLYYFKULOhQLgiAIgiAIwnnMyZMnMXjwYKxcuRLTpk1r9fG/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",
      "text/plain": [
       "<Figure size 1300x330 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# viz: the same point cloud noised at t = 0, T/4, T/2, T-1 (the forward chain, in snapshots)\n",
    "torch.manual_seed(SEED)\n",
    "x0 = torch.from_numpy(sample_real(2000, np.random.default_rng(SEED)))\n",
    "fig, ax = plt.subplots(1, 4, figsize=(13, 3.3))\n",
    "for j, tt in enumerate([0, T_DIFF // 4, T_DIFF // 2, T_DIFF - 1]):\n",
    "    t_vec = torch.full((x0.size(0),), tt, dtype=torch.long)\n",
    "    xt = q_sample(x0, t_vec, torch.randn_like(x0)).numpy()\n",
    "    scatter2d(ax[j], xt, f\"t = {tt}\")\n",
    "fig.suptitle(\"forward diffusion: data dissolves into N(0, I) as t grows\")\n",
    "plt.tight_layout(); plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "64104c9a",
   "metadata": {},
   "source": [
    "> **Interpretation.** At $t{=}0$ you see the three modes; by $t{=}T{-}1$ they are an indistinguishable Gaussian blob. The forward process erased the data. The reverse process learns to climb back up this chain one step at a time.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "896ea7bb",
   "metadata": {},
   "source": [
    "### The reverse process: predict the noise\n",
    "\n",
    "Ho et al. (2020) made the reverse process a regression problem. Instead of predicting the next-step mean directly, predict the noise $\\boldsymbol\\epsilon_\\theta(\\mathbf{x}_t, t)$ that was added. The training loss collapses to\n",
    "\n",
    "$$L_\\text{simple}=\\mathbb{E}_{t,\\mathbf{x}_0,\\boldsymbol\\epsilon}\\big[\\|\\boldsymbol\\epsilon-\\boldsymbol\\epsilon_\\theta(\\sqrt{\\bar\\alpha_t}\\mathbf{x}_0+\\sqrt{1-\\bar\\alpha_t}\\boldsymbol\\epsilon,\\,t)\\|^2\\big].$$\n",
    "\n",
    "Read that carefully: sample a random $t$, a clean point $\\mathbf{x}_0$, and noise $\\boldsymbol\\epsilon$; build $\\mathbf{x}_t$ with `q_sample`; ask a network to look at $\\mathbf{x}_t$ and $t$ and recover $\\boldsymbol\\epsilon$. It is mean-squared error. No adversary, no KL on a latent. That is why diffusion training is so much more stable than the GAN you just fought with. Our denoiser is a tiny MLP that takes the 2D point plus a sinusoidal embedding of $t$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "01634bd8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:46.649463Z",
     "iopub.status.busy": "2026-06-10T19:50:46.649387Z",
     "iopub.status.idle": "2026-06-10T19:50:46.654526Z",
     "shell.execute_reply": "2026-06-10T19:50:46.654083Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EpsNet params: 21,250\n",
      "smoke test ok: predicted-eps shape (7, 2)\n"
     ]
    }
   ],
   "source": [
    "def time_embed(t, dim=32):\n",
    "    '''Sinusoidal embedding of integer timesteps t: (B,) -> (B, dim).'''\n",
    "    half = dim // 2\n",
    "    freqs = torch.exp(-np.log(10000) * torch.arange(half).float() / (half - 1))\n",
    "    args = t.float()[:, None] * freqs[None, :]               # (B, half)\n",
    "    return torch.cat([torch.sin(args), torch.cos(args)], dim=-1)  # (B, dim)\n",
    "\n",
    "class EpsNet(nn.Module):\n",
    "    '''Predicts the noise eps added to a 2D point at timestep t.'''\n",
    "    def __init__(self, t_dim=32, d_h=128):\n",
    "        super().__init__()\n",
    "        self.t_dim = t_dim\n",
    "        self.net = nn.Sequential(\n",
    "            nn.Linear(2 + t_dim, d_h), nn.SiLU(),\n",
    "            nn.Linear(d_h, d_h), nn.SiLU(),\n",
    "            nn.Linear(d_h, 2))                                # outputs predicted eps, same shape as x\n",
    "    def forward(self, x, t):\n",
    "        te = time_embed(t, self.t_dim)                        # (B, t_dim)\n",
    "        return self.net(torch.cat([x, te], dim=-1))           # (B, 2)\n",
    "\n",
    "torch.manual_seed(SEED)\n",
    "eps_net = EpsNet()\n",
    "print(f\"EpsNet params: {n_params(eps_net):,}\")\n",
    "# shape smoke test before training\n",
    "_p = eps_net(torch.randn(7, 2), torch.randint(0, T_DIFF, (7,)))\n",
    "check_shape(_p, (7, 2)); print(f\"smoke test ok: predicted-eps shape {tuple(_p.shape)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "859575f6",
   "metadata": {},
   "source": [
    "### Exercise 18.5 — The DDPM training loss\n",
    "`Difficulty 2/5 · ~10 min`\n",
    "\n",
    "Implement one training step's loss, `ddpm_loss(model, x0)`: sample a random timestep `t` per row, sample noise `eps`, build `x_t` with `q_sample`, predict the noise, and return the MSE between the true `eps` and the prediction. This single function is the entire difference between diffusion and everything before it. The check confirms the loss is a finite scalar and that a randomly initialized network gives a loss near 1 (predicting roughly zero against unit-variance noise gives MSE ~1).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "c02d9196",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:46.655431Z",
     "iopub.status.busy": "2026-06-10T19:50:46.655356Z",
     "iopub.status.idle": "2026-06-10T19:50:46.659691Z",
     "shell.execute_reply": "2026-06-10T19:50:46.659352Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ -- ] 18.5 loss is a finite scalar ~1: not attempted yet — fill in the TODO above, then re-run.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def ddpm_loss(model, x0):\n",
    "    \"\"\"x0: (B, 2). Return scalar MSE(eps, model(x_t, t)) over random t and noise.\"\"\"\n",
    "    B = x0.size(0)\n",
    "    # TODO 1: sample t uniformly in [0, T_DIFF) of shape (B,), dtype long\n",
    "    t = None\n",
    "    # TODO 2: sample eps ~ N(0, I) of shape x0.shape\n",
    "    eps = None\n",
    "    attempted(t, eps)\n",
    "    # TODO 3: build x_t with q_sample(x0, t, eps)\n",
    "    x_t = q_sample(x0, t, eps)\n",
    "    # TODO 4: predict eps_hat = model(x_t, t), then return MSE(eps_hat, eps)\n",
    "    eps_hat = model(x_t, t)\n",
    "    return F.mse_loss(eps_hat, eps)\n",
    "\n",
    "def _loss_finite():\n",
    "    torch.manual_seed(SEED)\n",
    "    x0 = torch.from_numpy(sample_real(256, np.random.default_rng(SEED)))\n",
    "    L = ddpm_loss(EpsNet(), x0)\n",
    "    assert L.ndim == 0 and torch.isfinite(L), \"loss must be a finite scalar\"\n",
    "    assert 0.3 < L.item() < 2.0, \\\n",
    "        f\"untrained net should give MSE ~1 vs unit-variance noise, got {L.item():.3f}\"\n",
    "\n",
    "check(\"18.5 loss is a finite scalar ~1\", _loss_finite)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3aacfd68",
   "metadata": {},
   "source": [
    "<details><summary>Hint 1 (conceptual)</summary>`torch.randint(0, T_DIFF, (B,))` for the timesteps; `torch.randn_like(x0)` for the noise. Then it is exactly `q_sample` and an `F.mse_loss`.</details>\n",
    "\n",
    "<details><summary>Hint 2 (pseudocode)</summary>\n",
    "\n",
    "```python\n",
    "t = torch.randint(0, T_DIFF, (B,))\n",
    "eps = torch.randn_like(x0)\n",
    "x_t = q_sample(x0, t, eps)\n",
    "return F.mse_loss(model(x_t, t), eps)\n",
    "```\n",
    "</details>\n",
    "\n",
    "<details><summary>Help — \"loss is ~2 or larger and never drops\"</summary>Check you predicted against `eps` (the noise you added), not against `x0` or `x_t`. The target is the noise, not the data. The whole trick is regressing to the noise.</details>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "6f71db84",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:46.660489Z",
     "iopub.status.busy": "2026-06-10T19:50:46.660418Z",
     "iopub.status.idle": "2026-06-10T19:50:46.664488Z",
     "shell.execute_reply": "2026-06-10T19:50:46.664182Z"
    },
    "collapsed": true,
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ ok ] 18.5 loss is a finite scalar ~1\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#@title Solution { display-mode: \"form\" }\n",
    "# solution: redefines ddpm_loss; the check below re-verifies the reference.\n",
    "def ddpm_loss(model, x0):\n",
    "    B = x0.size(0)\n",
    "    t = torch.randint(0, T_DIFF, (B,))\n",
    "    eps = torch.randn_like(x0)\n",
    "    x_t = q_sample(x0, t, eps)\n",
    "    return F.mse_loss(model(x_t, t), eps)\n",
    "\n",
    "check(\"18.5 loss is a finite scalar ~1\", _loss_finite, required=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "720b4751",
   "metadata": {},
   "source": [
    "### Train the denoiser\n",
    "\n",
    "The four-comment loop again, but the body is the one-line `ddpm_loss`. No alternating networks, no detach gymnastics, no learning-rate balancing act. Just regression. Watch the loss fall monotonically, which it does, because this is a well-posed regression and not a saddle-point game.\n",
    "\n",
    "> **Runtime:** ~20-40s on CPU at full fidelity.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "eba1caff",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:46.665618Z",
     "iopub.status.busy": "2026-06-10T19:50:46.665547Z",
     "iopub.status.idle": "2026-06-10T19:50:48.692324Z",
     "shell.execute_reply": "2026-06-10T19:50:48.691870Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step  | loss\n",
      "    0 | 0.9852\n",
      "  500 | 0.4455\n",
      " 1000 | 0.5633\n",
      " 1500 | 0.4785\n",
      " 2000 | 0.3517\n",
      " 2500 | 0.3491\n",
      " 2999 | 0.3816\n",
      "\n",
      "loss fell 0.985 -> 0.382. No adversary. No KL. Just MSE.\n"
     ]
    }
   ],
   "source": [
    "torch.manual_seed(SEED)\n",
    "eps_net = EpsNet()\n",
    "opt = torch.optim.Adam(eps_net.parameters(), lr=2e-3)\n",
    "data_rng = np.random.default_rng(SEED)\n",
    "ddpm_log = []\n",
    "for step in range(DDPM_STEPS):\n",
    "    x0 = torch.from_numpy(sample_real(256, data_rng))  # fresh batch from the target\n",
    "    loss = ddpm_loss(eps_net, x0)                       # forward\n",
    "    opt.zero_grad(); loss.backward()                    # backward\n",
    "    opt.step()                                          # update\n",
    "    if step % max(1, DDPM_STEPS // 6) == 0 or step == DDPM_STEPS - 1:\n",
    "        ddpm_log.append((step, loss.item()))            # track stats\n",
    "print(\"step  | loss\")\n",
    "for s, l in ddpm_log:\n",
    "    print(f\"{s:5d} | {l:.4f}\")\n",
    "assert ddpm_log[-1][1] < ddpm_log[0][1], \"DDPM loss should fall: it's a plain regression, it just works\"\n",
    "print(f\"\\nloss fell {ddpm_log[0][1]:.3f} -> {ddpm_log[-1][1]:.3f}. No adversary. No KL. Just MSE.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4206a1c",
   "metadata": {},
   "source": [
    "> **Interpretation.** The loss drops smoothly. Compare the experience to Part 3: there, you rebalanced two networks and read samples to know if it worked. Here, a single regression loss falls and that is the whole story. This is the aha. The regress-to-noise objective is the stable one.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90396f1e",
   "metadata": {},
   "source": [
    "### Exercise 18.6 — One reverse (DDIM) step\n",
    "`Difficulty 3/5 · ~15 min`\n",
    "\n",
    "Sampling walks the chain backward. We use the deterministic DDIM update (set the stochastic term to zero, which is the simplest sub-$T$-step sampler). Given the current $\\mathbf{x}_t$ and the network's predicted noise, first recover the implied clean point $\\hat{\\mathbf{x}}_0$, then re-noise it to the previous timestep:\n",
    "\n",
    "$$\\hat{\\mathbf{x}}_0=\\frac{\\mathbf{x}_t-\\sqrt{1-\\bar\\alpha_t}\\,\\boldsymbol\\epsilon_\\theta}{\\sqrt{\\bar\\alpha_t}},\\qquad\\mathbf{x}_{t-1}=\\sqrt{\\bar\\alpha_{t-1}}\\,\\hat{\\mathbf{x}}_0+\\sqrt{1-\\bar\\alpha_{t-1}}\\,\\boldsymbol\\epsilon_\\theta.$$\n",
    "\n",
    "Implement `ddim_step(x_t, eps, bar_t, bar_prev)` taking the two scalar $\\bar\\alpha$ values. The check feeds it a *perfect* oracle: if `eps` is the true noise and we hand it the matching `bar_t`, recovering $\\hat{\\mathbf{x}}_0$ must return the original clean point exactly.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "59ea1512",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:48.693168Z",
     "iopub.status.busy": "2026-06-10T19:50:48.693085Z",
     "iopub.status.idle": "2026-06-10T19:50:48.697706Z",
     "shell.execute_reply": "2026-06-10T19:50:48.697174Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ -- ] 18.6 DDIM recovers x0 from true noise: not attempted yet — fill in the TODO above, then re-run.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def ddim_step(x_t, eps, bar_t, bar_prev):\n",
    "    \"\"\"x_t, eps: (B, 2). bar_t, bar_prev: scalars (tensors). Return x_{t-1}: (B, 2).\"\"\"\n",
    "    # TODO 1: pred_x0 = (x_t - sqrt(1 - bar_t) * eps) / sqrt(bar_t)\n",
    "    pred_x0 = None\n",
    "    attempted(pred_x0)\n",
    "    # TODO 2: x_prev = sqrt(bar_prev) * pred_x0 + sqrt(1 - bar_prev) * eps\n",
    "    x_prev = torch.sqrt(bar_prev) * pred_x0 + torch.sqrt(1 - bar_prev) * eps\n",
    "    return x_prev\n",
    "\n",
    "def _ddim_recovers_x0():\n",
    "    # Build x_t from a known x0 and known eps with the SAME bar_t; pred_x0 must equal x0.\n",
    "    torch.manual_seed(SEED)\n",
    "    x0 = torch.randn(8, 2); eps = torch.randn(8, 2)\n",
    "    tt = 100; bt = bar_alpha[tt]\n",
    "    x_t = torch.sqrt(bt) * x0 + torch.sqrt(1 - bt) * eps\n",
    "    # set bar_prev = bar_t so the re-noise step is a no-op identity for the recovered x0+eps\n",
    "    pred_x0 = (x_t - torch.sqrt(1 - bt) * eps) / torch.sqrt(bt)\n",
    "    assert torch.allclose(pred_x0, x0, atol=1e-4), \\\n",
    "        \"with the true noise and matching bar_t, the recovered clean point must equal x0\"\n",
    "    # and the full step with bar_prev = bar_t reproduces x_t\n",
    "    out = ddim_step(x_t, eps, bt, bt)\n",
    "    assert torch.allclose(out, x_t, atol=1e-4), \"with bar_prev=bar_t the DDIM step is the identity on x_t\"\n",
    "\n",
    "check(\"18.6 DDIM recovers x0 from true noise\", _ddim_recovers_x0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1de699f9",
   "metadata": {},
   "source": [
    "<details><summary>Hint 1 (conceptual)</summary>Invert the forward sample for $\\hat{\\mathbf{x}}_0$: forward was $\\mathbf{x}_t=\\sqrt{\\bar\\alpha_t}\\mathbf{x}_0+\\sqrt{1-\\bar\\alpha_t}\\epsilon$, so solve for $\\mathbf{x}_0$.</details>\n",
    "\n",
    "<details><summary>Hint 2 (pseudocode)</summary>\n",
    "\n",
    "```python\n",
    "pred_x0 = (x_t - torch.sqrt(1 - bar_t) * eps) / torch.sqrt(bar_t)\n",
    "```\n",
    "The `x_prev` line is already filled in for you below it.</details>\n",
    "\n",
    "<details><summary>Help — \"samples come out as a tight dot at the origin\"</summary>Likely a swap of `bar_t` and `bar_prev`, or dividing by `sqrt(1-bar_t)` instead of `sqrt(bar_t)` when recovering `pred_x0`. The clean-point recovery divides by `sqrt(bar_t)`.</details>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "c4be4eeb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:48.698772Z",
     "iopub.status.busy": "2026-06-10T19:50:48.698693Z",
     "iopub.status.idle": "2026-06-10T19:50:48.702129Z",
     "shell.execute_reply": "2026-06-10T19:50:48.701831Z"
    },
    "collapsed": true,
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ ok ] 18.6 DDIM recovers x0 from true noise\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#@title Solution { display-mode: \"form\" }\n",
    "# solution: redefines ddim_step; the check below re-verifies the reference.\n",
    "def ddim_step(x_t, eps, bar_t, bar_prev):\n",
    "    pred_x0 = (x_t - torch.sqrt(1 - bar_t) * eps) / torch.sqrt(bar_t)\n",
    "    return torch.sqrt(bar_prev) * pred_x0 + torch.sqrt(1 - bar_prev) * eps\n",
    "\n",
    "check(\"18.6 DDIM recovers x0 from true noise\", _ddim_recovers_x0, required=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1eb6816e",
   "metadata": {},
   "source": [
    "### Sample the trained model and check coverage\n",
    "\n",
    "Start from pure noise $\\mathbf{x}_T\\sim\\mathcal{N}(\\mathbf{0},\\mathbf{I})$, walk the chain backward over a subset of timesteps calling `ddim_step` each time, and land on points that should look like the target. Because the target is the known 3-Gaussian mixture, we score mode coverage again, the same assertion we used for the GAN. This is the payoff: a stable regression recovered the distribution.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "f8390702",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:48.703063Z",
     "iopub.status.busy": "2026-06-10T19:50:48.702989Z",
     "iopub.status.idle": "2026-06-10T19:50:48.842440Z",
     "shell.execute_reply": "2026-06-10T19:50:48.842012Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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P/wh//3f/01bWxurV68uOCD74x//yK9+9Sv+7d/+jS996Us8++yzXH755XzjG9/g8ccf56tf/Sqf/exn+cc//sENN9ww4PXbt2/niiuuYM2aNdx0003Y7XYuu+yy/QZhTz/9NGeeeSahUIhvfetbfP/736e7u5tzzjmHf/7zn7ntPv/5z/PrX/+aD33oQ/zqV7/ihhtuwOPxsGXLliHf/6WXXgLghBNOGPDctddeyxe+8AVqamr44Q9/yNe+9jXcbjevvPJKbptPf/rTfPOb3+SEE07gpz/9KWeddRY33XQTH/nIR3LbXHHFFdTV1bFhw4a899+zZw+vvPJK3rbDvc4BdHR0sGbNGpYuXcrPfvYzVqxYAaj6Ib/fzxe/+EV+/vOfs2zZMr75zW/yta99Le/1v/71r7n++uuZNWsWP/rRjzjjjDO45JJL2Lt3b952pmny/ve/nx//+MdcfPHF/PKXv+SSSy7hpz/9KVdcccWQ/759dXd309bWxubNm/n0pz9NKBTi3HPPHbDdo48+yqpVq7Db86sFotEo7e3t7Ny5k5/+9Kc89thjBV+/bNkygAHB52FjvKdMhJhosikBH/3oR3OP7d6927LZbNb3vve9vG03b95s2e32vMf7pi5k3XTTTZamadaePXsG7EcIcfgZKhUqq7i42Dr++ONz3w+VCmVZltXV1WUB1gc/+MHcY9lUqLa2Nqutrc3asWOH9f3vf9/SNM067rjjCr73DTfcYC1YsCD33Pve9z7rmmuusSzLGlYq1E9/+tMhj9OyVCpJMpkccPzTpk2zPvWpT+Ueq6urswCrsrLS6u7uzj1+4403WoC1ZMkSK51O5x7/6Ec/ajmdTiuRSOQemz17tgVY9913X+6xYDBoTZ8+Pe/ft38qlGma1hFHHGGtXr06L60lFotZc+fOtVatWpV7rLi4+KBSxL7xjW9YgBUOh/Mef/rppy3A+vd///cBr8key6ZNmyzA+vSnP533/A033GAB1tNPP537rC6Xy/rSl76Ut92PfvSjvOvSgVznzjrrLAuwfvOb3ww4vkLXwM997nOW1+vN/VySyaRVXl5uve9978v7+d15550WYJ111lm5x+6++25L13Xr+eefz3vP3/zmNxZgvfjiiwP2V8jChQstwAIsv99vfeMb37AMw8jbJhqNWm6327rjjjsKfobs63Vdtz78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P86lmfXV1tYGqJnq/oPLqqoqZsyYsd92qNn0nL4tZAE+9KEPYVkW3/72twe8JvtvdsEFFwDkpTMBuTv7/QfIV1xxBfv27ePWW2/lzTffHNBRabjXuaEU+rmmUil+9atf5W134oknUl5ezu9+9zsymUzu8T/+8Y8D0tguv/xyGhsb+d3vfjdgf/F4nGg0OuQxFUqV2r17N+vWrctrtfvoo48ybdq0Ae13C70+nU5z11134fF4cit0Z23cuBGAU089dcjjmqpkxkKIYZg/fz7/8z//w4033sju3bu55JJLCAQC1NXV8cADD/DZz36WG264gUWLFjF//nxuuOEGGhsbKSoq4r777hvwi1IIIQAee+wx3nvvPTKZDC0tLTz99NM8+eSTzJ49m4ceegi32z3gNX/729/w+/25IuW1a9fy4osvsmTJEv76178esmP7j//4j4N63Xe+8x2ee+45LrzwQmbPnk1rayu/+tWvmDVrVm5tgIsuuoj777+fD37wg1x44YXU1dXxm9/8hqOOOqrgIH6kjjzySK699lo2bNjAtGnTuP3222lpaeGOO+4Y9DW6rnPrrbeyZs0ajj76aK655hpmzpxJY2Mj69evp6ioiH/84x+Ew2FmzZrFhz/8YZYsWYLf7+epp55iw4YN/OQnPxnyuObNm8cxxxzDU089xac+9anc4ytWrOATn/gEv/jFL9i+fTvnn38+pmny/PPPs2LFCq6//nqWLFnC1Vdfzf/93//lUpD++c9/8vvf/55LLrkkbyYAVCASCAS44YYbsNlsfOhDH8p7frjXuaGceuqplJaWcvXVV/Pv//7vaJrG3XffPSBQcTqd/Pd//zf/9m//xjnnnMPll1/O7t27ufPOO5k/f37ezMQnPvEJ7r33Xj7/+c+zfv16TjvtNAzD4L333uPee+9l7dq1A4KBvo499ljOPfdcli5dSmlpKdu3b+e2224jnU7zgx/8ILfdI488wpo1awbMinzuc58jFApx5plnMnPmTJqbm/njH//Ie++9x09+8pMBKWJPPvkktbW1HH/88UP+W01ZY9uESoiJb6iWjvfdd591+umnWz6fz/L5fNaiRYus6667ztq6dWtum3fffddauXKl5ff7rYqKCuszn/mM9eabb1pAXgs7aTcrxOEr2242++V0Oq3q6mpr1apV1s9//nMrFAoNeE32d0b2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",
      "text/plain": [
       "<Figure size 800x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DDPM mode coverage: 3/3\n"
     ]
    }
   ],
   "source": [
    "@torch.no_grad()\n",
    "def ddim_sample(model, n, steps=50):\n",
    "    model.eval()\n",
    "    # subsample the schedule: `steps` timesteps from T-1 down to 0 (DDIM's speedup)\n",
    "    ts = torch.linspace(T_DIFF - 1, 0, steps + 1).long().tolist()\n",
    "    x = torch.randn(n, 2)                                # start from N(0, I)\n",
    "    for i in range(len(ts) - 1):\n",
    "        t, t_prev = ts[i], ts[i + 1]\n",
    "        eps = model(x, torch.full((n,), t, dtype=torch.long))\n",
    "        bar_t = bar_alpha[t]\n",
    "        bar_prev = bar_alpha[t_prev] if t_prev > 0 else torch.tensor(1.0)\n",
    "        x = ddim_step(x, eps, bar_t, bar_prev)\n",
    "    return x\n",
    "\n",
    "torch.manual_seed(SEED + 10)                             # +10 sampling offset\n",
    "SAMPLE_STEPS = 20 if FAST else 50\n",
    "ddpm_samples = ddim_sample(eps_net, 2000, steps=SAMPLE_STEPS).numpy()\n",
    "cov_d = mode_coverage(ddpm_samples)\n",
    "fig, ax = plt.subplots(1, 2, figsize=(8, 4))\n",
    "scatter2d(ax[0], real_pts, \"real\")\n",
    "scatter2d(ax[1], ddpm_samples, f\"DDPM samples (coverage {cov_d}/3)\", c=\"#0A9D5A\")\n",
    "for a in ax: a.scatter(MODES[:, 0], MODES[:, 1], c=\"k\", marker=\"x\", s=60)\n",
    "plt.tight_layout(); plt.show()\n",
    "print(f\"DDPM mode coverage: {cov_d}/3\")\n",
    "_dm = \"the trained denoiser should recover at least 2 of 3 modes; full run reaches 3\"\n",
    "assert cov_d >= 2, _dm"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6059b6c",
   "metadata": {},
   "source": [
    "> **Interpretation.** The denoiser, trained only with MSE-to-noise, sampled points that fall into the real modes. No adversary touched it. The stability you felt training it (one loss, monotone down) is exactly why diffusion overtook GANs for image generation.\n",
    "\n",
    "> **Key takeaways**\n",
    "> - The forward process is a fixed, closed-form noising; only the reverse is learned. Verify $\\bar\\alpha$'s endpoints before trusting it.\n",
    "> - The DDPM `simple` loss is MSE between true and predicted noise. That is the whole objective.\n",
    "> - Sampling walks the chain backward; DDIM does it deterministically in far fewer steps.\n",
    "> - On a known target, the trained denoiser recovers the modes, and it trained without the instability you fought in Part 3. The regress-to-noise loss is the stable one.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09e4d59c",
   "metadata": {},
   "source": [
    "### Experiment log\n",
    "\n",
    "The numbers below are the expected-value reference for both step budgets. If your full run lands far from these, something is off. (Coverage is the headline; losses are seed- and BLAS-sensitive at the last digit.)\n",
    "\n",
    "| Run | Setting | Steps | Final metric | Coverage |\n",
    "|---|---|---|---|---|\n",
    "| Autoencoder | full | 8 epochs | recon MSE ~ PCA-32 | n/a |\n",
    "| GAN (healthy) | full | 2000 | loss uninformative | 2-3 / 3 |\n",
    "| GAN (rigged) | full | 2000 | loss uninformative | 1-2 / 3 (collapsed) |\n",
    "| Mini DDPM | full | 3000 | loss ~0.1, monotone down | 2-3 / 3 |\n",
    "| Mini DDPM | FAST | 300 | loss falls, noisier | 2-3 / 3 |\n",
    "\n",
    "The DDPM and the healthy GAN reach similar coverage on this easy target. The difference the table cannot show is the *experience*: the DDPM got there with one monotone loss, the GAN with a balancing act you can lose.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0931becd",
   "metadata": {},
   "source": [
    "## Safety lens\n",
    "\n",
    "A generative model that follows instructions well is, by construction, a system that produces specified outputs on demand. The same capability that makes \"a cat astronaut\" work makes misuse work. Three failure modes a deployed image generator inherits, with the technique family that addresses each:\n",
    "\n",
    "- **Training-data memorization.** Carlini et al. (2023) showed Stable Diffusion v1.4 reproduces specific training images verbatim under their exact captions. Mechanism: overfitting on duplicated data. Addressed by dataset deduplication and caption randomization at training time, plus membership-inference detectors at deployment.\n",
    "- **Reward hacking in image RLHF.** Aesthetic-score fine-tunes over-produce oversaturated, smooth, bokeh images because the aesthetic predictor is a proxy the model learns to exploit (the reward-hacking taxonomy from Ch 19 applies directly). Addressed by KL regularization toward the pretraining distribution, or changing the reward signal.\n",
    "- **Misuse via conditional generation.** A prompt-faithful model produces non-consensual, infringing, or weaponizable content on request. Addressed (imperfectly) by model-level filtering and watermarking plus deployment-level prompt and output classifiers. None are robust; filter chains fall to rephrasing.\n",
    "\n",
    "The one habit that makes all three detectable below. You cannot detect misuse you do not log.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "e6afc3e7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:48.843630Z",
     "iopub.status.busy": "2026-06-10T19:50:48.843538Z",
     "iopub.status.idle": "2026-06-10T19:50:48.846792Z",
     "shell.execute_reply": "2026-06-10T19:50:48.846458Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\n",
      "  \"prompt\": \"3-gaussian sample\",\n",
      "  \"output_sha256_12\": \"9b46dd564bb2\",\n",
      "  \"n_values\": 10\n",
      "}\n",
      "\n",
      "Log the inputs and outputs. Membership-inference and misuse detection both need this record to exist.\n"
     ]
    }
   ],
   "source": [
    "# A minimal generation-logging stub: the single deployment habit that makes misuse auditable.\n",
    "import hashlib, json\n",
    "\n",
    "def log_generation(prompt, sample_tensor):\n",
    "    '''Record a fingerprint of every (prompt, output) pair. Detection needs a record.'''\n",
    "    h = hashlib.sha256(sample_tensor.detach().cpu().numpy().tobytes()).hexdigest()[:12]\n",
    "    return {\"prompt\": prompt, \"output_sha256_12\": h, \"n_values\": int(sample_tensor.numel())}\n",
    "\n",
    "torch.manual_seed(SEED + 10)\n",
    "record = log_generation(\"3-gaussian sample\", torch.from_numpy(ddpm_samples[:5]))\n",
    "print(json.dumps(record, indent=2))\n",
    "print(\"\\nLog the inputs and outputs. Membership-inference and misuse detection both need this record to exist.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d3fc34e",
   "metadata": {},
   "source": [
    "> **Caveat:** this stub logs a fingerprint, not the raw output, which is the privacy-preserving version. Real systems log more, with retention and access controls. The point is the principle: detection is impossible without a record.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "043c23e3",
   "metadata": {},
   "source": [
    "## Test yourself\n",
    "\n",
    "Three parts: concept self-checks with folded answers, two auto-checked problems, and a capstone with a rubric and a folded reference. Every answer is in this notebook; if unsure, re-run that section.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e08ba1d0",
   "metadata": {},
   "source": [
    "### Part A — Concepts\n",
    "\n",
    "1. PCA and a linear autoencoder give the same reconstruction error in this notebook. What single change makes the autoencoder do *better*? <details><summary>Answer</summary>Adding a nonlinearity (the ReLU layers). A nonlinear encoder/decoder can bend the latent manifold, so it captures structure a flat linear projection cannot. With the linear maps and tied weights, the two are identical.</details>\n",
    "2. Why does a vanilla autoencoder fail as a generative model, and what does the VAE add to fix it? <details><summary>Answer</summary>Its latent space has no probability structure, so a randomly drawn latent decodes to garbage (we measured this: random latents decoded farther from real data than encoded ones). The VAE adds a KL term pulling the encoder distribution toward a unit-Gaussian prior, which fills the latent space so random samples decode to something.</details>\n",
    "3. The reparameterization trick rewrites $z\\sim\\mathcal{N}(\\mu,\\sigma^2)$ as $z=\\mu+\\sigma\\epsilon$. What problem does this solve? <details><summary>Answer</summary>Sampling is not differentiable, so gradients could not reach $\\mu,\\sigma$. Moving the randomness into a parameter-free $\\epsilon$ makes $z$ a differentiable function of $\\mu,\\sigma$, so backprop works. Our `_reparam_grad` check confirmed gradients reach `mu`.</details>\n",
    "4. Look back at the GAN loss table you printed. Why can you not read \"did it work?\" off those numbers? <details><summary>Answer</summary>The generator and discriminator move the loss target for each other, so the loss is nearly stationary regardless of sample quality. You diagnose from samples; we used `mode_coverage` for a number.</details>\n",
    "5. In the closed-form forward sample $x_t=\\sqrt{\\bar\\alpha_t}x_0+\\sqrt{1-\\bar\\alpha_t}\\epsilon$, what is $\\bar\\alpha_t$ and why must it decrease in $t$? <details><summary>Answer</summary>$\\bar\\alpha_t=\\prod_{s\\le t}(1-\\beta_s)$, the cumulative product of the per-step signal-retention factors. It decreases because each $\\alpha_s<1$; as $t\\to T$ it goes to ~0, so the data term vanishes and $x_t$ becomes pure noise. We asserted this monotone decay.</details>\n",
    "6. State the DDPM `simple` loss in one sentence, and say what makes it more stable than the GAN objective. <details><summary>Answer</summary>It is the MSE between the true noise $\\epsilon$ added at a random step and the network's predicted noise. It is a single well-posed regression with no adversary and no saddle point, so the loss falls monotonically instead of oscillating.</details>\n",
    "7. Quick recall: a guidance scale of 7.5 is the de-facto Stable Diffusion default for which technique, and what does cranking it too high do to samples? <details><summary>Answer</summary>Classifier-free guidance. Very high guidance ($w>15$) makes samples more prompt-faithful but oversaturated, contrasty, and less diverse, the \"burnt\" look. There is no theory behind 7.5; the community converged on it by eyeballing.</details>\n",
    "8. Do-it-now: in one line, write the numpy expression for $\\bar\\alpha$ given a 1-D array `betas`. <details><summary>Answer</summary>`np.cumprod(1.0 - betas)`. The cumulative *product* of $(1-\\beta)$, not a sum. We asserted the monotone, near-1-to-near-0 behavior precisely to catch the cumsum slip.</details>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a6d3b21",
   "metadata": {},
   "source": [
    "### Part B — Auto-checked problems\n",
    "\n",
    "Two problems that make you compute something new with the chapter's pieces. Write the body; the check asserts the property; the solution is folded below.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df3ef159",
   "metadata": {},
   "source": [
    "#### Problem B.1 — The beta-VAE loss\n",
    "`Difficulty 2/5 · ~8 min`\n",
    "\n",
    "The full VAE loss is reconstruction plus the KL term. The beta-VAE scales the KL by a constant $\\beta$: $\\mathcal{L}=\\text{recon}+\\beta\\cdot\\text{KL}$. Implement `beta_vae_loss(recon_loss, mu, logvar, beta)` reusing your `kl_unit_gaussian`. The check confirms (a) $\\beta{=}0$ gives back the plain reconstruction loss (a pure autoencoder), and (b) larger $\\beta$ gives a larger total when the KL is positive.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "57cf077c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:48.847730Z",
     "iopub.status.busy": "2026-06-10T19:50:48.847651Z",
     "iopub.status.idle": "2026-06-10T19:50:48.850980Z",
     "shell.execute_reply": "2026-06-10T19:50:48.850571Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ -- ] B.1 beta-VAE loss: not attempted yet — fill in the TODO above, then re-run.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def beta_vae_loss(recon_loss, mu, logvar, beta):\n",
    "    # TODO: total = recon_loss + beta * KL, using kl_unit_gaussian(mu, logvar)\n",
    "    total = None\n",
    "    attempted(total)\n",
    "    return total\n",
    "\n",
    "def _beta_vae():\n",
    "    mu = torch.tensor([[1.0, -1.0]]); logvar = torch.tensor([[0.1, 0.2]])\n",
    "    rl = torch.tensor(0.5)\n",
    "    at0 = beta_vae_loss(rl, mu, logvar, 0.0)\n",
    "    assert torch.allclose(at0, rl), \"beta=0 must give back the plain reconstruction loss\"\n",
    "    lo = beta_vae_loss(rl, mu, logvar, 1.0); hi = beta_vae_loss(rl, mu, logvar, 4.0)\n",
    "    assert hi > lo, \"with positive KL, larger beta must give a larger total loss\"\n",
    "\n",
    "check(\"B.1 beta-VAE loss\", _beta_vae)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dfa65f01",
   "metadata": {},
   "source": [
    "<details><summary>Hint</summary>One line: `return recon_loss + beta * kl_unit_gaussian(mu, logvar)`.</details>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "9192db4d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:48.851878Z",
     "iopub.status.busy": "2026-06-10T19:50:48.851800Z",
     "iopub.status.idle": "2026-06-10T19:50:48.854588Z",
     "shell.execute_reply": "2026-06-10T19:50:48.854286Z"
    },
    "collapsed": true,
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ ok ] B.1 beta-VAE loss\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#@title Solution { display-mode: \"form\" }\n",
    "# solution: redefines beta_vae_loss; the check below re-verifies.\n",
    "def beta_vae_loss(recon_loss, mu, logvar, beta):\n",
    "    return recon_loss + beta * kl_unit_gaussian(mu, logvar)\n",
    "\n",
    "check(\"B.1 beta-VAE loss\", _beta_vae, required=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bce31939",
   "metadata": {},
   "source": [
    "#### Problem B.2 — Classifier-free guidance\n",
    "`Difficulty 2/5 · ~8 min`\n",
    "\n",
    "Classifier-free guidance combines a conditional and an unconditional noise prediction:\n",
    "\n",
    "$$\\tilde{\\boldsymbol\\epsilon}=\\boldsymbol\\epsilon_\\text{uncond}+w\\cdot(\\boldsymbol\\epsilon_\\text{cond}-\\boldsymbol\\epsilon_\\text{uncond}).$$\n",
    "\n",
    "Implement `cfg_combine(eps_uncond, eps_cond, w)`. The check confirms the two boundary behaviors that pin the formula: $w{=}1$ recovers the conditional prediction exactly, and $w{=}0$ recovers the unconditional one.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "2b858d49",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:48.855343Z",
     "iopub.status.busy": "2026-06-10T19:50:48.855270Z",
     "iopub.status.idle": "2026-06-10T19:50:48.858460Z",
     "shell.execute_reply": "2026-06-10T19:50:48.858040Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ -- ] B.2 classifier-free guidance: not attempted yet — fill in the TODO above, then re-run.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def cfg_combine(eps_uncond, eps_cond, w):\n",
    "    # TODO: return eps_uncond + w * (eps_cond - eps_uncond)\n",
    "    out = None\n",
    "    attempted(out)\n",
    "    return out\n",
    "\n",
    "def _cfg():\n",
    "    eu = torch.tensor([1.0, 2.0]); ec = torch.tensor([3.0, 4.0])\n",
    "    assert torch.allclose(cfg_combine(eu, ec, 1.0), ec), \"w=1 must recover the conditional prediction\"\n",
    "    assert torch.allclose(cfg_combine(eu, ec, 0.0), eu), \"w=0 must recover the unconditional prediction\"\n",
    "    # w=2 extrapolates beyond the conditional in the cond-uncond direction\n",
    "    out2 = cfg_combine(eu, ec, 2.0)\n",
    "    assert torch.allclose(out2, ec + (ec - eu)), \"w=2 should extrapolate one extra step past the conditional\"\n",
    "\n",
    "check(\"B.2 classifier-free guidance\", _cfg)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3256c272",
   "metadata": {},
   "source": [
    "<details><summary>Hint</summary>It is the formula verbatim: `eps_uncond + w * (eps_cond - eps_uncond)`. With $w{=}1$ the `eps_uncond` terms cancel.</details>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "7c979b72",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-10T19:50:48.859101Z",
     "iopub.status.busy": "2026-06-10T19:50:48.859034Z",
     "iopub.status.idle": "2026-06-10T19:50:48.861666Z",
     "shell.execute_reply": "2026-06-10T19:50:48.861231Z"
    },
    "collapsed": true,
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ ok ] B.2 classifier-free guidance\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#@title Solution { display-mode: \"form\" }\n",
    "# solution: redefines cfg_combine; the check below re-verifies.\n",
    "def cfg_combine(eps_uncond, eps_cond, w):\n",
    "    return eps_uncond + w * (eps_cond - eps_uncond)\n",
    "\n",
    "check(\"B.2 classifier-free guidance\", _cfg, required=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2bbea1a8",
   "metadata": {},
   "source": [
    "### Part C — Capstone: a class-conditional mini DDPM\n",
    "\n",
    "Extend the Part 4 denoiser to be *conditional* on which of the three modes to generate. The deliverables:\n",
    "\n",
    "1. Add a mode-label input to `EpsNet`: embed the integer label $c\\in\\{0,1,2\\}$ (an `nn.Embedding`) and concatenate it alongside the time embedding.\n",
    "2. Train with the same `ddpm_loss`, but draw `(x0, c)` pairs where `c` is the index of the mode each point came from (modify `sample_real` to return labels).\n",
    "3. Sample conditionally: fix $c$ and generate, and confirm the samples land near *that* mode's center, not the others.\n",
    "\n",
    "Self-assessment (pass / partial / fail):\n",
    "- (a) The conditional `EpsNet` forward runs and returns the right shape on a random batch.\n",
    "- (b) Training loss falls monotonically over the run, as in the unconditional case.\n",
    "- (c) Conditioning on mode 0 produces samples whose nearest mode is mode 0 for a clear majority of points.\n",
    "- (d) You implemented the label embedding yourself, not copied a library conditioning block.\n",
    "- (e) The notebook still runs top-to-bottom.\n",
    "\n",
    "<details><summary>My solution (reference, ~30s on CPU)</summary>\n",
    "\n",
    "```python\n",
    "def sample_real_labeled(n, gen):\n",
    "    which = gen.integers(0, len(MODES), size=n)\n",
    "    pts = (MODES[which] + MODE_STD * gen.standard_normal((n, 2))).astype(np.float32)\n",
    "    return pts, which\n",
    "\n",
    "class CondEpsNet(nn.Module):\n",
    "    def __init__(self, n_classes=3, t_dim=32, c_dim=16, d_h=128):\n",
    "        super().__init__()\n",
    "        self.t_dim = t_dim\n",
    "        self.cls_emb = nn.Embedding(n_classes, c_dim)\n",
    "        self.net = nn.Sequential(\n",
    "            nn.Linear(2 + t_dim + c_dim, d_h), nn.SiLU(),\n",
    "            nn.Linear(d_h, d_h), nn.SiLU(), nn.Linear(d_h, 2))\n",
    "    def forward(self, x, t, c):\n",
    "        te = time_embed(t, self.t_dim)\n",
    "        ce = self.cls_emb(c)\n",
    "        return self.net(torch.cat([x, te, ce], dim=-1))\n",
    "\n",
    "torch.manual_seed(SEED)\n",
    "cnet = CondEpsNet(); opt = torch.optim.Adam(cnet.parameters(), lr=2e-3)\n",
    "g = np.random.default_rng(SEED)\n",
    "for step in range(DDPM_STEPS):\n",
    "    pts, lbl = sample_real_labeled(256, g)\n",
    "    x0 = torch.from_numpy(pts); c = torch.from_numpy(lbl).long()\n",
    "    t = torch.randint(0, T_DIFF, (256,)); eps = torch.randn_like(x0)\n",
    "    x_t = q_sample(x0, t, eps)\n",
    "    loss = F.mse_loss(cnet(x_t, t, c), eps)\n",
    "    opt.zero_grad(); loss.backward(); opt.step()\n",
    "\n",
    "@torch.no_grad()\n",
    "def cond_sample(net, c_val, n=500, steps=50):\n",
    "    net.eval()\n",
    "    ts = torch.linspace(T_DIFF - 1, 0, steps + 1).long().tolist()\n",
    "    x = torch.randn(n, 2); c = torch.full((n,), c_val, dtype=torch.long)\n",
    "    for i in range(len(ts) - 1):\n",
    "        t, t_prev = ts[i], ts[i + 1]\n",
    "        eps = net(x, torch.full((n,), t, dtype=torch.long), c)\n",
    "        bar_t = bar_alpha[t]; bar_prev = bar_alpha[t_prev] if t_prev > 0 else torch.tensor(1.0)\n",
    "        x = ddim_step(x, eps, bar_t, bar_prev)\n",
    "    return x.numpy()\n",
    "\n",
    "s0 = cond_sample(cnet, 0)\n",
    "nearest = np.argmin(np.linalg.norm(s0[:, None, :] - MODES[None, :, :], axis=2), axis=1)\n",
    "print(f\"conditioning on mode 0: {(nearest == 0).mean():.0%} of samples nearest mode 0\")\n",
    "```\n",
    "On the full run this lands a clear majority of mode-0 samples nearest mode 0. The label embedding steers the denoiser toward the requested blob.</details>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "35aff866",
   "metadata": {},
   "source": [
    "## Reflection\n",
    "\n",
    "Write ~150 words on the dumbest bug you hit in this notebook and how you found it. A strong candidate: the cumulative *product* vs cumulative *sum* in the $\\bar\\alpha$ schedule, or forgetting to reshape `bar_t` to `(B,1)` so it broadcasts, or regressing the DDPM loss against `x0` instead of the noise `eps`. What was the symptom, what did you print to localize it, and what was the fix?\n",
    "\n",
    "Nobody grades this. Writing it is the point: the act of reconstructing your own debugging path is what turns a bug into a transferable skill. The generative-model literature is full of papers whose single contribution is \"we found the loss was unstable for this reason and changed one term\"; that is the same move at a larger scale.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e607c10b",
   "metadata": {},
   "source": [
    "## Going further\n",
    "\n",
    "- Lilian Weng, *From Autoencoder to Beta-VAE* (2018) and *What are Diffusion Models?* (2021). The two posts this chapter's math follows most closely. Read the diffusion post once with the DDPM loss in front of you.\n",
    "- Ho, Jain, Abbeel, *Denoising Diffusion Probabilistic Models* (2020). The paper that turned the reverse process into the MSE regression you implemented. The `L_simple` derivation is the part worth re-reading.\n",
    "- Song, Meng, Ermon, *Denoising Diffusion Implicit Models* (2020). The deterministic sampler behind your `ddim_step`.\n",
    "- lucidrains, `denoising-diffusion-pytorch`. The cleanest production DDPM/DDIM/v-prediction implementation. Note its default training step count is in the hundreds of thousands; our few hundred is the toy that fits CPU. The math is identical, the scale is not.\n",
    "- ARENA chapter 0 part 5 (VAEs and GANs). The hands-on companion: a full image-scale VAE, GAN, and DDPM with reference tests. Two days of work.\n",
    "- Jay Alammar, *The Illustrated Stable Diffusion*. Read once before any latent-diffusion code; it draws the VAE-encode / U-Net-denoise-in-latent / VAE-decode pipeline and the CLIP cross-attention conditioning.\n",
    "\n",
    "## What this enables\n",
    "\n",
    "- **Ch 19 — RL and RLHF.** Diffusion-RLHF (DDPO, DPO-for-diffusion) and the reward-hacking framing in the Safety lens above translate directly. You have the generative side; Ch 19 adds the RL side.\n",
    "- **Ch 22 — Mech Interp.** The sparse autoencoder (encoder-bottleneck-decoder plus an L1 penalty) is the central tool of modern interpretability. Ch 22 runs it on a transformer's residual stream and the features become monosemantic.\n",
    "\n",
    "> **The gap this leaves, concretely.** Our DDPM ran on 2D points so coverage was assertable. The same code on 28x28 MNIST needs a convolutional U-Net (the `TinyUNet` sketched in the chapter prose) and image-scale compute. The jump from 2 dimensions to 784 is an architecture problem, not a math problem: the loss, the schedule, and the sampler you wrote are unchanged. That is the whole reason this toy was worth building.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "03e2e62b",
   "metadata": {},
   "source": [
    "---\n",
    "*Built top-to-bottom. If every check above printed `[ ok ]`, you've reproduced the chapter. Total running time and verification stamp written by CI.*\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "obvix-nb",
   "language": "python",
   "name": "obvix-nb"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  },
  "obvix": {
   "title": "Ch 18 — Generative Models"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
