You are currently viewing neuron-explorer: đẩy từng neuron MLP của Qwen3.5-4B để xem model nghĩ gì

neuron-explorer: đẩy từng neuron MLP của Qwen3.5-4B để xem model nghĩ gì

Interpretability theo kiểu mechanistic vẫn hay bị kẹt ở chỗ: bạn có một ý tưởng về việc “neuron này chắc làm gì đó”, nhưng để kiểm chứng thì phải tự viết script hook, tự chạy thí nghiệm, tự gom kết quả. Làm vài chục neuron thì được, làm cả một layer với hàng nghìn neuron thì nản. Repo này cố gắng biến cái quy trình đó thành một pipeline có sẵn.

lyramakesmusic/neuron-explorer là công cụ khám phá neuron cho Qwen3.5-4B, viết bằng Python. Ý tưởng cốt lõi nằm ngay trong mô tả repo: “push every MLP neuron, keep every rollout, browse the results”. Tức là đẩy từng neuron MLP trong một layer lên hoặc xuống trên vài prompt, giữ lại toàn bộ output sinh ra, rồi bày hết kết quả ra một giao diện 3D để bạn ngồi xem.

Nó làm gì, cụ thể

Có hai nửa rõ rệt. Phần sweep chạy trên GPU, đẩy neuron theo từng liều (dose) và ghi lại mọi thứ. Phần explorer là một web app đọc kết quả đó và hiển thị.

