2026-09-27 · 21 min · explainer · theory · math · training · pde · 3d
"Functional GD algorithms generally outperform neural nets, but are hard to accurately implement. We fix this!" That is Daniel Csillag announcing Functional Gradient Descent with Adaptive Representations (arXiv 2606.16926), written with Rodrigo Schuller, Pedro Dall'Antonia, Leonidas Guibas, Luiz Velho and Tiago Novello at FGV EMAp, IMPA and Stanford.
The fix is narrower than the post, and more interesting. Gradient descent in function space has clean theory, but the gradient it needs is a function, and a program can only hold an approximation of it. Every earlier implementation fixed that approximation up front, and a fixed approximation puts a floor under the loss. Instead, before each step it bounds the error of what it stored, and it refines the representation until that bound is a small fraction of the stored gradient. With that one rule, the standard convergence proofs survive.
I read the paper, rebuilt its toy setting in one dimension so you can watch the algorithm run, and checked each "outperforms" against the paper's own figures.
Two places to take a gradient step
You want a function that minimises a loss : a regression fit, a PDE residual, a photometric error over a radiance field. The usual move is to pick a parameterised family , a neural network, and run gradient descent on the weights:
The alternative is to step the function directly:
where is a function of the same kind as . That is functional gradient descent, FGD.
The first reason to care is convexity. If the pointwise loss is convex in , then is convex in , because evaluating at a point is linear in . Parameterising breaks that. The smallest example I know: fit on with . In function space the loss is , a parabola. Now write , a two-layer linear "network". The loss is zero at and at , and it is at their midpoint . A convex function cannot do that. Same function class, same loss, and the parameterisation alone made it nonconvex (reasoned).
The second reason is that parameter-space descent is already a function-space method, seen through a lens. By the chain rule, one weight step moves the function, to first order, by
is the neural tangent kernel (Jacot et al., 2018). Gradient descent on a network is functional gradient descent preconditioned by a kernel the network chooses, and that kernel changes every time the weights move. FGD drops the lens and steps along the gradient itself.
What a functional gradient is
For a loss on a space of functions , the directional derivative is
When is a Hilbert space and is a continuous linear map, the Riesz representation theorem gives a unique element with for every . That element is the functional gradient: the Riesz representer of the derivative. In with the dot product it is the ordinary gradient.
The inner product decides what the gradient looks like, and the paper's two main examples show it.
. For the fitting loss , the derivative is , so : the residual. The paper also shows (its Proposition A.1) that here, the Polyak-Łojasiewicz condition with constant 1.
An RKHS. The empirical loss does not even make sense in , whose elements have no values at single points. In a reproducing kernel Hilbert space , evaluation is an inner product, , and the gradient comes out as a sum of kernel bumps centred on the data (Proposition 4.1):
Same loss, different geometry, different gradient. Muon is the parameter-space cousin of this idea: it reshapes the update instead of taking the raw gradient, which amounts to measuring the step in a different norm.
Why the gradient cannot be stored
is a function, so in general it is infinite-dimensional. The iterate also carries every past step. The RKHS case is the lucky exception: the gradient above is exactly kernel bumps, so exact FGD is kernel regression by gradient descent. The paper notes that such approaches "rely on specific finite-sample structures" and scale poorly with sample size. A Sobolev-space PDE loss or a radiance field has no such finite form.
So implementations approximate. The families I know:
- Boosting. Mason et al. (1999) showed that AdaBoost-style boosting is gradient descent in function space, and Friedman's gradient boosting machine (2001) is built on that reading. Each round fits a small tree to the negative gradient at the data and steps along the tree. A depth-limited tree is a fixed-capacity approximation of the gradient. The paper does not cite this line, but its fixed-depth tree baselines are the same move. Gradient-boosted trees are still what TabFM has to beat on tables.
- Kernel methods. Exact in an RKHS, as above, at a cost that grows with .
- Fixed grids or bases. Project the gradient onto a fixed grid, step, repeat. This is the paper's "Approx. FGD" baseline.
- The network itself. The NTK view above: a parameterisation is a representation, fixed a priori, with a kernel that moves.
The approximate-FGD work the paper does cite (Fonseca and Saporito 2022; Peixoto et al. 2024 and 2025; Petrulionyte et al. 2024; Kim et al. 2025) has, it argues, irreducible approximation error that the analysis usually leaves out.
For the fit you can see the floor in one line (reasoned). On a fixed grid that reads at cell midpoints, the stored gradient is , where is read that way. The iteration converges to and the loss stops at , however long you run it. A finer grid lowers the floor but does not remove it.
The algorithm: refine until the error is a fraction of the step

