Federated Learning 联邦学习概述及最新工作

本文概述了联邦学习的主流应用场景,包括Horizontal、Vertical和Transfer Learning,并介绍了Split Learning及其优势与不足。SplitFed是FL与SL的结合,旨在克服两者缺点。文章还探讨了联邦学习中的激励机制和非IID数据问题,并提到了知名平台的相关工作。
摘要由CSDN通过智能技术生成

声明:以后会逐渐转移到某乎啦,有兴趣的伙伴可以关注:霁月

 

一、目前主流的联邦学习应用场景

 

Cross-silo FL

Cross-device FL

Setting

Training a model on siloed data. Clients are from different organizations (e.g. medical or financial) or geo-distributed datacenters.

The clients are a very large number of mobile or IoT (物联网) devices

医疗方面,可能有未来的家庭医生hhh

Data

distribution

Data is generated locally and remains decentralized.

Distribution

scale

Typically 2 - 100 clients.

Massively parallel, up to 10^10 clients.

Addressability

Each client has an identity or name that allows the system to access it specifically.

Clients cannot be indexed directly (i.e.,

no use of client identifiers).

不知道哪些数据已经收集,有重复手机训练的可能性

### 联邦学习概念 联邦学习是一种分布式的机器学习范式,在该模式下多个参与者共同训练一个模型而无需分享各自的数据集。这种方式不仅保护了用户的隐私,还能够利用来自不同设备上的数据进行更有效的全局模型更新[^1]。 在同步联邦学习过程中,所有客户端先下载当前版本的全球参数;接着基于本地数据计算梯度并上传给服务器端完成聚合操作形成新一轮迭代所需的最新权重向量[^2]。 对于依赖公共数据集实现的情况,尽管存在这样的设定,但实际应用中的价值依然显著。这是因为即使有公开可用的信息源,各参与方仍可能持有独特且私密的数据样本用于改进特定场景下的预测效果。此外,通过引入多样化的输入有助于增强整体系统的鲁棒性和泛化能力[^3]。 面对非独立同分布(non-IID) 数据带来的挑战——即当各个节点间的数据分布差异较大时可能导致性能下降的问题上,研究者们提出了多种策略加以应对。例如采用迁移学习的思想调整算法结构或是优化通信机制以减轻这种负面影响[^4]。 ### 实现方法概述 以下是Python代码片段展示了一个简单的模拟环境用来理解如何构建基本框架: ```python import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense def create_model(): model = Sequential([ Dense(64, activation='relu', input_shape=(n_features,)), Dense(n_classes, activation='softmax') ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) return model # 假设这是从不同客户那里收集到的数据... Xs, ys = [], [] for _ in range(num_clients): X, y = make_classification( n_samples=total_samples_per_client, n_features=n_features, n_informative=n_informative, n_redundant=n_redundant, random_state=_*seed_offset) # 将标签转换成one-hot编码形式 Y = (np.arange(np.max(y)+1) == y[:, None]).astype(int) X_train, X_val, Y_train, Y_val = train_test_split(X, Y, test_size=.20) Xs.append((X_train, X_val)) ys.append((Y_train, Y_val)) global_weights = ... # 初始化为随机值或其他预定义方式 while not stopping_criterion_met: client_updates = [] for i in range(len(Xs)): local_model = create_model() local_model.set_weights(global_weights.copy()) history = local_model.fit(*Xs[i], *ys[i][0], epochs=num_epochs, batch_size=batch_sz, verbose=False) updated_params = local_model.get_weights() client_updates.append(updated_params) global_weights = aggregate(client_updates) # 定义合适的聚合函数 final_global_model = create_model().set_weights(global_weights) ``` 此段伪代码展示了创建模型、准备多组模拟数据以及执行一轮完整的联邦平均过程的主要步骤。请注意这只是一个简化版的例子,并未涉及诸如安全传输协议之类的细节问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值