位置: IT常识 - 正文

技术干货 | 一文弄懂差分隐私原理!(技术knowhow)

编辑:rootadmin
技术干货 | 一文弄懂差分隐私原理! 随着互联网的迅猛发展,网络早已融进人们日常生活的方方面面,我们的个人隐私在互联网时代几乎已经不是秘密。在数据时代,如何保护自己的隐私呢?差分隐私又是什么?小编用一篇文章带领大家了解什么是差分隐私,背后技术原理以及如何在MindSpore中实现差分隐私。如果大家看不懂也没关系,本周末晚八点(2020.6.7 20:00),MindSpore抖音直播间(抖音号:MindSpore梯度森林会)将会为大家详细讲解!差分隐私的背景

推荐整理分享技术干货 | 一文弄懂差分隐私原理!(技术knowhow),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:技术文是什么意思,技术ui,技术ai,技术文是什么意思,技术文是什么意思,技术干货分享,技术干货分享,技术ai,内容如对您有帮助,希望把文章链接给更多的朋友!

20 世纪90 年代,美国马萨诸塞州发生了著名的隐私泄露事件。该州集团保险委员会(GIC)发布了“经过匿名化处理的”医疗数据,用于公共医学研究。在数据发布之前,为了防止隐私泄露问题,特地删除了数据中所有的个人敏感信息,例如身份证号、姓名、住址。然而在1997 年,卡内基梅隆大学的博士Latanya Sweeney将匿名化的GIC数据库(包含了每位患者生日、性别、邮编)与选民登记记录相连后,成功破解了这份匿名数据,并找到了当时的马萨诸塞州州长William Weld的医疗记录。

30年后,在2018年又发生了多起隐私数据泄露事件。Facebook用户隐私数据泄露被罚款16亿美元,圆通10亿快递信息泄露,万豪酒店5亿用户开房信息泄露,华住酒店5亿条用户数据疑似泄露,国泰航空940万乘客数据等等,隐私泄露问题层出不穷,隐私保护当是重中之重。

隐私保护的目的

我们希望,数据使用隐私保护技术后,可以安全发布,攻击者难以去匿名化,同时又最大限度的保留原始数据的整体信息,保持其研究价值。当前的研究热点主要在两个方面:

隐私保护技术能提供何种强度的保护,能够抵御何种强度的攻击;

如何在保护隐私的同时,最大限度地保留原数据中的有用信息。

差分隐私的基本概念

差分隐私是Dwork在2006年针对统计数据库的隐私泄露问题提出的一种新的隐私定义,目的是使得数据库查询结果对于数据集中单个记录的变化不敏感。简单来说,就是单个记录在或者不在数据集中,对于查询结果的影响微乎其微。那么攻击者就无法通过加入或减少一个记录,观察查询结果的变化来推测个体的具体信息。

举个例子,当不使用差分隐私技术时,我们查询A医院数据库,查询今日就诊的100个病人患病情况,返回10人患肺癌,同时查询99个病人患病情况,返回9个人患肺癌,那就可以推测剩下1个人张三患有肺癌,这个就暴露了张三的个人隐私了。使用差分隐私技术后,查询A医院的数据库,查询今日就诊的100个病人患病情况,返回肺癌得病率9.80%,查询今日就诊的99个病人患病情况,返回肺癌得病率9.81%,因此无法推测剩下1个人张三是否患有肺癌。

在机器学习中,机器学习算法一般是用大量数据并更新模型参数,学习数据特征。理想情况下,这些算法学习到一些泛化性较好的模型。然而,机器学习算法并不会区分通用特征还是个体特征。当我们用机器学习来完成某个重要的任务,例如肺癌诊断,发布的机器学习模型可能在无意中透露训练集中的个体特征,恶意攻击者可能从发布的模型获得关于张三的隐私信息,因此使用差分隐私技术来防止机器学习模型泄露个人隐私数据是十分必要的。

差分隐私的定义

图1 随机算法在邻近数据集上的概率