Three pieces make this work.
A test you can compute. The relative error divides by the norm of the stored gradient, which you can compute exactly, not the true one, which you cannot. The numerator is replaced by an upper bound that the representation can certify: a Lipschitz constant per tree leaf, a tail bound on a Fourier transform. The step runs only when .
A loop that ends. Lemma 3.9 says that if the refinements drive to zero, some refinement passes the test. The proof divides by the norm of the true gradient, so it assumes that gradient is not zero; at an exact stationary point there is nothing to step toward anyway.
Two spaces. The gradient lives in a Hilbert space , because it needs an inner product. The approximation lives in a larger Banach space , because that is where the useful representations are. Piecewise-constant trees are in but not in an RBF kernel's RKHS. Two constants tie the spaces together: says the extended gradient is still a descent direction measured in , and bounds the derivative's dual norm by the gradient's norm. Both equal 1 when .
What "the representation" is differs by experiment. The paper describes each only briefly:
| Task | Function space | What stores | How it refines | How is bounded |
|---|---|---|---|---|
| 2-D toy fit | a uniform grid, judging by Figure 1 | a finer grid | not described | |
| RKHS regression | RBF kernel , approximated in | trees with splits at midpoints | deeper trees | per-leaf Lipschitz bound, from the kernel's Lipschitz constant |
| Wave equation | Sobolev | piecewise-constant Fourier transform on a uniform frequency grid, inverted as a sum of sincs | a finer frequency grid | Lipschitz bound inside the grid plus a bound on the Sobolev symbol outside it |
| Radiance field | density in , colour with an RKHS over view directions | uniform 3-D grids, spherical harmonics per voxel for colour | a finer grid | not described |
(reported, paper Sections 4.1 to 4.3 and Appendix B).
The guarantee, stated precisely
The assumptions, all on the larger space : and extend from to (3.1); is -smooth, (3.2); descends in , (3.3); and gradient compatibility, (3.4). For the global result add a Polyak-Łojasiewicz condition, with (3.7).
Theorem 3.10 then says, for Algorithm 1 with tolerance :
- Relative error. Every step has , which is below .
- Stationarity. If , and , then
- Global minimum. Under the Polyak-Łojasiewicz condition as well,
The engine is Lemma 3.5, a one-step descent lemma with the relative error inside the bracket. It is tight in the sense the paper states: with , an exact gradient and , it collapses to the textbook .
A worked instance, which is also the widget below (reasoned). For the fit, . Take , so , which is under . The step-size condition becomes . At , , and the guaranteed contraction is per step.
What the theorem does not say is as important:
- It counts steps, not work. Lemma 3.9 promises the inner loop ends, not when. As shrinks, has to shrink with it, so the representation keeps growing for as long as the loss keeps falling.
- Its constants can be ruinous. For the RKHS experiment, Proposition A.2 gives and . For an RBF kernel, and , so (reasoned). With a thousand training points, the relative error the theorem needs is about one in a million, and the step size must be below , which is at most ( here is the smoothness constant, not the kernel). The paper tunes learning rates "to obtain the best possible performance" and does not report or for this run, so I cannot tell whether the experiment ran inside the theorem.
- It covers two of the four experiments. The paper proves the Polyak-Łojasiewicz condition for the toy and for RKHS regression with a strongly convex . It does not claim it for the wave equation. The radiance-field loss is, in the paper's words, "highly nonconvex", so the global result does not apply there, and -smoothness is not checked for it either.
Running it in one dimension
The paper's toy problem fits a spiral on the unit square. The widget runs the same kind of fit in one dimension, entirely in your browser. The target on has three scales: a gentle sine, a sharp step at , and a wave packet near . The loss is , so the functional gradient is the residual. Four methods start from :
- Adaptive FGD is Algorithm 1. is piecewise constant on dyadic cells and reads at cell midpoints. comes from a per-cell Lipschitz bound on , and the refinement splits the cell with the largest share of . It uses and , the worked instance above, and no cell may be narrower than 1/1,024.
- Fixed grids of 16 and 128 cells take the same step and never refine.
- A ReLU network with 16 hidden units is trained on the same loss with full-batch Adam. Its learning rate, 0.02, gave the best final loss of the five I tried (0.01, 0.02, 0.05, 0.1 and 0.2).
The loss is ½‖f − f*‖², so the functional gradient is the residual f_t − f* itself. Each grid method stores a piecewise-constant g_t, read at cell midpoints, and steps f ← f − 0.25·g_t. The adaptive run splits its worst cell until a certified bound on the storage error is under a third of ‖g_t‖ (the paper’s test with ε = 0.5); the fixed grids never split, so that ratio climbs past the threshold and their loss stalls. The network is trained on the same loss with Adam at 0.02. The dashed line is the rate Theorem 3.10 guarantees, 0.90625 per step, far looser than what the run achieves. It stops applying once cells reach their minimum width of 1/1,024 and the test can no longer pass; from there the adaptive run is a fixed grid too.
The top panel is against the target, with ticks marking cell edges or, for the network, its kinks. The middle panel is the true gradient as a thin line and, for the grids, the stored as a thick one; the gap between them is what has to cover. The bottom panel is the loss of all four on a log scale. What it shows, from running the same code under Node 22 (measured):
- The test forces refinement from the start. At step 0 the adaptive run splits 31 times, to 32 cells, before its first step. By step 11 it holds 598 cells, and the loss has fallen from to .
- The refinement goes where is steep. At step 8, cells are 1/1,024 wide around the step at , narrower than average in the wave packet, and 1/128 wide on the gentle stretches.
- Fixed grids fail the test and then stall. The 16-cell grid's certified ratio is 1.44 at step 0, above the threshold of one third before it moves, and its loss stops at . The 128-cell grid passes the test through step 3 and fails it from step 4. It keeps pace with the adaptive run through step 6 ( against ), then stops at .
- The guarantee is loose. At step 11, Theorem 3.10 allows ; the run is at , about 170 times lower (reasoned from the two).
- The guarantee ends where the memory does. At step 12 the loop splits 426 more times, every cell reaches the 1/1,024 minimum, and the ratio still reads 0.347. From there the run is a uniform 1,024-cell grid, and it flattens at . The relative test is global: once the residual is small everywhere, even the flat stretches need refining.
- The network is slowest per step. After 40 Adam steps it is at , behind even the 16-cell grid. A network step is cheaper than a refinement loop, so this is a per-step comparison, the same axis the paper plots.
The last two points are the method's real cost. The certificate is honest, and the price of honesty is a representation that grows until you stop it.
What "outperforms neural nets" means, experiment by experiment
The experiments ran on one desktop with an Intel Core i9-14900KF and an RTX 4090 (reported).

