A note on division of labor: the inspiration and conjectures are mine; the code and experiments were written by AI — I was only responsible for talking, thinking, and training.
A few days ago, tired from reviewing trigonometry, I was dragging curves around in Desmos for fun, plotting arctan and tanh on the same axes. The more I looked, the more alike they seemed — both S-shaped, both saturating on both sides. The only difference is that has range while has range — a horizontal and vertical rescaling makes them roughly coincide.
At that moment a thought popped up: could a rescaled arctan work directly as an activation function?
But the thought lived for about three seconds. Because the answer is obvious: definitely not good. Just as tanh and sigmoid died in deep networks, arctan would die the same way — saturating on both sides, with derivative sliding away to nothing on either flank, so gradients vanish as soon as the network gets deep. No experiment needed; one look at the supremum of the derivative tells you. So arctan fundamentalism was abandoned on the spot.
But Desmos was still open, so I stared a bit longer. I casually plotted sigmoid too.
The infamous “dip” in Swish
My eyes moved to Swish: . The left half of this curve has a famous little dip — it bottoms out at about near before climbing back. Everyone says this non-monotonic dip is part of why Swish works well, but I was being stubborn at the time: what if I insisted on straightening it out?
The most handy fix is to add an x term and make it leaky:
As it approaches , and as it approaches — isn’t that just a smoothed-out Leaky ReLU? I named it soft leaky relu.
Then I checked monotonicity directly in Desmos. With it is solidly monotonic; with the dip survives. Doing the math: , and the SiLU derivative has a minimum of at . Forcing the minimum derivative above zero gives strict monotonicity when .
That threshold would turn out to be interesting later — hold that thought.
sigmoid — tanh — arctan: why not hack the gate?
After writing down soft leaky relu, I stared at it for a long time. Its structure is . The gate is currently sigmoid, but my chain of association went like this:
sigmoid and tanh are relatives (, second-grade knowledge), and tanh and arctan look alike (Desmos told me) — so why not hack arctan into a gate and plug it into the same template?
The original form I wrote down looked like this:
squeezes into , shifts it into — a perfect gate. After writing it I tossed the formula to the AI, which recognized it at a glance: — isn’t that just… the CDF of the standard Cauchy distribution? , exactly the same.
Following that hint, Swish and GELU all clicked together:
- Logistic CDF → SiLU/Swish
- Gaussian CDF → GELU
- Cauchy CDF → ??? empty slot
The missing piece of the trinity looks like this. The name was coined by the coding AI: CaLU (Cauchy Linear Unit), the full version called Leaky CaLU — one family with SiLU and GELU, and I approved it. The gate slopes at zero line up neatly too: Gaussian > Cauchy > Logistic , with Cauchy sitting exactly in the middle — heaviest tails, middling turn-on, beautifully symmetric.
After naming it I went to search the literature, and my heart sank halfway and then warmed back up: a paper from September 3, 2026 by Küçükali et al., RoCLU (Robust Cauchy Linear Unit), with formula — the same family, with a log-transformed gate.
On second thought, that’s good news: first, it means I’m not the only one walking the Cauchy-gate path, so the direction is probably right; second, their gate and mine differ (log gate vs. exact CDF gate), so our stories don’t collide; third, a ready-made literature baseline, free for the taking. I promptly added it to the comparison runs.
Experiments: 45 runs, just the results
The experimental design is simple, with one core idea in a single sentence: make the model skinny and the differences reveal themselves. Classic LeNet on MNIST hits 99% with eyes closed — every activation looks the same — so I deliberately crippled the network down to parameters (about of the original), with no BN, no Dropout, and only training epochs. The model looks like this ( input):
| # | Layer | Config | Output size | Params |
|---|---|---|---|---|
| 1 | Conv1 + Act | channels, | 104 | |
| 2 | AvgPool | 0 | ||
| 3 | Conv2 + Act | channels, | 808 | |
| 4 | AvgPool | 0 | ||
| 5 | Flatten | — | 0 | |
| 6 | FC1 + Act | 4128 | ||
| 7 | FC2 (no activation) | (logits) | 330 | |
| Total | 5370 |
11 activation functions; everything except what’s inside Act is strictly identical: the same Xavier initialization, the same optimizer (Adam, , , no scheduler), the same batch size (), the same device (mps), 3 seeds per activation. The code was done by AI — I just supplied the hyperparameters and the experiment-ID mapping table, and then did the training.
Main results (MNIST test set, 3-seed mean std, in %)
| Activation | seed0 | seed1 | seed2 | Mean |
|---|---|---|---|---|
| Soft Leaky ReLU | 97.78 | 97.39 | 97.82 | |
| SiLU | 97.67 | 97.38 | 97.83 | |
| GELU | 97.58 | 97.54 | 97.71 | |
| RoCLU | 97.90 | 97.04 | 97.69 | |
| Tanh | 97.53 | 97.67 | 97.37 | |
| Leaky CaLU | 97.75 | 97.17 | 97.60 | |
| CaLU | 97.76 | 97.12 | 97.60 | |
| Arctan | 97.40 | 97.70 | 97.21 | |
| Leaky ReLU | 97.54 | 97.55 | 97.15 | |
| ReLU | 97.52 | 97.53 | 97.15 | |
| Sigmoid | 90.66 | 94.33 | 90.30 |
SiLU () > GELU () > CaLU (). GELU has the smallest variance in the field () and the fastest epoch-1 startup () — the Gaussian gate, battle-tested by industry, is scarily stable. RoCLU ranks fourth and took the single best run of the field (), but its variance is also the largest apart from sigmoid. Sigmoid finishing last is no surprise: only after the first epoch, a textbook vanishing-gradient scene.
Gate leak
Pulling out the four “in-group” members, gate (sigmoid gate vs. Cauchy gate) leak ( vs. ) forms a clean controlled comparison:
| Mean | ||
|---|---|---|
| sigmoid gate | SiLU 97.63 | Soft 97.66 |
| Cauchy gate | CaLU 97.49 | LeakyCaLU 97.51 |
The leak effect is in both rows, and the gate effect is sigmoid gate in both columns — fully consistent directions, though unfortunately both within the noise band. RoCLU (log gate) lands in between at , matching its gate shape sitting in the middle too (, with a deeper negative-side asymptote than Cauchy: vs. ). And inside the trinity, SiLU > GELU > CaLU is exactly the reverse order of gate turn-on sharpness. But honestly, apart from sigmoid everyone is within noise of each other — not enough significance.
The most interesting part: β ablation vs. the monotonicity threshold
As computed in Desmos earlier, the derivative of soft leaky relu is
The bracket is the SiLU derivative, with minimum about (at ). Setting it above zero:
So is solidly monotonic, is borderline monotonic (minimum derivative ), and is non-monotonic (keeps the dip). I ran four settings, scaling from up to :
| Final accuracy (meanstd) | epoch-1 mean | Monotonicity (min derivative) | |
|---|---|---|---|
| 0.01 | 89.92 | non-monotonic (, keeps dip) | |
| 0.1 | 88.99 | borderline monotonic () | |
| 0.2 | 88.02 | solidly monotonic () | |
| 0.3 | 87.30 | solidly monotonic () |
Mean and startup speed both decline strictly monotonically, while variance grows overall (, peaking at for ). In other words, the monotonic versions are actually worse. That dip is at least not a bad thing on shallow-network MNIST. My original obsession with “straightening it out” was refuted by my own experiment. That’s science: conjectures get to be beautiful, data gets to be merciless.
Next: VGG
My intuition: a heavy-tailed, polynomial-dragging design like the Cauchy gate can’t show its strength in a slimmed-down LeNet with only 3 nonlinear layers, because gate differences like these only compound after being multiplied 8–10 times. The figure below shows why: of the sigmoid gate decays exponentially (a straight line on semi-log axes), saturating to the bottom in no time; while the Cauchy gate and RoCLU gate drag polynomial tails that stay soft for a long while. As depth grows, the former “decides” early while the latter still keeps gradients alive (a BN-free deep net like VGG is its home turf). The RoCLU paper likewise tested deep (up to 700 layers).
So next up: VGG + CIFAR-10. Which of the three gate families (sigmoid / Cauchy-CDF / log) fights best in deep water — stay tuned for part II.
The full experiment report and raw results of all 45 training runs are in the archive (calu-archive.zip, 42 experiment directories in total: 11 activations × 3 seeds = 33 main runs, plus 9 new β-ablation runs; the β=0.01 setting reuses the main runs. Unzip and run collect_results.py / beta_ablation.py to reproduce all figures). Critiques welcome. And please tell me if the CaLU name collides with anyone’s — as of writing, RoCLU is the only relative I found.
References
[1] Küçükali Ö, Bozkurt MH, Ulutaş E, Bozkurt I. A Novel Activation Function for Enhancing Deep Neural Network Stability and Performance. Concurrency and Computation: Practice and Experience. 2026;38