差分隐私有两个重要的优点:

差分隐私假设攻击者能够获得除目标记录以外的所有其他记录信息,这些信息的总和可以理解为攻击者能够掌握的最大背景知识,在这个强大的假设下,差分隐私保护无需考虑攻击者所拥有的任何可能的背景知识。

差分隐私建立在严格的数学定义上,提供了可量化评估的方法。因此差分隐私保护技术是一种公认的较为严格和健壮的隐私保护机制。

如何实现差分隐私

差分隐私如此优秀,那具体怎么实现呢?一个很自然而然的想法是“加噪声”。差分隐私可以通过加适量的干扰噪声来实现,目前常用的添加噪音的机制有拉普拉斯机制和指数机制。其中拉普拉斯机制用于保护数值型的结果,指数机制用于保护离散型的结果。

那什么叫适量的噪声,多少才是合适的,如何衡量呢?加入噪声的量和数据集是有关系的,年龄数据集的数据间差异就没有工资数据集的数据差异大,要添加的噪声的量就不一致。敏感度是决定该加多少噪声的重要因素。

敏感度

敏感度指数据集中删除任意一条记录对查询结果产生的最大影响。在差分隐私中有两种敏感度,全局敏感度和局部敏感度。

差分隐私的应用

看了以上的数学推到是不是头昏眼花了呢,其实简单来说,差分隐私的本质是"加噪",任何需要隐私保护的算法都可以使用差分隐私,由于差分隐私的串并联原理,只要算法中的每一个步骤都满足差分隐私要求,那么这个算法的最终结果将满足差分隐私特性。因此,差分隐私可以在算法流程中的任意步骤。

技术干货 | 一文弄懂差分隐私原理!(技术knowhow)

其实差分隐私在1977年就提出了,但是真正让它声名大噪的是2016年苹果软件工程副总裁克雷格•费德里希(Craig Federighi)在WWDC大会上宣布苹果使用本地化差分隐私技术来保护IOS、MAC用户隐私。在多个场景中成功部署差分隐私,在保护用户隐私的同时,提升用户体验。

例如,使用差分隐私技术收集用户统计用户在不同语言环境中的表情符号使用情况,改进QuickType对表情符号的预测能力。根据用户键盘输入学习新单词、外来词,更新设备内字典改善用户键盘输入体验。又例如,根据使用差分隐私技术收集用户在Safari应用使用中高频的高内存占用型、高耗能型域名,在IOS和macOS High Sieera系统里在这些网站加载时提供更多资源,以提升用户浏览体验。另外,谷歌也利用本地化差分隐私保护技术从Chrome浏览器每天采集超过1400万用户行为统计数据。

除了工业界的工程应用,差分隐私的学术研究更为广泛。目前推荐系统、社交网络分析、知识迁移、联邦学习等场景下都有差分隐私的踪迹。

MindSpore中的差分隐私实现

