WDLM / OpenASH / Transformer 架构对比实验报告
1. 实验背景与目的
从一篇 CSDN 博客提出的波动力学语言模型(WDLM)出发,经过架构修复、互相借鉴、多轮优化,最终在 6M 和 20M 两个参数规模上与 Transformer baseline 和 OpenASH 系列进行全面对比。
测试模型
| 模型 | 序列交互 | FFN | 特色 |
|---|---|---|---|
| Transformer (causal) | O(S²) Multi-Head Attention | GELU | 全维度 token 交互 |
| OpenASH (ReLU) | cummax + gen_model + head_linear | ReLU gate | 原始 ASH 设计 |
| OpenASH_V2 | 同上 | sin+cos gate | WDLM 启发的 PhaseGateFFN |
| WDLM-Real | cummax + gen_model | sin+cos Linear | 全 Linear 模拟复数 |
| WDLM-Neural (+gen) | NeuralWaveStep + gen_model | Cartesian update | 无三角函数的轻量设计 |
2. 6M 参数对比 (H=128, L=2, S=256)
2.1 训练配置
- 数据: science.jsonl (159K 条), 3000 子集
- 优化器: AdamW, lr=5e-5, cosine schedule
- AMP: bf16
- 步数: 300 steps
2.2 结果
| Model | Params | Loss | Tok/s | Tok/s/M |
|---|---|---|---|---|
| Transformer | 6,350,336 | 6.77 | 90,288 | 14,218 |
| WDLM-Neural (all-Linear) | 6,053,634 | 6.82 | 181,594 | 29,998 |
| WDLM-Real | 6,250,250 | 7.56 | 96,152 | 15,384 |
| OpenASH_V2 | 6,119,336 | 7.68 | 92,092 | 15,049 |
2.3 2000 步收敛
| Model | 2000步 Loss |
|---|---|
| Transformer | 3.854 |
| WDLM-Neural | 3.879 (仅差 0.025) |
结论: 6M 小模型下,WDLM-Neural (all-Linear) 与 Transformer 差不到 1%,速度却快 2x+。
3. 20M 参数对比 (H=256~288, L=9~12, S=384)
3.1 训练配置
- 数据: MiniMind pretrain (1.16GB, 127万条) + SFT (1.62GB, 90万条)
- 子集: 50000 条 pt + 50000 条 sft
- Pretrain: 300 steps, seq=384
- SFT: 200 steps, seq=512
- lr=5e-4, cosine schedule
3.2 结果
| Model | Params | PT Loss | SFT Loss | PT tok/s |
|---|---|---|---|---|
| OpenASH (ReLU) | 20,240,364 | 5.64 | 3.60 | 9,260 |
| WDLM-Neural+gen | 20,040,740 | 5.52 | 3.75 | 45,484 |
| WDLM-Real | 20,435,516 | 5.83 | 3.81 | 10,948 |
| Transformer | 19,665,920 | 5.66 | 3.84 | 14,133 |
| OpenASH_V2 | 20,229,996 | 18.29 | 16.89 | × |
3.3 SFT Loss 排名
1. OpenASH (ReLU) 3.60 ← 最优
2. WDLM-Neural+gen 3.75
3. WDLM-Real 3.81
4. Transformer 3.84 ← 垫底
4. 长序列自回归生成 (Prefix=256, New=128)
| Model | Wall Time | 处理 Token 数 |
|---|---|---|
| Transformer (naive) | 0.345s | 40,896 (106x) |
| WDLM-Real (state) | 0.193s | 384 |
| OpenASH_V2 (state) | 0.289s | 384 |
结论: cummax State 模式只处理新 token (O(1) 每步),而 Transformer 每次重算整个生长序列 (O(N·S))。序列越长差距越大。
5. 消融实验
5.1 gen_model 的作用
| WDLM-Neural 版本 | SFT Loss |
|---|---|
| 朴素 cummax (v5) | 6.47 |
| + gen_model (v6) | 3.75 |
| 提升 | -2.72 |
gen_model 的 5 分支乘加交互(t1=ab, t2=α₁b+α₂d, t3=a(α₃e+d), t4=b(c+e), t5=c*e)是 cummax 系架构的核心品质来源。去掉后 loss 暴涨 2.72。
5.2 三角函数开销
| 组件 | 有三角函数 | 无三角函数 |
|---|---|---|
| 编码 | sin/cos + stack | 1×Embedding |
| 演化 | cos(dp)*r - sin(dp)*i | Linear(H,3H) → 线性旋转 |
| 干涉 | sin/cos rotation + Linear | 2×Linear → a*b |
| 训练速度 | 65,000 tok/s | 182,000 tok/s (+2.8x) |
5.3 PhaseGateFFN vs ReLU FFN
| OpenASH 版本 | H=128, L=2 | H=288, L=12 |
|---|---|---|
| OpenASH (ReLU FFN) | 正常收敛 | SFT=3.60 (最优) |
| OpenASH_V2 (sin+cos) | 正常收敛 | SFT=16.89 (崩坏) |
PhaseGateFFN 在小模型表现正常,但在 12 层深层大模型中梯度失稳。sin+cos 门控在深层堆叠时缺乏梯度缩放机制。
5.4 多头 cummax
WDLM-Real 尝试多头 (4 头) 版本后 loss 从 7.56 恶化到 8.24。H=128 拆 4 头后 head_dim=32 太小,cummax + gen_model 梯度不足。
5.5 evo_steps 迭代
WDLM-Real 同参数重复演化 (Neural ODE 风格):
| evo_steps | Loss | 速度 |
|---|---|---|
| 1 | 4.80 | 33K tok/s |
| 3 | 4.72 | 25K tok/s |
| 5 | 4.65 | 18K tok/s |
同参数多步迭代可在零参数成本下降低 0.15 loss。代价是速度线性下降。
6. 跨架构互鉴汇总
| 借鉴方向 | 来源 → 目标 | 机制 | 效果 |
|---|---|---|---|
| sin+cos gate | WDLM → OpenASH | PhaseGateFFN | 小模型 25%加速 |
| gen_model | OpenASH → WDLM | 5分支乘加 | loss -2.72 |
| cummax state | OpenASH → WDLM | 增量推理 | O(1) 每步 |
| 纯 Linear | OpenASH → WDLM | 去三角函数 | 2.8x 加速 |
| evo_steps | WDLM → — | 同参数迭代 | loss -0.15 |
7. 最终推荐
| 场景 | 推荐模型 | 理由 |
|---|---|---|
| 质量优先 | OpenASH (ReLU) | SFT loss 最优, head_linear 表达力强 |
| 速度优先 | WDLM-Neural+gen | 速度 ×2-4x, loss 接近最优 |
| 均衡之选 | WDLM-Neural+gen | 速度 + 质量同时领先 |
| 长序列推理 | WDLM-Real / OpenASH | State O(1) vs Transformer O(S²) |
| 不推荐 | OpenASH_V2 (PhaseGate) | 深层大模型梯度失稳 |
8. 架构最佳实践
# 最优 block 结构 (融合所有验证过的改进):
class OptimalBlock(nn.Module):
def forward(self, x, state=None):
residual = x
# 1. Per-token 特征更新 (无三角函数)
x = Linear(H, 3H)(x) # NeuralWaveStep
x = x[:,:,:H] * x[:,:,H:2H] # element interaction
# 2. 序列交互 (gen_model 5分支 + cummax state)
a,b,c,d = split(Linear(H,4H)(x))
e = cummax(c, state) # causal context
x = out_proj(cat(a*b, α₁*b+α₂*d, a*(α₃*e+d), b*(c+e), c*e))
# 3. 残差
return norm(α*x + (1-α)*residual), state
9. 文件清单
F:\OpenASH2605\
├── open_ash.py # 原始 OpenASH (ReLU FFN)
├── open_ash_v2.py # OpenASH + PhaseGateFFN
├── wdlm_verification\
│ ├── wdlm.py # 博客原版修复
│ ├── wdlm_fast.py # 对角分解优化
│ ├── wdlm_real.py # 全 Linear WDLM + state
│ ├── wdlm_lean.py # OpenASH 借鉴版
│ ├── wdlm_neural.py # 最终推荐 (Neural+gen_model)
│ ├── wdlm_turbo.py # 研究原型 (complex ops)
│ └── compare_*.py # 各种对比脚本
└── train_20m\
├── train.py # 5 模型统一训练
└── benchmark.py # PPL/生成/State 基准
实验日期: 2026-05-31 | GPU: NVIDIA single GPU | PyTorch + CUDA bf16 AMP
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)