2024年最离谱的AI榜单第一:没训练过一天
2024年中期,HuggingFace Open LLM Leaderboard就是AI界的斗兽场。
数千个模型厮杀,由资金雄厚的实验室和民间调参高手提交,争夺六个基准测试的头名。
榜首位置长期被各种奇奇怪怪名字的模型占据:Nous-Hermes、Dolphin、NeuralBeagle14B……
然后有一天,榜单第一变成了 dnhkng/RYS-XLarge。
我的模型。
但我没有训练任何新模型。没有合并权重。没有运行过哪怕一步的梯度下降。
我只是找了一个720亿参数的现有模型,把它的中间七层复制了一遍,然后缝回去。
一个权重都没改。
它就这样,莫名其妙地变强了。
一个奇怪的发现:AI能看懂「乱码」
一切始于2023年底的一个无聊发现。
当时我在玩一个诡异的玩法:把问题转成Base64编码——就是那种看起来像火星文的字符串——然后喂给模型。
比如问「法国的首都是什么?请用Base64回答」,得到的会是类似这样一坨东西:
V2hhdCBpcyB0aGUgY2FwaXRhbCBvZiBGcmFuY2U/IEFuc3dlciBpbiBCYXNlNjQh
神奇的事情发生了。
2023年的那些「不会思考」的大模型,会真的解码这段乱码,理解问题,然后,再用Base64把答案编码回来:
VGhlIGNhcGl0YWwgb2YgRnJhbmNlIGlzIFBhcmlzLg==
翻译成人话就是:「法国的首都是巴黎。」
这就不对劲了。
模型接受英文、Python、中文、还有Base64,都能产生连贯的推理。按理说,Base64完全不在它的训练分布里——分词方式完全不同,位置模式也完全不可识别。
但它就是能懂。
我当时脑子里冒出一个想法:
早期层是「翻译官」,把各种输入格式翻译成某种纯净的、抽象的内部表示。
晚期层也是「翻译官」,把那个抽象表示再翻译回需要的输出格式。
那么问题来了——中间那些层在干嘛?
纯粹的推理?在一种跟人类语言无关的表示里工作?
这只是当时的瞎想,没有任何办法验证。
直到另一个更诡异的东西出现了。
Goliath:把两个模型像缝被子一样缝在一起
2023年11月,有个叫Alpindale的用户发了一个模型叫Goliath-120b。
它由两个70B的Llama-2模型缝合而成,参数总量120B。缝合方式极其离谱:
不是简单地首尾相接,而是交替穿插。更可怕的是,它把后面层的输出喂回给前面层。
来看一下它的层级配置:
Xwin (0-16层) → Euryale (8-24层) → Xwin (17-32层) → Euryale (25-40层) → ...
看懂了吗?第16层的输出,被直接喂进了第8层。
这就违反了机器学习的一条基本公理:
每个Transformer层在训练时,只见过前一层的输出分布。如果你把第60层的输出喂给第10层——模型这辈子都没见过这种分布。
但Goliath居然能跑。
不是性能爆表,是它妈的根本没崩掉。
这说明什么?说明层与层之间的内部表示是同质的,模型可以消化乱序的隐藏状态而不原地爆炸。架构的灵活性远超我们的想象。
两个观察开始在我脑子里碰撞:
- Base64那事儿 → 早期层是翻译官,晚期层也是翻译官
- Goliath那事儿 → 中间层似乎在某种「通用语言」里工作
我的假说开始成型:
Transformer有真正的功能解剖结构。
早期层负责「读」,晚期层负责「写」。中间层——那个「思考皮层」——在一个 универсальный内部语言里运作,这个语言对架构重组非常鲁棒。
而且Goliath使用的层块大小是16层,这让我怀疑「输入处理单元」和「输出处理单元」可能比16层更小。
如果这是真的……
也许我根本不需要训练模型让它变聪明。我不需要微调,不需要RLHF。
我只需要给它更多的层来思考。
地下室里的「脑扫描仪」
2023年底到2024年中,我建了一套系统来验证这个假说。
配置很卑微:两张RTX 4090,用ExLlamaV2把72B模型量化后塞进消费级显存。不需要训练,只需要推理。量化模型的推理,消费级GPU意外地能打。我发现4090在某些场景下跟H100差不多——只要模型能塞进显存。
核心概念很简单。
对于一个有L层的模型,我定义一个配置(i, j)。模型正常处理0到i层,然后绕回去重复i到j层,再跑完剩下的j到L层。
举例:配置 (2, 7),共9层
正常路径:0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8
重跑路径:0 → 1 → 2 → 3 → 4 → 5 → 6 → 2 → 3 → 4 → 5 → 6 → 7 → 8
被重复的层:[2, 3, 4, 5, 6]
完整路径:[0, 1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 7, 8]
没有权重变化。模型只是多跑了几层自己。
对于Qwen2-72B(80层),这意味着3240种有效配置要测。全测一遍需要几年计算力,我需要代理任务——快速、客观、能揭示结构特征,而不是任务特定的技巧。
代理任务必须满足三个条件:
- 输出极短。要测几千个配置,每轮评估必须快。不能写长文章。
- 评分无歧义。用不起LLM当裁判的流水线。答案必须能客观打分。
- 认知需求正交。如果一个配置同时提升两个任务,那是结构性的,不是任务特定的。
我首先试了创意写作。让模型写诗、写故事、用LLM当裁判打分。结果一坨屎。后来我搞了一套基于logits的评分系统,很复杂,但最后发现完全没用。
我需要输出只有几个token的任务,而且评分必须确定、无需裁判。
最后锁定了两个:
硬核数学。极其困难的问题,比如「74088893247的立方根是多少?」不能有思维链,不能用工具,直接猜。
情商测试。用EQ-Bench基准:给一个复杂社交场景,预测情绪强度(0-100)。完全不同于数学,是心智理论、社会推理、共情。输出就是几个数字。
两个任务,输出都是几个token,认知需求正交。我的直觉是:LLM一次只猜一个token,那就让模型特别擅长猜下一个token。
但事情没那么简单。
LLM做数学的方式很「LLM」
即使是这样的数学探测,我也遇到了意外的问题。
LLM算术错得很有「LLM特色」。不是算错,而是算到一半忘了写最后一位,好像突然失去耐心。或者是中间两位数字互换。或者是输出正确数字但多了个结尾字符导致解析失败。
这可能是因为大数的分词方式太随意。比如123456789可能被分词成「123」「456」「789」,也可能分词成「12」「345」「67」「89」。
简单的对错评分会丢失有用信号。90%的数字对但漏掉最后一位,应该给高分的对吧?
我写了一个部分得分的评分函数:
def calculate_score(actual, estimate):
# 把短的回答补零,然后按比例扣分
# 算对90%的数字但漏掉最后一位,会得到相当的分
# 但比全对低
关键思路:补齐短答案,用correction factor惩罚。模型如果最后一位忘了写,依然能拿到相当的分——但比全对少。这对区分能力接近的配置至关重要。
数学题目最初是手写的,后来随机生成。一共16道题,模型直接猜整数。
随便感受一下:
78313086360375 × 88537453126609 = ?
74088893247 的立方根是多少?
844178022493 的立方根 × 43 = ?
不能思考,直接猜。
RYS-XLarge:重复你自己
测试了几个小模型(Llama系列和更小的Qwen2)之后,我给Qwen2-72B设好配置,开始扫描。
每个配置几分钟:加载重层模型,跑数学探测,跑EQ探测,记录分数,换配置。在两张4090上跑了好几天。但比微调省计算多了。说实话,我那48GB显存根本不够做LoRA微调。
最优配置是:0到51层先跑一遍,然后45到79层再跑一遍。
45到51层执行了两次。
七层额外的层,在80层堆叠的中间位置。参数总量从72B变成78B。每一层都是现有层的精确复制。没有新权重,没有训练,只是模型重复了自己。
七层。仅此而已。
然后我把这个配置应用到MaziyarPanahi的calme-2.1-qwen2-72b,上传为 dnhkng/RYS-XLarge。原始基础模型也传了一份 dnhkng/RYS-XLarge-base。
提交到Open LLM Leaderboard,等待。
那时候Leaderboard每天涌入几十个微调再微调的模型(那是个狂野西部),排队要排好久。一个月后,结果来了:
| 指标 | RYS-XLarge | 相对基础模型提升 |
|---|---|---|
| 平均分 | 44.75 | +2.61% |
| IFEval (0-Shot) | 79.96 | -2.05% |
| BBH (3-Shot) | 58.77 | +2.51% |
| MATH Lvl 5 (4-Shot) | 38.97 | +8.16% |
| GPQA (0-shot) | 17.90 | +2.58% |
| MuSR (0-shot) | 23.72 | +17.72% |
| MMLU-PRO (5-shot) | 49.20 | +0.31% |
MuSR +17.72%。MATH +8.16%。六个基准五个提升,只有一个小幅下降。
平均分榜一。
我强调一下:我只优化了「硬数学直觉」和「EQ-Bench」这两个探测任务。 开发过程中根本没看IFEval、BBH、GPQA、MuSR、MMLU-PRO。Leaderboard是纯粹的样本外验证。
一个用两个窄正交探测找到的层配置,泛化到了丢给它的所有任务。
(除了IFEval,但那玩意儿本来就很无聊,对吧?)
但热力图讲了一个更精彩的故事。
大脑扫描图
这些热力图就像是Transformer做数学和EQ问题时的fMRI。
X轴(j)是重复区域的结束层,Y轴(i)是开始层。每个像素代表一次完整评估:加载重层模型,跑数学探测,跑EQ探测,打分,记录增量。沿着对角线只重复一层。往右上方向,重复两层,直到最右上角——整个Transformer堆叠每轮推理跑两遍。
先看数学热力图。
从任意层开始,在大约60层之前停止,似乎都能提升数学猜测分数——大片健康的红色区域。重复最前面的几层(左上角小三角形)会搞砸,也包括重复最后20层左右的任何层(右边一堵蓝墙)。这验证了假说:从「编码」到「思考空间」再到「重编码」系统,是平滑过渡的。
直到你看EQ分数:
完全不同了。重复最后10层几乎没影响,但有些区域明显提升(45i, 55j附近那块),周围是性能糟糕的区域。
但热力图揭示了比「思考区域在哪里」更有趣的东西。
它揭示了结构。
单层重复为什么不工作?
在确定块重复之前,我试过更简单的方式:拿单个中间层重复N次。
如果「更多推理深度」假说正确,这应该有效。给模型多几个推理层的拷贝,应该变强。
但结果是——几乎总是更差。通常差很多,偶尔有小幅提升但在噪声范围内。
烦人。但回头看EQ分数里那些复杂的blob图案,让我有了另一个想法:
如果单层重复没用,那中间层就不是在做独立的迭代优化。它们不是可以简单「再跑一次」的同类操作。
如果它们是,重复任何一个都应该带来边际收益。
相反,那些层在作为一个电路工作。一个多步骤推理流水线,需要完整执行。
想象一下。46到52层不是七个做同样工作的工人。它们是食谱里的七个步骤。
46层拿抽象表示,做第一步认知操作——可能把复杂表示分解成子组件。47层拿那个输出,做第二步——可能识别子组件之间的关系。48层做第三步……一直到52层产出最终结果。
重复这个「食谱」的一步没什么用。
但重复整个块是跑完整个食谱两次。模型跑完完整推理电路,产出精炼的中间表示,然后在自己的输出上再跑一遍同一电路。这是第二遍机会。抓住第一次错过的东西,精炼抽象,把推理推得更深一层。
这不是「稍差一点」,这是「脑损伤」
这让我重新审视开发过程中用Text Generation Web UI做的各种聊天测试。
好的配置微妙但明显更锐利。推理更连贯,长上下文保持更好,对话流更自然。说不清哪里变了,但模型感觉更「在状态」。或者可能只是我的想象; vibe check很难定义。
差的配置会彻底失控。有的结巴,进入退化循环。有的发展出诡异的人格障碍。一个开心地说「让我们像牛仔一样行动!咿哈!」,然后陷入不可恢复的 giggle fit,生成好多页「哈哈哈哈」夹杂牛仔引用。「嗨」是我能想到的最好描述。
我不知道LLM是否「部分有意识」,或者能说有什么「心态」,但如果有的话,那个模型肯定玩得很开心。
这些实验暗示的不是「稍差的模型」,而是「真正的脑损伤」。
在电路模型下说得通——重复错误的电路就像放大大脑特定区域而牺牲邻居。你不会得到一个均匀变笨的人。你得到的是有特定神经缺陷的人。那个牛仔模型可能它的「社交适切性」电路被一个失控的「创造力」电路干扰了。结巴模型的解码电路可能被额外的推理深度推离了正常轨道,无法翻译回连贯的token。
如果Transformer推理是按离散电路组织的,这就引出一系列问题。这些电路是架构的必要后果,在规模化训练中涌现吗?不同模型族是在不同层位置发展出相同的电路,还是发展出根本不同的架构?
好消息是,我已经做了一些。自己去看看判断吧。
后果:榜单被我的「后代」霸榜
我的方法正交于微调。层重复改变架构;微调改变权重。可以叠加。
人们确实这么做了,在榜单上取得了更高分数:
MaziyarPanahi在RYS-XLarge之上微调,得到calme-2.4-rys-78b。然后dfurman在那个模型上做ORPO训练,得到CalmeRys-78B-Orpo-v0.1。MaziyarPanahi继续迭代calme-3.1和3.2。
截至2026年初,Open LLM Leaderboard前四名是:
- MaziyarPanahi/calme-3.2-instruct-78b — 52.08
- MaziyarPanahi/calme-3.1-instruct-78b — 51.29
- dfurman/CalmeRys-78B-Orpo-v0.1 — 51.23
- MaziyarPanahi/calme-2.4-rys-78b — 50.77
全是78B,全是RYS-XLarge的后代。全建立在用两张RTX 4090在地下室发现的重复中层之上,用的只是硬数学和情商探测。
我从来没自己做微调。不感兴趣。我最后也对榜单失去了兴趣。越来越明显有些提交在测试集上训练,整个事情最后被关停重做了。但我知道方法是真的,因为我从来没用榜单基准做优化。榜单从来只是验证。
回望2024:我在改变它「怎么想」,不是「知道什么」
2024年,模型合并社区痴迷于权重插值:SLERP、DARE-TIES、线性合并、穿透层。想法一直是把不同模型学到的参数组合成大于部分之和的东西。mergekit是首选工具,榜单被创意组合淹没(让我等了好几个月才排到)……
我在做不一样的事。
我没改变模型知道什么。我改变它怎么想。
层重复给模型更多在其内部推理空间的迭代,不添加任何新信息。区别是给人更大的图书馆 vs 给更多时间思考。
我当初拿到榜一时真的震惊;但我觉得这可能证明了方法确实有效。
而且具体来说,只有电路大小的块有效,这告诉我们Transformer在训练中如何组织自己。
我现在相信它们发展出真正的功能解剖结构。早期层编码。晚期层解码。中间是电路:连贯的、多层处理单元,执行完整的认知操作。这些电路不可分割。你不能通过复印一步来加速食谱。但你可以跑完整个食谱两次。
小模型似乎更复杂。编码、推理、解码功能更纠缠,遍布整个堆叠。我从来没找到能泛化到所有任务的单一重复区域,虽然显然可以以牺牲另一个「天赋」为代价提升一个。但随着模型变大,功能解剖变得更分离。大模型有更多空间发展通用的「思考」电路,这可能就是为什么我的方法在72B模型上效果如此戏剧化。有个临界质量参数量以下,「推理皮层」还没从大脑其他部分完全分化。
随着HuggingFace LLM Leaderboard关闭,加上没有强大GPU可用,我停止了实验。但随着新开源模型的涌入(Qwen、MiniMax、GLM等等),加上家里终于有足够算力,我开始研究当前的LLM批次。热力图不断回来讲述同样的总体故事,但每个架构有自己的神经解剖。脑子不同。原则相同。有些模型看起来非常有趣(Qwen3.5 27B特别突出)。我会在Hopper系统搞定MiniMax M2.5的 grinding后发布代码,同时上传新的RYS模型和博客文章。
参考链接:
https://dnhkng.github.io/posts/rys/