在MindArmour的差分隐私模块Differential-Privacy中,实现了差分隐私优化器。目前支持基于高斯机制的差分隐私SGD、Momentum优化器,同时还提供RDP(R'enyi Differential Privacy)用于监测差分隐私预算。

这里以LeNet模型为例,说明如何在MindSpore上使用差分隐私优化器训练神经网络模型。

本例面向CPU、GPU、Ascend 910 AI处理器你可以在这里下载完整的样例代码<https://gitee.com/mindspore/mindarmour/blob/master/example/mnist_demo/lenet5_dp_model_train.py

导入需要的库文件

下列是我们需要的公共模块及MindSpore的模块。

import osimport argparseimport mindspore.nn as nnfrom mindspore import contextfrom mindspore.train.callback import ModelCheckpointfrom mindspore.train.callback import CheckpointConfigfrom mindspore.train.callback import LossMonitorfrom mindspore.nn.metrics import Accuracyfrom mindspore.train.serialization import load_checkpoint, load_param_into_netimport mindspore.dataset as dsimport mindspore.dataset.transforms.vision.c_transforms as CVimport mindspore.dataset.transforms.c_transforms as Cfrom mindspore.dataset.transforms.vision import Interimport mindspore.common.dtype as mstypefrom mindarmour.diff_privacy import DPModelfrom mindarmour.diff_privacy import DPOptimizerClassFactoryfrom mindarmour.diff_privacy import PrivacyMonitorFactoryfrom mindarmour.utils.logger import LogUtilfrom lenet5_net import LeNet5from lenet5_config import mnist_cfg as cfg

配置环境信息

1.使用parser模块,传入运行必要的信息,如运行环境设置、数据集存放路径等,这样的好处是,对于经常变化的配置,可以在运行代码时输入,使用更加灵活。

parser = argparse.ArgumentParser(description='MindSpore MNIST Example')parser.add_argument('--device_target', type=str, default="Ascend", choices=['Ascend', 'GPU', 'CPU'], help='device where the code will be implemented (default: Ascend)')parser.add_argument('--data_path', type=str, default="./MNIST_unzip", help='path where the dataset is saved')parser.add_argument('--dataset_sink_mode', type=bool, default=False, help='dataset_sink_mode is False or True')parser.add_argument('--micro_batches', type=float, default=None, help='optional, if use differential privacy, need to set micro_batches')parser.add_argument('--l2_norm_bound', type=float, default=1, help='optional, if use differential privacy, need to set l2_norm_bound')parser.add_argument('--initial_noise_multiplier', type=float, default=0.001, help='optional, if use differential privacy, need to set initial_noise_multiplier')args = parser.parse_args()

2.配置必要的信息,包括环境信息、执行的模式、后端信息及硬件信息。

context.set_context(mode=context.PYNATIVE_MODE,device_target=args.device_target, enable_mem_reuse=False)

预处理数据集

加载数据集并处理成MindSpore数据格式。

def generate_mnist_dataset(data_path, batch_size=32, repeat_size=1,num_parallel_workers=1, sparse=True): """ create dataset for training or testing """ # define dataset ds1 = ds.MnistDataset(data_path) # define operation parameters resize_height, resize_width = 32, 32 rescale = 1.0 / 255.0 shift = 0.0 # define map operations resize_op = CV.Resize((resize_height, resize_width), interpolation=Inter.LINEAR) rescale_op = CV.Rescale(rescale, shift) hwc2chw_op = CV.HWC2CHW() type_cast_op = C.TypeCast(mstype.int32) # apply map operations on images if not sparse: one_hot_enco = C.OneHot(10) ds1 = ds1.map(input_columns="label", operations=one_hot_enco, num_parallel_workers=num_parallel_workers) type_cast_op = C.TypeCast(mstype.float32) ds1 = ds1.map(input_columns="label", operations=type_cast_op, num_parallel_workers=num_parallel_workers) ds1 = ds1.map(input_columns="image", operations=resize_op, num_parallel_workers=num_parallel_workers) ds1 = ds1.map(input_columns="image", operations=rescale_op, num_parallel_workers=num_parallel_workers) ds1 = ds1.map(input_columns="image", operations=hwc2chw_op, num_parallel_workers=num_parallel_workers) # apply DatasetOps buffer_size = 10000 ds1 = ds1.shuffle(buffer_size=buffer_size) ds1 = ds1.batch(batch_size, drop_remainder=True) ds1 = ds1.repeat(repeat_size) return ds1

建立模型

这里以LeNet模型为例,你也可以根据需求建立训练自己的模型。

from mindspore import nnfrom mindspore.common.initializer import TruncatedNormaldef conv(in_channels, out_channels, kernel_size, stride=1, padding=0): weight = weight_variable() return nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, stride=stride, padding=padding, weight_init=weight, has_bias=False, pad_mode="valid")def fc_with_initialize(input_channels, out_channels): weight = weight_variable() bias = weight_variable() return nn.Dense(input_channels, out_channels, weight, bias)def weight_variable(): return TruncatedNormal(0.02)class LeNet5(nn.Cell): """ Lenet network """ def __init__(self): super(LeNet5, self).__init__() self.conv1 = conv(1, 6, 5) self.conv2 = conv(6, 16, 5) self.fc1 = fc_with_initialize(16*5*5, 120) self.fc2 = fc_with_initialize(120, 84) self.fc3 = fc_with_initialize(84, 10) self.relu = nn.ReLU() self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) self.flatten = nn.Flatten() def construct(self, x): x = self.conv1(x) x = self.relu(x) x = self.max_pool2d(x) x = self.conv2(x) x = self.relu(x) x = self.max_pool2d(x) x = self.flatten(x) x = self.fc1(x) x = self.relu(x) x = self.fc2(x) x = self.relu(x) x = self.fc3(x) return x

