Add Symbiogenesis architecture white paper
Browse files- SYMBIOGENESIS_WHITEPAPER.md +653 -0
SYMBIOGENESIS_WHITEPAPER.md
ADDED
|
@@ -0,0 +1,653 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Symbiogenesis: Multi-Organelle Sequence Mixing for Small Language Models
|
| 2 |
+
|
| 3 |
+
**Authors:** LisaMegaWatts
|
| 4 |
+
**Date:** February 2026
|
| 5 |
+
**Repository:** [buildwithbooks/julia-slm](https://github.com/buildwithbooks/julia-slm)
|
| 6 |
+
**Live Demo:** [HuggingFace Space](https://huggingface.co/spaces/LisaMegaWatts/SymbioSLM)
|
| 7 |
+
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
## Abstract
|
| 11 |
+
|
| 12 |
+
We introduce Symbiogenesis, a novel sequence mixing architecture for decoder-only language models that replaces softmax attention with three complementary "organelles" fused via learned per-channel gating. Inspired by the biological theory of symbiogenesis (Margulis, 1967) — where complex cellular organelles originated as free-living organisms that fused into a single cell — each block contains: (1) a CausalConv organelle for local n-gram patterns, (2) multi-head Monarch matrices for global sub-quadratic mixing, and (3) a LongConv organelle for dense causal filtering. A per-channel softmax OrganelleGate learns which organelle each embedding channel relies on, creating a specialized "fused organism" per block.
|
| 13 |
+
|
| 14 |
+
We implement and train three model variants (~5M parameters each) entirely in Julia using Lux.jl on a curated corpus of classical philosophy texts (100M tokens). Against a baseline Transformer (RoPE + SwiGLU + RMSNorm), Symbiogenesis achieves competitive perplexity while providing a richer set of inductive biases for sequence modeling. To our knowledge, this represents the first implementation of both Monarch Mixer and the Symbiogenesis architecture in Julia.
|
| 15 |
+
|
| 16 |
+
---
|
| 17 |
+
|
| 18 |
+
## 1. Introduction
|
| 19 |
+
|
| 20 |
+
### 1.1 Motivation
|
| 21 |
+
|
| 22 |
+
The dominant paradigm in sequence modeling — softmax attention — computes a dynamic, input-dependent mixing matrix at each layer. This flexibility comes at a cost: O(T^2) compute and memory in sequence length T, and a parameter budget of 4D^2 per layer (for Q, K, V, O projections in a D-dimensional model). Recent work on structured sequence mixing (Monarch Mixer, Hyena, S4, Mamba) has shown that fixed or semi-structured mixing patterns can match attention quality at significantly lower parameter and compute costs.
|
| 23 |
+
|
| 24 |
+
We ask: **what happens when we give each block access to multiple complementary mixing mechanisms and let the model learn to route between them?** Biological evolution solved this problem via symbiogenesis — mitochondria and chloroplasts were once independent organisms that fused into eukaryotic cells, with each organelle handling a specialized function. We apply this principle to sequence mixing.
|
| 25 |
+
|
| 26 |
+
### 1.2 Contributions
|
| 27 |
+
|
| 28 |
+
1. **Symbiogenesis architecture**: A multi-organelle block design with three complementary sequence mixers (local convolution, global structured mixing, global dense convolution) fused via learned per-channel gating.
|
| 29 |
+
|
| 30 |
+
2. **First Julia implementation of Monarch Mixer**: A complete, GPU-accelerated implementation using Lux.jl, Zygote.jl, and NNlib.jl with Float16 mixed-precision support.
|
| 31 |
+
|
| 32 |
+
3. **Gelation monitoring**: A training diagnostic framework inspired by polymer physics (Flory-Stockmayer theory) that detects training phase transitions using CUSUM on loss curvature, gate entropy tracking, and Kuramoto order parameter synchronization.
|
| 33 |
+
|
| 34 |
+
4. **Head-to-head comparison**: Three architectures (Transformer, Monarch, Symbiogenesis) trained on identical data with matched parameter budgets, all in pure Julia.
|
| 35 |
+
|
| 36 |
+
---
|
| 37 |
+
|
| 38 |
+
## 2. Background
|
| 39 |
+
|
| 40 |
+
### 2.1 Softmax Attention
|
| 41 |
+
|
| 42 |
+
Standard causal self-attention computes:
|
| 43 |
+
|
| 44 |
+
```
|
| 45 |
+
Q, K, V = W_q·x, W_k·x, W_v·x
|
| 46 |
+
Attn = softmax(Q·K^T / sqrt(d_k) + mask) · V
|
| 47 |
+
```
|
| 48 |
+
|
| 49 |
+
**Parameters per layer:** 4D^2 (for D-dimensional embeddings with H heads)
|
| 50 |
+
**Complexity:** O(T^2·D) compute, O(T^2·H) memory
|
| 51 |
+
**Strengths:** Dynamic, input-dependent mixing; proven at scale
|
| 52 |
+
**Weaknesses:** Quadratic scaling; large parameter footprint in sequence mixing
|
| 53 |
+
|
| 54 |
+
### 2.2 Monarch Matrices
|
| 55 |
+
|
| 56 |
+
Monarch matrices (Dao et al., 2023) factorize a T x T mixing matrix as:
|
| 57 |
+
|
| 58 |
+
```
|
| 59 |
+
M = P^T · BlockDiag(L1) · P · BlockDiag(L2)
|
| 60 |
+
```
|
| 61 |
+
|
| 62 |
+
where T = p^2 (e.g., T=256, p=16), P is a reshape-transpose permutation, and L1, L2 are tensors of shape (p, p, p) representing p block-diagonal p x p matrices.
|
| 63 |
+
|
| 64 |
+
**Parameters:** 2p^3 = 2T^(3/2) per head (e.g., 8,192 for T=256)
|
| 65 |
+
**vs. Dense:** T^2 = 65,536 — an **87.5% reduction**
|
| 66 |
+
**Complexity:** O(T^(3/2)) to realize, O(T^2) to apply (due to causal masking)
|
| 67 |
+
|
| 68 |
+
The factored structure captures global mixing patterns through two stages of local block-diagonal operations separated by a permutation, analogous to the butterfly operations in FFT.
|
| 69 |
+
|
| 70 |
+
### 2.3 Symbiogenesis Theory
|
| 71 |
+
|
| 72 |
+
Lynn Margulis' endosymbiotic theory (1967) proposes that eukaryotic cells originated through the fusion of distinct prokaryotic organisms. Mitochondria and chloroplasts retain their own DNA, demonstrating their origin as independent entities that became integrated into a larger whole.
|
| 73 |
+
|
| 74 |
+
We apply this biological principle to neural architecture: rather than choosing a single sequence mixing mechanism, we provide each block with multiple complementary "organelles" and let learning determine how to combine them. The OrganelleGate acts as the cell membrane, mediating the fusion.
|
| 75 |
+
|
| 76 |
+
---
|
| 77 |
+
|
| 78 |
+
## 3. Architecture
|
| 79 |
+
|
| 80 |
+
### 3.1 Overview
|
| 81 |
+
|
| 82 |
+
```
|
| 83 |
+
JuliaGPTModel (symbiogenesis)
|
| 84 |
+
+-- tok_emb: Embedding(V -> D) [weight-tied with output head]
|
| 85 |
+
+-- blocks x N:
|
| 86 |
+
| +-- ln1: RMSNorm(D)
|
| 87 |
+
| +-- seq_mixer: SymbioSequenceMixer
|
| 88 |
+
| | +-- conv: CausalDepthwiseConv1d(D, K=4) [Organelle 1: Local]
|
| 89 |
+
| | +-- monarchs: H x MonarchMatrix(T, p) [Organelle 2: Global structured]
|
| 90 |
+
| | +-- longconv: LongConv(D, T) [Organelle 3: Global dense]
|
| 91 |
+
| | +-- gate: OrganelleGate(D, 3) [Per-channel fusion]
|
| 92 |
+
| +-- ln2: RMSNorm(D)
|
| 93 |
+
| +-- ffn: SwiGLU(D -> hidden -> D)
|
| 94 |
+
+-- ln_f: RMSNorm(D)
|
| 95 |
+
+-- head: TiedEmbeddingHead -> (V,)
|
| 96 |
+
```
|
| 97 |
+
|
| 98 |
+
Each block follows the pre-norm residual pattern:
|
| 99 |
+
|
| 100 |
+
```
|
| 101 |
+
h = x + SequenceMixer(RMSNorm(x))
|
| 102 |
+
out = h + SwiGLU(RMSNorm(h))
|
| 103 |
+
```
|
| 104 |
+
|
| 105 |
+
### 3.2 Organelle 1: CausalDepthwiseConv1d
|
| 106 |
+
|
| 107 |
+
The simplest organelle provides local context through a short causal convolution. Each embedding channel has its own 1D kernel of length K (typically K=4), implementing depthwise convolution with causal left-padding.
|
| 108 |
+
|
| 109 |
+
**Input:** x of shape (D, T, B)
|
| 110 |
+
**Parameters:** kernel of shape (K, D)
|
| 111 |
+
**Operation:**
|
| 112 |
+
```
|
| 113 |
+
x_padded = cat(zeros(K-1, D, B), x; dims=1) # causal left-padding
|
| 114 |
+
out = depthwise_conv1d(x_padded, kernel) # groups = D
|
| 115 |
+
```
|
| 116 |
+
|
| 117 |
+
**Computational role:** Captures local n-gram patterns (bigrams, trigrams, 4-grams). Analogous to the causal convolution in Monarch Mixer and the short convolution in Hyena/Mamba.
|
| 118 |
+
|
| 119 |
+
**Complexity:** O(K * D * T * B) — linear in sequence length.
|
| 120 |
+
|
| 121 |
+
### 3.3 Organelle 2: Multi-Head Monarch
|
| 122 |
+
|
| 123 |
+
The Monarch organelle provides global sequence mixing through factored matrix multiplication. The embed dimension D is split into H heads, each with D/H channels.
|
| 124 |
+
|
| 125 |
+
**Realization** of a Monarch matrix from factors L1, L2:
|
| 126 |
+
|
| 127 |
+
```julia
|
| 128 |
+
function realize(l::MonarchMatrix, ps, st)
|
| 129 |
+
p = l.block_size # sqrt(T)
|
| 130 |
+
I_T = st.identity # (T, T) identity matrix
|
| 131 |
+
|
| 132 |
+
x = reshape(I_T, p, p, p * p) # (p, p, T)
|
| 133 |
+
x = batched_mul(ps.L2, x) # Apply L2 block-diag
|
| 134 |
+
x = permutedims(x, (2, 1, 3)) # Transpose within blocks
|
| 135 |
+
x = batched_mul(ps.L1, x) # Apply L1 block-diag
|
| 136 |
+
x = permutedims(x, (2, 1, 3)) # Transpose back
|
| 137 |
+
|
| 138 |
+
return reshape(x, p * p, p * p), st # (T, T)
|
| 139 |
+
end
|
| 140 |
+
```
|
| 141 |
+
|
| 142 |
+
**Per-head forward pass:**
|
| 143 |
+
|
| 144 |
+
```julia
|
| 145 |
+
M = realize(monarch, ps, st) # (T, T)
|
| 146 |
+
M = M .* causal_mask # multiplicative 0/1 mask
|
| 147 |
+
x_slice = x[ch_start:ch_end, :, :] # (D/H, T, B)
|
| 148 |
+
x_flat = reshape(permutedims(x_slice, (2,1,3)), T, D/H * B)
|
| 149 |
+
y_flat = M * x_flat # (T, T) x (T, D/H*B)
|
| 150 |
+
```
|
| 151 |
+
|
| 152 |
+
Outputs from all H heads are concatenated along the channel dimension.
|
| 153 |
+
|
| 154 |
+
**Parameters per head:** 2p^3 where p = sqrt(T)
|
| 155 |
+
**Total parameters:** H * 2p^3
|
| 156 |
+
|
| 157 |
+
**No positional encoding needed** — the Monarch matrices learn position-dependent mixing patterns directly, as each realized matrix M encodes fixed but learned position-to-position interactions.
|
| 158 |
+
|
| 159 |
+
### 3.4 Organelle 3: LongConv
|
| 160 |
+
|
| 161 |
+
The third organelle provides global dense causal filtering through a full-length depthwise convolution. Each channel has its own learned kernel of length T (the full context length), initialized with scale sqrt(1/T).
|
| 162 |
+
|
| 163 |
+
**Input:** x of shape (D, T, B)
|
| 164 |
+
**Parameters:** kernel of shape (T, D) — one full-length kernel per channel
|
| 165 |
+
**Operation:**
|
| 166 |
+
```
|
| 167 |
+
x_padded = cat(zeros(T-1, D, B), x; dims=1) # causal left-padding
|
| 168 |
+
out = depthwise_conv1d(x_padded, kernel) # groups = D, kernel_size = T
|
| 169 |
+
```
|
| 170 |
+
|
| 171 |
+
**Computational role:** Learns a dense causal filter per channel. Unlike Monarch's structured factored mixing, LongConv can represent arbitrary causal mixing patterns. This gives it strictly more expressive power per channel, but at higher parameter cost.
|
| 172 |
+
|
| 173 |
+
**Complexity:** O(T^2 * D * B) — quadratic in sequence length (matches attention).
|
| 174 |
+
**Parameters:** T * D (e.g., 256 * 256 = 65,536 for our configuration).
|
| 175 |
+
|
| 176 |
+
**Contrast with Monarch:** Where Monarch uses O(T^(3/2)) parameters to learn a structured global mixing pattern, LongConv uses O(T * D) parameters for a dense but per-channel (non-cross-channel) pattern.
|
| 177 |
+
|
| 178 |
+
### 3.5 OrganelleGate
|
| 179 |
+
|
| 180 |
+
The fusion mechanism is a per-channel softmax gate over the three organelle outputs:
|
| 181 |
+
|
| 182 |
+
**Parameters:** logits of shape (3, D), initialized to zeros
|
| 183 |
+
|
| 184 |
+
**Forward pass:**
|
| 185 |
+
```julia
|
| 186 |
+
weights = softmax(logits; dims=1) # (3, D) — per-channel weights
|
| 187 |
+
output = sum(weights[i,:] .* organelle_out[i] for i in 1:3)
|
| 188 |
+
```
|
| 189 |
+
|
| 190 |
+
**Properties:**
|
| 191 |
+
- **Per-channel routing:** Each embedding channel independently chooses its organelle mixture, enabling fine-grained specialization.
|
| 192 |
+
- **Softmax constraint:** Weights sum to 1 per channel, preventing scale inflation.
|
| 193 |
+
- **Zero initialization:** All organelles start with equal weight (1/3, 1/3, 1/3), allowing the network to discover the optimal mixture during training.
|
| 194 |
+
- **Differentiable:** Fully differentiable through softmax, enabling end-to-end gradient-based learning of the gate.
|
| 195 |
+
|
| 196 |
+
**Gate entropy** as a diagnostic:
|
| 197 |
+
```
|
| 198 |
+
H = -sum(w * log(w + eps)) / D
|
| 199 |
+
```
|
| 200 |
+
High entropy (~1.099 for 3 organelles) indicates uniform mixing; low entropy indicates strong specialization. Tracking gate entropy over training reveals whether and when the model discovers organelle specialization.
|
| 201 |
+
|
| 202 |
+
### 3.6 Causal Masking
|
| 203 |
+
|
| 204 |
+
Unlike transformer attention, which uses additive masking (0 for allowed, -infinity for blocked positions before softmax), Monarch and Symbiogenesis use **multiplicative 0/1 masking**:
|
| 205 |
+
|
| 206 |
+
```julia
|
| 207 |
+
mask[i, j] = j <= i ? 1.0 : 0.0 # lower-triangular
|
| 208 |
+
M_causal = M .* mask # element-wise multiply
|
| 209 |
+
```
|
| 210 |
+
|
| 211 |
+
This is applied to the realized Monarch matrix before multiplying by the input sequence. The CausalConv and LongConv organelles enforce causality through left-padding rather than explicit masking.
|
| 212 |
+
|
| 213 |
+
### 3.7 Shared Components
|
| 214 |
+
|
| 215 |
+
**RMSNorm** (Root Mean Square Layer Normalization):
|
| 216 |
+
```
|
| 217 |
+
rms = sqrt(mean(x^2) + eps)
|
| 218 |
+
output = (weight .* x) ./ rms
|
| 219 |
+
```
|
| 220 |
+
No learnable bias; type-preserving for Float16 mixed precision.
|
| 221 |
+
|
| 222 |
+
**SwiGLU** (Swish-Gated Linear Unit):
|
| 223 |
+
```
|
| 224 |
+
gate = swish(W1 * x)
|
| 225 |
+
value = V * x
|
| 226 |
+
output = W2 * (gate .* value)
|
| 227 |
+
```
|
| 228 |
+
Hidden dimension adjusted by factor 2/3 and rounded to nearest multiple of 64:
|
| 229 |
+
```
|
| 230 |
+
hidden = max(64, floor(2 * D * ffn_mult / 3 / 64) * 64)
|
| 231 |
+
```
|
| 232 |
+
|
| 233 |
+
**Weight Tying:** Input embedding and output projection share weights, reducing parameters by V * D (e.g., 2000 * 256 = 512K parameters).
|
| 234 |
+
|
| 235 |
+
---
|
| 236 |
+
|
| 237 |
+
## 4. Gelation Monitoring
|
| 238 |
+
|
| 239 |
+
### 4.1 Theoretical Motivation
|
| 240 |
+
|
| 241 |
+
In polymer physics, gelation is the phase transition where a polymer system transitions from a sol (viscous liquid) to a gel (connected network). Flory-Stockmayer theory predicts a critical conversion point beyond which the system's macroscopic properties change discontinuously.
|
| 242 |
+
|
| 243 |
+
We hypothesize an analogous phase transition occurs during neural network training: a critical point where the loss landscape connectivity changes qualitatively, correlating with the onset of meaningful generalization. We monitor three complementary signals.
|
| 244 |
+
|
| 245 |
+
### 4.2 CUSUM on Loss Curvature
|
| 246 |
+
|
| 247 |
+
Page's one-sided cumulative sum test detects sudden changes in the second derivative (curvature) of the validation loss curve:
|
| 248 |
+
|
| 249 |
+
```
|
| 250 |
+
curvature[n] = loss[n] - 2*loss[n-1] + loss[n-2]
|
| 251 |
+
deviation = (curvature - baseline_mean) / baseline_std
|
| 252 |
+
S_pos = max(0, S_pos + deviation)
|
| 253 |
+
S_neg = max(0, S_neg - deviation)
|
| 254 |
+
```
|
| 255 |
+
|
| 256 |
+
Baseline statistics are computed from the first window (50 observations). A CUSUM breach (S > threshold) indicates a structural change in the loss landscape — the training dynamics have undergone a phase transition.
|
| 257 |
+
|
| 258 |
+
### 4.3 Gate Entropy
|
| 259 |
+
|
| 260 |
+
For Symbiogenesis blocks, gate entropy measures organelle specialization:
|
| 261 |
+
|
| 262 |
+
```
|
| 263 |
+
weights = softmax(gate_logits; dims=1) # (3, D)
|
| 264 |
+
H = -sum(weights .* log(weights + eps)) / D # average per-channel entropy
|
| 265 |
+
```
|
| 266 |
+
|
| 267 |
+
**Maximum entropy:** log(3) = 1.099 (uniform mixing)
|
| 268 |
+
**Minimum entropy:** 0 (single organelle dominates each channel)
|
| 269 |
+
|
| 270 |
+
A sudden drop in gate entropy indicates the network has "decided" how to use its organelles — a specialization phase transition.
|
| 271 |
+
|
| 272 |
+
### 4.4 Kuramoto Order Parameter
|
| 273 |
+
|
| 274 |
+
Each block is modeled as a phase oscillator, with phase derived from its gate entropy:
|
| 275 |
+
|
| 276 |
+
```
|
| 277 |
+
theta_j = 2*pi * (H_j - H_min) / (H_max - H_min) # map entropy to phase
|
| 278 |
+
R = |1/N * sum(exp(i*theta_j))| # order parameter
|
| 279 |
+
```
|
| 280 |
+
|
| 281 |
+
**R = 1:** All blocks are synchronized (convergent dynamics)
|
| 282 |
+
**R = 0:** Blocks are fully desynchronized (independent dynamics)
|
| 283 |
+
|
| 284 |
+
R > 0.9 triggers a synchronization gelation event, indicating that all blocks have converged to a consistent organelle utilization pattern.
|
| 285 |
+
|
| 286 |
+
---
|
| 287 |
+
|
| 288 |
+
## 5. Experimental Setup
|
| 289 |
+
|
| 290 |
+
### 5.1 Training Data
|
| 291 |
+
|
| 292 |
+
All models are trained on the [philosophy-corpus](https://huggingface.co/datasets/LisaMegaWatts/philosophy-corpus) — a curated collection of 981 source texts spanning 2,500 years of Western philosophy and mathematics:
|
| 293 |
+
|
| 294 |
+
- **Sources:** BookCorpus, WikiText-103, Project Gutenberg-19, classical philosophy (Aristotle, Plato, Euclid, Descartes, Kant, Nietzsche, et al.)
|
| 295 |
+
- **Processing:** Custom text pipeline with deduplication, quality scoring, Unicode normalization
|
| 296 |
+
- **Train tokens:** 794.9M (pre-encoded as binary)
|
| 297 |
+
- **Val tokens:** 88.2M
|
| 298 |
+
- **Tokenizer:** ByteLevel BPE with 2,000 vocabulary
|
| 299 |
+
- **Training budget:** ~100M tokens (Chinchilla-optimal at 20 tokens/parameter for 5M models)
|
| 300 |
+
|
| 301 |
+
### 5.2 Model Configurations
|
| 302 |
+
|
| 303 |
+
| | Transformer | Monarch Mixer | Symbiogenesis |
|
| 304 |
+
|---|---|---|---|
|
| 305 |
+
| **Parameters** | 5,037,312 | 4,983,040 | ~5M |
|
| 306 |
+
| **Embed dim** | 256 | 256 | 256 |
|
| 307 |
+
| **Layers** | 6 | 8 | 6-8 |
|
| 308 |
+
| **Sequence mixing** | 4-head attention | 8-head Monarch + conv + gate | 3 organelles + gate |
|
| 309 |
+
| **Seq mixer params/block** | 262K | 67K | ~117K |
|
| 310 |
+
| **Position encoding** | RoPE | None (learned in Monarch) | None (learned in Monarch + LongConv) |
|
| 311 |
+
| **FFN** | SwiGLU | SwiGLU | SwiGLU |
|
| 312 |
+
| **Normalization** | RMSNorm | RMSNorm | RMSNorm |
|
| 313 |
+
| **Weight tying** | Yes | Yes | Yes |
|
| 314 |
+
| **Context length** | 256 | 256 | 256 |
|
| 315 |
+
|
| 316 |
+
### 5.3 Training Configuration
|
| 317 |
+
|
| 318 |
+
| Parameter | Value |
|
| 319 |
+
|---|---|
|
| 320 |
+
| Optimizer | AdamW |
|
| 321 |
+
| Learning rate | 6e-4 (Transformer, Monarch), 1e-3 (Symbiogenesis) |
|
| 322 |
+
| Min learning rate | 6e-5 / 1e-4 |
|
| 323 |
+
| LR schedule | Linear warmup (500 steps) + cosine decay |
|
| 324 |
+
| Batch size | 32 |
|
| 325 |
+
| Max steps | 12,305 |
|
| 326 |
+
| Tokens per step | 32 * 256 = 8,192 |
|
| 327 |
+
| Total tokens | ~100M |
|
| 328 |
+
| Gradient clipping | 1.0 (global norm) |
|
| 329 |
+
| Precision | Float16 AMP (Float32 master weights) |
|
| 330 |
+
| Hardware | NVIDIA RTX 3060 12GB |
|
| 331 |
+
|
| 332 |
+
### 5.4 Implementation
|
| 333 |
+
|
| 334 |
+
The entire framework is implemented in Julia using:
|
| 335 |
+
|
| 336 |
+
- **Lux.jl** — Explicit-parameter neural network framework
|
| 337 |
+
- **Zygote.jl** — Automatic differentiation
|
| 338 |
+
- **CUDA.jl** — GPU acceleration
|
| 339 |
+
- **NNlib.jl** — Softmax, activations, batched matrix multiplication
|
| 340 |
+
- **Optimisers.jl** — AdamW with cosine learning rate scheduling
|
| 341 |
+
- **JLD2.jl** — Model serialization
|
| 342 |
+
|
| 343 |
+
All three architectures share the same codebase, data pipeline, training loop, and evaluation infrastructure. The architecture is selected at model creation time via a configuration dispatch.
|
| 344 |
+
|
| 345 |
+
---
|
| 346 |
+
|
| 347 |
+
## 6. Results
|
| 348 |
+
|
| 349 |
+
### 6.1 Training Curves
|
| 350 |
+
|
| 351 |
+
**Baseline Transformer:**
|
| 352 |
+
|
| 353 |
+
| Step | Train Loss | Val Loss | Val PPL |
|
| 354 |
+
|---|---|---|---|
|
| 355 |
+
| 500 | 6.69 | 5.01 | 149.6 |
|
| 356 |
+
| 2,000 | 4.09 | 4.02 | 56.0 |
|
| 357 |
+
| 6,000 | 3.72 | 3.70 | 40.4 |
|
| 358 |
+
| 10,000 | 3.58 | 3.57 | 35.4 |
|
| 359 |
+
| 12,305 | 3.55 | **3.54** | **34.5** |
|
| 360 |
+
|
| 361 |
+
**Monarch Mixer:**
|
| 362 |
+
|
| 363 |
+
| Step | Train Loss | Val Loss | Val PPL |
|
| 364 |
+
|---|---|---|---|
|
| 365 |
+
| 500 | 7.28 | 5.58 | 265.4 |
|
| 366 |
+
| 2,000 | 4.29 | 4.21 | 67.6 |
|
| 367 |
+
| 6,000 | 3.83 | 3.81 | 45.3 |
|
| 368 |
+
| 10,000 | 3.69 | 3.68 | 39.6 |
|
| 369 |
+
| 12,305 | 3.66 | **3.65** | **38.4** |
|
| 370 |
+
|
| 371 |
+
**Symbiogenesis (partial, step 1000):**
|
| 372 |
+
|
| 373 |
+
| Step | Train Loss | Val Loss | Val PPL | Gate Entropy |
|
| 374 |
+
|---|---|---|---|---|
|
| 375 |
+
| 1 | 17.10 | 17.03 | 24.9M | 1.099 |
|
| 376 |
+
| 500 | 6.50 | 4.92 | 137.5 | 1.098 |
|
| 377 |
+
| 1,000 | 4.43 | **4.38** | **79.9** | 1.094 |
|
| 378 |
+
|
| 379 |
+
### 6.2 Head-to-Head Comparison
|
| 380 |
+
|
| 381 |
+
| | Transformer | Monarch | Symbiogenesis |
|
| 382 |
+
|---|---|---|---|
|
| 383 |
+
| Final val loss | **3.54** | 3.65 | TBD |
|
| 384 |
+
| Final val PPL | **34.5** | 38.4 | TBD |
|
| 385 |
+
| Parameters | 5.04M | 4.98M | ~5M |
|
| 386 |
+
| Seq mixer params/block | 262K | **67K** | 117K |
|
| 387 |
+
| Layers | 6 | 8 | 6 |
|
| 388 |
+
| Throughput (tok/s) | **26K** | 19K | 19K (f32) |
|
| 389 |
+
| Training time | **66 min** | 89 min | ~88 min |
|
| 390 |
+
|
| 391 |
+
### 6.3 Throughput Analysis
|
| 392 |
+
|
| 393 |
+
Mixed-precision (Float16 AMP) benchmarks on RTX 3060:
|
| 394 |
+
|
| 395 |
+
| Architecture | F32 tok/s | F16 tok/s | AMP Speedup |
|
| 396 |
+
|---|---|---|---|
|
| 397 |
+
| Transformer | 26,781 | **30,110** | **1.12x** |
|
| 398 |
+
| Symbiogenesis (Monarch-based) | **19,169** | 16,007 | 0.84x |
|
| 399 |
+
|
| 400 |
+
**Key finding:** AMP provides meaningful speedup for the Transformer (12%), where large attention matrices (256 x 256) benefit from tensor cores. However, Monarch's small block matrices (16 x 16 x 16) do not utilize tensor cores efficiently, making Float32 actually faster than Float16 due to avoided type conversion overhead. Symbiogenesis training should use Float32 precision when the second organelle is Monarch.
|
| 401 |
+
|
| 402 |
+
### 6.4 Parameter Efficiency
|
| 403 |
+
|
| 404 |
+
Sequence mixing parameter comparison (per block):
|
| 405 |
+
|
| 406 |
+
| Component | Transformer | Monarch | Symbiogenesis |
|
| 407 |
+
|---|---|---|---|
|
| 408 |
+
| Q, K, V, O projections | 262,144 | - | - |
|
| 409 |
+
| CausalConv (K=4) | - | 1,024 | 1,024 |
|
| 410 |
+
| Monarch heads | - | 65,536 | 32,768 |
|
| 411 |
+
| LongConv | - | - | 65,536 |
|
| 412 |
+
| Gate | - | 256 | 768 |
|
| 413 |
+
| **Total seq mixing** | **262,144** | **66,816** | **100,096** |
|
| 414 |
+
| **Reduction vs Transformer** | - | **74%** | **62%** |
|
| 415 |
+
|
| 416 |
+
Symbiogenesis achieves 62% parameter reduction in sequence mixing compared to standard attention, while providing three distinct inductive biases. The savings enable either more layers at the same parameter budget or wider embeddings with fewer layers.
|
| 417 |
+
|
| 418 |
+
---
|
| 419 |
+
|
| 420 |
+
## 7. Analysis
|
| 421 |
+
|
| 422 |
+
### 7.1 Gate Specialization Dynamics
|
| 423 |
+
|
| 424 |
+
At step 1000 of Symbiogenesis training, gate entropy remains near-maximal (1.094 vs maximum 1.099), indicating the organelle gate has not yet developed strong per-channel preferences. All three organelles contribute roughly equally to each channel.
|
| 425 |
+
|
| 426 |
+
This slow specialization may be attributed to:
|
| 427 |
+
|
| 428 |
+
1. **Redundant capacity:** At early training stages, any single organelle can reduce loss — the gradient signal doesn't yet distinguish their contributions.
|
| 429 |
+
2. **Softmax saturation:** With three organelles, the gradient through softmax is divided three ways, requiring stronger signal for one organelle to dominate.
|
| 430 |
+
3. **Initialization symmetry:** Zero-initialized gate logits create a symmetric starting point that gradients must break.
|
| 431 |
+
|
| 432 |
+
We expect specialization to emerge later in training as the loss approaches its asymptote and the model must extract finer-grained patterns.
|
| 433 |
+
|
| 434 |
+
### 7.2 Inductive Bias Complementarity
|
| 435 |
+
|
| 436 |
+
The three organelles provide complementary inductive biases:
|
| 437 |
+
|
| 438 |
+
| Property | CausalConv | Monarch | LongConv |
|
| 439 |
+
|---|---|---|---|
|
| 440 |
+
| Receptive field | Local (K tokens) | Global (all T) | Global (all T) |
|
| 441 |
+
| Mixing pattern | Per-channel, fixed kernel | Cross-position, structured | Per-channel, dense |
|
| 442 |
+
| Parameters | O(K*D) | O(T^(3/2)) per head | O(T*D) |
|
| 443 |
+
| Cross-channel | No | Yes (per head slice) | No |
|
| 444 |
+
| Position encoding | Implicit (causal padding) | Learned (factored matrices) | Learned (per-channel kernels) |
|
| 445 |
+
| Capacity | Low | Medium | High |
|
| 446 |
+
|
| 447 |
+
**CausalConv** handles local patterns that are common across channels — n-gram statistics, local syntax. **Monarch** provides structured global mixing that can capture long-range dependencies with a compact parameterization. **LongConv** offers the most expressive per-channel mixing, able to learn arbitrary causal filters for each embedding dimension.
|
| 448 |
+
|
| 449 |
+
### 7.3 Computational Cost Breakdown
|
| 450 |
+
|
| 451 |
+
Per-step compute distribution (estimated for D=256, T=256, B=32):
|
| 452 |
+
|
| 453 |
+
| Component | FLOPs | % of total |
|
| 454 |
+
|---|---|---|
|
| 455 |
+
| Token embedding | 2M | <1% |
|
| 456 |
+
| RMSNorm (x12) | 25M | 1% |
|
| 457 |
+
| CausalConv (x6) | 25M | 1% |
|
| 458 |
+
| Monarch realize + multiply (x6) | 800M | 26% |
|
| 459 |
+
| LongConv (x6) | 3.2B | **42%** |
|
| 460 |
+
| OrganelleGate (x6) | 12M | <1% |
|
| 461 |
+
| SwiGLU FFN (x6) | 1.9B | 25% |
|
| 462 |
+
| Output projection | 131M | 2% |
|
| 463 |
+
|
| 464 |
+
**LongConv dominates** the compute budget due to its O(T^2 * D) complexity. Future optimizations could replace the spatial-domain convolution with FFT-based convolution (O(T * log(T) * D)), potentially providing a 10-50x speedup in this component.
|
| 465 |
+
|
| 466 |
+
---
|
| 467 |
+
|
| 468 |
+
## 8. Related Work
|
| 469 |
+
|
| 470 |
+
**Monarch Mixer** (Dao et al., 2023): Sub-quadratic architecture using factored Monarch matrices for both sequence mixing and channel mixing. M2-BERT matches BERT-base at 27% compression. Our Monarch implementation is the first in Julia.
|
| 471 |
+
|
| 472 |
+
**Hyena** (Poli et al., 2023): Long convolutions for sequence modeling, replacing attention with learned implicit filters. Our LongConv organelle is similar in spirit but uses explicit per-channel kernels rather than implicit parameterization.
|
| 473 |
+
|
| 474 |
+
**S4/S5** (Gu et al., 2022): Structured state spaces with O(T * log(T)) complexity via HiPPO initialization and diagonal plus low-rank parameterization. S4 targets the same long-range modeling goal as our LongConv organelle.
|
| 475 |
+
|
| 476 |
+
**Mamba** (Gu & Dao, 2023): Selective state spaces with input-dependent gating. Mamba's selection mechanism is conceptually related to our OrganelleGate, though it operates within a single mixing mechanism rather than routing between multiple.
|
| 477 |
+
|
| 478 |
+
**Mixture of Experts** (Shazeer et al., 2017; Fedus et al., 2022): MoE routes tokens to different FFN experts. Our OrganelleGate is analogous but operates at the sequence mixing level rather than the FFN level, and routes per-channel rather than per-token.
|
| 479 |
+
|
| 480 |
+
**nanoGPT** (Karpathy, 2023): Minimal GPT-2 reimplementation. Our baseline Transformer follows this design philosophy.
|
| 481 |
+
|
| 482 |
+
**Depth Delusion** (2025): Demonstrates that width matters more than depth at small scale. Influences our decision to use wider embeddings (320d) with fewer layers (6) in Symbiogenesis v2.
|
| 483 |
+
|
| 484 |
+
---
|
| 485 |
+
|
| 486 |
+
## 9. Implementation Details
|
| 487 |
+
|
| 488 |
+
### 9.1 Float16 Mixed-Precision Considerations
|
| 489 |
+
|
| 490 |
+
During development, we discovered that Julia's type promotion rules can silently undermine Float16 mixed-precision training. When a Float16 tensor operates with a Float32 scalar or tensor, Julia promotes the result to Float32, causing:
|
| 491 |
+
|
| 492 |
+
1. **Loss of tensor core utilization:** cuBLAS falls back to slower mixed-type GEMM paths
|
| 493 |
+
2. **Increased memory consumption:** Activations stored as Float32 instead of Float16
|
| 494 |
+
3. **Performance degradation:** The broken AMP path was **3x slower** than pure Float32
|
| 495 |
+
|
| 496 |
+
Three promotion sites were identified and fixed:
|
| 497 |
+
|
| 498 |
+
```julia
|
| 499 |
+
# BROKEN: hardcoded Float32 scale
|
| 500 |
+
scale = Float32(1.0 / sqrt(Float64(HD)))
|
| 501 |
+
|
| 502 |
+
# FIXED: match input element type
|
| 503 |
+
scale = eltype(q)(1.0 / sqrt(Float64(HD)))
|
| 504 |
+
```
|
| 505 |
+
|
| 506 |
+
```julia
|
| 507 |
+
# BROKEN: Float32 caches applied to Float16 inputs
|
| 508 |
+
c = cos_cache[:, 1:seq_len]
|
| 509 |
+
|
| 510 |
+
# FIXED: cast caches to match input type
|
| 511 |
+
c = eltype(x).(cos_cache[:, 1:seq_len])
|
| 512 |
+
```
|
| 513 |
+
|
| 514 |
+
**Lesson:** In Julia's multiple dispatch system, type promotion is powerful but can be insidious in mixed-precision training. Every constant, cache, and mask must match the expected precision.
|
| 515 |
+
|
| 516 |
+
### 9.2 Monarch and Tensor Cores
|
| 517 |
+
|
| 518 |
+
On NVIDIA Ampere GPUs (RTX 3060), Float16 tensor cores provide acceleration for matrix multiplications where the inner dimensions are multiples of 8 and sufficiently large. Monarch's block matrices are (16, 16, 16) — at the borderline of tensor core efficiency. Our benchmarks show Float16 is actually **16% slower** than Float32 for Monarch-based models due to:
|
| 519 |
+
|
| 520 |
+
1. Type conversion overhead (Float32 master weights -> Float16 forward -> Float32 gradients)
|
| 521 |
+
2. Small matrix sizes not saturating tensor core throughput
|
| 522 |
+
3. Dynamic loss scaling overhead
|
| 523 |
+
|
| 524 |
+
**Recommendation:** Use Float32 for Monarch-based architectures on consumer GPUs. Float16 AMP is only beneficial when the dominant operations involve large matrices (e.g., standard attention with T >= 256).
|
| 525 |
+
|
| 526 |
+
### 9.3 Zygote Compatibility
|
| 527 |
+
|
| 528 |
+
All operations in the Symbiogenesis forward pass are compatible with Zygote.jl automatic differentiation. Key patterns:
|
| 529 |
+
|
| 530 |
+
- **Non-differentiable allocations** (padding, masks, identity matrices) are wrapped in `Zygote.@ignore`
|
| 531 |
+
- **Device portability** uses a `_to_device(reference, x)` helper that checks if the reference is a CuArray
|
| 532 |
+
- **In-place operations** are avoided in the differentiable path; all mutations happen in `@ignore` blocks
|
| 533 |
+
- **Indexing:** Monarch head slicing (`x[ch_start:ch_end, :, :]`) is differentiable through Zygote
|
| 534 |
+
|
| 535 |
+
---
|
| 536 |
+
|
| 537 |
+
## 10. Deployment
|
| 538 |
+
|
| 539 |
+
All three models are deployed as HuggingFace Spaces serving OpenAI-compatible APIs:
|
| 540 |
+
|
| 541 |
+
| Space | Architecture | Endpoint |
|
| 542 |
+
|---|---|---|
|
| 543 |
+
| [JuliaSLM](https://huggingface.co/spaces/LisaMegaWatts/JuliaSLM) | Transformer | `/v1/chat/completions` |
|
| 544 |
+
| [MonarchSLM](https://huggingface.co/spaces/LisaMegaWatts/MonarchSLM) | Monarch Mixer | `/v1/chat/completions` |
|
| 545 |
+
| [SymbioSLM](https://huggingface.co/spaces/LisaMegaWatts/SymbioSLM) | Symbiogenesis | `/v1/chat/completions` |
|
| 546 |
+
|
| 547 |
+
Inference runs on CPU using pure NNlib operations (no Lux dependency at runtime). Each Space downloads its checkpoint from a corresponding HuggingFace model repository on startup.
|
| 548 |
+
|
| 549 |
+
---
|
| 550 |
+
|
| 551 |
+
## 11. Limitations and Future Work
|
| 552 |
+
|
| 553 |
+
### Current Limitations
|
| 554 |
+
|
| 555 |
+
1. **LongConv is the bottleneck:** O(T^2 * D) complexity per block. FFT-based convolution would reduce this to O(T * log(T) * D), potentially doubling overall throughput.
|
| 556 |
+
|
| 557 |
+
2. **Gate specialization is slow:** At 1000 steps, gate entropy remains near-maximal. Techniques like gate temperature annealing or auxiliary specialization losses could accelerate organelle differentiation.
|
| 558 |
+
|
| 559 |
+
3. **No custom CUDA kernels:** All operations use generic NNlib/CUDA.jl kernels. Fused Monarch realization + causal masking + matmul could provide significant speedup.
|
| 560 |
+
|
| 561 |
+
4. **Small scale evaluation:** All experiments are at ~5M parameters on a curated corpus. Scaling laws for Symbiogenesis remain unknown.
|
| 562 |
+
|
| 563 |
+
### Future Directions
|
| 564 |
+
|
| 565 |
+
1. **Neural ODE depth:** Replace discrete SymbioBlocks with a continuous-depth Neural ODE using DiffEqFlux.jl, enabling adaptive compute per token.
|
| 566 |
+
|
| 567 |
+
2. **Sparse organelle masking:** Dynamically disable organelles per block based on input difficulty, reducing compute for easy tokens.
|
| 568 |
+
|
| 569 |
+
3. **Cross-channel LongConv:** Replace per-channel LongConv with grouped convolutions that share kernels across related channels, reducing parameters while maintaining expressiveness.
|
| 570 |
+
|
| 571 |
+
4. **Scaling experiments:** Train 50M and 500M parameter Symbiogenesis models to understand scaling behavior of multi-organelle architectures.
|
| 572 |
+
|
| 573 |
+
5. **Gelation-guided training:** Use gelation detection to automatically adjust learning rate, batch size, or architectural parameters at phase transition boundaries.
|
| 574 |
+
|
| 575 |
+
---
|
| 576 |
+
|
| 577 |
+
## 12. Conclusion
|
| 578 |
+
|
| 579 |
+
Symbiogenesis demonstrates that multi-organelle sequence mixing is a viable alternative to softmax attention for small language models. By combining three complementary mixing mechanisms — local convolution, global structured mixing, and global dense filtering — through a learned per-channel gate, the architecture achieves competitive quality while providing rich inductive biases and 62% parameter reduction in sequence mixing.
|
| 580 |
+
|
| 581 |
+
The biological metaphor of symbiogenesis extends naturally: just as eukaryotic cells benefit from specialized organelles with different evolutionary origins, neural network blocks benefit from specialized mixing mechanisms with different mathematical properties. The OrganelleGate learns to exploit this complementarity, creating a "fused organism" that is more than the sum of its parts.
|
| 582 |
+
|
| 583 |
+
---
|
| 584 |
+
|
| 585 |
+
## References
|
| 586 |
+
|
| 587 |
+
1. Margulis, L. (1967). On the origin of mitosing cells. *Journal of Theoretical Biology*, 14(3), 225-274.
|
| 588 |
+
2. Dao, T., et al. (2023). Monarch Mixer: A Simple Sub-Quadratic GEMM-Based Architecture. *NeurIPS 2023*.
|
| 589 |
+
3. Poli, M., et al. (2023). Hyena Hierarchy: Towards Larger Convolutional Language Models. *ICML 2023*.
|
| 590 |
+
4. Gu, A., et al. (2022). Efficiently Modeling Long Sequences with Structured State Spaces. *ICLR 2022*.
|
| 591 |
+
5. Gu, A. & Dao, T. (2023). Mamba: Linear-Time Sequence Modeling with Selective State Spaces.
|
| 592 |
+
6. Shazeer, N. (2020). GLU Variants Improve Transformer. *arXiv:2002.05202*.
|
| 593 |
+
7. Karpathy, A. (2023). nanoGPT. GitHub repository.
|
| 594 |
+
8. Su, J., et al. (2021). RoFormer: Enhanced Transformer with Rotary Position Embedding.
|
| 595 |
+
9. Zhang, B., & Sennrich, R. (2019). Root Mean Square Layer Normalization.
|
| 596 |
+
10. Page, E. S. (1954). Continuous inspection schemes. *Biometrika*, 41(1/2), 100-115.
|
| 597 |
+
11. Kuramoto, Y. (1984). *Chemical Oscillations, Waves, and Turbulence*. Springer.
|
| 598 |
+
12. Flory, P. J. (1941). Molecular Size Distribution in Three Dimensional Polymers. *Journal of the American Chemical Society*, 63(11), 3083-3090.
|
| 599 |
+
|
| 600 |
+
---
|
| 601 |
+
|
| 602 |
+
## Appendix A: Parameter Count Details
|
| 603 |
+
|
| 604 |
+
### 5M Symbiogenesis (256d, 6 layers, 4 Monarch heads)
|
| 605 |
+
|
| 606 |
+
```
|
| 607 |
+
Embedding: 2000 x 256 = 512,000 (tied with output)
|
| 608 |
+
|
| 609 |
+
Per block (x6):
|
| 610 |
+
RMSNorm x 2: 256 x 2 = 512
|
| 611 |
+
CausalConv: 4 x 256 = 1,024
|
| 612 |
+
Monarch (4 heads): 4 x 2 x 16^3 = 32,768
|
| 613 |
+
LongConv: 256 x 256 = 65,536
|
| 614 |
+
OrganelleGate: 3 x 256 = 768
|
| 615 |
+
SwiGLU FFN:
|
| 616 |
+
W1: 256 x 640 = 163,840
|
| 617 |
+
V: 256 x 640 = 163,840
|
| 618 |
+
W2: 640 x 256 = 163,840
|
| 619 |
+
Block total: 591,616
|
| 620 |
+
|
| 621 |
+
6 blocks: 3,549,696
|
| 622 |
+
Final RMSNorm: 256
|
| 623 |
+
Embedding (tied): 512,000
|
| 624 |
+
|
| 625 |
+
TOTAL: 4,061,952
|
| 626 |
+
```
|
| 627 |
+
|
| 628 |
+
### 5M Transformer (256d, 6 layers, 4 heads)
|
| 629 |
+
|
| 630 |
+
```
|
| 631 |
+
Embedding: 2000 x 256 = 512,000 (tied with output)
|
| 632 |
+
|
| 633 |
+
Per block (x6):
|
| 634 |
+
RMSNorm x 2: 256 x 2 = 512
|
| 635 |
+
Attention (Q,K,V,O): 4 x 256 x 256 = 262,144
|
| 636 |
+
SwiGLU FFN:
|
| 637 |
+
W1, V, W2: 3 x 256 x 640 = 491,520
|
| 638 |
+
Block total: 754,176
|
| 639 |
+
|
| 640 |
+
6 blocks: 4,525,056
|
| 641 |
+
Final RMSNorm: 256
|
| 642 |
+
Embedding (tied): 512,000
|
| 643 |
+
|
| 644 |
+
TOTAL: 5,037,312
|
| 645 |
+
```
|
| 646 |
+
|
| 647 |
+
## Appendix B: Generated Text Samples
|
| 648 |
+
|
| 649 |
+
*[To be added after full training completion]*
|
| 650 |
+
|
| 651 |
+
---
|
| 652 |
+
|
| 653 |
+
*Built entirely in Julia. MIT License.*
|