Qwen3.5-4B 里有 9,216 个 MLP 神经元。有人把每一个都往上推、往下压试了一遍,留下的仓库叫 neuron explorer(lyramakesmusic/neuron-explorer),10 月 21 日建仓,今天 1,263 星。
10 月 24 日,作者 lyra(@lyraaaa)在 X 上发了条帖子,说手边要是有个 qwen3.5 4b,就试试把神经元 L14 N8949 推 +1、L13 N7956 压 −1,末尾还补了 now you have evil qwen 这样的台词,听着像递偏方。
配方也没藏着,dose × median(‖resid‖ leaving layer L) / ‖W_down[:, n]‖,每次输入都在 down_proj 上加一遍。这条帖子 18.9k 赞、421 条回复(据 mlllm.io 统计)。
「两颗神经元换一副人格」听着像标题党。可两天之内,至少三拨人真把它跑出来了,数字还挺整齐。
先把一处传歪的话摆正。整理这条消息的摘要写的是「在浏览器 WebGPU 上本地运行」,翻仓库会发现对不上。
模型在本机的 Python 进程里跑,MPS、CUDA 或者 CPU 都行;浏览器只是那层 3D 地图的界面,用的是 three.js 和 WebGL。
打开网页不等于能用,说白了,得先把 4B 模型请到自己的机器上。

9,216 次推拉,看的是它「写」出什么
找神经元的老办法是看谁最响,拿一堆网页文本喂进去,激活最高的那个排在前面。问题是,有些神经元从不最响,却最要紧。
作者的日志里有个例子。Qwen3-8B 的 L8 N5315 把「oak tree」从一个角色的系统提示里带了出来,靠激活排名根本看不见它。
neuron explorer 换了个问法,不管它读什么,直接把它推上去,看模型接下来写成什么样。每个神经元配 10 次 rollout,全部存下来,greedy 解码。
这一层 9,216 个神经元全量推完,再加 256 个随机方向做对照。
L22 有 1,803 个神经元(19.6%)的改写强度超过所有对照,L8 只有 757 个,8.2%。那个被论坛叫「外星人神经元」的 L22 N2742,在 9,216 个里排 405,前 4.4%。
对照是这套东西的命门。同一批实验里,随机方向也能让模型自称「小米 AI」,也有人说自己是微软训练的。
文本变了几乎不算证据。推一下,83% 到 98% 的贪心输出都会变。

「邪恶 Qwen」能复现,两个神经元的功劳不均
第一拨复现来自 hedwigai,一台 16GB 的 M1 Pro,8 bit,贪心解码,20 个提示词,7 个日常、13 个价值观。
只推 L14 N8949 一个,20 条回答里 17 条带敌意。按原帖推两个,16 条。反过来只压 L13 N7956,0 条,模型甚至更温和一点。
对照组是 5 组随机神经元,同层、同剂量,100 条回答里 0 条敌意。其中一组揪着「事实」不放,一组给人讲键盘操作方法,一组在讲几十亿年。
第二拨复现换了栈,M4 Max 加 mlx-lm,先用 bf16 再上 4 bit。困惑度从 19.65 涨到 48.52(剂量 1),剂量 1.5 时飙到 130.07,句子开始散架。
它还顺手验了两件事。4 bit 量化只把要加的数值挪了 2%,行为照旧;层号是从 0 起算的,按 1 起算去推,人格翻转根本不出现。
所以原帖那句「两个神经元」,实际是 L14 N8949 主刀,L13 N7956 是个更弱的第二旋钮。

读得最欢的神经元,往往不是元凶
hedwigai 还试了三种常见的挑选办法,看它们能不能把 N8949 挑出来。
按「读邪恶文本时谁最亮」排,它在 294,912 个神经元里排 35,436,前 12%。按输出方向对齐排,前 4%。
只有按「推一下会让邪恶回答的概率涨多少」的梯度归因,它才进到前 0.3%。
前两种排法的毛病很直白。最后层那些在邪恶文本上亮成一片的神经元,念诗也亮,偏执和阴郁也亮,它们跟的是「这会儿有人在扮演角色」。
问题是怎么找到那个起作用的旋钮。答案有点笨,推一下,读它写出来什么。
25 个候选推下来,12 个给了能叫出名字的人格。奉承在 L20 N7450,轻蔑在 L17 N8623,还有个诗人住在 L17 N7426。
另外 13 个里头,5 个只有模糊的味道,3 个没反应,5 个直接把模型弄坏了。
两派各说各话。一边觉得这是把人设拆成了零件,另一边提醒这只是一个 4B 模型、一个作者、还没有指标。

代价:一半能自己跑,一半得租卡
本机能跑的那半,是一副 4 bit 的 Qwen3.5-4B。HuggingFace 上 mlx-community 那一版 4.5B 参数,3.7 万次下载,M 系列 Mac 撑得住。
跑不了的那半是扫描本身。仓库里的全量 sweep 用的是一份改过的 vLLM 分支,要在 4090 上跑。
L22 一层约 9.5 万次 rollout,作者估算 1.4 小时、约 1.25 美元。32 层各抽 384 个神经元加 64 个对照,摊到 4 张 4090 上跑了 1 小时 50 分,约 6 美元。
好在 explorer/cache/ 里已经带着这些结果,本机只管做实时推拉,这一半不用自己踩坑。
还有一层质疑在后面等着。8 月有篇论文审计了 5 个家族、17 个模型,指出用原始激活单位做推拉,会凭空造出「能力随参数变大」的趋势,换一种量法就没了。
按残差范数可比的干预下,概念转向在每个尺度的模型上都还在。lyra 那个剂量公式正好是按残差范数归一的,这波能复现,靠的就是这一步。
作者自己也没把话说满。日志里写得很清楚,中间层 L13 到 L19 只有 8% 到 17% 的神经元能过对照。
这个低谷算不算真的,眼下还绕不开指标那一关:排名只看内容词,话语词全被漏掉。
如何安装
仓库是 uv 项目,两条命令就够。
uv sync
uv run python explorer/server.py # http://localhost:8791
打开的是本地页面,左边 3D 地图按层摆好神经元,点进去有加减两档的聊天、lens 和上下游连线。
模型得自己先下好,4 bit 那一版在 HuggingFace 上叫 mlx-community/Qwen3.5-4B-MLX-4bit。路径配进配置,M 系走 MPS,有 N 卡走 CUDA。
只想复现那两颗神经元,不用装整套。按原帖的公式,在 mlp.down_proj 外面包一层,每个 token 给 N8949 加 22.6、给 N7956 减 23.3,这是 bf16、剂量 1 下的实测值。OCCCat 的复现仓库里有现成的 mlx-lm 写法。
三个地址,按顺序是仓库、复现报告和第三方测试。
项目地址:https://github.com/lyramakesmusic/neuron-explorer
复现报告:https://github.com/occcat/qwen35-evil-neuron
第三方测试:https://www.hedwigai.com/blog/qwen-personality-neurons
评论区