Why v10 fails
我们按之前的思路创造了v10并进行了实验。结果如下:
V9 (Adaptive Lambda) 每轮动态 Lambda 值
由于每个客户端的数据分布是固定的,因此其基于熵计算出的 lambda 在所有50轮中保持不变。
| Client | Data Entropy | Normalized Entropy | Adaptive Lambda |
|---|---|---|---|
| Client 0 | 1.9079 | 0.5743 | 5.7859 |
| Client 1 | 1.7997 | 0.5418 | 5.4634 |
| Client 2 | 0.6091 | 0.1834 | 1.9152 |
| Client 3 | 1.1689 | 0.3519 | 3.5837 |
| Client 4 | 1.7245 | 0.5191 | 5.2395 |
V10 (Effective Lambda) 每轮动态 Lambda 值
以下是从日志中逐轮提取的每个客户端学到的 Effective Lambda 值。
| Round | Client 0 | Client 1 | Client 2 | Client 3 | Client 4 |
|---|---|---|---|---|---|
| 0 | 16.7670 | 22.1632 | 4.5188 | 17.3472 | 11.2946 |
| 1 | 8.2207 | 7.2043 | 9.1799 | 6.3614 | 8.9278 |
| 2 | 8.7494 | 8.7624 | 8.3374 | 7.9967 | 8.9724 |
| 3 | 8.8349 | 8.5049 | 7.9224 | 7.1662 | 8.6710 |
| 4 | 8.8261 | 8.3853 | 7.7627 | 7.3857 | 8.7035 |
| 5 | 8.5376 | 8.2330 | 7.6954 | 7.3124 | 8.6141 |
| 6 | 8.6589 | 8.1956 | 7.6517 | 7.3003 | 8.6180 |
| 7 | 8.5352 | 8.2462 | 7.6137 | 7.1712 | 8.5862 |
| 8 | 8.4455 | 8.1585 | 7.6230 | 7.5159 | 8.4968 |
| 9 | 8.6449 | 8.2336 | 7.6239 | 7.2752 | 8.4587 |
| 10 | 8.4952 | 8.1852 | 7.5856 | 7.2270 | 8.4712 |
| …… | |||||
| 15 | 8.5211 | 8.2222 | 7.5595 | 7.2733 | 8.4032 |
| …… | |||||
| 20 | 8.4813 | 8.3622 | 7.5208 | 7.3196 | 8.3464 |
| …… | |||||
| 30 | 8.6622 | 8.5066 | 7.4948 | 7.4250 | 8.2788 |
| …… | |||||
| 40 | 8.8432 | 8.3632 | 7.5789 | 7.7887 | 8.3279 |
| …… | |||||
| 49 | 8.9657 | 8.6777 | 7.5807 | 7.7667 | 8.2676 |
分析
V9 (Adaptive Lambda) - 基于熵的静态策略:
- V9 在每轮开始时为每个客户端计算一个 lambda。因为客户端的数据集在整个过程中是固定的,所以每个客户端的 lambda 值在所有50轮中都是恒定的。
- 这是一个先验的、基于数据特征的调整。数据分布越不均衡(熵越低),lambda 值越小,给予模型更大的自由度来适应本地数据。反之,数据越均衡,lambda 值越大,施加更强的对齐约束。
- Client 2 的数据熵最低,因此获得了最小的 lambda (1.92),而 Client 0 的数据熵最高,获得了最大的 lambda (5.79)。这种策略在实验中被证明有效。
V10 (Effective Lambda) - 动态学习的策略:
- V10 的 Effective Lambda 是在每个本地 epoch 训练后学习到的结果,反映了模型在该时间点对本地损失和对齐损失的相对置信度。
- 这是一个动态变化的调整。理论上它应该能找到比 V9 的固定规则更优的平衡。
- 从数据看:
- V10 计算出的 Effective Lambda 普遍偏高,经常在 8.0 以上,甚至在初期达到 17 和 22。
- Effective Lambda 的值在不同轮次之间剧烈波动,没有收敛到稳定值的趋势。例如,Client 0 的值从 16.7 -> 8.2 -> 8.7 -> 8.8 -> 8.5 … 持续震荡。用于学习 sigma 参数的优化过程不稳定,很可能是由于学习率设置不当导致的。
我将sigma的lr设置成了一般lr的0.01倍继续实验,结果如下:
| 评价指标 | OursV9 | OursV10 | 结论 |
|---|---|---|---|
| 最终准确率 (第99轮) | 32.89% | 23.94% | V9 胜出。V9的性能显著优于V10。 |
| Lambda 策略 | 基于数据熵计算 | 从梯度中动态学习,每个客户端在每一轮都会更新。 | 这是两种策略的根本区别 |
| Lambda 值 | 值域为 [13.5, 14.9] | 从1.0开始,缓慢增长到 [8.5, 10.3] 的范围。 | V9从一开始就采用了非常强的对齐。V10也在向高lambda学习,但从未达到V9的水平。 |
| 稳定性 | 稳定(设计如此) | Effective Lambda平滑增长,没有出现上次的爆炸或剧烈震荡 | 对sigma_lr的修改解决了V10的优化不稳定性问题 |
详细数据节选
| Round | V9 Test Acc. | V10 Test Acc. | V9 Lambda (Client 0/4) | V10 Eff. Lambda (Client 0/4) |
|---|---|---|---|---|
| 0 | 3.86% | 1.11% | 13.51 / 14.90 | 1.04 / 1.07 |
| 9 | 10.12% | 8.25% | 13.51 / 14.90 | 1.47 / 1.89 |
| 30 | 17.89% | 13.42% | 13.51 / 14.90 | 5.68 / 6.19 |
| 60 | 26.17% | 19.21% | 13.51 / 14.90 | 8.24 / 9.49 |
| 99 | 32.89% | 23.94% | 13.51 / 14.90 | 8.53 / 10.38 |
这次的实验结果表明:
- 对比上次的日志,这次V10的Effective Lambda表现得比较稳定。它从一个无偏的初始值(约1.0)开始,随着训练的进行而平滑、稳定地增长。
- 然而,v10仍然落后于v9。
我们不由得怀疑:为什么 V10 会失败?
