MLA 多头潜在注意力,利用低秩压缩技术,将模型参数压缩到极致
MOE 混合专家机制,ff 前馈连接层整体分为 N 个专家主导,利用 linear 层加权求和的方式算出专家的得分 logits,利用 softmax 算出专家的权重比例,topk 选择排名靠前的专家进行激活计算,抓重点,专业的事交给专业的部分搞定,大幅节省算力 (激活率 5.5%)
FP8 采用 FP8 精度,量化压缩 50%
RLAIF AI 强化学习,节省人工标注成本,让模型更懂人性,听人话
AI 标注>>有监督微调>>排序实现奖励模型>>PPO 强化学习>>反向促进模型成长
Deepseek Sparse Attention 稀疏注意力机制,抓重点部分做计算,节省半数算力
DSA 是通过 linear 层不断更新参数,不断学习如何筛选更优质的注意力部分
混合专家机制 MOE 专项理解:
混合专家模式 MOE 的意义从来不是像 MLA 或者 DSA 这样直接的节省参数计算量,反而分配多个专家会导致算力消耗翻倍,但是收益确实指数级增长的,利用低算力的成本,敲动高算力成果
处理层级是 ff 前馈连接层,假定 100 个专家,我们给这 100 个专家均配备标准的 ff 层用以反向梯度更新参数,重点是我们提前对输入维度经过 linear 层输出到 100 个 logits(对应 100 个专家),经过 softmax(logtis) 得到相应的专家权重分布比例,经过 topv 可以得到权重靠前的 5 个专家,我们通过激活靠前的 5 个专家来更新他们的参数,从而达到用 5 倍算力撬动 100 倍算力的杠杆效果,激活率 5%
激活专家的方式是通过将专家权重矩阵中不需要计算的专家权重置为 0,来规避他们的更新,同时我们引入惩罚系数,强制模型雨露均沾,避免一些专家饿死,让他们都能得到参数的更新,这就是 deepseek 的负载均衡机制 (惩罚系数)
""" ═══════════════════════════════════════════════════════════════ 输入数据 x 形状:[8, 10] (batch=8, dim=10) ═══════════════════════════════════════════════════════════════ │ ┌─────────────────┼─────────────────┐ │ │ │ ▼ ▼ ▼ ┌────────┐ ┌────────┐ ┌────────┐ │门控网络│ │路由专家│ │共享专家│ │ │ │ (4 个) │ │ (2 个) │ └────────┘ └────────┘ └────────┘ │ │ │ ▼ ▼ ▼ ┌────────┐ ┌────────────────────────────┐ │[8,4] │ │ 每个专家内部:│ │(权重) │ │ ┌────────────────────────┐ │ └────────┘ │ │ 输入:[8,10] │ │ │ │ │ ↓ │ │ │ │ │ fc1: Linear(10→20) │ │ │ │ │ ↓ │ │ │ │ │ ReLU │ │ │ │ │ ↓ │ │ │ │ │ fc2: Linear(20→5) │ │ │ │ │ ↓ │ │ │ │ │ 输出:[8,5] │ │ │ │ └────────────────────────┘ │ │ │ │ │ │ 4 个专家各自输出:│ │ │ E0: [8,5] │ │ │ E1: [8,5] │ │ │ E2: [8,5] │ │ │ E3: [8,5] │ │ │ ↓ │ │ │ stack(dim=2) │ │ │ ↓ │ │ │ [8,5,4] ←────────────┐ │ │ │ │ │ │ └───────────────────────┼────┘ │ │ ▼ ▼ ┌─────────────────────────────────────────────────┐ │ 路由加权求和:[8,1,4] × [8,5,4] = [8,5,4] │ │ sum(dim=2) → [8,5] │ └─────────────────────────────────────────────────┘ │ ▼ routed_result: [8,5] │ │ ┌────────────────────────────┐ │ │ 共享专家 (2 个): │ │ │ 每个专家内部:│ │ │ 输入:[8,10] │ │ │ ↓ │ │ │ fc1: Linear(10→20) │ │ │ ↓ │ │ │ ReLU │ │ │ ↓ │ │ │ fc2: Linear(20→5) │ │ │ ↓ │ │ │ 输出:[8,5] │ │ │ │ │ │ S0: [8,5] │ │ │ S1: [8,5] │ │ │ ↓ │ │ │ stack(dim=2) │ │ │ ↓ │ │ │ [8,5,2] │ │ └────────────────────────────┘ │ │ │ ▼ │ shared_weights: [2] │ │ │ ▼ │ ┌─────────────────────────────┐ │ │ 共享加权求和:│ │ │ [1,1,2] × [8,5,2] = [8,5,2] │ │ │ sum(dim=2) → [8,5] │ │ └─────────────────────────────┘ │ │ │ ▼ │ shared_result: [8,5] │ │ └──────┬───────┘ ▼ ┌─────────────────────────┐ │ 最终输出 = routed + shared │ │ [8,5] + [8,5] = [8,5] │ └─────────────────────────┘ │ ▼ ════════════════════════════ 最终输出:[8, 5] ════════════════════════════ """