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居然能跑

不是性能爆表,是它妈的根本没崩掉。

这说明什么?说明层与层之间的内部表示是同质的,模型可以消化乱序的隐藏状态而不原地爆炸。架构的灵活性远超我们的想象。

两个观察开始在我脑子里碰撞:

  1. Base64那事儿 → 早期层是翻译官,晚期层也是翻译官
  2. Goliath那事儿 → 中间层似乎在某种「通用语言」里工作

我的假说开始成型:

Transformer有真正的功能解剖结构。

早期层负责「读」,晚期层负责「写」。中间层——那个「思考皮层」——在一个 универсальный内部语言里运作,这个语言对架构重组非常鲁棒。

而且Goliath使用的层块大小是16层,这让我怀疑「输入处理单元」和「输出处理单元」可能比16层更小。

如果这是真的……

image

也许我根本不需要训练模型让它变聪明。我不需要微调,不需要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种有效配置要测。全测一遍需要几年计算力,我需要代理任务——快速、客观、能揭示结构特征,而不是任务特定的技巧。

代理任务必须满足三个条件:

  1. 输出极短。要测几千个配置,每轮评估必须快。不能写长文章。
  2. 评分无歧义。用不起LLM当裁判的流水线。答案必须能客观打分。
  3. 认知需求正交。如果一个配置同时提升两个任务,那是结构性的,不是任务特定的。

我首先试了创意写作。让模型写诗、写故事、用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,生成好多页「哈哈哈哈」夹杂牛仔引用。「嗨」是我能想到的最好描述。

image

我不知道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前四名是:

  1. MaziyarPanahi/calme-3.2-instruct-78b — 52.08
  2. MaziyarPanahi/calme-3.1-instruct-78b — 51.29
  3. dfurman/CalmeRys-78B-Orpo-v0.1 — 51.23
  4. MaziyarPanahi/calme-2.4-rys-78b — 50.77

全是78B,全是RYS-XLarge的后代。全建立在用两张RTX 4090在地下室发现的重复中层之上,用的只是硬数学和情商探测。

我从来没自己做微调。不感兴趣。我最后也对榜单失去了兴趣。越来越明显有些提交在测试集上训练,整个事情最后被关停重做了。但我知道方法是真的,因为我从来没用榜单基准做优化。榜单从来只是验证。

回望2024:我在改变它「怎么想」,不是「知道什么」

image

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/