{ "cells": [ { "cell_type": "markdown", "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "metadata": {}, "source": [ "# Deep-network initialization for `absolute`\n", "\n", "The `absolute` construction (`mode=\"absolute\"`) constrains weights to `|W|`. Under a generic\n", "init (`he_normal`) this is poorly conditioned with depth, and deep `absolute` stacks fail to\n", "train. `mononet` now derives a **static, per-activation init** (variance-preserving gain +\n", "layer-mean-centering bias; `mononet.core.init.absolute_init_params`), the default for\n", "`mode=\"absolute\"`.\n", "\n", "**What this fixes.** At **moderate depth** the new init makes `absolute` train where the old\n", "`he_normal` default does not (see the table below — lower train MSE is better; the target is\n", "unit-variance, so about 1.0 means \"not learning\").\n", "\n", "**What it does not fix (Follow-up B).** A genuinely deep (>= 8) *plain* stack still blows up:\n", "`|W|`'s all-positive weights make layer outputs strongly correlated, so variance compounds\n", "with depth — for **both** `absolute` and `switch`. Static per-layer init cannot make an\n", "unnormalized deep stack forward-stable. Deep training is the subject of Follow-up B\n", "(near-identity `MonoResidual` skip connections every few layers, and/or normalization)." ] }, { "cell_type": "code", "execution_count": 1, "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901", "metadata": { "execution": { "iopub.execute_input": "2026-07-02T16:12:31.846480Z", "iopub.status.busy": "2026-07-02T16:12:31.846395Z", "iopub.status.idle": "2026-07-02T16:12:32.373267Z", "shell.execute_reply": "2026-07-02T16:12:32.372866Z" } }, "outputs": [ { "data": { "text/html": [ "
| method | \n", "absolute (he_normal) | \n", "absolute (new init) | \n", "switch | \n", "
|---|---|---|---|
| depth | \n", "\n", " | \n", " | \n", " |
| 2 | \n", "1.7324 | \n", "0.1167 | \n", "0.0945 | \n", "
| 4 | \n", "1.9424 | \n", "0.8033 | \n", "14.7118 | \n", "
| 8 | \n", "2.0000 | \n", "2.0000 | \n", "373799.6256 | \n", "
| 16 | \n", "2.0000 | \n", "1000000.0000 | \n", "1000000.0000 | \n", "