联邦学习-区块链论文笔记:Record and Reward Federated Learning Contributions with Blockchain

链接IEEE Xplore Full-Text PDF:

作者:Ismael Martinez(蒙特利尔大学团队)

前言:这篇文章虽然是投在国内举办的会议上面(没有丝毫瞧不起CyberC会议的想法哈),但是其想法我觉得还是很新颖的。该方案主体是采用了EOS区块链结构,使用off-chain来直接存储本地模型训练的梯度值,使用on-chain来存储本地模型训练得到梯度值的hash值,防止数据被篡改。激励机制是采用了token,文中没有提及太多,就是简单的根据数据消耗量来奖励。同时,off-chain是结合IPFS星际文件系统来存储梯度值,这能极大地提高查询效率。另外,这里用到了大量的智能合约操作,主要是限制模型拥有者与本地节点功能的重合,也就是希望他么各司其职互不打扰。

Motivation:以往方案的缺陷不足

  • BlockFL链:仅根据训练数据量来奖励,评价标准就是一个训练时间指标,恶意不诚实节点很容易造假骗取奖励;
  • DeepChain链:该方案严重依赖诚实的委员节点,通过随机法选择委员节点,这在实际情况下可能不太现实;
  • 以太坊区块链(kurtulmusv and Daniel):该方案基于以太坊结构来实现,面临的问题是gas的费用一直在上涨,普通用户可能难以支付;

简而言之,相关工作的局限性可归纳为奖励用户贡献的不准确或效率低下,以及区块链上数据缺乏可扩展性。

Idea

1)模型拥有者O将当前轮次的模型参数以及其他相关信息发送给本地设备D; 
2)本地设备D使用本地数据在off-chain训练模型,并计算最终的梯度值; 
3)本地训练完成后,梯度值、数据集大小、设备地址以及版本号作为参数被送至智能合约FederatedLearning函数; 
4)设备D将步骤3内包括所用参数的transaction法中至on-chain的生产者P; 
5)每一个生产者将接收到的transaction添加至自己对应的transaction队列后面,等待验证; 
6)每一个生产者会依次执行两个智能合约操作。首先使用FederatedLearning函数来验证用户身份角色,然后使用UploadGradient函数验证每个transaction内参数的正确性; 
7a)一旦验证通过,该transaction会被立即添加至下一个block; 
7b)提交了相应transaction的设备D会受到奖励,通过之前上传的设备地址发放,奖励数额则是和训练数据消耗量成正比; 

Thoughts

  • 亮点一:使用off-chain来直接存储本地模型训练的梯度值,使用on-chain来存储本地模型训练得到梯度值的hash值,防止数据被篡改

off-chain和on-chain

  • 生产者确保本地节点训练的模型参数真实性(未被恶意篡改)是通过比较on-chain和off-chain上面保存的梯度hash值,而确保模型参数准确性是通过比较本地节点训练产生的验证损失的趋势来判断,如果一直在减少,那说明这个模型是训练成功的;
  • 上述检验模型参数准确性的方法是CSVES方法,该方法的缺陷在于一些有效的模型参数可能在验证时得到的损失值依旧会增加;
  • 仅仅根据数据消耗量作为标准来奖励,未得到证实;
  • 存储在off-chain的模型参数信息只有模型拥有者有权限可以访问,另外训练模型参数也会采取Paillier同态加密算法加密,进一步确保数据隐私性。
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
由于联邦学习优化算法是一个较为复杂的问题,需要考虑到多个方面的因素,因此在这里只给出一个简单的示例代码,仅供参考。 首先,我们需要定义一个状态空间和动作空间。在联邦学习优化算法中,状态空间可以包括当前轮次、本地数据集大小、本地计算能力等因素;动作空间可以包括本地训练轮次、本地学习率等因素。 接下来,我们需要定义一个q-table来存储每个状态下的动作价值。在每次训练时,根据当前状态选择一个动作,并更新q-table中相应的价值。 最后,我们可以根据q-table中的价值来选择最优的动作来更新模型参数。具体实现代码如下: ```python import numpy as np # 定义状态空间和动作空间 state_space = [i for i in range(10)] action_space = [i for i in range(10)] # 定义q-table,初始化为0 q_table = np.zeros((len(state_space), len(action_space))) # 定义超参数 epsilon = 0.1 alpha = 0.5 gamma = 0.9 num_episodes = 1000 # 定义环境模型 def environment(state, action): # 计算奖励函数 reward = state * action # 计算下一个状态 next_state = state + 1 # 判断是否到达终止状态 done = next_state == len(state_space) return reward, next_state, done # 定义Q-learning算法 def q_learning(state, epsilon): # 以epsilon-greedy策略选择动作 if np.random.uniform(0, 1) < epsilon: action = np.random.choice(action_space) else: action = np.argmax(q_table[state]) # 更新q-table reward, next_state, done = environment(state, action) q_table[state, action] += alpha * (reward + gamma * np.max(q_table[next_state]) - q_table[state, action]) return next_state, done # 训练Q-learning算法 for i in range(num_episodes): state = 0 done = False while not done: state, done = q_learning(state, epsilon) # 根据q-table选择最优动作更新模型参数 best_action = np.argmax(q_table[state]) update_model(best_action) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习的学习者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值