halo 的技术博客

返回

一句话结论:**当多家机构想联合训练一个更好的量化模型,却谁都不肯交出原始行情/持仓数据时,联邦学习(Federated Learning)是当下最务实的解法——核心就一句「数据不动、模型动」:各家在本地数据上训练,只把模型参数(而非样本)上传聚合。我们用 numpy 手写 FedAvg,在 6 家机构、各自不同市场体制(non-IID)的涨跌预测数据上,让联邦模型几乎追平「把所有数据池化集中训练」的效果(准确率 0.931 vs 0.924),而纯本地不共享只有 0.919;但差分隐私的加噪、机构间数据异质、以及模型投毒,是三个必须当面处理的真实陷阱。

一、为什么量化特别需要联邦学习#

量化的 alpha 越来越依赖另类数据 + 跨机构样本:一家基金的自营tick、一家券商的代销持仓、一家银行的理财资金流,单独看都稀疏、有偏,合起来才是完整图景。但现实是:

  • 监管:金融数据出境、跨机构共享有合规红线;
  • 竞争:你的持仓和信号就是你的饭碗,不可能给对手;
  • 隐私:客户级数据受个保法约束,原始样本不能出域。

传统做法要么「各扫门前雪」(样本少、过拟合),要么「私下池化」(违规)。联邦学习走第三条路:原始数据永远留在本地,只交换模型梯度/参数

按数据切分方式,联邦学习分两类:横向联邦(各家样本不同、特征相同,如不同地区的同款基金,适合联合训「同一套因子」)和纵向联邦(样本重叠、特征不同,如同一批客户在银行和券商两侧的画像,适合拼接特征)——量化里跨机构联合最常见的是横向,跨数据源拼接是纵向。

二、FedAvg:联邦学习的事实标准#

最经典的算法是 McMahan 2017 的 FedAvg(联邦平均)

  1. 服务器下发一个全局模型 w;
  2. 每个机构(客户端)拿 w 当初值,在自己的数据上跑若干轮本地 SGD;
  3. 各家把更新后的参数上传,服务器按样本量加权平均得到新全局 w;
  4. 重复 R 轮(通信轮次)。

关键点是第 3 步只传权重、不传数据。下面是纯 numpy 实现(逻辑回归做涨跌方向预测,参数就是权重向量 w 和偏置 b):

三、造一批「各怀心思」的机构数据#

联邦学习真正的难点不是算法,是non-IID:每家机构的数据分布不一样。我们让每家机构的「本地概念」= 全局概念 + 漂移扰动,并叠加标注噪声与不同特征均值,模拟不同市场体制:

def make_client(rng, w_global, drift, nc, mean_shift, label_noise=0.12):
    u = rng.standard_normal(d); u /= np.linalg.norm(u)
    w_c = w_global + drift * u                 # 概念漂移:每家看的规律不同
    b_c = rng.uniform(-1.5, 1.5) * (0.5 + drift)
    X = rng.standard_normal((nc, d)) + mean_shift * (1 + drift)
    y = (sigmoid(X @ w_c + b_c) > 0.5).astype(int)
    flip = rng.random(nc) < label_noise
    y[flip] = 1 - y[flip]                       # 机构内部标注噪声
    return X, y
python

四、结果:联邦几乎追平集中式#

我们对比三种训练方式在同一份全局测试集上的准确率:

  • 集中式:把所有机构数据池化,统一训练(理论上界,但现实中违规);
  • FedAvg:本地训练 + 参数聚合(合规);
  • 纯本地:每家各自训练、互不共享(最差,信息孤岛)。

FedAvg 收敛曲线紧贴集中式,而纯本地不共享明显落后

结果(6 家机构、每家 400 样本):FedAvg 终值 0.931、集中式 0.924、纯本地 0.919。在标注噪声下,FedAvg 的「集成式平均」甚至略优于直接池化,但两者基本持平——证明「只传参数」几乎没损失信息,却守住了数据不出域。纯本地则因为每家样本少、还带着自己的漂移,明显更差。

五、non-IID 是联邦学习的第一道坎#

直觉上,机构间差异越大,FedAvg 越该落后。我们扫描「概念漂移 drift」从 0.5 到 4.0:

机构间异质度越大,FedAvg 与集中式的差距越值得警惕