Về phía sweep, README liệt kê khá chi tiết từng script làm gì. neuron_stats.py tính cực trị activation theo từng sign regime, down column, residual norm cho mỗi neuron. steer_sweep.py ghi ra runs/*.jsonl gồm text, token ids, logprobs, top-k mỗi bước, tùy chọn capture activation. rank.py xếp hạng unit theo word-cluster mass so với random-direction controls. steer_lens.py cho ra next-token Δlogprob và KL khi đẩy ±0.8 lên từng neuron. Còn depth_report.py tổng hợp tỉ lệ neuron vượt control theo layer.

Về phía explorer, giao diện có mấy tab. Tab map dựng các layer của model trong phối cảnh 3D, attention và MLP mỗi layer, mỗi neuron là một điểm. Hover vào một điểm là thấy steer lens và logit lens của neuron đó, click thì mở chi tiết, click vào label của layer thì xem sheet thẳng mặt. writes là một chế độ xếp những neuron có down-projection column giống nhau nằm cạnh nhau. Tab list xếp unit theo word-cluster mass, có ô lens để tìm token trong steer lens và logit lens, có fires để chạy text của bạn qua model rồi lọc neuron theo activation. Tab neuron cho xem rollout đã steer theo từng prompt và từng dose, kèm một khung chat ba cột (−, 0, +) để so sánh multi-turn. Tab embeddings là UMAP của rollout một layer, tô màu theo neuron, prompt, dose hoặc kind.

Điểm mình thấy hay nhất: explorer load Qwen3.5-4B cục bộ (MPS, CUDA hoặc CPU) nên bạn chat có steer trực tiếp được, chứ không phải chỉ nhìn ảnh tĩnh.

Vì sao repo này đang được chú ý

666 sao sau khoảng 3 ngày (tạo 21/10, cập nhật 24/10/2026). Con số đó với một repo interpretability thuần kỹ thuật là khá bất thường, vì mảng này thường chỉ hút vài chục sao rồi im. Lý do có lẽ nằm ở chỗ nó chọn đúng một model cụ thể, Qwen3.5-4B, đủ nhỏ để chạy local, đủ lớn để có cấu trúc neuron đáng xem. Và nó không bán giấc mơ “hiểu được LLM”, nó bán một cái browser: đẩy neuron, xem kết quả, ghi chú lại.

Cái khác biệt so với các tool interpretability khác là chữ “steering-first”. Nhiều công cụ bắt đầu từ việc quan sát activation thụ động. Ở đây bạn can thiệp trước, rồi xem model phản ứng ra sao, rồi mới quay lại tìm neuron nào chịu trách nhiệm. Cách làm này gần với trực giác của người làm thí nghiệm hơn.

Cũng phải kể đến tab Claude: một chat chạy claude CLI với explorer làm MCP server (explorer/agent_mcp.py), cho agent đọc neuron, cone, lens, chạy model sống (steering, activation, next-token logprobs, ablation), di chuyển map và list. Nghe thì tiện, nhưng nó cũng có file tool và shell trong home folder của bạn. README ghi rõ server chỉ trả lời page và tool trên máy này, nhưng vẫn nên đọc code trước khi bật.

Cài và chạy thử

Explorer cần uv. Caches trong explorer/cache/ ship sẵn trong repo nên bạn xem được map ngay mà chưa cần sweep:

neuron-explorer: đẩy từng neuron MLP của Qwen3.5-4B để xem model nghĩ gì - ảnh 1
Ảnh: github.com/lyramakesmusic/neuron-explorer
uv sync
uv run python explorer/server.py # http://localhost:8791

Sweep thì cần GPU CUDA 13 và bản fork của vLLM, cụ thể là RhizoNymph/vllm. Trình tự trong README:

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

Về dose, main_rel tính theo phần của median residual norm rời layer: {who, snake, orange} × {−0.7, +0.5, +0.8} và {free} × {+3}, cộng một baseline không steer cho mỗi prompt. Tức là bạn đẩy neuron theo một tỉ lệ tương đối so với năng lượng residual thật của layer, không phải một hằng số vô nghĩa.

Lưu ý nhỏ: đường dẫn trong lệnh chạy từ thư mục gốc repo, còn dòng cuối gọi sweep/run_depth.sh không có bash phía trước, kiểm tra quyền execute của file nếu nó báo lỗi.

Ai nên dùng

Người đang làm mechanistic interpretability trên model cỡ nhỏ. Cụ thể hơn: ai muốn trả lời câu hỏi kiểu “neuron thứ 1200 ở layer 22 có liên quan gì đến khái niệm con vật” mà không muốn viết lại vòng lặp hook từ đầu. Sinh viên làm luận văn về interpretability cũng hợp, vì repo có research_log.md ghi lại kết quả và lý lẽ, đọc được như một ví dụ về cách làm việc.

Người làm red team hoặc alignment có thể dùng phần steering để thăm dò model phản ứng thế nào với can thiệp vào một neuron cụ thể. Phần này chạy local nên tiện thử.

Không hợp với ai muốn một thư viện tổng quát cho mọi model. Repo khóa cứng vào Qwen3.5-4B, và sweep phụ thuộc vào một fork vLLM cụ thể.

Ưu và nhược

Ưu: pipeline trọn vẹn từ sweep đến giao diện, không phải tự nối. Toàn bộ rollout được giữ lại dưới dạng jsonl kèm logprobs và top-k, nên phân tích lại về sau vẫn được. Giao diện 3D với lens ngay trên hover là thứ khó tìm ở tool khác. Có UMAP để nhìn cấu trúc đám đông rollout. Có script check_equivalence.py đối chiếu steering và capture giữa HF và vLLM, chi tiết nhỏ nhưng đáng giá vì sai lệch giữa hai backend là lỗi rất khó phát hiện.

Nhược: license không rõ. Đây là điểm mình không thích nhất, repo ghi license trống nên về nguyên tắc bạn không có quyền tái sử dụng rõ ràng. Nếu định dùng trong sản phẩm hoặc công ty thì phải hỏi tác giả trước. Repo mới 3 ngày tuổi, API và cấu trúc thư mục có thể đổi bất cứ lúc nào. Tài liệu là README cộng với NOTES.md và research_log.md, đủ để chạy nhưng không có kiểu docs tra cứu. Sweep cần GPU CUDA 13 và một fork vLLM riêng, không phải chỗ nào cũng dựng được. Tab Claude yêu cầu cài và login CLI, lại cấp shell, nên cân nhắc.

Còn một điều cần tỉnh: kết quả sweep phụ thuộc vào lựa chọn prompt, dose và control. Repo có random-controls 256 để so sánh, điều đó tốt, nhưng đừng đọc một neuron là “neuron con rắn” chỉ vì nó bật mạnh với prompt snake. Đó là vấn đề của cả ngành, không riêng repo này.

Kết

Nếu bạn đang có GPU rảnh và tò mò về việc Qwen3.5-4B mã hóa khái niệm ở đâu, repo này tiết kiệm cho bạn vài ngày dựng pipeline. Còn nếu bạn cần một thứ ổn định để đưa vào quy trình nhóm, 666 sao trong 3 ngày là tín hiệu tốt nhưng chưa đủ để bỏ qua chuyện license trống. Cứ clone về, chạy uv run python explorer/server.py với cache có sẵn trước, xem giao diện có hợp gu không đã: lyramakesmusic/neuron-explorer.

Chia sẻ bài này

TelegramXFacebookZalo
Đăng ngày 26/10/2026
Giang Na
Về tác giả: Giang Na
Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.

Giang Na

Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.