The 2-D toy fit (reported). The printed losses are for the network in 1.9 s, for the pictured fixed grid (its arrow points at the 32² curve) in 262 ms, and for adaptive FGD in 417 ms. That is about 90 times lower loss, 4.6 times faster (reasoned). The network's curve has not flattened when the plot ends.

RKHS regression (reported). The data is the LIBSVM set for detecting non-coding RNA sequences; the network is an MLP with two hidden layers of 256. With cross-entropy, adaptive FGD reaches a test loss of 0.2434 against 0.3325 for the network, 27% lower (reasoned), in 815 ms against 1.05 s. Three things temper that. The network beats the fixed trees of depth 2, 4 and 8 (0.7167, 0.5134 and 0.4024), so "functional GD generally outperforms neural nets" does not hold for fixed-representation FGD even here. Adaptive FGD is the slowest FGD row, 843 ms on MSE against 232 to 762 ms for the fixed trees. And the network's MSE test loss is 12.84. With the paper's , that is a root-mean-square error of about 5 on a binary target (reasoned): that baseline did not fit, and the paper does not discuss it.

The wave equation (reported). The loss is the squared PDE residual plus the two initial conditions, over , and the gradient has a closed-form Fourier transform (Proposition 4.2). Figure 3's labels read 18 min 43 s for the network and 34 s for adaptive FGD, about 33 times faster (reasoned). The text calls it "nearly two orders of magnitude"; 33 times is about one and a half. There is no error number, only pictures against a finite-difference reference. The text also says fixed-representation FGD "quickly plateaus" here, but no figure or table in the paper shows it. For the physics-informed side of this, Lanyon comes at PDE solvers from the opposite end: proving the numerics correct rather than learning them.