在适度异质下 FedAvg 紧贴集中式;但当概念漂移与标注噪声都很重时,两家损失一起下滑,而 FedAvg 的「权重平均」本质上是把走向不同局部最优的模型强行取平均,会得到一个两边都不讨好的折中解——这正是个性化联邦学习(Per-FedAvg、FedProx、本地微调)要解决的问题:别让全局模型抹掉每家机构的局部结构。对量化而言,这意味着「总部下发的通用因子模型 + 各家本地轻量微调」往往比硬平均更好。

六、隐私不是免死金牌:差分隐私的效用权衡#

只传参数就安全了吗?不一定——梯度会泄露数据(成员推断攻击能从梯度反推训练样本)。标准加固是差分隐私(DP):在聚合参数上注入校准高斯噪声,使得「某条样本在不在训练集里」无法被区分。

# 对聚合后的全局参数加高斯噪声(DP 的后处理简化版)
w_noisy = w_clean + rng.standard_normal(d) * sigma   # sigma 越大越隐私
python

代价是精度随噪声单调下降:

差分隐私噪声越大,测试准确率越低,对应 ε 越小(越隐私)

图上从 σ=0(无噪声,0.851)一路滑到 σ=0.6(约 0.49)——隐私和效用是零和博弈,必须按合规要求选一个可接受的 ε(比如 ε≤10)。实践中常用「稀疏化 + 梯度裁剪 + 安全聚合」三件套:(1) 裁剪每家的梯度范数(限制单样本影响力),(2) 多家噪声互相抵消(secure aggregation 下服务器只看到加总、看不到个体),(3) 再统一加一份校准噪声满足 (ε,δ)-DP。

七、三个别假装不存在的真实陷阱#

  1. 模型投毒与搭便车(free-rider):联邦里服务器看不到各家数据, malicious 机构可以上传故意坏掉的参数拖垮全局,或者只下载不训练白嫖别人的 alpha。必须加异常检测(聚类各家更新、剔除离群)+ 信誉机制。
  2. 通信成本:每轮上传下载全量参数,机构多、模型大时带宽爆炸。解决靠梯度压缩(量化/稀疏化)减少通信轮次(本地多跑几轮再聚合)。实测里通信往往比计算更贵,所以工业级 FL 默认开「本地多 epoch + 参数量化到 8/16 bit + 只传差分」三件套。
  3. non-IID 下的收敛不稳定:上面说了,硬平均在强异质下退化。落地时优先考虑「全局通用层 + 本地私有层」或训练后本地微调,而不是追求一个放之四海皆准的单一全局模型。

八、在量化里的落地姿势#

  • 跨机构因子模型:多家券商/基金联合训一个更稳的因子编码器,谁都不必交逐笔委托,只交编码器参数;
  • 跨区域/跨品种信号:A 股团队和美股团队联合训一个跨市场情绪模型,各自数据不出境;
  • 另类数据联盟:卫星/供应链/舆情等多方数据源联合建模,原始数据留在数据方;
  • 合规友好型研究:在强监管场景下,联邦学习是少数「既合規又能用上外部样本」的路径,比私下池化稳得多。
  • 小样本机构的护城河:体量小的基金/研究团队没有足够自有数据训大模型,通过联邦加入联盟,相当于用「参数」换到了大机构的样本多样性,却不用暴露自己的策略逻辑。

但要注意:对单家机构、数据自洽的场景,联邦学习纯属 overhead——只有当「跨机构样本增量价值 > 通信与隐私成本」时,它才划算。 另外,纵向联邦里「样本对齐」本身就需要隐私集合求交(PSI),这一步也要用密码学原语保护好,否则对齐过程就可能泄露客群规模。

九、一句话小结#

联邦学习把量化从「要么数据孤岛、要么违规池化」的二选一里拽出来,靠「数据不动、模型动」让跨机构联合训练变得合规可行。核心算法 FedAvg 简单到几十行 numpy 就能写;真正的工程难点在 non-IID 下的收敛、差分隐私的效用权衡、以及防投毒——这三道坎跨过去,它才是跨机构因子模型和多区域信号里真正能用的武器,而不是又一张 PPT 上的热词。

联邦学习:在隐私约束下联合训练跨机构量化模型
https://blog.halo26812.eu.org/blog/federated-learning-quant
Author halo
Published at 2026年7月11日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