个性化阅读
专注于IT技术分析

差异隐私和深度学习有什么区别?

差异隐私是深度学习领域中的一个新主题。这是为了确保当我们的神经网络从敏感数据中学习时, 它们仅在学习应该从数据中学到什么。

辛西娅·德沃克(Cynthia Dwork)提出的健壮的隐私定义(摘自她的《算法基础》一书)–

“差异隐私”描述了数据持有人或策展人对数据主体的承诺, 承诺如下:”通过允许将你的数据用于任何研究, 你不会受到不利或其他影响。或分析, 无论是否有其他研究, 数据集或信息来源。”

差异隐私的总体目标是确保不同类型的统计分析不会损害隐私, 并且如果分析后分析人员对数据集的功能一无所知, 则可以保留隐私。在其他地方公开对个人没有害处。

为了在简单数据库的上下文中定义隐私, 我们正在对数据库进行一些查询, 如果我们从数据库中删除一个人并且查询没有更改, 那么该人的隐私将得到完全保护。

让我们看一个例子

给定一个数据库, 其中包含一些数字” 1″和” 0″, 这是一些敏感数据, 例如某个人是否患有某种疾病(也许患者不想透露这些数据)。

db = [1, 0, 1, 1, 0, 1, 0, 1, 0, 0]

现在, 你已经删除了每个条目之一的数据库, 这些数据库称为并行数据库。因此, 如果原始数据库的长度为” n”, 则并行数据库的数量为” n”, 在本例中为10。

现在, 我们考虑一个并行DBS, 让我们首先从中删除第一个个体, 然后得到什么?

pdbs[0] = [0, 1, 1, 0, 1, 0, 1, 0, 0]

因此, 你现在看到该数据库的长度为” n-1″。因此, 要计算敏感度, 我们需要一个查询函数so, 我们假设最简单的”和”。因此, 我们现在关注两个结果:

sum(db) = 5
 sum(pdbs[0]) = 4

并且上面两个之间的差异为’1′, 我们知道我们需要找到所有这些差异的最大值, 因为此数据库仅包含’1’和’0′, 所有这些差异要么为’1′(上面的, 当删除1时)或’0′(删除0时)。

因此, 我们对本示例的敏感度为” 1″, 这确实是很高的值, 因此使用此” sum”查询可以轻松进行差分攻击。

敏感度应在下面, 这样就可以定量地确定差异攻击的级别可以揭示信息/泄漏隐私。

在Python中实现差异隐私代码

import torch
  
# the number of entries in our database
num_entries = 5000
  
db = torch.rand(num_entries)> 0.5
  
# generating parallel databases
def get_parallel_db(db, remove_index):
  
     return torch.cat((db[ 0 :remove_index], db[remove_index + 1 :]))
get_parallel_db(db, 52352 )
  
def get_parallel_dbs(db):
  
     parallel_dbs = list ()
  
     for i in range ( len (db)):
         pdb = get_parallel_db(db, i)
         parallel_dbs.append(pdb)
      
     return parallel_dbs
  
pdbs = get_parallel_dbs(db)
  
# Creating linear and parallel databases
  
def create_db_and_parallels(num_entries):
      
     db = torch.rand(num_entries)> 0.5
     pdbs = get_parallel_dbs(db)
      
     return db, pdbs
  
db, pdbs = create_db_and_parallels( 2000 )
  
# Creating sensitivity function
  
def sensitivity(query, n_entries = 1000 ):
  
     db, pdbs = create_db_and_parallels(n_entries)
      
     full_db_result = query(db)
      
     max_distance = 0
     for pdb in pdbs:
         pdb_result = query(pdb)
  
         db_distance = torch. abs (pdb_result - full_db_result)
  
         if (db_distance> max_distance):
             max_distance = db_distance
              
     return max_distance
  
# query our database and evaluate whether or not the result of the 
# query is leaking "private" information
  
def query(db):
     return db. float ().mean()
sensitivity(query)
Input : A randomly generated database(with the help of torch library)
Output : tensor(0.0005)

解释

首先, 我们在炬管库的帮助下创建一个随机数据库, 然后为线性和并行数据库定义了两个函数get_parallel_db和get_parallel_dbs。现在, 我们定义了敏感性函数, 然后我们测量了每个并行DB的查询结果与整个数据库的查询结果之间的差异, 然后计算出最大值(为1)。这个值叫做”灵敏度”.

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


赞(0) 打赏
未经允许不得转载:srcmini » 差异隐私和深度学习有什么区别?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