百工坊的分派官
一、一百二十八位师傅,活反而出不来了
青州城的百工坊,天下闻名。
说是"百工",其实是实数——一百二十八位匠人,三十六行手艺。木匠、铁匠、皮匠、陶匠、漆匠、银匠、石匠、织匠……凡是你叫得出名字的手艺,坊里都有,而且每行至少三四位师傅。
外地客商来订货,常说一句话:"只要是百工坊出来的东西,拿到哪里都卖得上价。"
但今年开春,百工坊差点砸了招牌。
江宁布商陈老板订了三百套嫁妆箱——红木底、铜角包边、皮革衬里。订金八十两,交货期谷雨。
谷雨那天陈老板来取货,坊主邢百川却拿不出东西。
"陈老板……再宽限十天。"
"十天?"陈老板把订契拍在桌上,"江宁那边迎亲的日子都定了,你让我拿什么送到人家府上?"
邢百川涨红了脸,说不出话。
不是匠人不卖力。恰恰相反——一百二十八位匠人,没有一个闲着的。问题就出在"一百二十八"这个数上。
坊里接一件活,老规矩叫"过堂":十六位首席师傅先坐下来议。议完了,木匠去开料、铁匠去打铜件、皮匠去裁衬里、漆匠去调色——一件活,少说要动二十几个人。
二十几个人还不算完。每道工序之间要会签——木匠做好了底,得铁匠看过、皮匠点头、漆匠确认,才能往下传。
当年坊里只有三十几位匠人的时候,这规矩运转得挺好。后来名气大了,匠人越招越多——六十四、九十六、一百二十八——活也越来越多,但"人人过手、道道会签"的老规矩纹丝没动。
徒弟阿简有一天晚上给邢百川端洗脚水,小声说:"师父,咱们一百多号人,怎么比从前三十号人出的活还慢?"
邢百川把脚泡在热水里,没回答。
"阿简,你把这两年的工簿搬来。"
十二本工簿,摞起来有一尺多高。邢百川翻了一夜。天亮时,他在一张桑皮纸上写了三行字:
三十人时,每人每天做自己手艺的时间占七成。
一百二十八人时,不到四成。
人多不添力,反而添乱。
他把笔一搁:"去,把八位行首叫来。"
二、每件活只派两个人
八位行首挤在邢百川那间不大的账房里,凳子都不够坐。
邢百川把桑皮纸往墙上一贴。
"诸位,百工坊做了三十年。规矩是当年三十六人定下的。现在一百二十八个人,再按老规矩走,招牌早晚要砸。"
铁作行的赵师傅是个急脾气:"那你说怎么办?总不能把匠人辞退一半吧?"
"不辞。改规矩。"
他翻过桑皮纸,背面墨迹未干:
一、从今往后,每件活只派两位匠人。一主作,一副作。
二、谁来派?我来派。
三、派错了算我的。
账房里安静了半盏茶的工夫。
木作行的陈师傅先开口:"老邢,一件嫁妆箱——木工是骨架、铁工是包角、皮工是衬里、漆工是面子。你只派两个人,另外两门手艺怎么办?"
"说得对。"皮作孙师傅接话,"而且你凭什么派?你怎知道三百套嫁妆箱该派谁?万一派错了呢?"
邢百川也不急。他从抽屉里取出一本厚册子,封皮上三个字——"工性簿"。
"这本册子我记了七年。坊里每一位师傅——一百二十八位——在这上面都有三页。"
他翻开了第一页。
"铁作赵师傅。主手艺:打铁、淬火。副手艺:懂木工尺寸、能看图纸。经手记录:农具类一等,兵器类一等,精细铜件类一等。不适合:皮件缝制、漆面抛光。"
翻到另一页。
"陶作周师傅。主手艺:制陶、上釉。副手艺:懂配色调色。经手记录:日用陶一等,装饰瓷一等。不适合:金属加工、木料开榫。"
他一页一页翻。每一页都是工整小楷,每一行都清清楚楚。
"我凭什么派?"邢百川合上册子,"凭我知道你们每一个人——能做什么、不能做什么、做到什么程度。七年,一千二百多件活,每一件的成品我都记了。不是我信口开河,是你们交出来的活自己告诉我的。"
织作刘师傅小声问:"那第一个问题呢?两个人做不全怎么办?"
"问得好。做不全是事实。但只要我派的这两个人——一主一副——加起来能把最关键的工序做了,剩下的用'标准件'。"
"什么叫标准件?"
"皮衬里、漆面这些,提前做好一批放在库房里,用的时候直接取。尺寸我都写清楚了。不是每一件活都要从头量、从头裁。你孙师傅一次做三十套标准皮衬里,每一个都一样,比每件都重做一遍质量更稳。"
孙师傅想了想,不吭声了。
邢百川放下工性簿,看了看八位行首。
"老规矩为什么慢?不是你们手艺不好。是因为一百二十八个人,每件活都要摸一下。打铁的去看木匠的榫头平不平,皮匠去量铜角的尺寸对不对——人是都看了,但真有用的眼睛有几双?一个皮匠看木工活,能看出什么?不过是走过场。"
"新规矩只让该看的人看。该做的人做。"
账房里沉默了一会儿。赵师傅第一个点了头。
"试试。"
三、门房里的那支竹签
规矩定了,最难的不是规矩——是执行。
邢百川开始坐门房。每天天不亮,搬一把竹椅坐在坊门口。来一件活,他先看三样:什么料、什么用途、什么尺寸。看完在心里过一遍一百二十八位匠人的"三页纸",然后用竹签蘸朱砂,在二指宽的纸条上写两个名字。
"拿着,去东三间找老赵。副作找木工老陈。"
头一个月,一塌糊涂。
有时候人选得不对——一件精细银器,派了擅长打大件银锭的师傅,做出来粗了三分。
有时候漏了关键手艺——一件镶螺钿的漆盒,只派了漆匠和木匠,忘了螺钿得银匠来镶。做到一半临时加人,乱上加乱。
但邢百川有一个谁也比不了的习惯:记错。
每派错一次,他就在工性簿上补一行。不涂改,只追加。那位银锭师傅的页面上,原先写着"精细件二等",实际做下来发现不行,他就加一行小字:"七月十四,精细银器,三等。改。"
阿简问:"师父,您都改了多少回了?"
"一千二百多回。"
"那……那不正说明您派得不准吗?"
邢百川摇头:"说明我在学。"
到了第三个月,纸条开始准了。
一件雕花樟木箱——主作木匠老陈,副作漆匠老吴。老陈雕工一等,老吴漆面一等,两人搭档,出来的箱子比从前二十几个人会签做出来的还漂亮。
一件铜胎掐丝珐琅——主作银匠老郑,副作陶匠老周。老郑的掐丝功夫坊里独一份,老周的釉色调配没人比得上。客人收货后加了二十两赏钱。
更让人服气的是快。从前一件嫁妆箱从接活到出货,过二十几个人的手,至少十四天。现在两个人,七天。
赵师傅有一天在饭堂里说了一句:"老邢这人,别看他坐在门房不动弹。他比咱们谁都清楚——谁的刀往哪儿砍最顺手。"
四、淘汰比选择快
又过了一个月,阿简忍不住问出那个问题。
"师父,您这本工性簿,上面的东西到底是怎么来的?您问过每一位师傅'你擅长什么'吗?"
邢百川正在喝茶,把杯子搁下。
"从头到尾,我只记了一种东西——你们交出来的活,成品什么样。"
他翻给阿简看。上面没有任何人的"自述",只有一行一行的记录:
四月初三,铁犁头,一等。
四月十一,铜锁扣,一等。
四月十九,铁锅,二等。
四月二十六,银簪,三等。赵自请下回不接银器。
"看到了吗?我没问过赵师傅'你擅长什么'。我只记了他每一件活的结果。做了上百件之后,他擅长什么、不擅长什么——活自己会说话。"
阿简恍然大悟:"所以三页纸是'算'出来的,不是'问'出来的。"
"对。而且越做越准。每多一件活,就多一行证据。"
阿简想了一会儿:"那派活的时候呢?您怎么眨眼之间就选出两个人?"
邢百川笑了:"你来试试。"
他递过一张新订单:黄花梨首饰盒,巴掌大,镶银丝,衬绸缎。
"你派谁?"
阿简翻了半天工性簿,急得满头汗。一百二十八个人,怎么也找不到"首饰盒"这个分类。
"师父,我找不到……"
"你当然找不到。首饰盒不在我的分类里。但它在三个分类的交界——木工、银工、织工。你看:主体是木,主作必须是木匠。卖点是'镶银丝',得找银匠里做精细件的。衬绸缎不是关键,找织工做标准件就行。"
他拿过竹签,两秒写完了:"木作老陈(主),银作老郑(副)。"
"你不是在工性簿里找'首饰盒'三个字。你是在心里拆这只盒子——什么料?什么手艺最要紧?什么手艺可有可无?拆开了,你就知道该找谁。"
阿简若有所思:"所以您不是在一百二十八个人里选……"
"对。我是在一百二十八个人里,先淘汰一百二十五个不对路的——剩下三个,再从三个里选两个。"邢百川把竹签搁回砚台边。
"淘汰比选择快。把不对的人排除,剩下的就是对的。"
五、屏风
那年入秋,百工坊不只恢复了名声——比从前更响了。
客商们发现,百工坊的活不但没降品质,反而更精细了。以前二十几个人做一件,各人有各人的手劲,出来的东西总有一种"拼凑"感。现在两个人从头到尾一个路子,浑然一体。
更让客商高兴的是快。从前一批货等一两个月,现在七八天就取。
腊月算总账:全年出货量翻了将近三倍。匠人工钱涨了四成。退货率反而降到三十年来最低——不到半成。
年底那顿酒,木作陈师傅举杯问邢百川:"老邢,你跟我们交个底。这套规矩到底好在哪里?"
邢百川放下筷子。
"以前是人人过手。什么叫人人过手?就是让皮匠去看木匠的榫头平不平,让陶匠去量银器的成色。名头上都过了手,真有用吗?一个皮匠看木工活,能看出什么?不过是图个心安。"
"现在不一样。木匠的活,让一个懂木工的铁匠去看——他懂尺寸、会看图,他的每一眼都有用。剩下那一百二十几个不该看的人,去干自己该干的活。"
他端起杯子:
"不是人多力量大。是对的人在对的地方,力量才大。"
转过年来,出了一件事,让阿简彻底服了。
一个外乡客商拿了张刁钻的订单坐在坊门口不走——"百子贺寿"银丝屏风,十二扇,每扇三尺高。每扇的镂空花纹都不一样,但拼在一起得是一幅完整的画。
整个青州城没有第二家敢接。
邢百川看了一眼,写了张纸条:"银作老郑(主),铁作老赵(副)。"
阿简探头看了看,小声说:"师父,赵师傅是打铁的,屏风是银丝活……这不对路子吧?"
"你只看到不对路。你想想——十二扇拼成一幅画,最难的功夫在哪儿?不是掐银丝,是算比例。每扇花纹不一样,拼在一起必须严丝合缝。全坊上下,谁的尺寸感最准?赵师傅。他打了三十年铁,眼力比尺子还准。"
"这件活,银丝手艺第一要紧,尺寸精准第二要紧。老郑解决第一个,老赵解决第二个。"
屏风做了四十天。交货那天,十二扇一字排开——十二幅银丝牡丹,连成一条完整的缠枝牡丹图。接缝处天衣无缝。
客商当场加了一百两赏钱。
阿简在后面看着,想起师父说过的那句话——"淘汰比选择快"。他忽然明白了另一件事:师父那张纸条上永远只写两个名字。但这两个名字背后,是一百二十八个人的全部本事——被一根竹签精准地钓了出来。
那天晚上,阿简端洗脚水的时候问了最后一个问题。
"师父,这些年您天天在门房坐着。您是在看活,还是在看人?"
邢百川把脚泡进热水里,眯着眼想了很久。
"活是死的,人是活的。分派官的功夫不在纸上——在你心里那杆秤,得把一百二十八个人的斤两,量得分毫不差。"
技术解读
混合专家模型(Mixture of Experts, MoE)是当代大语言模型最核心的架构创新之一。从 2017 年 Shazeer 等人在《Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer》中首次将稀疏门控 MoE 应用于大规模语言模型,到 2024 年 Mixtral 8×7B 以 47B 总参数(仅激活 13B)达到接近 Llama 2 70B 的性能,再到 GPT-4 被广泛报道采用 MoE 架构——稀疏专家混合已经从学术好奇心变成了前沿模型的标配。
MoE 的核心思想简单而激进:与其让整个模型处理每一个输入 token,不如训练多个"专家"子网络,每个 token 只激活其中少数几个(通常 top-2)。这意味着模型的总参数量可以极大(数百亿甚至万亿级),但每个 token 的实际计算量保持在一个较小的常数——在一个追求"更大模型"的时代,MoE 用稀疏性换来了计算效率。
核心概念回顾
| 概念 | 通俗解释 |
|---|---|
| 密集模型(Dense Model) | 传统的 Transformer 模型,每一层的前馈网络(FFN)对所有输入 token 执行相同的完整计算。所有参数都被每个 token 激活 |
| 专家(Expert) | MoE 层中的一个独立前馈网络(FFN)。不同专家在训练中自然分化为处理不同类型输入模式的"专长" |
| 门控网络(Router / Gate) | 一个小型神经网络,接收每个 token 的表示,输出"该 token 应该由哪些专家处理"的概率分布 |
| 稀疏激活(Sparse Activation) | 每个 token 只激活 top-k 个专家(通常 k=1 或 2),而非全部。这是 MoE 计算效率的来源——参数总量巨大,但单次计算量很小 |
| Top-k 门控 | 从所有专家中选择门控分数最高的 k 个参与计算。落选的专家对该 token 完全不做计算,输出为零 |
| 负载均衡(Load Balancing) | 防止门控网络总是选择同几个"热门专家"而忽略其他专家的机制。通过辅助损失函数(auxiliary loss)惩罚不均衡的路由分布 |
| 专家容量(Expert Capacity) | 每个专家能同时处理的 token 数量上限。超出容量时 token 会被"溢出"到其他专家或直接跳过,防止某专家因 token 过多而成为瓶颈 |
| 软合并(Soft MoE) | 不进行硬性离散选择,而是对多个专家的输出做加权求和,权重由门控网络给出——梯度更平滑但计算量更大 |
| 条件计算(Conditional Computation) | MoE 所属的更大的研究范式:根据输入动态决定激活网络的哪些部分,而非固定执行全部计算 |
| 专家专业化(Expert Specialization) | 训练过程中自然出现的现象:不同专家逐渐偏好处理不同类型的 token(语法型、语义型、特定领域型等),无需手动指定 |
故事中的隐喻对照
| 故事元素 | 映射的技术概念 | 解释 |
|---|---|---|
| 百工坊(一百二十八位匠人) | MoE 层(128 个专家) | 匠人数量对应专家数量。经典 MoE 配置中每层可有数十到数百个专家 |
| 每位匠人的独特手艺 | 专家专业化 | 不同专家在训练中分化出不同的"专长"——有的擅长处理语法模式,有的擅长事实知识,有的擅长推理 |
| 邢百川(坊主/分派官) | 门控网络(Router/Gate) | 门控网络是一个轻量级路由模块,接收 token 表示后输出 top-k 专家选择。邢百川坐门房看订单选匠人,正是这个角色 |
| 订单(料、用途、尺寸) | 输入 token 的隐藏表示 | 每个 token 经过嵌入和注意力层后,得到一个向量表示——这个向量就是门控网络"看"的订单 |
| 工性簿(七年记录) | 门控权重矩阵 / 专家嵌入 | 门控网络的可学习参数 W_g,通过与 token 表示做内积来为每个专家打分。这些参数在训练中通过反向传播和梯度下降不断更新 |
| "活自己会说话" | 端到端训练 | 专家分配不是人工指定的,而是在大量训练数据上通过优化最终损失函数自动学会的——路由决策由梯度驱动 |
| 每件活只派两个人 | Top-2 稀疏门控 | 经典配置:每个 token 只激活门控分数最高的 2 个专家。其余专家对该 token 完全不参与计算 |
| "淘汰比选择快" | 稀疏激活的计算效率 | 门控网络不需要精确选出"最好的专家",只需要快速排除不相关的 90%+ 专家,在剩余的小集合中做精确选择 |
| 标准件(预制的通用部件) | 共享专家 / 残差连接 | 某些基础功能对所有 token 通用,不需要走专家路由——对应 MoE 中的共享专家或绕过 MoE 层的残差路径 |
| "派错了算我的" | 辅助损失(Load Balancing Loss) | 当路由分布不均(某些专家被过度使用)时,辅助损失施加惩罚,推动门控网络更均匀地分配 token |
| 一千二百次改错记录 | 训练迭代中的梯度更新 | 每一次"派错"(路由不当导致输出质量差)产生梯度信号,微调门控权重,使后续路由更准确 |
| 从十四天到七天 | 稀疏 MoE 的计算效率提升 | 相比密集模型,MoE 在相同计算预算下可以支撑更大的总参数量,或在相同总参数下大幅降低单 token 推理成本 |
| 全年出货量翻三倍 | 吞吐量提升 | MoE 的总参数巨大但每 token 激活参数小,在推理时比同等总参数的密集模型快得多 |
| 屏风订单(十二扇拼一图) | 复杂 token 的多专家协同 | 困难的输入可能需要不同类型的专业知识联合处理——对应某些 token 需要多个专家的加权输出合并 |
| "眼力比尺子还准"(赵师傅的尺寸感) | 专家的潜在能力 / 可迁移专长 | 某些专家的"手艺"可以迁移到表面上不直接相关的任务——类似模型中发现的多语言专家、跨领域推理专家等现象 |
为什么这个故事对应混合专家模型(MoE)?
"每件活只派两个人"是 MoE 稀疏激活的核心设计。 Shazeer 等人(2017)的关键洞察:与其让一个巨型 FFN 处理所有 token,不如用几十上百个小 FFN(专家),每个 token 只用其中 2 个。参数总量大幅增加,但计算量保持可控——就像百工坊匠人虽多,每件活只需两人。
邢百川的"工性簿"映射了门控网络的学习机制。 门控网络本质上是一个可学习的路由器——W_g 矩阵的每一行对应一个专家的"能力画像"(嵌入向量),通过与 token 表示的内积计算匹配度。这些画像不是手动填写的,而是在训练过程中通过梯度下降自动形成的——正如工性簿上的记录不是匠人自述,而是由实际成品"算"出来的。
"淘汰比选择快"精确描述了稀疏门控的计算优势。 门控网络不需要精确排序 128 个专家的优劣——它只需要快速排除 120+ 个明显不相关的,在剩余的小集合中做精细选择。在工程实现中,top-k 选择通常通过高效的近似算法完成,计算开销远小于密集模型中的完整前向传播。
负载均衡辅助损失是防止"几个匠人被累死"的关键。 如果不加约束,门控网络可能收敛到总是选择少数几个"热门专家",导致训练不充分和计算资源浪费。Fedus 等人(2022)在 Switch Transformer 中引入辅助损失函数,惩罚路由分布的不均衡——正如邢百川需要在工性簿中记录并调整每位匠人的接活密度。
标准件的设计对应了 MoE 架构中的共享组件。 并非所有计算都需要走专家路由。现代 MoE 架构通常保留一个共享的 FFN 或注意力层,让基础模式的处理绕过门控——与百工坊将皮衬里、漆面做成标准件的思路一致:通用的用共享路径,专业的走专家。
屏风的例子展示了多专家协同解决复杂问题的能力。 当一个输入需要多维度专业知识的组合时,top-k 门控可以同时激活互补的专家——银匠负责银丝工艺,铁匠负责尺寸精准。在模型中,这表现为一个 token 的最终输出是所选 2 个专家输出的加权和,两个专家的知识被"合并"到最终的表示中。
MoE 为"大模型"提供了一种可持续的扩展路径。 密集模型的参数量增长意味着每个 token 的计算成本同比例增长——百工坊三十人变一百二十八人,人人过手的开销让效率暴跌。MoE 通过稀疏激活打破了这种线性束缚:参数量可以轻松达到万亿级,而每 token 的推理成本基本不变。GPT-4、Mixtral、DeepSeek-V2 等前沿模型均采用 MoE 架构,这并非巧合——它是当前"做大模型"最务实的技术路线。
后记:MoE 的智慧在于——它承认一个朴素的真相:没有人是全能的,也没有必要让所有人处理所有事。一百二十八位匠人各有各的绝活,门房里的分派官用七年的时间学会了一件事:把对的人放到对的位置上,让其他的人去做他们该做的事。这或许也是大模型时代最被低估的洞见——真正的规模化,不是把一切做大,而是知道什么时候不该让所有人一起上。坊门口那张竹椅还摆着,每一张新来的订单,都在等那根蘸了朱砂的竹签落下。

