lyramakesmusic/neuron-explorer
Steering-first neuron explorer for Qwen3.5-4B: push every MLP neuron, keep every rollout, browse the results
About lyramakesmusic/neuron-explorer
lyramakesmusic/neuron-explorer is an open-source project on GitHub, mainly written in Python. Steering-first neuron explorer for Qwen3.5-4B: push every MLP neuron, keep every rollout, browse the results It currently holds 1,664 stars and 200 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).
Project Overview
Git Homed tracks it on the Today's Trending board.
GitHub Repository Details
README
neuron explorer
Steering-first neuron explorer for Qwen3.5-4B. Every MLP neuron in a layer is pushed up and down on a few prompts, every rollout is kept, and the explorer lays the results out over a 3D view of the model.
Explorer
uv sync uv run python explorer/server.py # http://localhost:8791
Reads sweep runs from runs/ and per-layer stats from stats/, both produced by the sweep below; the caches in
explorer/cache/ ship with the repo. Loads Qwen3.5-4B locally (MPS, CUDA or CPU) for live
steered chat, lens, connections and live inference over your own text.
- map: the model's layers in perspective, attention and MLP per layer, one point per neuron. Hover shows a neuron's
writes places
neurons with similar down-projection columns next to each other.
- list: units ranked by word-cluster mass against random-direction controls;
lenssearches the steer and logit
fires runs your text through the model and filters neurons by activation.
- neuron: steered rollouts per prompt and dose, a three-column multi-turn steered chat (−, 0, +), lens and
- embeddings: UMAP of a layer's rollouts, coloured by neuron, prompt, dose or kind.
- language: the interface follows the browser language on first visit; the menu at the right of the header
explorer/static/i18n.js.
- Claude (fourth neuron-panel tab, or the right-edge handle): a chat running the
claudeCLI (installed and
explorer/agent_mcp.py). It reads neurons, cones and lenses, runs the
live model (steering, activations, next-token logprobs, ablations), moves the map, list and highlights, and has file
tools and a shell in your home folder. Its prompt is explorer/agent_prompt.md plus explorer/agent_methodology.md, and
explorer/agent_prompt.local.md when present (untracked, for your own additions);
EXPLORER_CLAUDE_MODEL picks the model. The server answers only pages and tools on this machine.
Sweep
Runs on a CUDA 13 GPU pod with the steering fork of vLLM (RhizoNymph/vllm).
bash sweep/setup_pod.sh # fork, deps, model; writes /workspace/env.sh python sweep/neuron_stats.py --layers 22 --tokens 2000000 --out stats/q35-4b python sweep/steer_sweep.py --stats stats/q35-4b_L22.npz --design main_rel --dose-unit rel \ --neurons all --random-controls 256 --run q35-4b-L22 sweep/run_depth.sh "4 9 13 17" 384 64 # random-subset sweep across several layers
main_rel doses are fractions of the median residual norm leaving the layer: {who, snake, orange} × {−0.7, +0.5, +0.8}
and {free} × {+3}, plus one unsteered baseline per prompt.
| script | output |
|---|---|
| sweep/neuron_stats.py | per-neuron activation extremes by sign regime, down columns, residual norms |
| sweep/steer_sweep.py | runs/.jsonl: text, token ids, logprobs, top-k per step; optional activation captures |
| sweep/rank.py | runs/.units.jsonl: distinctive words, cluster mass, percentile against controls |
| sweep/steer_lens.py | stats/steer_lens_L{l}.npz: next-token Δlogprob and KL for ±0.8 pushes on every neuron |
| sweep/depth_report.py | runs/depth_report.json: per-layer share of neurons above controls, coherence, top units |
| sweep/shift.py | word-shift score against controls, all words counted |
| sweep/merge_runs.py | joins sharded runs of one layer |
| sweep/check_equivalence.py | HF vs vLLM steering and capture agreement |
| sweep/bench.py, sweep/peek.py | throughput conditions; terminal views of a run |
| explorer/build_embeddings.py | runs/.umap.json |
| explorer/build_layout.py | explorer/cache/layout_writes.npz |
| explorer/build_connections.py | explorer/cache/connections.npz: each neuron's 24 strongest direct-path links up and down |
| sweep/capture_prefill.py | captures/.mlp_in.npy: MLP input at the last prompt token at the run's capture layers, steered |
research_log.md holds the findings and reasoning; NOTES.md the source notes.
License
MIT, see LICENSE.