reading store snapshot…
one network - projects/neocognitron - client-side, no build, no server

neocognitron

Fukushima's 1980 self-organizing multilayered network, every equation from the paper, training live in this page with no labels and no backprop. Four stages of S-cells (feature extractors, one shared kernel per plane) and C-cells (position-tolerant pooling). Watch the planes organize themselves, click any cell to see the retina it answers to, then point the same machinery at one-cortex - Leon's own memory store - and watch that organize itself.

1. Retina and training

draw with the pointer (shift / right button erases). Amber = the selected cell's template projected to the retina, red = its footprint.

corpus

train (unsupervised, layer by layer)

untrained: every plane still carries its weak initial orientation bias.

snapshot

output UC4

2. Inspector - every plane, live

Each small canvas is one cell-plane. S-planes (teal) share a single kernel across all their cells; C-planes (blue) pool overlapping windows of the S-plane below them. The red canvas at the end of each row is the layer's V-cell (the divisive inhibitor for S, the lateral mean for C). Faded S-planes have never been reinforced. While training runs, amber cells are the seeds - the winner-take-all representatives the last presentation reinforced. Click a cell to trace its receptive field down to the retina.

selected cell

nothing selected

2b. The stack in three dimensions

The same network, seen along its depth. Each sheet is one layer, tiled into its 24 cell-planes; each point is one cell, and its brightness is that cell's activation u right now - drawn straight from the live arrays, recomputed every time the retina changes. Amber is the retina, teal the S-layers (feature extractors), blue the C-layers (position-tolerant pooling). Faded planes have never been reinforced. Click a cell in the inspector above and its receptive field lights up through every layer, with red edges to the cells that feed it directly.

drag to orbit, wheel or pinch to zoom. Cells with no response are black, so what you see is only what the network is actually doing.

3. Measurement - does position invariance hold?

After training, each digit is assigned the UC4 plane it wins at shift 0. Accuracy at shift s is the fraction of digit presentations at the 8 compass offsets of s pixels (plus two mildly deformed variants each) whose winning plane is labelled with that digit. The control arm is an untrained network through the same procedure.

the same table as a picture: accuracy against how far the digit was moved from where it was learned. Amber is the trained network, coral the untrained control through the identical procedure, the dashed line the 0.5 the acceptance harness demands at 0 and 4 px. Position invariance is the amber line staying FLAT as the shift grows - the height is the network's accuracy, the flatness is the paper's claim.

learned stage-1 kernels

the same 24 kernels as height fields of their own weights a(v) - amber up, blue down, flat and faded means never reinforced. Rebuilt from the weights after every training run.

4. one-cortex - the memory store as retina and as stack

Each one-cortex chunk carries a 768-dimensional embedding. The export script arranges those 768 dimensions on the 28x28 retina so that correlated dimensions are neighbours (a PCA layout of the dimensions, assigned to grid cells), then every chunk becomes a retina image the same network can eat. Select this corpus above and train: the planes now specialise on regions of the memory.

the store in three dimensions

every chunk placed by the first three principal components of its 768-d embedding. Colour = community, size = access count, dimness = decay. The larger nodes are the 34 communities at the centroid of their own chunks; the lines are communities that share chunks, brightness by how many. Click a chunk to run it as a query - its retina appears beside it and the panels below update.

chunk retinas

what each UC4 plane specialises on

the retrieval stack, live from the store files

chunks (2D PCA of embeddings), colour = community, size = access count. Click one to run it as a query.
candidate pool for the selected query: cosine over all chunks, top-150 kept, recall floor and gray floor from config.json
decay (blue) and stability fast/medium/slow (teal) distributions
communities (Louvain over the entity graph, hubs removed) - size and how many chunks they cover; edges = shared chunks

community sizes

the same 34 communities ranked by the chunks they cover - bar length is that count as a fraction of the largest, colour is the one the community carries in the scatter and in the 3d store above. Hover a bar for its top entities.