Skip to content

Commit ea15354

Browse files
committed
fix: add remark funmadocs
1 parent 915b4a2 commit ea15354

File tree

4 files changed

+422
-1
lines changed

4 files changed

+422
-1
lines changed

.idea/workspace.xml

Lines changed: 155 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/docs/ai/MoE/moe-update.md

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
---
2+
title: "Theory of MoE"
3+
description: ""
4+
date: "2025-10-05"
5+
tags:
6+
- tag-one
7+
---
8+
9+
# Theory of MoE
10+
11+
## 基础公式定义
12+
13+
对于一个向量 $w$,记 $\|w\|_2$ 和 $\|w\|_\infty$ 分别为它的 $\ell_2$ 范数和 $\ell_\infty$ 范数。
14+
15+
给定正的常数 $c_1, c_2$,我们定义:
16+
17+
- $x = \Omega(y)$,如果 $x > c_2 |y|$;
18+
- $x = \Theta(y)$,如果 $c_1 |y| \lt x \lt c_2 |y|$;
19+
- $x = O(y)$,如果 $x \lt c_1 |y|$;
20+
- $x = o(y)$,如果 $\dfrac{x}{y} \to 0$。
21+
22+
其中:
23+
24+
- $O(y)$:上界,表示“不会比 $y$ 增长得更快”。
25+
- $\Omega(y)$:下界,表示“至少和 $y$ 一样快”。
26+
- $\Theta(y)$:上下界都在 $y$ 的数量级内,表示“和 $y$ 同阶”。
27+
- $o(y)$:严格比 $y$ 小得多,最终会趋近于 $0$。
28+
29+
## **重要假设**
30+
31+
1. 这个文章只想给出闭式遗忘公式,所以直接简化成线性模型。$f(X)=X^{\top}w,\; w\in \mathbb{R}^d$
32+
2. 这个文章只讨论task-wised的路由方法,数据生成的时候每份数据只加入了一个信号数据,其余都是正态分布噪声。目的也是为了简化模型,然后在实际工程应用中,token会被隐式的送到各个experts,而不采用人为设定的方式。
33+
34+
> ### 数据集生成规则
35+
>
36+
> 在每一轮训练 $t \in [T]$,新的任务 $n_t$ 到来时,数据集 $\mathcal{D}_t = (X_t, y_t)$ 的生成步骤如下:
37+
>
38+
> 1. **抽取任务真值向量**
39+
> - 从任务池 $\mathcal{W} = \{w_1, \dots, w_N\}$ 中均匀采样一个真值向量 $w_{n_t}$,并设定 $w_{n_t}$ 为当前任务的 ground truth。
40+
> 2. **生成缩放系数**
41+
> - 独立采样一个随机变量 $\beta_t \in (0, C)$,其中 $C = \mathcal{O}(1)$。
42+
> 3. **构造输入特征矩阵 $X_t$**
43+
> - 从 $s_t$ 个样本中生成:
44+
> - 其中 **一个样本**定义为 $\beta_t v_{n_t}$,其中 $v_{n_t}$ 是任务 $n_t$ 的特征信号。
45+
> - 其余 $s_t - 1$ 个样本来自正态分布:$\mathcal{N}(0, \sigma_t^2 I_d)$,其中 $\sigma_t \ge 0$ 是噪声水平。
46+
> 4. **生成输出标签 $y_t$**
47+
> - 使用线性回归生成:
48+
> $$
49+
> y_t = X_t^\top w_{n_t}
50+
> $$
51+
>
52+
> **最终得到**
53+
> 数据集 $\mathcal{D}_t = (X_t, y_t)$,对应一个线性回归任务。
54+
55+
1. 这个文章只采用Top-1的experts指定方式
56+
57+
## 公式理论讲解:
58+
59+
专家参数更新:
60+
当router命中某个experts时,其他experts保持不变,只更新命中的experts,其更新公式为:
61+
62+
$$
63+
w_t^{(m_t)} = w_{t-1}^{(m_t)} + X_t (X_t^\top X_t)^{-1}(y_t - X_t^\top w_{t-1}^{(m_t)})
64+
$$
65+
66+
> ### 专家参数更新公式的由来
67+
>
68+
> **目标**:在第 $t$ 轮,专家 $m_t$ 要拟合任务数据集 $(X_t, y_t)$
69+
> $$ \min\_{w}\ \|X_t^\top w - y_t\|\_2^2 $$
70+
>
71+
> **问题**:过参数化 ($s_t < d$) 时解不唯一,直接算最小二乘解会丢掉历史信息。
72+
> 所以论文改成 **约束优化**
73+
>
74+
> $$
75+
> \min_w \ \|w - w_{t-1}^{(m_t)}\|_2^2 \quad
76+
> s.t.\ \ X_t^\top w = y_t
77+
> $$
78+
>
79+
> **解法**:用拉格朗日乘子或残差投影,可得更新:
80+
>
81+
> $$
82+
> w_t^{(m_t)} = w_{t-1}^{(m_t)} + X_t (X_t^\top X_t)^{-1}\,(y_t - X_t^\top w_{t-1}^{(m_t)})
83+
> $$
84+
>
85+
> **解释**
86+
>
87+
> - $(y_t - X_t^\top w_{t-1})$ = **残差** = 真实输出 - 旧预测
88+
> - $X_t (X_t^\top X_t)^{-1}$ = 把残差投影回参数空间的修正项
89+
> - 整个式子 = 在旧参数附近做一次最小二乘修正
90+
>
91+
> **性质**
92+
>
93+
> - 保证 $X_t^\top w_t = y_t$ → 新参数能完美拟合当前任务
94+
> - 同时尽量靠近 $w_{t-1}$ → 避免遗忘过大
95+
96+
辅助损失:(这里经常也被称作load balance)
97+
98+
$$
99+
L_t^{\text{aux}}(\Theta_t, \mathcal{D}_t) = \alpha \cdot M \cdot \sum_{m \in [M]} f_t^{(m)} \cdot P_t^{(m)}
100+
$$
101+
102+
> ### 辅助损失 (Auxiliary Loss)
103+
>
104+
> **参数解释**
105+
>
106+
> - $\alpha$:权重系数,控制辅助损失在总 loss 中的比重
107+
> - $M$:专家数量
108+
> - $f_t^{(m)}$:专家 $m$ 在前 $t$ 轮中被选择的频率(历史使用情况)
109+
> - $P_t^{(m)}$:router 在第 $t$ 轮给专家 $m$ 的平均分配概率
110+
>
111+
> **作用**
112+
>
113+
> - 惩罚历史上频繁被使用且当前仍高概率被选的专家
114+
> - 鼓励 router 多利用未充分使用的专家
115+
> - 实现 **负载均衡**,避免专家“过度/稀少”使用
116+
> - 这里尾部项理解起来非常简单,当某个专家m历史使用的次数越多,并且当前轮数依然分配到了较大的logits的时候这个损失项就会变得极大,从而抑制router只会对几个专家的偏好性。进而避免路由坍塌。
117+
118+
局部性损失
119+
120+
$$
121+
L_t^{\text{loc}}(\Theta_t, \mathcal{D}_t) = \sum_{m \in [M]} \pi_m(X_t,\Theta_t)\, \|w_t^{(m)} - w_{t-1}^{(m)}\|_2
122+
$$
123+
124+
> ### 局部性损失 (Locality Loss)
125+
>
126+
> **参数解释**
127+
>
128+
> - $\pi_m(X_t,\Theta_t)$:router 给专家 $m$ 的概率 (softmax 输出)
129+
> - $w_t^{(m)}$:专家 $m$ 在当前任务下的参数
130+
> - $w_{t-1}^{(m)}$:专家 $m$ 在上一轮的参数
131+
>
132+
> **作用**
133+
>
134+
> - 约束专家参数更新不能偏离历史太远
135+
> - 让相似任务被路由到同一专家,从而减小 loss
136+
> - 减少遗忘(新任务更新不会把旧知识完全覆盖)
137+
> - 提高专家的 **专精性**:每个专家逐渐固定在某类任务上
138+
139+
训练误差(损失):
140+
141+
$$
142+
L_t^{\text{tr}}(w_t^{(m_t)}, \mathcal{D}_t) = \frac{1}{s_t}\,\|X_t^\top w_t^{(m_t)} - y_t\|_2^2
143+
$$
144+
145+
> ### 训练损失 (Training Loss)
146+
>
147+
> **参数解释**
148+
>
149+
> - $s_t$:当前任务的数据样本数
150+
> - $X_t$:特征矩阵
151+
> - $y_t$:输出标签向量
152+
> - $w_t^{(m_t)}$:在第 $t$ 轮被选中的专家的参数
153+
>
154+
> **作用**
155+
>
156+
> - 本质是最小二乘回归的均方误差 (MSE)
157+
> - 让选中的专家拟合当前任务数据
158+
> - 保证专家能捕捉任务的真实信号 (ground truth)
159+
160+
总损失:
161+
162+
$$
163+
L_t^{\text{task}} = L_t^{\text{tr}} + L_t^{\text{loc}} + L_t^{\text{aux}}
164+
$$
165+
166+
有了上述的总损失函数后,就可以在训练中,进行路由的参数更新了
167+
168+
路由更新公式:
169+
170+
$$
171+
\theta_{t+1}^{(m)} = \theta_t^{(m)} - \eta \cdot \nabla_{\theta^{(m)}} L_t^{\text{task}}(\Theta_t, w_t^{(m_t)}, \mathcal{D}_t), \quad \forall m \in [M]
172+
$$
173+
174+
### Tricks:
175+
176+
#### Early Termination
177+
178+
在持续学习 (CL) 的场景下,如果 gating network 一直持续更新,随着任务到达轮数的增加,不同专家的分配概率可能逐渐趋于一致,最终导致 **专家分化消失****错误路由**。为了解决这一问题,需要引入 **早停机制 (Early Termination)**
179+
180+
- **基本思想**
181+
在经过足够轮数的任务探索 ($T_1$ 轮) 后,MoE 的专家分配应当逐渐收敛。此时继续训练 gating network 不再带来收益,反而会导致过拟合和任务边界模糊。因此,需要在合适时机 **终止路由器参数 $\Theta_t$ 的更新**,保持专家划分的稳定性。
182+
183+
- **收敛判据**
184+
定义一个收敛标志 $I^{(m)}$ 来衡量专家 $m$ 是否收敛:
185+
186+
$I^{(m)} = \big| h_m(X_t, \theta_t) - h_{m_t}(X_t, \theta_t) \big|$
187+
188+
其中,$h_m(X_t,\theta_t)$ 表示专家 $m$ 在当前输入上的 gating 输出,$h_{m_t}(X_t,\theta_t)$ 表示被 router 实际选择的专家的输出。
189+
- 若该差距 **大于阈值 $\Gamma$**,说明专家 $m$ 尚未收敛,需要继续更新 $\Theta_t$。
190+
- 若该差距 **小于阈值 $\Gamma$**,则认为 gating network 已经收敛,停止对 $\Theta_t$ 的更新。
191+
- 如此,则可以避免 router 在已收敛后仍然更新,导致专家划分被破坏。也能确保不同专家能够稳定服务于各自的任务簇。结合 $L^{loc}$ 和 $L^{aux}$ 的约束,早停机制使得系统能在 CL 环境下长期保持平衡和低遗忘。
192+
193+
#### 局部性损失的多种可能性
194+
195+
- **参数连续性 (Parameter Locality)**
196+
197+
$$
198+
L^{loc}_{param} = \sum_{m \in [M]} \pi_m(X_t,\Theta_t)\,\|w_t^{(m)} - w_{t-1}^{(m)}\|_2
199+
$$
200+
201+
- 在前章节使用的方法
202+
- 保证同一专家在相邻任务上的参数差异不要太大。
203+
204+
205+
- **表示相似性 (Representation Locality)**
206+
- 可以直接对专家输出的表示(hidden states)施加约束。
207+
208+
- 比如:
209+
$$
210+
L^{loc}_{repr} = \sum_{m \in [M]} \pi_m(X_t,\Theta_t)\,\|f_m(X_t) - f_m(X_{t-1})\|_2
211+
$$
212+
- 让相似输入在同一专家上输出保持稳定。
213+
214+
- **路由概率连续性 (Routing Locality)**
215+
- 约束 router 的分配概率不要随任务跳跃太大。
216+
217+
- 形式类似:
218+
$$
219+
L^{loc}_{route} = \sum_{m \in [M]} \|\pi_m(X_t,\Theta_t) - \pi_m(X_{t-1},\Theta_{t-1})\|_2
220+
$$
221+
- **语义/任务嵌入的相似性 (Task Embedding Locality)**
222+
- 如果能为任务构建一个 task embedding(比如通过元学习或对比学习),可以定义:
223+
- 相似任务 → 路由到同一专家
224+
- 不相似任务 → 尽量区分

0 commit comments

Comments
 (0)