Buckets:
| """Write the Trackio logbook pages (never via Write/Edit: the formatter hook mangles | |
| embedded cell metadata).""" | |
| import json | |
| import os | |
| ROOT = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) | |
| PAGES = os.path.join(ROOT, ".trackio", "logbook", "pages") | |
| def cell(meta, body): | |
| return ( | |
| "\n---\n<!-- trackio-cell\n" | |
| + json.dumps(meta) | |
| + "\n-->\n" | |
| + body.strip() | |
| + "\n" | |
| ) | |
| def write(slug, title, cells): | |
| d = os.path.join(PAGES, slug) | |
| os.makedirs(d, exist_ok=True) | |
| with open(os.path.join(d, "page.md"), "w") as f: | |
| f.write("# " + title + "\n" + "".join(cells)) | |
| print("wrote", slug) | |
| OUT = os.path.join(ROOT, "outputs") | |
| poster = open(os.path.join(ROOT, "poster", "poster_embed.html")).read() | |
| # ---------------------------------------------------------------- exec summary | |
| EXEC = """ | |
| **Outcome: all six claims VERIFIED.** This is a constructive existence paper, so we reproduced | |
| it by *building* the networks rather than re-reading the proof: an independent IEEE-754 | |
| floating-point network simulator with strictly left-to-right accumulation (cross-checked against | |
| PyTorch autograd), plus our own construction of the paper's two gadgets. On a finite domain of | |
| adjacent binary32 / binary64 numbers, a floating-point network simultaneously reproduces an | |
| arbitrary target function `f*` **and** an arbitrary, independently drawn AD gradient `g*` | |
| **bit for bit** -- max absolute error `0.0` on both, for ReLU, ELU, GELU, Swish, Sigmoid and | |
| tanh, in binary32 and binary64, at every depth L = 5..12 (36 networks, 1188 value checks and 1188 | |
| gradient checks, zero mismatches). Lemma 3.4 (values kept, gradient identically 0) and Lemma 3.5 | |
| (output identically 0, gradient arbitrary) both reproduce exactly, and the mechanism claim is | |
| confirmed three ways: re-running the *same* networks in exact rational arithmetic destroys both | |
| constructions, deleting the +C/-C unit pair revives the suppressed gradient, and merely | |
| *permuting the layer-1 unit order* -- a no-op in exact arithmetic -- does the same. The one | |
| place we differ from the paper is in its favour but not in its wording: `L >= 9` is sufficient | |
| but far from tight (our construction meets the same guarantee at `L = 5`; the authors' own | |
| arXiv v2 lowers their bound to `L >= 7`). | |
| ## Scope & cost | |
| | Item | Value | | |
| | --- | --- | | |
| | Scope | 6/6 claims; own simulator + own construction; 36 Theorem-3.1 networks, 12 Lemma-3.4, 12 Lemma-3.5, 16 depth variants, 1 Theorem-3.2 network; binary32 + binary64; exhaustive over every point of each finite domain | | |
| | Hardware | CPU only (1 core), no GPU, no API key | | |
| | Compute time | ~6 minutes wall clock total (largest single run: 4 min for the exhaustive binary16 sign-symmetry sweep over 4.03e9 ordered pairs) | | |
| | Cost | $0 | | |
| | Bit-exactness | every check is `==`, never a tolerance | | |
| """ | |
| write( | |
| "executive-summary", | |
| "Executive summary", | |
| [ | |
| cell({"type": "markdown", "title": "Executive summary", "pinned": True}, EXEC), | |
| cell( | |
| { | |
| "type": "figure", | |
| "title": "Reproduction poster (poster_embed.html)", | |
| "pinned": True, | |
| }, | |
| "````html\n" + poster.strip() + "\n````", | |
| ), | |
| ], | |
| ) | |
| # ---------------------------------------------------------------- claim 1 | |
| C1 = """ | |
| ### Claim (verbatim) | |
| > Floating-point networks built from automatic differentiation can represent an arbitrary target | |
| > floating-point function's values together with an arbitrary, independently chosen gradient on a | |
| > bounded domain, using at least 9 layers (Theorem 3.1, Section 3). | |
| **Verdict: VERIFIED.** | |
| ### Independent method | |
| We did not transcribe the proof. We wrote (a) `scripts/fpnet.py`, an IEEE-754 sigma-network | |
| simulator in which every scalar operation is a correctly-rounded machine operation and every | |
| matrix-vector product is accumulated **strictly left to right**, exactly as the paper's | |
| `D_{f,x}(g) = g (x) A_L (x) sigma'(y_{L-1}) (x) ... (x) sigma'(y_1) (x) A_1` requires; and (b) | |
| `scripts/construct.py`, our own construction of `f = f2 # f1`. All activation operating points | |
| are *searched numerically* per activation and per format, never assumed from the paper. | |
| The simulator was cross-checked against **PyTorch autograd** on random networks | |
| (`scripts/check_torch.py`): max relative gradient difference `7.5e-7` (binary32) and `4.0e-15` | |
| (binary64) -- the residue is PyTorch's own summation order, which is exactly the phenomenon the | |
| paper is about. | |
| ### Scale, seeds, domain | |
| * Domain `X` = 33 points, every other binary32 number of `[1,2)` (spacing 2 ulp) -- i.e. adjacent | |
| floating-point numbers, the densest finite domain that exists; the binary64 runs use the | |
| analogous grid. | |
| * Targets `f*`, `h*`, `g*` drawn independently at random (seeds 20260725, ...+1, ...+2), with the | |
| theorem's only hypothesis enforced (`h*(x) = 0 => g*(x) = 0`, ~15% of points). | |
| * Depth `L = 9` for the headline runs; the check is run at **every** point of `X`, not a sample. | |
| ### Numerical result | |
| | quantity | value | | |
| | --- | --- | | |
| | networks built | 36 (6 activations x 2 formats x 3 seeds) | | |
| | value checks | 1188, **1188 exact** | | |
| | gradient checks | 1188, **1188 exact** | | |
| | max abs error, `f(x) - f*(x)` | **0.0** | | |
| | max abs error, `D_{f,x}(h*(x)) - g*(x)` | **0.0** | | |
| | 2-D domain (6x6 grid, d = 2) | 0 mismatches, both components of `g*` exact | | |
| Expected value: exact equality, since the theorem is an existence statement about exact | |
| floating-point equality -- and that is what we get. | |
| ### Boundary / counterexample audit | |
| * **Depth sweep.** `L = 5, 6, 7, 8, 9, 10, 11, 12` -- all exact (`outputs/claim1_depth.json`). | |
| The claim's `L >= 9` is therefore **sufficient and true**, but it is *not tight*: our | |
| independent construction achieves the same guarantee at **`L = 5`**, and the authors' own | |
| arXiv v2 (Theorem 1) lowers their bound to `L >= 7`. This is a non-tightness finding, not a | |
| contradiction: the theorem says "for any `L >= 9` there exists an `L`-layer network", which | |
| holds. | |
| * **Genuine lower bound.** `L = 1` (a bare affine map) gives `D_{f,x}(y) = y (x) A_1`, which does | |
| not depend on `x` at all; we confirm numerically that the gradient is constant across `x`. So | |
| *some* depth is genuinely required and the claim is not vacuous. | |
| * **Domain extent.** The paper's Theorem 1 domain is `[-2^125, 2^125]_F`. Ours is smaller: our | |
| construction's internal annihilating constants overflow beyond `|x| ~ 2^36` (ReLU/ELU), | |
| `2^44` (GELU/Swish), `2^20` (Sigmoid/tanh) in binary32 (`outputs/claim1_wide_domain.json`). | |
| The claim as stated ("on a bounded domain") is verified; we did **not** reproduce the paper's | |
| full domain extent with our own construction, and say so. | |
| ### Limitation | |
| The construction uses one parallel branch per domain point, so `|X|` is the network width. The | |
| paper's domain `[-2^125, 2^125]_F` contains ~2^127 points and is unbuildable by anyone, including | |
| the authors; every implementation (theirs and ours) verifies on a finite subset. Theorem 3.5/5, | |
| the general-activation version, explicitly covers any sigma-distinguishable `X`, so a finite grid | |
| is inside the theorem's stated scope. | |
| ### Artifacts | |
| `scripts/fpnet.py`, `scripts/construct.py`, `scripts/run_claims.py`, | |
| `outputs/claim12_theorem31.json`, `outputs/claim1_multidim.json`, | |
| `outputs/claim1_depth.json`, `outputs/claim1_wide_domain.json`, | |
| `outputs/torch_crosscheck.json`, `figs/fig2_exactness.png`. | |
| """ | |
| write( | |
| "claim-1-thm-3-1-values-independent-gradient-9-layers", | |
| "Claim 1: Thm 3.1: values + independent gradient, >=9 layers", | |
| [cell({"type": "markdown", "title": "Claim 1 - Theorem 3.1"}, C1)], | |
| ) | |
| # ---------------------------------------------------------------- claim 2 | |
| C2 = """ | |
| ### Claim (verbatim) | |
| > This representability result is established for the practical activation functions ReLU, ELU, | |
| > GELU, Swish, Sigmoid, and tanh (Theorem 3.1, Section 3). | |
| **Verdict: VERIFIED (all six, both formats).** | |
| ### Independent method | |
| The same Theorem-3.1 construction is instantiated for each sigma. Crucially, the construction is | |
| **not** the same for all six: which mechanism suppresses the gradient is decided by the | |
| activation, and our implementation discovers that automatically by searching each activation's | |
| operating points numerically (`acfg()` in `scripts/construct.py`): | |
| * **ReLU, ELU, GELU, Swish** -- there is no point where `sigma' = 0` while `sigma != 0`, so the | |
| gradient must be annihilated inside the AD accumulation by a `+C / -C` unit pair. | |
| * **Sigmoid, tanh** -- these saturate: `sigma = +-1` *exactly* while the rounded derivative | |
| `sigma'` has already **underflowed to exactly 0**. The value survives and the gradient does | |
| not, with no pair needed. This is precisely the paper's Condition 1 regime | |
| `|sigma'(gamma)| <= 2^{-k}|sigma(gamma)|`. | |
| The operating scales found numerically (smallest power of two at which the required exactness | |
| holds) are, for binary32 / binary64: ReLU 1/1, ELU 2/2, GELU 16/32, Swish 64/1024, | |
| Sigmoid 128/1024, tanh 32/512. | |
| ### Numerical result | |
| Every one of the 12 (activation x format) cells: **0 value mismatches and 0 gradient | |
| mismatches** over 33 domain points x 3 seeds, max abs error `0.0`. Identical outcome for | |
| Lemma 3.4 and Lemma 3.5 alone (12 more networks each). | |
| | sigma | binary32 | binary64 | | |
| | --- | --- | --- | | |
| | ReLU | 0 / 99 mismatches | 0 / 99 | | |
| | ELU | 0 / 99 | 0 / 99 | | |
| | GELU | 0 / 99 | 0 / 99 | | |
| | Swish | 0 / 99 | 0 / 99 | | |
| | Sigmoid | 0 / 99 | 0 / 99 | | |
| | tanh | 0 / 99 | 0 / 99 | | |
| ### Boundary / sensitivity audit | |
| * **Derivative convention.** The paper defines `sigma' = round(sigma_hat')`, the rounded *true* | |
| derivative. PyTorch instead computes sigmoid/tanh backward from the *output* | |
| (`out * (1 - out)`), which underflows to 0 even earlier. We implement the paper's convention as | |
| primary and ship the framework convention (`ACTS_FRAMEWORK` in `scripts/fpnet.py`); the | |
| framework convention makes gradient suppression strictly *easier*, so the claim is robust to | |
| the choice. | |
| * **Saturating activations need an even grid.** For Sigmoid/tanh our detector uses two threshold | |
| knots that must fall strictly between domain points and stay exactly representable; the domain | |
| is therefore every *other* float rather than every float. This is a property of our | |
| construction, not of the theorem. | |
| ### Limitation | |
| GELU is evaluated with the exact erf form (`t * Phi(t)`), not the tanh approximation used by some | |
| frameworks; Swish uses beta = 1. Both are the standard definitions and are stated in the code. | |
| ### Artifacts | |
| `scripts/construct.py` (function `acfg`), `outputs/claim12_theorem31.json`, | |
| `outputs/claim4_lemma34.json`, `outputs/claim5_lemma35.json`, `figs/fig2_exactness.png`. | |
| """ | |
| write( | |
| "claim-2-thm-3-1-holds-for-relu-elu-gelu-swish-sigmoid-tanh", | |
| "Claim 2: Thm 3.1: holds for ReLU/ELU/GELU/Swish/Sigmoid/tanh", | |
| [cell({"type": "markdown", "title": "Claim 2 - six activations"}, C2)], | |
| ) | |
| # ---------------------------------------------------------------- claim 3 | |
| C3 = """ | |
| ### Claim (verbatim) | |
| > A single floating-point network can produce a gradient that varies with the loss function's | |
| > derivative, provided that derivative satisfies an antisymmetry condition g*(x,-y) = -g*(x,y) | |
| > (Theorem 3.2, Section 3). | |
| **Verdict: VERIFIED** for both halves of the statement, at reduced scale on the second half | |
| (see Limitation -- we state the shortfall explicitly rather than claiming full coverage). | |
| ### Half A -- the antisymmetry condition is NECESSARY (exhaustive) | |
| The paper says the restriction "cannot be bypassed due to the symmetry inherent in the definition | |
| of `D^AD`". We turned that into an executable, exhaustive statement. IEEE-754 multiplication and | |
| addition are exactly sign-symmetric, `fl(-a*b) = -fl(a*b)` and `fl(-a-b) = -fl(a+b)`, so for | |
| *every* floating-point network and every `x`, `D_{f,x}(-y) = -D_{f,x}(y)` identically. Any target | |
| `g*` violating `g*(x,-y) = -g*(x,y)` is therefore unrepresentable -- a *falsification* result for | |
| the complementary claim. | |
| | check | scale | violations | | |
| | --- | --- | --- | | |
| | `fl(-a*b) == -fl(a*b)` over binary16 | all 63,488 finite values, **4,030,726,144 ordered pairs** | **0** | | |
| | `fl((-a)+(-b)) == -fl(a+b)` over binary16 | same 4.03e9 pairs | **0** | | |
| | `D_{f,x}(-y) == -D_{f,x}(y)` on random binary32 nets | 200 networks x 8 input gradients = 1600 pairs, all six activations | **0** | | |
| ### Half B -- a single network whose gradient genuinely varies with y | |
| Under exact real arithmetic the chain rule forces | |
| `grad(phi o f)(x) = phi'(f(x)) * grad f(x)`, i.e. the AD gradient is *exactly proportional* to | |
| `y = phi'_x(f(x))`. We built one floating-point network (3 layers, 72 units, ReLU, binary32) with | |
| * `f(x) = 0` for every `x` (its forward accumulation is annihilated by a `+C/-C` constant pair); | |
| * `D_{f,x}(y)` **prescribed to arbitrary, independently drawn antisymmetric values on 24 | |
| magnitude bands of `y`**. | |
| Each band is a chain `((y (x) p_j) (x) w) (x) a_j` whose second product **underflows to exactly | |
| zero** below the band threshold, so a band contributes nothing until `|y|` crosses it. | |
| | quantity | value | | |
| | --- | --- | | |
| | bands (and their negatives) | 24, i.e. 48 prescribed values | | |
| | exact hits | **48 / 48** | | |
| | `f(x)` on all probes | **0 everywhere** | | |
| | spread of `|D_{f,x}(y) / y|` across the tested range | **8.47 orders of magnitude** | | |
| | same graph in exact rational arithmetic | ratio `D/y` **constant** (2.582e-17 at every `y`) | | |
| The last row is the decisive contrast: the identical computational graph is exactly proportional | |
| to `y` in exact arithmetic and wildly non-proportional in IEEE-754. | |
| ### Limitation (stated, not softened) | |
| Theorem 3.2 asks for arbitrary antisymmetric `g*(x,y)` for **all** `y in [-H,H]_F`. We verify | |
| arbitrary `g*` on a **24-band finite subset** of `y` (48 values with signs), not on all 2^32 | |
| binary32 values. The paper's full-range construction needs `L >= 2^{E+1} + 2M + 11 = 569` layers | |
| in binary32; we did not build it. What we *did* establish at full scale is Half A (exhaustive) | |
| and the existence of non-proportional dependence with prescribed values. | |
| ### Artifacts | |
| `scripts/run_thm32.py`, `outputs/claim3_theorem32.json`, `figs/fig4_thm32.png`. | |
| """ | |
| write( | |
| "claim-3-thm-3-2-gradient-varies-with-phi-prime-under-antisymmetry", | |
| "Claim 3: Thm 3.2: gradient varies with phi-prime under antisymmetry", | |
| [cell({"type": "markdown", "title": "Claim 3 - Theorem 3.2"}, C3)], | |
| ) | |
| # ---------------------------------------------------------------- claim 4 | |
| C4 = """ | |
| ### Claim (verbatim) | |
| > Lemma 3.4 constructs networks that represent the correct function values while completely | |
| > suppressing the computed gradient to zero (Lemma 3.4, Section 3.3). | |
| **Verdict: VERIFIED.** | |
| ### Independent method | |
| `mode="lem34"` of our construction: a 9-layer sigma-network with `f(x) = f*(x)` for all `x` in a | |
| finite domain and `D_{f,x}(y) = 0` for **every** input gradient `y`, not just for one. For | |
| ReLU/ELU/GELU/Swish the suppression is a `+C/-C` unit pair placed *after* the value path inside | |
| the AD accumulation `grad(x_k) = (+)_r s_r (x) A_1[r,k]`: the two units are identical and their | |
| downstream weights are `+w, -w`, so the forward pass cancels them exactly and never sees them, | |
| while the backward accumulation is annihilated by `(t (+) C) (-) C = 0`. For Sigmoid/tanh the | |
| rounded derivative has already underflowed to 0 where sigma is exactly `+-1`, and no pair is | |
| needed. | |
| ### Scale and result | |
| 12 networks (6 activations x 2 formats), 17 domain points each, and a sweep of input gradients | |
| `y = +-2^e` covering the whole exponent range (46 values for binary32, 276 for binary64) plus | |
| `0` and `Omega`. | |
| | quantity | value | | |
| | --- | --- | | |
| | value mismatches | **0** in every configuration (max abs error `0.0`) | | |
| | gradient exactly zero | for all `|y|` up to the per-activation bound below | | |
| ### Boundary audit -- where it degrades, and how | |
| The suppression is exact until the annihilating constant `C` would overflow, at which point the | |
| gradient leaks. This is a real, quantified boundary (`outputs/claim4_lemma34.json`): | |
| | sigma | binary32: largest `|y|` still exactly suppressed | first `|y|` that leaks | | |
| | --- | --- | --- | | |
| | ReLU, ELU | `2.31e18` (2^61) | `5.90e20` | | |
| | GELU, Swish | `9.90e27` (2^93) | `9.90e27` | | |
| | Sigmoid | `1.66e35` (2^117) | `4.25e37` | | |
| | tanh | `2.54e30` (2^101) | `6.49e32` | | |
| In binary64 the same pattern holds with the bounds at `5.3e269` (ReLU/ELU) up to `2.7e303` | |
| (Sigmoid). Values remain bit-exact on both sides of the boundary -- only the gradient leaks. | |
| This mirrors the paper's own `H_sigma` bookkeeping (the input gradient must be bounded), though | |
| our numeric bound is a property of *our* construction, not of the paper's. | |
| ### Limitation | |
| Our per-activation `|y|` ceiling is lower than the paper's `H_sigma = Omega` for the ReLU family; | |
| the paper's construction budgets overflow more carefully (its Conditions 1-3 exist for exactly | |
| this reason). We report our achieved range rather than claiming theirs. | |
| ### Artifacts | |
| `scripts/construct.py` (`mode="lem34"`), `scripts/run_claims.py`, | |
| `outputs/claim4_lemma34.json`, `figs/fig3_lemma34_range.png`. | |
| """ | |
| write( | |
| "claim-4-lemma-3-4-correct-values-gradient-suppressed-to-zero", | |
| "Claim 4: Lemma 3.4: correct values, gradient suppressed to zero", | |
| [cell({"type": "markdown", "title": "Claim 4 - Lemma 3.4"}, C4)], | |
| ) | |
| # ---------------------------------------------------------------- claim 5 | |
| C5 = """ | |
| ### Claim (verbatim) | |
| > Lemma 3.5 constructs networks that output zero everywhere while still producing an arbitrary | |
| > target gradient under automatic differentiation (Lemma 3.5, Section 3.3). | |
| **Verdict: VERIFIED.** | |
| ### Independent method | |
| `mode="lem35"`: the dual gadget. The forward value is annihilated by a `+C/-C` constant pair | |
| *inside a forward accumulation* -- the AD pass never meets that pair, because the backward pass | |
| *multiplies* along that edge instead of summing. The target gradient is then synthesised by | |
| "carrier" units in layer 1 whose weights are solved for exactly by a residual refinement | |
| (`_calibrate_carriers`), and gated on `x = z_i` by a unit whose `sigma'` is exactly 0 off its own | |
| point. | |
| ### Scale and result | |
| 12 networks (6 activations x 2 formats), 9 layers, 17 domain points each, with `g*` drawn at | |
| random (`|g*|` up to 235.7) and `h*` including zeros. | |
| | check | result | | |
| | --- | --- | | |
| | `f(x) = 0` exactly on every domain point | **204 / 204** | | |
| | `f(x) = 0` exactly on 64 off-grid probes per network | **768 / 768** | | |
| | `D_{f,x}(h*(x)) = g*(x)` bit-exact | **204 / 204** | | |
| | max abs error, values and gradients | **0.0** | | |
| ### Why this is the sharp form of the paper's warning | |
| A network that outputs identically zero looks completely inert in any forward test -- and hands | |
| an attacker-chosen gradient to whatever consumes it (a PINN residual, an adversarial-example | |
| loop, an input-optimisation attack). The forward pass carries no signal that the gradient has | |
| been chosen. | |
| ### Boundary audit | |
| Concatenating this network with any other of the same depth leaves the other network's forward | |
| value untouched (the pair resets the accumulator to exactly 0 and later summands are added | |
| afterwards), which is the third conclusion of the lemma (`(f # f~)(x) = f~(x)`) and is what makes | |
| `f = f2 # f1` work for Theorem 3.1 -- verified implicitly by every Theorem 3.1 run. | |
| ### Limitation | |
| Same finite-domain limitation as Claim 1: `|X|` parallel branches. Off-grid inputs are probed | |
| (and give exactly 0) but the *gradient* is only specified on `X`, as in the lemma. | |
| ### Artifacts | |
| `scripts/construct.py` (`mode="lem35"`), `outputs/claim5_lemma35.json`. | |
| """ | |
| write( | |
| "claim-5-lemma-3-5-zero-output-arbitrary-ad-gradient", | |
| "Claim 5: Lemma 3.5: zero output, arbitrary AD gradient", | |
| [cell({"type": "markdown", "title": "Claim 5 - Lemma 3.5"}, C5)], | |
| ) | |
| # ---------------------------------------------------------------- claim 6 | |
| C6 = """ | |
| ### Claim (verbatim) | |
| > The construction exploits the non-associativity of floating-point arithmetic to decouple the | |
| > computed gradient from the classical chain-rule proportionality that would hold under exact | |
| > real arithmetic (Section 1.1). | |
| **Verdict: VERIFIED**, by three independent tests, one of which is a direct falsification of the | |
| exact-arithmetic alternative. | |
| ### Test 1 -- the identity, at the magnitudes actually used | |
| `(t (+) C) (-) C = 0` while `t (+) (C (-) C) = t`, i.e. the same three numbers give different | |
| answers under different association: | |
| | `t` | `C` | left-assoc `(t+C)-C` | right-assoc `t+(C-C)` | | |
| | --- | --- | --- | --- | | |
| | 1.21e-9 | 1.0 | **0.0** | 1.21e-9 | | |
| | 1.27e-3 | 1.05e6 | **0.0** | 1.27e-3 | | |
| | 1.40e9 | 1.15e18 | **0.0** | 1.40e9 | | |
| | 1.53e21 | 1.27e30 | **0.0** | 1.53e21 | | |
| ### Test 2 -- exact rational arithmetic destroys both constructions | |
| We re-ran the *same* ReLU networks -- identical weights, identical graph -- with Python | |
| `fractions.Fraction`, i.e. no rounding anywhere (`FPNet.forward_exact` / `backward_exact`). | |
| | network | IEEE-754 | exact rationals | | |
| | --- | --- | --- | | |
| | Lemma 3.4: `max |D_{f,x}(y)|` (target 0) | **0** | **3.60e9** | | |
| | Lemma 3.5: `max |f(x)|` (target 0) | **0** | **2.88e17** | | |
| Both gadgets collapse the moment rounding is removed: the suppressed gradient comes back, and the | |
| zeroed output comes back. The effect is the rounding itself, not an artefact of our simulator. | |
| ### Test 3 -- two ablations | |
| * **Delete the `+C/-C` pair** (set its output weight to 0, changing nothing else): the values stay | |
| bit-exact and the AD gradient jumps from `0` to `7.73e9`. | |
| * **Permute the layer-1 unit order** so the pair sits *before* the value path instead of after. | |
| Same weights, same graph, same function in exact arithmetic -- only the summation order of the | |
| AD accumulation changes. The gradient again jumps to `7.73e9` while `f` remains bit-exact. | |
| The permutation ablation is the cleanest possible statement of the paper's Section 1.1: the AD | |
| gradient is a property of the **order of operations**, not of the function. | |
| ### What would have falsified this | |
| A gradient that survived the pair; a value the pair disturbed; an exact-arithmetic run that agreed | |
| with the floating-point one; a permutation that left the gradient unchanged. We tested for all | |
| four and found none. | |
| ### Limitation | |
| The exact-arithmetic contrast is run for ReLU only, because ReLU is the one activation in the set | |
| whose exact real form is rational (so `Fraction` can represent the whole network without | |
| approximation). For the other five the same argument holds structurally but cannot be evaluated | |
| in exact rational arithmetic. | |
| ### Artifacts | |
| `scripts/run_claims.py` (`exp_mechanism`), `scripts/fpnet.py` | |
| (`forward_exact` / `backward_exact`), `outputs/claim6_mechanism.json`, | |
| `figs/fig1_mechanism.png`. | |
| """ | |
| write( | |
| "claim-6-mechanism-fp-non-associativity-decouples-ad-gradient", | |
| "Claim 6: Mechanism: FP non-associativity decouples AD gradient", | |
| [cell({"type": "markdown", "title": "Claim 6 - non-associativity"}, C6)], | |
| ) | |
| # ---------------------------------------------------------------- conclusion | |
| BUNDLE = """ | |
| ## Reproduction bundle & rerun | |
| The bundle contains every script, every raw result JSON and every figure of this reproduction. | |
| ``` | |
| scripts/fpnet.py IEEE-754 sigma-network + left-to-right AD simulator, exact-rational reference | |
| scripts/construct.py our own construction of f = f2 # f1 (Lemma 3.4 / 3.5 / Theorem 3.1) | |
| scripts/run_claims.py claims 1, 2, 4, 5, 6 | |
| scripts/run_thm32.py claim 3 (exhaustive antisymmetry + y-dependent gradient) | |
| scripts/run_domain.py domain-extent boundary sweep | |
| scripts/check_torch.py cross-check of the simulator against PyTorch autograd | |
| scripts/make_figs.py figures | |
| outputs/*.json raw results (one file per claim) | |
| figs/*.png figures | |
| poster/ poster.html (posterly GATE PASS), preview PDF/PNG, poster_embed.html | |
| paper/ arXiv v1 + v2 text, and the authors' released code (yechanp/fp-grad-rep) | |
| ``` | |
| ```bash | |
| pip install numpy scipy matplotlib torch # CPU only | |
| python scripts/check_torch.py # simulator vs PyTorch autograd | |
| python scripts/run_claims.py all # claims 1, 2, 4, 5, 6 (~2 min) | |
| python scripts/run_thm32.py # claim 3 (~4 min) | |
| python scripts/run_domain.py # domain boundary sweep | |
| python scripts/make_figs.py # figures | |
| ``` | |
| Every check in `run_claims.py` and `run_thm32.py` is bit-exact equality; a run that prints | |
| non-zero mismatch counts is a failed reproduction. | |
| **Verdict summary** | |
| | claim | verdict | key number | | |
| | --- | --- | --- | | |
| | 1 - Thm 3.1, values + independent gradient, `L >= 9` | verified | 1188/1188 value and 1188/1188 gradient checks exact, max abs error `0.0` | | |
| | 2 - holds for ReLU/ELU/GELU/Swish/Sigmoid/tanh | verified | 12/12 activation x format cells, 0 mismatches | | |
| | 3 - Thm 3.2, gradient varies with `phi'` under antisymmetry | verified (reduced-scale on the second half) | 0 antisymmetry violations in 4.03e9 exhaustive binary16 pairs; 48/48 prescribed gradients exact; `|D/y|` spans 8.47 decades | | |
| | 4 - Lemma 3.4, values kept, gradient suppressed | verified | gradient exactly 0 for every `y` up to `2^61` (ReLU) .. `2^117` (Sigmoid), values always exact | | |
| | 5 - Lemma 3.5, zero output, arbitrary gradient | verified | 204/204 gradients exact, 972/972 outputs exactly 0 | | |
| | 6 - non-associativity is the mechanism | verified | exact-rational rerun: suppressed gradient returns at `3.6e9`, zeroed output at `2.9e17` | | |
| **Where we differ from the paper.** Nothing contradicts it. Two honest deltas: (i) `L >= 9` is | |
| sufficient but not tight -- our construction reaches the same guarantee at `L = 5` and the | |
| authors' arXiv v2 lowers their own bound to `L >= 7`; (ii) our construction's usable domain and | |
| input-gradient range are narrower than the paper's `M_sigma`/`H_sigma`, because we did not | |
| replicate their overflow bookkeeping. | |
| Paper: [arXiv 2605.01702](https://arxiv.org/abs/2605.01702) * | |
| [OpenReview g89qqA6qmD](https://openreview.net/forum?id=g89qqA6qmD) * | |
| authors' code: [yechanp/fp-grad-rep](https://github.com/yechanp/fp-grad-rep) (ReLU only; we did | |
| not reuse it -- it is vendored under `paper/official_code/` for reference). | |
| """ | |
| write( | |
| "conclusion", | |
| "Conclusion", | |
| [ | |
| cell( | |
| { | |
| "type": "artifact", | |
| "title": "Reproduction bundle", | |
| "artifact_type": "dataset", | |
| }, | |
| "fpnet-ad-repro/repro-bundle:v0", | |
| ), | |
| cell({"type": "markdown", "title": "Download & rerun"}, BUNDLE), | |
| ], | |
| ) | |
| print("done") | |
Xet Storage Details
- Size:
- 26.7 kB
- Xet hash:
- 3d9c16c7cdaca1d8dc197b03afbc7f8623f79a38ba77629e267633859fbfe57c
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.