加载LeNet网络,定义损失函数、配置checkpoint、用上述定义的数据加载函数generate_mnist_dataset载入数据。

network = LeNet5()net_loss = nn.SoftmaxCrossEntropyWithLogits(is_grad=False, sparse=True, reduction="mean")config_ck = CheckpointConfig(save_checkpoint_steps=cfg.save_checkpoint_steps, keep_checkpoint_max=cfg.keep_checkpoint_max)ckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet", directory='./trained_ckpt_file/', config=config_ck)ds_train = generate_mnist_dataset(os.path.join(args.data_path, "train"), cfg.batch_size, cfg.epoch_size)

引入差分隐私

1.配置差分隐私优化器的参数。

设置数据集batch size。

实例化差分隐私工厂类。

设置差分隐私的噪声机制,目前支持固定标准差的高斯噪声机制:Gaussian和自适应调整标准差的自适应高斯噪声机制:AdaGaussian。

设置优化器类型,目前支持SGD和Momentum。

设置差分隐私预算监测器RDP,用于观测每个step中的差分隐私预算  的变化。

gaussian_mech = DPOptimizerClassFactory(args.micro_batches)gaussian_mech.set_mechanisms('Gaussian', norm_bound=args.l2_norm_bound, initial_noise_multiplier=args.initial_noise_multiplier)net_opt = gaussian_mech.create('Momentum')(params=network.trainable_params(), learning_rate=cfg.lr, momentum=cfg.momentum)rdp_monitor = PrivacyMonitorFactory.create('rdp', num_samples=60000, batch_size=16, initial_noise_multiplier=5, target_delta=0.5, per_print_times=10)

2.将LeNet模型包装成差分隐私模型,只需要将网络传入DPModel即可。

model = DPModel(micro_batches=args.micro_batches, norm_clip=args.l2_norm_bound, dp_mech=gaussian_mech.mech, network=network, loss_fn=net_loss, optimizer=net_opt, metrics={"Accuracy": Accuracy()})

3.模型训练与测试。

LOGGER.info(TAG, "============== Starting Training ==============")model.train(cfg['epoch_size'], ds_train, callbacks=[ckpoint_cb, LossMonitor(), rdp_monitor],dataset_sink_mode=args.dataset_sink_mode)LOGGER.info(TAG, "============== Starting Testing ==============")ckpt_file_name = 'trained_ckpt_file/checkpoint_lenet-10_1875.ckpt'param_dict = load_checkpoint(ckpt_file_name)load_param_into_net(network, param_dict)ds_eval = generate_mnist_dataset(os.path.join(args.data_path, 'test'), batch_size=cfg.batch_size)acc = model.eval(ds_eval, dataset_sink_mode=False)LOGGER.info(TAG, "============== Accuracy: %s ==============", acc)

4.结果展示

不加差分隐私的Lenet模型精度稳定在99%,加了自适应差分隐私AdaDP的Lenet模型收敛,精度稳定在96%,加了非自适应差分隐私DP的LeNet模型收敛,精度稳定在94%左右。

图4 训练结果对比展示

本文链接地址:https://www.jiuchutong.com/zhishi/298648.html 转载请保留说明!

