差异隐私是深度学习领域中的一个新主题。这是为了确保当我们的神经网络从敏感数据中学习时, 它们仅在学习应该从数据中学到什么。
辛西娅·德沃克(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课程。
评论前必须登录!
注册