Instructions to use redmingwei/HeteroMoEProjSpace-v2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use redmingwei/HeteroMoEProjSpace-v2 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("feature-extraction", model="redmingwei/HeteroMoEProjSpace-v2", trust_remote_code=True)# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("redmingwei/HeteroMoEProjSpace-v2", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
HeteroMoEProjSpace-v2 — 维度投影空间完整模型
本系列唯一可直接加载的完整模型。 其他
HeteroMoE-*/hetero-moe-*仓库是历史实验产物,见文末导航。
三个真实预训练骨干 + 按功能槽张成的多子空间 + 1024 维融合层。 645,190,802 参数 / 2.58 GB
| 组件 | 参数 |
|---|---|
qwen (Qwen2.5-0.5B-Instruct) |
494.03M |
bert (bert-uncased-L4-H256) |
11.17M |
vit (vit-base-patch16-224) |
86.39M |
proj_space(维度投影空间) |
2.76M |
fusion(1024 维融合层) |
50.34M |
目录
| 路径 | 内容 |
|---|---|
| 根目录 | 完整模型(model.safetensors 2.58 GB) |
tokenizer_qwen/ tokenizer_bert/ processor_vit/ |
三个模态的预处理 |
modeling_hetero_moe_projspace.py |
自包含建模代码(auto_map 指向它) |
checkpoints/v62.3/ |
训练 checkpoint(不含骨干)+ 训练报告 |
example_inputs.npz expected_*.npy |
基准输入与输出 |
用法
from transformers import AutoModel, AutoTokenizer, ViTImageProcessor
m = AutoModel.from_pretrained("redmingwei/HeteroMoEProjSpace-v2", trust_remote_code=True)
qtok = AutoTokenizer.from_pretrained("redmingwei/HeteroMoEProjSpace-v2", subfolder="tokenizer_qwen")
btok = AutoTokenizer.from_pretrained("redmingwei/HeteroMoEProjSpace-v2", subfolder="tokenizer_bert")
vproc = ViTImageProcessor.from_pretrained("redmingwei/HeteroMoEProjSpace-v2", subfolder="processor_vit")
qe = qtok(["hello"], return_tensors="pt", padding="max_length", truncation=True, max_length=16)
be = btok(["hello"], return_tensors="pt", padding="max_length", truncation=True, max_length=16)
px = vproc(images=[img], return_tensors="pt")
out = m(qwen_input_ids=qe["input_ids"], qwen_attention_mask=qe["attention_mask"],
bert_input_ids=be["input_ids"], bert_attention_mask=be["attention_mask"],
bert_token_type_ids=be["token_type_ids"], pixel_values=px["pixel_values"])
out.y # [B, S, 1024]
out.slot_alpha # [B, S, 4] 槽门控 —— 四个槽各贡献多少(全槽软分布,和=1)
out.alpha # [B, S, 4] 专家选择 —— 4 选 top-2(和≠1,是 top-k 掩码后的权重)
模态是可选的:只给文本、只给图像都能跑。缺失模态在路由里用零向量占位。
⚠️
slot_alpha与alpha都是 4 维,但语义完全不同: 前者是槽门控(选 Q/K/V/O 哪个子空间),后者是专家选择。 要看「四个槽是否都在用」请读slot_alpha。
复现基准
import numpy as np, torch
from huggingface_hub import hf_hub_download
npz = np.load(hf_hub_download("redmingwei/HeteroMoEProjSpace-v2", "example_inputs.npz"))
inp = {k: torch.from_numpy(npz[k]) for k in npz.files}
exp = torch.from_numpy(np.load(hf_hub_download("redmingwei/HeteroMoEProjSpace-v2", "expected_y.npy")))
with torch.no_grad():
out = m(**inp)
print((out.y - exp).abs().max())
精度
权重加载 missing 0 / unexpected 0;同一实例内两次前向完全一致(Δ=0.000e+00)。
expected_y 在 transformers 5.21.0 下生成,其它版本的骨干 forward 实现可能有微小差异。
实测 5.16.1 下 max|Δy| = 7.9e-05(相对量级 ~2e-7)。这是版本漂移,不是加载错误。
需要 bit 级一致请 pin transformers==5.21.0。
版本史
| 版本 | 改了什么 | 状态 |
|---|---|---|
| v62.0 | proj_space.router 是死代码:输出只被 return,从未参与计算 |
⚠️ 作废 |
| v62.1 | router 作为 token 级槽门控真正乘进 canonical;但仍在槽上做 top-k=2 ⇒ 每 token 最大权重均值 0.9933、熵 0.0209 | ⚠️ 作废 |
| v62.2 | 槽门控改为全槽软门控(四槽投影在门控前已算完,top-k 不省算力、只丢信息)+ 训练加熵正则 | ⚠️ 作废 |
| v62.3 | router 改为 eager 创建 —— 能加载权重、也进 optimizer,真正被优化 | ✅ 当前 |
为什么 v62.0~v62.2 作废:它们的 router 是 lazy 创建的(__init__ 里 s.router=None,
首次 forward 才建),于是
① load_state_dict 时 proj_space.router.weight 被判为 unexpected,权重根本加载不上;
② trainable/optimizer 在 router 存在之前就取好,router 从未被优化;
③ 熵正则的梯度流向 router,却不在 optimizer 里,被丢弃。
⇒ 槽门控完全由一个随机初始化的 router 决定。 v62.0 报告里的「专家负载均衡 0.8774」尤其误导 —— 它统计的正是这个从不参与计算的模块。
v62.3 修好后,训练脚本改为直接 import 仓库里的 projspace.py(不再内联副本)。
此前两份实现会分叉,那次 lazy/eager 不一致正是分叉的产物。
训练数据与指标(v62.3)
- 数据:1 万条 ag_news 文本 + 5 千张 food101 图像的真实隐藏状态
- 划分:按类别分层 80/20(train 7998 / val 2002)
- held-out 准确率 0.9076(随机 0.25)
- 专家负载
[0.350, 0.527, 0.572, 0.551],均衡 0.612,熵 0.472 - 槽门控熵 0.647(软分布,激活率 100%)
- 槽门控平均权重
[0.003, 0.171, 0.434, 0.392]—— 模型学会了几乎不用 Q 槽
⚠️ 融合层专家是解冻的(偏离 v33 原设定),且四个专家均为随机初始化、 未从真实 FFN 抽取。上述数字是 ag_news 4 分类准确率,不是通用能力。
出处
GitHub research/aligner/v62_dimension_projection_space/
—— 规范 / 声明 / 指标 / 测试 / 复算脚本 / 机制可视化都在那个子包里。
本系列其他仓库
| 用途 | 仓库 |
|---|---|
| 唯一可直接加载的完整模型 | HeteroMoEProjSpace-v2 |
| 权重切片(复算依赖,私有) | backbone-slices |
| 训练数据缓存(4.46 GB) | hetero-moe-cache (dataset) |
| 历史完整模型(不可直接加载) | HeteroMoE-v1, HeteroMoE-v1-tuned |
| 训练实验记录 | hetero-moe-router, hetero-moe-router-unfrozen, hetero-moe-shared-routed |
| 分析产物(v48–v61) | hetero-moe-projspace, hetero-moe-dimspace, hetero-moe-align, hetero-moe-projspace-v2 |
| 视频产物 | structure-film-public (dataset) |
- Downloads last month
- 249