上一篇:css特效:流光背景+动态边框+滑动效果+聚集效果+小耳朵+阴影流光效果(html流光按钮)

下一篇:小程序和H5页面的相互跳转(小程序和h5页面的区别)

  • qq聊天记录迁移到另一台手机(qq聊天纪录)(qq聊天记录迁移一直显示正在连接)

    qq聊天记录迁移到另一台手机(qq聊天纪录)(qq聊天记录迁移一直显示正在连接)

  • 华为平板怎么设置儿童使用时间(华为平板怎么设置横竖屏旋转)

    华为平板怎么设置儿童使用时间(华为平板怎么设置横竖屏旋转)

  • vivox70pro怎么显示流量(vivo手机怎么显示)

    vivox70pro怎么显示流量(vivo手机怎么显示)

  • 小米8如何隐藏app图标(小米8如何隐藏相册)

    小米8如何隐藏app图标(小米8如何隐藏相册)

  • 电话响了几声然后说正在通话中(电话响了几声然后说无法接通)

    电话响了几声然后说正在通话中(电话响了几声然后说无法接通)

  • 为什么我的探探没有直播功能(为什么我的探探匹配不到人)

    为什么我的探探没有直播功能(为什么我的探探匹配不到人)

  • 如何评论别人的朋友圈(如何评论别人的风景照)

    如何评论别人的朋友圈(如何评论别人的风景照)

  • 怎么设置后台运行的程序

    怎么设置后台运行的程序

  • 手机屏幕烧了还能修吗(手机屏幕烧了还能用多久)

    手机屏幕烧了还能修吗(手机屏幕烧了还能用多久)

  • 华为畅享10怎么分屏(华为畅享10怎么刷机强行解锁)

    华为畅享10怎么分屏(华为畅享10怎么刷机强行解锁)

  • 华为手机开发人员选项在哪里打开(华为手机开发人员选项怎么打开和关闭)

    华为手机开发人员选项在哪里打开(华为手机开发人员选项怎么打开和关闭)

  • 为什么充电器越来越松(为什么充电器越冲电量越低)

    为什么充电器越来越松(为什么充电器越冲电量越低)

  • dou+投放技巧(dou+投放有用吗)

    dou+投放技巧(dou+投放有用吗)

  • 虎牙直播回放怎么没了(虎牙直播回放怎么下载手机)

    虎牙直播回放怎么没了(虎牙直播回放怎么下载手机)

  • 亲情号付款余额不足是啥原因(亲情号付款钱不够)

    亲情号付款余额不足是啥原因(亲情号付款钱不够)

  • vivo手机怎么调整时间(vivo手机怎么调时间)

    vivo手机怎么调整时间(vivo手机怎么调时间)

  • 趣键盘打字不出表情包(键盘输入法不出来字怎么调出来)

    趣键盘打字不出表情包(键盘输入法不出来字怎么调出来)

  • 华为p30pro耳机插上没反应(华为p30pro耳机插孔在哪)

    华为p30pro耳机插上没反应(华为p30pro耳机插孔在哪)

  • 华为nava是什么意思(nova是什么)

    华为nava是什么意思(nova是什么)

  • dvi能输出4k吗(dvi-d支持4k吗)

    dvi能输出4k吗(dvi-d支持4k吗)

  • 怎么搜微博用户(怎么搜索到微博用户)

    怎么搜微博用户(怎么搜索到微博用户)

  • 红魔nx609j是几代(红魔nx609j是什么型号)

    红魔nx609j是几代(红魔nx609j是什么型号)

  • qq的自动回复怎么弄操作流程(qq的自动回复怎么弄)

    qq的自动回复怎么弄操作流程(qq的自动回复怎么弄)

  • 如何用高德地图量距离(如何用高德地图制作旅游线路图)

    如何用高德地图量距离(如何用高德地图制作旅游线路图)

  • 荣耀20和荣耀v20有什么区别(荣耀20和荣耀v20手机壳是一样吗)

    荣耀20和荣耀v20有什么区别(荣耀20和荣耀v20手机壳是一样吗)

  • 华为手机克隆可以用在其他手机上吗(华为手机克隆可以卸载吗)

    华为手机克隆可以用在其他手机上吗(华为手机克隆可以卸载吗)

  • 全民k歌怎么同时合唱(全民K歌怎么同步账号)

    全民k歌怎么同时合唱(全民K歌怎么同步账号)

  • 网页无法复制文字(网页无法复制文字破解)

    网页无法复制文字(网页无法复制文字破解)

  • python中如何使用items()函数实现字典转换为DataFrame(python怎么运行程序)

    python中如何使用items()函数实现字典转换为DataFrame(python怎么运行程序)

  • 中国税务师协会税务师官网
  • 报销为什么不能多家赔付
  • 印花税的三种缴税方式
  • 差旅费包括哪些费用
  • 增值税专用发票可以开电子发票吗
  • 培训机构开发票不能开公司抬头吗
  • 养老险的基数
  • 别墅一般送车库吗
  • 财政补贴的概念是什么?其性质是什么?
  • 增值税逾期未申报的税务怎么处理
  • 房租抵扣个税需要提供发票吗
  • 采暖费报销发票
  • 持续经营损益怎么算
  • 赞助支出为什么不算广告费
  • 12月份的收入1月份开具发票,报税时免税吗
  • 农产品增值税核定扣除计算
  • 什么是成本核算你觉得成本核算重要吗为什么
  • 所得税汇算清缴后发现有误怎么办
  • 修缮发票要注明什么
  • 什么叫含税级距和不含税级距
  • 农行转账支票填写样本存根怎么填
  • 公司注销过程中如果有纠纷怎么办
  • 费用报销单的日期
  • 增值税留抵税额账务处理
  • 滴滴出行电子发票备注怎么写
  • 年度终了,会计部门都要将旧账编造清册
  • 在同一预缴地有多个项目的建筑业纳税人总销售额以什么为标准确定?
  • 怎样取得个人所得税
  • 其他应收款注销时处理
  • 母子公司之间的借款利息支出增值税能否抵扣
  • 防伪税控设备丢失需要处罚吗
  • 残疾人就业保障金申报时间
  • 普通发票可以部份红冲吗?
  • 电脑中毒了怎么弄
  • 怎么查上市公司
  • 二手房过户提供发票好还是不提供
  • 项目融资中风险有哪些
  • php开启pdo
  • php可以和iis配合运行吗?
  • 海关进口税可以抵扣吗
  • 大学生web网页实训心得体会
  • nacos安装包
  • vue引用svg矢量图
  • 贷方跟借方哪个是收入哪个是支出
  • php实现自动识别的方法
  • web渗透违法吗
  • vue2-elm
  • 开发票的销售收入,正规的做账怎么做
  • 增值税发票超过一年未抵扣
  • 管理费用属于什么类
  • mongodb27017
  • 城建税减免性质代码是什么意思
  • 管理费用的相关科目
  • 现金流量表编制格式
  • 生活服务的行业
  • 卖家电的税点是多少呀
  • 一般纳税人商贸企业的税负是多少
  • 不能抵扣的福利费
  • 商场活动经费预算
  • 预收账款如何做账务处理
  • 购入库存商品会计摘要怎么写
  • 银行期初余额录少了怎么办
  • 个体工商户是否要交税
  • 补缴税务滞纳金
  • Windows下MySQL5.7.18安装教程
  • 电脑显示配置windows
  • macos睡眠
  • 笔记本搜索功能用不了
  • linux安装和配置
  • win101607升级1909
  • win10系统edge浏览器打不开解决办法
  • win8怎么设置
  • win7系统电脑蓝牙怎么开
  • unity总结
  • shell脚本通过expect实现自动单边无密登录功能
  • java中遍历数组的方法
  • node使用
  • 税务局三级主办是副科吗
  • 纳税人识别号不能含有IOZSV
  • 2020年职工探亲路费报销最新规定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设