三条街
洛阳城南有一条老街,叫通济街。街上只有一家饭馆,馆主姓全,人称全把式。
全把式一个人掌勺,炒菜、煲汤、蒸点心、卤肉、拌凉菜,样样都来。客人进了门,不管点什么,都是他一个人做。忙的时候,他一个人要同时顾四五桌,从灶头跑到蒸笼,从蒸笼跑到卤锅,满头大汗,手脚不停。
全把式的菜好不好吃?说实话,还不错。毕竟他什么菜都练过,功底扎实。可问题是——他一个人能做的菜是有数的。赶上饭点人多的时候,后面来的客人就得等。要想让他做得更精,他也为难:"我就一双手,顾得了这头顾不了那头。你让我把鱼做到极致,我炖汤的功夫就得丢。"
全把式的饭馆,就是这么一条街上的这么一家店:什么都能做,但一次只能做这么多;什么都还行,但没有一样是绝顶的。
城北有另一条街,叫百工街。
百工街完全是另一种路数。街上有几十家铺子,每家只做一样东西。张家只做鱼,李家只做汤,王家只蒸点心,赵家只卤肉。每一家都把自己那一样做到了极致——张家的鱼,连宫里的御厨都比不上;李家的汤,隔了三条街都闻得到香。
客人到了百工街,想吃什么就进哪家的门。不同的客人进不同的铺子,互不干扰,就算来一百个人,也不用排队——反正各吃各的。
可百工街也有它的难处。
第一,铺子太多了。几十家铺子,每家都要养伙计、烧炉灶、备食材,开销比全把式一家馆子大了几十倍。有些铺子一天到晚也等不来几个客人,灶火白烧着,食材白备着,纯粹浪费。
第二,客人得自己知道该去哪家。有些客人进了街,不知道自己想吃什么,或者想吃个"什么都有一点的拼盘"——百工街办不了,每家只会自己那一样。
第三,铺子之间老死不相往来。张家做鱼做了二十年,悟出来一些火候上的心得,本来对李家炖汤也有用,可两家隔着一堵墙,谁也不跟谁说。
城西还有第三条街,叫聚贤街。聚贤街是这两年才兴起来的,路子跟前两条都不一样。
聚贤街上也有许多铺子,可这些铺子不挂招牌,也不自己招揽客人。街口站着一个人,是个穿灰袍的管事,人称"分活的"。
客人到了街口,不用自己选铺子。分活的看一眼客人,问几句话——有时候甚至不用问,看看客人的穿着打扮、闻闻他身上的气味——就知道这个人该去哪家。
"这位爷想吃鱼,去三号铺子。" "这位要碗汤暖暖胃,去七号。" "这一桌要办席面,去三号和十二号,两家一起伺候。"
客人自己可能都没想清楚要什么,分活的就替他分好了。
更妙的是,聚贤街的铺子虽多,可每次来一个客人,只开两三家铺子的灶火。其余的铺子灶火不点,伙计歇着,不费一粒米一根柴。等下一个客人来了,分活的重新看一眼,可能开的是另外两三家。
这样一来,街上虽然有几十家铺子的本事,可每一单活儿的开销,只跟开了两三家铺子差不多。
有人好奇,问分活的:"你是怎么知道该派谁的?"
分活的说:"每个客人进了街口,我心里就有一本账。这本账上列着所有铺子的名字,每个名字后面跟着一个数——这个数是我根据这位客人的情形算出来的,数越大,说明这家铺子越对这位客人的路子。我挑数最大的两三家,把活儿派给他们。"
又有人问:"那你这本账是怎么练出来的?"
分活的说:"练出来的。一开始我也派不准,经常把想喝汤的派去做鱼的铺子。后来我跟着客人的反馈慢慢调——谁满意了,我就记住这类人该去哪家;谁不满意了,我就调调账上的数。日子久了,就越来越准了。"
旁边有人不服气:"那要是你老把活儿派给那两三家,别的铺子不就荒废了?"
分活的点点头:"你说到点子上了。我确实犯过这个毛病——有一阵子,不管来什么客人,我都派三号和七号,因为这两家最稳。结果别的铺子连练手的机会都没有,手艺越来越生。后来东家定了一条规矩:我派活的时候,不能太偏,得尽量雨露均沾。 不是说每家都要派,而是说不能让任何一家永远接不到活。这条规矩加上以后,各家铺子的手艺都保住了,街上的总体水平也上去了。"
三条街的故事在洛阳城里传了很久。有人喜欢通济街的简单利落,有人喜欢百工街的极致手艺,有人喜欢聚贤街的精打细算。
后来城里来了个做买卖的南方客商,三条街都走了一遍,最后跟人总结道:
"通济街的好处是人少事简,一个灶台就开张了,可这条路走到头,想再好就得加灶台,加了灶台就跟百工街没两样了。百工街的好处是上限高,几十个灶台同时烧,可养不起——大部分灶台都在空烧。聚贤街是折中的路子:铺子照样多,可每次只点两三个灶,用几十家铺子的本事,花两三家铺子的钱。 能走这条路,全靠街口那个分活的分得准。"
他顿了顿,又说:"不过话说回来,这三条街也不是非此即彼。我见过有人把通济街的全把式请来当聚贤街铺子里的大厨,也见过有人在百工街的铺子之间加了个分活的。路子是死的,人是活的。"
三条街对应大模型的三种架构范式。
通济街的全把式是 Dense Transformer——每个参数每次前向传播都参与计算,GPT-3、LLaMA 都属此类。结构简单训练稳定,但计算成本与参数量线性相关,想更强就得更大,更大就得更贵。
百工街是早期的专家模型思路——每个任务一个专用模型,各自极致,但总参数量爆炸,专家之间还无法共享知识。
聚贤街是 Mixture of Experts(MoE)。Transformer 层的 FFN 被替换为多个并行的专家子网络,加一个门控网络做路由。每个 token 进来,门控网络只激活 top-k 个专家:
"每次只开两三家铺子的灶火"就是稀疏激活(Sparse Activation)的核心优势。Mixtral 8x7B 有 8 个专家每次只激活 2 个,总参数 47B 但活跃参数只有 13B。DeepSeek-V3 有 256 个专家每次只激活 8 个。用几十家铺子的本事,花两三家铺子的钱。
"分活的"那本账是门控网络的路由机制——接收 token 的隐层表示,输出各专家的适配度,本身也是可学习的,通过端到端训练与专家一起优化。
"老把活儿派给那两三家"是 MoE 训练中最棘手的专家坍缩(Expert Collapse)问题,Shazeer et al. (2017) 首次系统讨论。"不能太偏,得雨露均沾"对应负载均衡损失:
当所有专家负载均匀时损失最小。DeepSeek-V3 进一步提出了无辅助损失的均衡策略,通过门控网络中的可学习 bias 项来实现,避免辅助损失干扰主训练目标。
南方客商说的"路子是死的,人是活的"确实反映了当前趋势:现实中的大模型往往是混合架构,MoE 层只替换部分 FFN,其余层仍是 Dense 的;也有人把 MoE 和 LoRA 结合(MoLoRA),架构之间的边界越来越模糊。