FedCoLLM
可能更好的阅读体验 Jeefy's Blog: FedCoLLM
FedCoLLM 核心处理的就是多端协同的问题,旨在更高效的解决模型合并的问题。
具体来说,其框架如下:
- Server(LLM)\(f_\psi\) 和 K 个 Clients \(g_\phi\)
- 每一个 Client 拥有一个私有数据集 \(D^k\),Server 端拥有一个共有数据集 \(D^a\) (auxiliary dataset)
- 其微调核心方法还是 LoRA,冻结主干网络(\(\psi, \phi\)),不做修改。
其 Loss 设计是核心,一共两个个部分:
- 对于每个 Client,设计 \(\mathcal{L}^k(\theta) ={\mathbb E}_{(x, y) \sim D^k} l^k_{TA}(g_{\phi+\theta}(x), y)\),和一般的设计一样
- 对于 Client 在 Server 端的 LoRA \(\theta\) 聚合后,将 global SLM 和 LLM 进行双向知识同步,具体来说,构造 \(\mathcal{L}(\theta, \omega) = \mathcal{L}^f_{FT} + \mathcal{L}^g_{FT} + \mathcal{L}^{f}_{KL} + \mathcal{L}^{g}_{KL}\),在公有数据集上进行联合训练,其中 \(L_{KL}\) 表示 SLM 和 LLM 的输出 KL 散度,具体来说:
- \(\mathcal{L}^f_{KD} = {\mathbb E}_{x \sim D^a} D_{KL}(f_{\psi + \omega}(x)||g_{\phi + \theta}(x))\),反之类似。比较最终输出的 KL 散度
- 可以通过软化后的 Softmax(Hinton KD 标准做法,引入温度系数 \(T\))去计算 KL 散度,学习其后的隐分布,更好的去蒸馏。
对于双向蒸馏部分,论文中还引入了平衡超参数:\(\mathcal{L}_{server} = \mathcal{L}_{FT}^f(\omega) + \mathcal{L}_{FT}^g(\theta) + \lambda \left( D_{KL}(P_f|P_g) + D_{KL}(P_g|P_f) \right)\)
那么具体的流程其实很清晰:
- Client 端接受到 \(\theta\),单独利用私有数据集
LoRA微调,更新 \(\theta_k\) - Client 端上传 \(\theta_k\),在 Server 端利用 FedAvg 聚合成一个 Global SLM(\(g_{\phi + \theta}\))
- Server 端进行 SLM 和 LLM 在共有数据集上的双向知识蒸馏
- Server 端双向同步后的 \(\theta\) 下发到 Client 端,回到步骤 1

浙公网安备 33010602011771号