【免费下载链接】K2-Horizon-MoVA-36B-A4B-oQ4e项目地址https://ai.gitcode.com/hf_mirrors/mlx-community/K2-Horizon-MoVA-36B-A4B-oQ4e点击查看免费下载K2-Horizon-MoVA-36B-A4B-oQ4e 是一个基于 MLX 格式转换的稀疏 MoE混合专家大模型36B 总参数 / 约 4B 激活参数、512K 上下文。它最不寻常的设计就藏在 Router路由器里gate 的 bias 只参与选哪几个专家却不参与每个专家占多大权重的计分。这篇文章带你一步步拆解这个 Sigmoid Router 的完整工作流程讲清楚 bias 到底加在哪一步、为什么偏偏不加在分数里。模型速览36B 总参数、每个 token 只激活约 4B在深入 Router 之前先用 config.json 里的关键配置建立整体印象配置项值含义num_hidden_layers48解码层总数前 3 层为稠密层num_experts/num_experts_per_tok100 / 8FFN 侧每层 100 个专家每个 token 选 8 个mova_num_experts/mova_num_experts_per_tok64 / 4注意力侧 MoVA 值专家每个 token 选 4 个num_shared_experts1每个 token 都额外经过 1 个共享专家router_score_funcsigmoid路由打分函数而非 softmaxmoe_gate_biastruegate 线性层带 bias就是本文主角router_scaling_factor2.5最终路由权重的放大系数可以看到 bias 出现在两处FFN 稀疏层的gate100 路选择 8 路和 MoVA 注意力的v_router64 路选择 4 路而两者遵循完全相同的路由规则。5 步看懂 Sigmoid Router 的完整流程 用一个 token 进入某层稀疏块为例路由逻辑等价于下面 5 行伪代码真实实现见 modeling_k2_horizon.py 中的K2HorizonSparseMoeBlocklogits x · W_gate # 第 1 步只乘权重bias 先放一边 scores sigmoid(logits) # 第 2 步每个专家得到 0~1 的相关度分数 choice scores bias # 第 3 步bias 只在这里加一次 选中 topk(choice, k8) # 第 4 步bias 参与选谁 权重 normalize(scores[选中]) × 2.5 # 第 5 步最终权重取自【原始分数】关键点在第 5 步选出专家后取回的权重是第 2 步的原始 sigmoid 分数归一化后乘以router_scaling_factor而不是第 3 步加过 bias 的分数。bias 的影响到 top-k 选择为止就此退休。为什么用 sigmoid 而不是 softmaxsoftmax 强制所有专家分数加起来等于 1专家之间互相挤占sigmoid 让每个专家独立打分更符合这个 token 和专家 A 的相关性这种独立判断也给了 bias 一个可以安全平移排名的空间。为什么 bias 不算分两个关键设计理由⚖️ 这个bias 只选人不记分的写法源自 XLLM 原生语义代码注释明确说明见 modeling_k2_horizon.py背后有两个清晰的原因理由一bias 的职责是调度不是评分。bias 是一个静态常数与输入 token 无关它的实际作用是把 token 更倾向于或回避某些专家从而均衡各专家的工作负载。如果把它加进最终分数里那么某个专家即使与当前 token 语义相关性很低也会因为 bias 大而拿到更高的混合权重——负载压力就会污染内容相关性。理由二选人与分权重是两件事解耦后各自都能保持纯净。一个通俗的类比bias 像招聘官决定哪些候选人能进入面试top-k 选择sigmoid 分数像评审分决定入选者各占多少话语权混合权重。如果让招聘官同时给评审分加减分团队的最终结论就会被与内容无关的因素带偏。在源码里验证bias 到底加在哪一步想亲手确认两处实现都值得对照阅读Transformers 参考实现modeling_k2_horizon.py先只用权重算 logitsrouter_logits F.linear(hidden_states, self.gate.weight)第 560 行sigmoid 得到原始分数再把 bias 加到routing_weights_for_choice上专门用于 top-k第 562-572 行MoVA 注意力侧的v_router复用统一的 calc_router_weights逻辑完全一致MLX 本地推理实现k2_horizon_mova_mlx.py 的 _router 函数docstring 一句话总结了这个设计bias affects top-k selection but not sigmoid scores——先算 sigmoid 分数再把 bias 加回选择分数上决定入选专家最后take_along_axis取回的是原始分数。配置项定义configuration_k2_horizon.py 中的moe_gate_bias、router_score_func、router_scaling_factor三个字段共同定义了这套路由行为。两套实现殊途同归保证了 oQ4e 量化版与原始模型路由行为严格一致。本地部署者必知Router 为什么保留 8-bit 量化oQ4e 版本采用 imatrix 增强的混合精度 4-bit 量化来压缩模型体积但 k2_horizon_mova_mlx.py 的quant_predicate里有一个例外mlp.gate和self_attn.v_router始终保留 8-bit。原因正是本文的主题路由权重对数值误差极其敏感。sigmoid 分数会被 top-k 直接拿来选人生死若 gate 权重量化太狠分数排序一乱token 就会被分派给错误的专家输出质量会断崖式下降。多花一点点显存保 8-bit换来的就是路由决策的稳定性。常见问题 FAQQ1如果不把 bias 从分数里剔除会怎样Abias 会被归一化吸收直接改变各入选专家的混合比例。模型训练时学到的相关度分数就失去了纯语义含义路由的负载均衡目标与内容加权目标会互相干扰。Q2top-k 是在加 bias 之前还是之后做的A之后。排序依据是scores bias但落选不影响已入选专家的最终权重——权重只取自原始scores。Q3router_scaling_factor 2.5起什么作用Asigmoid 分数在 (0,1) 之间8 路归一化后每个权重平均约 0.125乘以 2.5 相当于整体放大约 8 倍的专家贡献强度让稀疏专家的输出在残差流中有更明显的存在感。一句话总结在 K2-Horizon-MoVA-36B-A4B-oQ4e 中Sigmoid Router 把 bias 严格限制在 top-k 选择环节——bias 是调度员sigmoid 分数才是评委。这种选人、计分分离的设计既让专家负载均衡有了抓手又保住了每个专家贡献权重的纯语义性也正是它的路由权重需要在 oQ4e 量化中特批 8-bit 的原因。赞分享【免费下载链接】K2-Horizon-MoVA-36B-A4B-oQ4e项目地址https://ai.gitcode.com/hf_mirrors/mlx-community/K2-Horizon-MoVA-36B-A4B-oQ4e点击查看免费下载相关推荐为什么选 oQ4eK2-Horizon-MoVA-36B-A4B-oQ4e 的 4-bit 混合精度量化取舍全解为什么选 oQ4eK2 Horizon MoVA 36B A4B oQ4e 的 4 bit 混合精度量化取舍全解 K2 Horizon MoVA 36B A4K2-Horizon-MoVA-36B-A4B-oQ4e 的黑科技 MoVAValue 专家路由注意力全解析K2 Horizon MoVA 36B A4B oQ4e 的黑科技 MoVAValue 专家路由注意力全解析 K2 Horizon MoVA 36B A4BK2-Horizon-MoVA-36B-A4B-oQ4e 是什么1篇看懂 36B 稀疏 MoE 512K 长上下文推理模型K2 Horizon MoVA 36B A4B oQ4e 是什么1篇看懂 36B 稀疏 MoE 512K 长上下文推理模型 K2 Horizon MoVA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考