Radiance field (reported). The Ficus scene from NeRF-Synthetic, trained on 24 views at 160×160 and tested on 25 others. The printed test losses are for the network in 7 m 21 s, for the pictured fixed grid (its arrow points at the 45³ curve) in 52 s, and for adaptive FGD in 4 m 36 s. So adaptive FGD is 36% lower than the network and 1.6 times faster, and 5.3 times slower than the fixed grid it beats (reasoned). One network step is 96 mini-batches of 80×80 rays, which is exactly the 614,400 training rays, so over the plotted 70 steps the network saw 70 epochs of Adam at , and its curve is still falling at the right edge. If the plotted loss is Equation 10 with colours in , those losses are roughly 26.4 dB and 24.5 dB PSNR (reasoned, on that assumption); the paper reports no PSNR. More radiance-field work is in the 3D reconstruction roundup.
| Task | Metric | Network | Fixed-representation FGD | Adaptive FGD | Time, network vs adaptive |
|---|---|---|---|---|---|
| 2-D toy fit | training loss | (pictured 32² row) | 1.9 s vs 417 ms | ||
| RKHS, MSE | test loss | 12.84 | 0.0444 (best, depth 12) | 0.0378 | 1.02 s vs 843 ms |
| RKHS, cross-entropy | test loss | 0.3325 | 0.2916 (best, depth 12) | 0.2434 | 1.05 s vs 815 ms |
| Wave equation | none reported | pictures | not shown | pictures | 18 min 43 s vs 34 s |
| Radiance field | test loss | (pictured 45³ row) | 7 m 21 s vs 4 m 36 s |
(reported; the ratios in the prose are reasoned). The paper gives one number per method, with no seeds or spread. So "outperforms neural nets" means this: on four problems whose gradient has a closed form that a grid or a tree can hold, adaptive FGD beat a tuned network on loss (on pictures, for the wave equation) and on wall-clock. In two of them the network's curve was still falling when the comparison stopped, and in one it did not fit at all.
What I could not check
- The code. The paper points to
dccsillag/experiments-adaptive-fgdon GitHub. On 27 September 2026,git cloneasks for credentials and the repository is not among the author's 29 public ones (measured), so none of the numbers above could be re-run. - The venue. The first author announced the NeurIPS acceptance on X on 26 September 2026 (reported). The arXiv v1 PDF, submitted 15 June, predates it: it is still marked "Preprint", and the abstract page lists no journal reference yet.
- The unreported settings. for every experiment, and the test split for the RKHS run, and the error bounds for the toy and radiance-field representations are not in the paper.
Where it breaks, and what it costs
The contribution is a rule, not a representation: store the gradient however you like, as long as you can certify an upper bound on the error and drive it to zero. That turns an approximation that used to cap the loss into one that only costs memory. It also moves the hard part. For each new loss you need a representation whose error you can bound, which the paper supplies for kernels, Fourier grids and voxel grids but not in general. And you have to accept that the representation grows for as long as the loss falls. My 1-D run needed its finest grid everywhere by step 12.
What I would want next is a version with a budget: the paper's theorem with the refinement cost inside it, so that "converges" comes with a bill.