联邦学习的思考

联邦学习是否可以通过数据特征进行模型训练学习,而不必是准确无误的原始数据?数据特征是否可以理解为一种加密数据?

目前比较主流的联邦机器学习平台: Fate(微众银行开源), PySyft(OpenMind开源), Rosetta(LatticeX Foundation开源), PaddleFL(百度开源)等在构造传统的机器学习模型时,大都以改变模型本身的数据和参数传递方式的形式进行,在中间数据中运用SM4和同台加密等算法,使得联邦学习模型与传统的机器学习模型无法兼容,除此之外在进行传统算法搬迁的过程中无法完全复制,导致模型训练精度和对数据的兼容程序上都有较大的损失。

怎么让联邦学习支持传统的机器学习模型框架?例如sklearn,tensorflow,keras,pytorch等等。

联邦学习支持传统机器模型框架有很多好处,诸如降低学习门槛,提高模型准确的,提高模型的容错性,联邦学习算法也更加的丰富等等,很多的联邦学习框架都是将MPC多方安全计算与联邦建模集中在一起,导致在构建联邦建模的时候沿用了MPC加密的习惯,即带入模型和MPC算法的数据必须时原始准确的数据,个人认为这是将MPC与机器学习混淆的行为,他们之间存在本质的区别:

1,对于隐私计算来讲,数据求交集,数据求和等需要用到加密算法,例如同台加密等,保证在计算的时候,数字不发生改变,例如1+1=2,在加密之后E(1)+E(1) = E(2) 保证数据的准确无误。 2,对于机器学习来讲大可不必这样,因为++机器学习学习的是一种规律++不是确定性的东西,而是属于概率问题,所以在数据传输之前大可将数据进行提取特征或做映射变化(个人认为数据加密其实就是一种映射,可能中间过程比较过程,但是只要让第三方无法获取甲乙之间的数据信息即可)只要保证数据规律的完整性即可,不必是真实无误的数据。

MPC-多方安全计算

联邦学习与隐私计算(MPC)不同,多方安全计算(Secure Multi-party Computation, MPC)注重数据的隐秘计算,它可以在保护个人隐私信息的前提下,实现隐私数据共享。MPC是指某一组互相不信任的参与者在保护个人隐私的同时,还可以进行协同计算。MPC主要是针对在没有可信第三方时保密计算所有参与者约定的一个函数的情况,它在数字签名、电子拍卖、秘密共享等场景中有着重要的作用。 多方安全计算的原理如下:

秘密分享

秘密共享(Secret Sharing),如其名,是一种用来共享秘密的技术。理解这个技术,首先需要把意义搞清楚,然后了解技术实现原理。

下面是基于此原理的一种简单测试

传统的建模

from sklearn.datasets import load_diabetes
from sklearn import linear_model
from sklearn.model_selection import train_test_split
import numpy as np

#X, y = make_regression(n_samples=500,n_features=50,n_informative=25,noise=500,
                      #random_state=8)
X, y = load_diabetes().data, load_diabetes().target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 8)
lr = linear_model.PoissonRegressor().fit(X_train, y_train)
print("训练数据集得分:{:.2f}".format(lr.score(X_train, y_train)))
print("测试数据集得分:{:.2f}".format(lr.score(X_test, y_test)))
# 训练数据集得分:0.34
# 测试数据集得分:0.35

基于秘密分享的泊松分布

from sklearn.datasets import load_diabetes
from sklearn import linear_model
import random
random.seed (50)
#X, y = make_regression(n_samples=500,n_features=50,n_informative=25,noise=500,
                      #random_state=8)
X, y = load_diabetes().data, load_diabetes().target

# 生成随机矩阵
# 这里的魔术值是一个无线大的素数
x_shape = X.shape
n = 20
lines = [np.random.randint(0,n) for i in range(x_shape[1])]
random = np.array([lines for _ in range(x_shape[0])])
print("随机矩阵 random:{}".format(random.shape))
# random[0:10]
# 秘密分享片段的加密数据
# 加强原始数据
# X_s = X*(random/2)
# 将数据片段带入模型进行训练得到的模型准确度与原模型基本一致
X1 =X - random - random

X_train, X_test, y_train, y_test = train_test_split(X1, y, random_state = 8)
lr = linear_model.PoissonRegressor().fit(X_train, y_train)
print("训练数据集得分:{:.2f}".format(lr.score(X_train, y_train)))
print("测试数据集得分:{:.2f}".format(lr.score(X_test, y_test)))

# 随机矩阵 random:(442, 10)
# 训练数据集得分:0.34
# 测试数据集得分:0.35

总结

总和上面两个模型对别,在对原始数据进行两次分片之后得到的特征数据,原模型之后,仍然可以得到相同的训练集的得分,即模型从特征集中获取到了原始数据集的规律,但是可以不用原始数据进行训练,只要将特征数据集多方传递,即可完成联邦学习的横纵向建模,也可以兼容传统的机器学习框架

原文来自:

联邦机器学习的思考 - 难念的经​huaisifan.com/archives/%E8%81%94%E9%82%A6%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%80%9D%E8%80%83

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值