Per-Node Activation Function Evolution in Indirectly Encoded Substrates: Solvability, Limits, and Emergent Diversity
Organizations: University of Neuchâtel, Switzerland · University College Dublin, Ireland
Abstract
Biological neurons achieve computational diversity through specialized types: tonic, bursting, adapting, and fast-spiking cells coexist within the same circuit. Artificial neural networks, by contrast, apply a single activation function uniformly to all nodes, which limits what they can represent. We show that this uniformity creates hard limits for evolutionary search: across sparse evolved substrates, monotonic functions fail to solve parity beyond its smallest instance, XOR, while a single oscillatory unit suffices at all tested scales. The gap is one of search and sparsity, not representation: monotonic networks can represent parity with a modest number of hidden units, and gradient descent recovers that solution. We evolve, to our knowledge for the first time in indirect encoding, per-node activation function assignments from an 18-function palette across more than 4,500 experimental runs spanning Boolean logic, regression, and spatial classification. Testing each of the 18 functions individually on Parity-4 reveals a three-tier solvability structure: oscillatory functions achieve 100%, intermediate functions 6.7-80%, and all 9 monotonic functions 0%. This divide is not universal. Recurrence collapses it, and gradient descent inverts it entirely, showing that the barrier is specific to evolutionary search in sparse substrates. What activation functions a network can use, beyond its topology and weights, determines what evolutionary search can solve. Indirect encoding discovers heterogeneous per-node activation assignments unlikely to be chosen by hand.
Figures & tables
| Idx | Name | Formula | Category | Solve% | Avg Gen |
| Multi-crossing (100% solve, 2.9–69.2 gen) | |||||
| 4 | sin | Oscillatory | 100 | 2.9 | |
| 13 | osc_adapt | Oscillatory | 100 | 3.7 | |
| 11 | burst | Oscillatory | 100 | 10.7 | |
| 16 | band_pass | Adaptive | 100 | 69.2 | |
| Intermediate (6.7–80% solve, 55–246 gen) | |||||
| Problem | Samples | Sin% | Sin Gen | Tanh% | Tanh Fit. |
|---|---|---|---|---|---|
| Parity-2 | 4 | 100 | 1.0 | 50.0 | 0.930 |
| Parity-3 | 8 | 100 | 2.2 | 3.3 | 0.890 |
| Parity-4 | 16 | 100 | 2.9 | 0 | 0.863 |
| Parity-5 | 32 | 100 | 2.9 | 0 | 0.826 |
| Parity-6 | 64 | 100 | 3.4 | 0 | 0.825 |
| Parity-7 | 128 | 100 | 3.7 | 0 | 0.821 |
| Pop Size | Sin% | Sin Gen | Tanh% | Tanh Fit. |
|---|---|---|---|---|
| 50 | 100 | 5.0 | 0 | 0.808 |
| 150 | 100 | 3.0 | 0 | 0.863 |
| 500 | 100 | 2.0 | 0 | 0.894 |
| 1,000 | 100 | 1.0 | 0 | 0.900 |
| 2,000 | 100 | 1.0 | 0 | 0.910 |
| Method | Configuration | Accuracy | Std |
|---|---|---|---|
| CPPN-output | cppn_output_4 | 76.9% | 0.29 |
| cppn_output_6 | 76.9% | 0.29 | |
| cppn_with_sin | 76.1% | 0.42 | |
| Weight-interp. | sign-based | 75.2% | 0.14 |
| magnitude-based | 75.2% | 0.14 | |
| variance-based | 75.2% | 0.14 |
| Palette Size | Functions | Avg Gen | Std |
|---|---|---|---|
| 1 (sin only) | sin | 1.7 | 0.7 |
| 3 | sin, tanh, relu | 3.4 | 1.2 |
| 4 | +sigmoid | 3.1 | 1.1 |
| 5 | +identity | 3.2 | 1.2 |
| 6 | +gauss | 2.6 | 1.1 |
| 7 | +lelu | 3.3 | 1.0 |
| Function | FF% | FF Gen | Rec% | Rec Gen |
|---|---|---|---|---|
| sin | 100 | 2.9 | 100 | 2.0 |
| osc_adapt | 100 | 3.7 | 100 | 3.0 |
| burst | 100 | 10.7 | 100 | 5.0 |
| band_pass | 100 | 69.2 | 100 | 10.0 |
| receptive | 80 | 100.1 | 100 | 3.0 |
| resonator | 66.7 | 55.9 | 100 | 2.0 |
| Connection Type | Solve% | Mean Gen | Avg Fitness |
|---|---|---|---|
| feedforward only | 0 | — | 0.914 |
| h-to-h only | 20.0 | 79.5 | 0.911 |
| h-to-h + backward | 13.3 | 191.2 | 0.917 |
| h-to-h + lateral | 6.7 | 117.5 | 0.881 |
| h-to-h + self-loops | 6.7 | 58.5 | 0.885 |
| all recurrent | 6.7 | 98.5 | 0.893 |
| Function | FF% | Full Rec% | Hidden-only% |
|---|---|---|---|
| osc_adapt | 100 | 100 | 100 |
| sin | 100 | 80 | 50 |
| resonator | 100 | 70 | 57 |
| gauss | 43 | 3.3 | 3.3 |
| burst | 0 | 0 | 0 |
| sigmoid | 3.3 | 0 | 6.7 |
| Parity-4 | Sine Regr. | Step Func. | Circles | |||||
|---|---|---|---|---|---|---|---|---|
| Function | % | Gen | % | Gen | % | Gen | % | Gen |
| sin | 100 | 2.9 | 100 | 1 | 97 | 55 | 100 | 23 |
| osc_adapt | 100 | 3.7 | 100 | 1 | 100 | 49 | 100 | 2 |
| burst | 100 | 10.7 | 100 | 6 | 100 | 24 | 0 | — |
| resonator | 67 | 56 | 100 | 1 | 100 | 50 | 100 | 8 |
| gauss | 33 | 139 | 100 | 2 | 13 | 152 | 43 | 155 |
| Problem | Act. | Solve% | Avg Epoch | |
|---|---|---|---|---|
| Parity-4 | sin | 16 | 100 | 257 |
| Parity-4 | tanh | 16 | 100 | 182 |
| Parity-5 | sin | 16 | 100 | 477 |
| Parity-5 | sin | 32 | 100 | 543 |
| Parity-5 | tanh | 16 | 100 | 245 |
| Parity-6 | sin | 16 | 66.7 | 2,653 |
Neural Network Activation Functions
Neural network activation functions shape how models represent nonlinear patterns, learn, remain stable, and map efficiently to hardware.
See all 78 papers