深度學(xué)習(xí)新玩法:Paillier加密算法實(shí)現(xiàn)犯罪檢測
掃描二維碼
隨時(shí)隨地手機(jī)看文章
編者按:保護(hù)隱私和保障安全的沖突,在多大程度上僅僅是一個(gè)技術(shù)限制?讓我們和DeepMind數(shù)據(jù)科學(xué)家、Udacity深度學(xué)習(xí)導(dǎo)師Andrew Trask一起,基于Paillier加密算法和詞袋邏輯回歸實(shí)現(xiàn)犯罪檢測。
TLDR:監(jiān)控是否能夠只侵犯犯罪嫌疑人和恐怖分子的隱私,避免殃及無辜?本文用Python實(shí)現(xiàn)了一個(gè)原型。
摘要:現(xiàn)代的犯罪嫌疑人和恐怖分子藏身于無辜居民的模式之中,精確地鏡像無辜居民的日常生活,直到變得致命的最后一刻,比如一輛沖上人行道的汽車,或大街上掏出刀子的人。由于即時(shí)發(fā)生的致命事件不可能通過警力干預(yù),執(zhí)法部門轉(zhuǎn)而利用監(jiān)控檢測犯罪事件,立法上的努力加速了這一轉(zhuǎn)向,例如愛國者法案、美國自由法案和英國的反恐法案。這些立法引起了激烈的爭議。在本文中,我們將探索隱私和安全的折衷在多大程度上僅僅是一個(gè)技術(shù)限制,一個(gè)可以通過同態(tài)加密和深度學(xué)習(xí)克服的技術(shù)限制。我們同時(shí)給出了一個(gè)原型實(shí)現(xiàn),并討論了哪里可以追加技術(shù)投入,使這一技術(shù)更成熟。我很樂觀,覺得未來的犯罪檢測工具會(huì)比今天的更強(qiáng)大,在提供更高效的監(jiān)控的同時(shí),保護(hù)居民隱私。潛在的濫用可以通過加密人工智能這樣的現(xiàn)代技術(shù)緩解。
如果你對(duì)訓(xùn)練加密神經(jīng)網(wǎng)絡(luò)感興趣,可以看看OpenMined的PySyft庫。
一、理想的居民監(jiān)控
國際機(jī)場常常使用緝毒犬檢測毒品。如果沒有緝毒犬,檢測乘客是否攜帶毒品需要打開每個(gè)箱包,檢查其中的物品,這是一個(gè)昂貴、費(fèi)時(shí)、侵犯隱私的過程。然而,有了緝毒犬,需要搜查的箱包僅僅是那些確實(shí)包含毒品的箱包(在緝毒犬看來)。緝毒犬的應(yīng)用同時(shí)增加了隱私和效率。
類似地,電子煙霧報(bào)警器和防盜報(bào)警器的應(yīng)用取代了更低效、更侵犯隱私的昂貴系統(tǒng):24x7站在房門口的保安或防火員。
這兩個(gè)場景幾乎不存在隱私和安全的折衷。這是監(jiān)控的理想狀態(tài)。監(jiān)控是有效的,而隱私得到了保護(hù):
僅當(dāng)很可能發(fā)現(xiàn)危險(xiǎn)/犯罪活動(dòng)時(shí)才侵犯隱私。
設(shè)備是精確的,假陽性率低。
可以訪問設(shè)備的人(陪同緝毒犬的警員和房產(chǎn)業(yè)主)并不試圖愚弄這些設(shè)備。因此,這些設(shè)備的工作機(jī)制可以公開,其對(duì)隱私的保護(hù)可以被大家知曉,并接受審計(jì)。
隱私保護(hù)、精確性、可審計(jì)性的結(jié)合是達(dá)到監(jiān)控理想狀態(tài)的關(guān)鍵。這一點(diǎn)很直觀。只有不到0.001%的飛機(jī)乘客會(huì)攜帶毒品的情況下,為什么每個(gè)包都要打開,每個(gè)乘客的隱私都要被侵犯?既然99.999%的時(shí)間既沒有發(fā)生火災(zāi),也沒有發(fā)生入室盜竊,為什么要讓保安監(jiān)看業(yè)主家中的監(jiān)控視頻?
二、國家安全監(jiān)控
在我寫作本文的兩周內(nèi),僅僅在曼徹斯特、倫敦、埃及、阿富汗就有超過50人死于恐怖襲擊。我為遇難者和他們的家庭祈禱,我極其希望我們能夠找到更好的保障人們安全的方式。對(duì)最近在威斯敏斯特發(fā)生的恐怖襲擊的調(diào)查顯示,恐怖分子通過Whatsapp交換信息。這引起了一場關(guān)于隱私和安全的折衷的激烈爭論。政府希望在Whatsapp一類的應(yīng)用中置入后門(包括無限制的讀取權(quán)限),但很多人不信任老大哥保護(hù)WhatsApp用戶隱私的自律能力。另外,置入后門也讓這些應(yīng)用容易受到攻擊,進(jìn)一步增加了公眾的風(fēng)險(xiǎn)。
恐怖主義也許是隱私和安全的折衷中討論最多的領(lǐng)域,它并不是唯一被討論的領(lǐng)域。謀殺之類的犯罪奪去了世界上成千上萬人的生命。僅僅在美國,每年就有大約16000起謀殺。
“相當(dāng)理由”的雞和蛋問題 FBI和當(dāng)?shù)貓?zhí)法部門面對(duì)的挑戰(zhàn)和恐怖主義極其相似。保護(hù)公民隱私的法律導(dǎo)致了一個(gè)雞和蛋問題,發(fā)現(xiàn)“相當(dāng)理由”(接著獲取搜查令)和得以訪問取得“相當(dāng)理由”的信息。而在緝毒犬和煙霧報(bào)警器這樣的情形中,這不再是一個(gè)問題,因?yàn)榉缸锟梢栽诓粚?duì)隱私造成顯著附加傷害的前提下被檢測出來,因此“相當(dāng)理由”不再是限制保障公共安全的因素。
三、人工智能的角色
在理想世界中,會(huì)有一個(gè)針對(duì)謀殺、恐怖襲擊等不可逆的嚴(yán)重犯罪的“火警”設(shè)備,該設(shè)備能夠保護(hù)隱私、精確、可審計(jì)。幸運(yùn)的是,商業(yè)實(shí)體對(duì)這類檢測設(shè)備的研發(fā)投入巨大。這些投入并不是由保護(hù)消費(fèi)者隱私驅(qū)動(dòng)的。相反,這些設(shè)備的研發(fā)是為了實(shí)現(xiàn)大規(guī)模檢測。考慮一下Gmail的研發(fā),Gmail想要提供垃圾郵件過濾功能。你可以侵犯人們的隱私,人工讀取他們的郵件,但創(chuàng)建一個(gè)可以檢測垃圾郵件的機(jī)器更快、更便宜。由于執(zhí)法部門想要保護(hù)廣大人口,不難想見這一過程是高度自動(dòng)化的。所以,基于這一假設(shè),我們真正欠缺的是轉(zhuǎn)換AI智能體滿足如下條件的能力:
可供受信任方審計(jì)其隱私保護(hù)
部署后無法被逆向工程
被監(jiān)控者無法知道預(yù)測
部署方無法篡改預(yù)測(比如聊天軟件)
高效、可伸縮
為了完整地說明這一概念,我們將創(chuàng)建一個(gè)原型。在下一節(jié),我們將使用雙層神經(jīng)網(wǎng)絡(luò)創(chuàng)建一個(gè)檢測器的基礎(chǔ)版本。之后,我們將升級(jí)這一檢測器,使其滿足上面列出的要求。這個(gè)檢測器將在垃圾郵件數(shù)據(jù)庫上進(jìn)行訓(xùn)練,因此將只能檢測垃圾郵件。不過,可以想像,經(jīng)過訓(xùn)練,它可以檢測你想要檢測的任何特定事件(例如,謀殺、縱火,等等)。我選擇垃圾郵件的原因是因?yàn)檫@相對(duì)容易訓(xùn)練,便于我演示這一方法。
四、創(chuàng)建垃圾郵件檢測器
所以,我們的示范案例將是一位當(dāng)?shù)氐膱?zhí)法部門官員(讓我們叫他“Bob”)希望打擊發(fā)送垃圾郵件這一犯罪行為。然而,Bob并不打算親自閱讀每個(gè)人的郵件,相反,Bob希望檢測發(fā)送垃圾郵件這一行為,這樣他就可以申請(qǐng)禁制令和搜查令,并進(jìn)行進(jìn)一步調(diào)查。這一過程的第一部分是創(chuàng)建一個(gè)有效的垃圾郵件檢測器。
Enron Spam Dataset 我們需要大量標(biāo)記為“垃圾郵件”和“非垃圾郵件”的郵件讓算法學(xué)習(xí)區(qū)分兩種不同的郵件。幸運(yùn)的是,一家知名的能源公司安然犯下了一些罪行,這些罪行被記錄在郵件中,因此,這家公司相當(dāng)多的郵件被公開了。由于其中許多郵件是垃圾郵件,因此人們基于這些公開郵件構(gòu)建了一個(gè)Enron Spam Dataset(安然垃圾郵件數(shù)據(jù)集)。我對(duì)這一數(shù)據(jù)集進(jìn)行了預(yù)處理,生成了兩個(gè)文件:
ham.txt 非垃圾郵件,共22032封。
spam.txt 垃圾郵件,共9000封。
文件的每行是一封郵件。我們將留置每個(gè)類別中的最后1000封郵件作為測試數(shù)據(jù)集,其余郵件用作訓(xùn)練數(shù)據(jù)集。
模型 我們將使用一個(gè)能夠快速訓(xùn)練的簡單模型,詞袋邏輯分類器(bag-of-words LogisTIc Classifier)。這是一個(gè)雙層的神經(jīng)網(wǎng)絡(luò)(輸入層和輸出層)。我們本可以使用更復(fù)雜的模型,比如LSTM,但本文的主題不是過濾垃圾郵件,另外,詞袋LR在垃圾郵件檢測上效果非常好(令人驚訝的是,它在其他許多任務(wù)上同樣表現(xiàn)出色)。所以不用過度復(fù)雜化。下面是創(chuàng)建這一分類器的代碼。如果你吃不準(zhǔn)它是如何工作的,可以參考我之前的文章基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播。
(在我的機(jī)器上,以下代碼在Python 2和Python 3上均能運(yùn)行。)
import numpy as np
from collecTIons importCounter
import random
import sys
np.random.seed(12345)
f = open('spam.txt','r')
raw = f.readlines()
f.close()
spam = list()
for row in raw:
spam.append(row[:-2].split(" "))
f = open('ham.txt','r')
raw = f.readlines()
f.close()
ham = list()
for row in raw:
ham.append(row[:-2].split(" "))
classLogisTIcRegression(object):
def __init__(self, posiTIves,negatives,iterations=10,alpha=0.1):
# 創(chuàng)建詞匯表 (真實(shí)世界的案例將增加幾百萬其他詞匯
# 以及從網(wǎng)絡(luò)上抓取的其他詞匯)
cnts = Counter()
for email in (positives+negatives):
for word in email:
cnts[word] += 1
# 轉(zhuǎn)換為查找表
vocab = list(cnts.keys())
self.word2index = {}
for i,word in enumerate(vocab):
self.word2index[word] = i
# 初始化未加密權(quán)重
self.weights = (np.random.rand(len(vocab)) - 0.5) * 0.1
# 在未加密信息上訓(xùn)練模型
self.train(positives,negatives,iterations=iterations,alpha=alpha)
def train(self,positives,negatives,iterations=10,alpha=0.1):
for iter in range(iterations):
error = 0
n = 0
for i in range(max(len(positives),len(negatives))):
error += np.abs(self.learn(positives[i % len(positives)],1,alpha))
error += np.abs(self.learn(negatives[i % len(negatives)],0,alpha))
n += 2
print("Iter:" + str(iter) + " Loss:" + str(error / float(n)))
def softmax(self,x):
return1/(1+np.exp(-x))
def predict(self,email):
pred = 0
for word in email:
pred += self.weights[self.word2index[word]]
pred = self.softmax(pred)
return pred
def learn(self,email,target,alpha):
pred = self.predict(email)
delta = (pred - target)# * pred * (1 - pred)
for word in email:
self.weights[self.word2index[word]] -= delta * alpha
return delta
model = LogisticRegression(spam[0:-1000],ham[0:-1000],iterations=3)
# 在留置集上評(píng)估
fp = 0
tn = 0
tp = 0
fn = 0
for i,h in enumerate(ham[-1000:]):
pred = model.predict(h)
if(pred < 0.5):
tn += 1
else:
fp += 1
if(i % 10 == 0):
sys.stdout.write(' I:'+str(tn+tp+fn+fp) + " % Correct:" + str(100*tn/float(tn+fp))[0:6])
for i,h in enumerate(spam[-1000:]):
pred = model.predict(h)
if(pred >= 0.5):
tp += 1
else:
fn += 1
if(i % 10 == 0):
sys.stdout.write(' I:'+str(tn+tp+fn+fp) + " % Correct:" + str(100*(tn+tp)/float(tn+tp+fn+fp))[0:6])
sys.stdout.write(' I:'+str(tn+tp+fn+fp) + " Correct: %" + str(100*(tn+tp)/float(tn+tp+fn+fp))[0:6])
print(" Test Accuracy: %" + str(100*(tn+tp)/float(tn+tp+fn+fp))[0:6])
print("False Positives: %" + str(100*fp/float(tp+fp))[0:4] + " <- privacy violation level out of 100.0%")
print("False Negatives: %" + str(100*fn/float(tn+fn))[0:4] + " <- security risk level out of 100.0%")
結(jié)果:
Iter:0Loss:0.0455724486216
Iter:1Loss:0.0173317643148
Iter:2Loss:0.0113520767678
I:2000Correct: %99.798
TestAccuracy: %99.7
FalsePositives: %0.3 <- privacy violation level out of 100.0%
FalseNegatives: %0.3 <- security risk level out of 100.0%
特性:可審計(jì)性 這個(gè)分類器有一個(gè)很棒的特性,它是一個(gè)具有高可審計(jì)性的算法。它不僅給出了測試數(shù)據(jù)上的精確評(píng)分,我們還能打開它,看看它給不同詞匯的權(quán)重有何不同,以確保它基于Bob長官所需標(biāo)記垃圾郵件?;谶@些洞見,Bob長官可以從他的上級(jí)那里得到對(duì)轄區(qū)內(nèi)的客戶端進(jìn)行極為有限的監(jiān)控的許可。注意,Bob無法閱讀任何人的郵件,他僅僅可以檢測他需要檢測的目標(biāo)。
好,我們的分類器得到了Bob的上級(jí)(警長?)的批準(zhǔn)。大致上,Bob將在轄區(qū)內(nèi)的所有郵件客戶端上加上這一分類器。每個(gè)客戶端在發(fā)送郵件前會(huì)使用分類器作出預(yù)測。預(yù)測將發(fā)送給Bob,漸漸地,Bob將找出在自己的轄區(qū)內(nèi)每天匿名發(fā)送10000封垃圾郵件的人。
問題一:預(yù)測可以偽造 過了一周以后,每個(gè)人仍然收到成噸的垃圾郵件。而Bob的分類器看起來不能標(biāo)記任何垃圾郵件,盡管在Bob自己的機(jī)器上測試時(shí)可以正常工作。Bob懷疑有人攔截了算法的預(yù)測,讓垃圾郵件看起來都是“陰性”。他應(yīng)該怎么做?
問題二:模型可以被逆向工程 此外,Bob注意到他可以從預(yù)訓(xùn)練的模型中得到權(quán)重值:
盡管從可審計(jì)的角度來說,這是一個(gè)優(yōu)勢(讓Bob的上級(jí)確信模型將僅僅找出設(shè)計(jì)目的所需的信息),這很容易被攻擊!人們不僅可以攔截和修改模型的預(yù)測,甚至還可以逆向工程系統(tǒng)找出需要避免哪些單詞。換句話說,模型的能力和預(yù)測易受攻擊。Bob需要一道額外的防線。
五、同態(tài)加密
在之前的文章中,我概述了如何使用同態(tài)加密以加密狀態(tài)訓(xùn)練神經(jīng)網(wǎng)絡(luò)(訓(xùn)練數(shù)據(jù)未加密),算法實(shí)現(xiàn)基于高效整數(shù)向量同態(tài)加密。不過,之前的文章提到,有很多同態(tài)加密方案可供選擇。本文將使用一個(gè)不同的方案,Paillier加密。我更新了Paillier加密的Python庫,加入了處理long類型的密文和明文的功能,并修改了一處日志功能的bug.
你可以通過以下命令安裝我修改的Paillier庫:
git clone https://github.com/iamtrask/python-paillier.git
cd python-paillier
python setup.py install
接著運(yùn)行以下代碼:
import phe as paillier
pubkey, prikey = paillier.generate_paillier_keypair(n_length=64)
a = pubkey.encrypt(123)
b = pubkey.encrypt(-1)
prikey.decrypt(a) # 123L
prikey.decrypt(b) # -1L
prikey.decrypt(a + a) # 246
prikey.decrypt(a + b) # 122
如你所見,我們可以使用公鑰加密(正或負(fù))數(shù),接著將加密值相加,然后解密所得結(jié)果。我們使用這些操作就可以加密我們的訓(xùn)練后的邏輯回歸分類器。如果想了解這些是如何工作的,請(qǐng)參考我上一篇文章。
import phe as paillier
import math
import numpy as np
from collections importCounter
import random
import sys
np.random.seed(12345)
print("Generating paillier keypair")
pubkey, prikey = paillier.generate_paillier_keypair(n_length=64)
print("Importing dataset from disk...")
f = open('spam.txt','r')
raw = f.readlines()
f.close()
spam = list()
for row in raw:
spam.append(row[:-2].split(" "))
f = open('ham.txt','r')
raw = f.readlines()
f.close()
ham = list()
for row in raw:
ham.append(row[:-2].split(" "))
classHomomorphicLogisticRegression(object):
def __init__(self, positives,negatives,iterations=10,alpha=0.1):
self.encrypted=False
self.maxweight=10
# 創(chuàng)建詞匯表 (真實(shí)世界的案例將增加幾百萬其他詞匯
# 以及從網(wǎng)絡(luò)上抓取的其他詞匯)
cnts = Counter()
for email in (positives+negatives):
for word in email:
cnts[word] += 1
# 轉(zhuǎn)換為查找表
vocab = list(cnts.keys())
self.word2index = {}
for i,word in enumerate(vocab):
self.word2index[word] = i
# 初始化未加密權(quán)重
self.weights = (np.random.rand(len(vocab)) - 0.5) * 0.1
# 在未加密信息上訓(xùn)練模型
self.train(positives,negatives,iterations=iterations,alpha=alpha)
def train(self,positives,negatives,iterations=10,alpha=0.1):
for iter in range(iterations):
error = 0
n = 0
for i in range(max(len(positives),len(negatives))):
error += np.abs(self.learn(positives[i % len(positives)],1,alpha))
error += np.abs(self.learn(negatives[i % len(negatives)],0,alpha))
n += 2
print("Iter:" + str(iter) + " Loss:" + str(error / float(n)))
def softmax(self,x):
return1/(1+np.exp(-x))
def encrypt(self,pubkey,scaling_factor=1000):
if(not self.encrypted):
self.pubkey = pubkey
self.scaling_factor = float(scaling_factor)
self.encrypted_weights = list()
for weight in model.weights:
self.encrypted_weights.append(self.pubkey.encrypt(\
int(min(weight,self.maxweight) * self.scaling_factor)))
self.encrypted = True
self.weights = None
return self
def predict(self,email):
if(self.encrypted):
return self.encrypted_predict(email)
else:
return self.unencrypted_predict(email)
def encrypted_predict(self,email):
pred = self.pubkey.encrypt(0)
for word in email:
pred += self.encrypted_weights[self.word2index[word]]
return pred
def unencrypted_predict(self,email):
pred = 0
for word in email:
pred += self.weights[self.word2index[word]]
pred = self.softmax(pred)
return pred
def learn(self,email,target,alpha):
pred = self.predict(email)
delta = (pred - target)# * pred * (1 - pred)
for word in email:
self.weights[self.word2index[word]] -= delta * alpha
return delta
model = HomomorphicLogisticRegression(spam[0:-1000],ham[0:-1000],iterations=10)
encrypted_model = model.encrypt(pubkey)
# 生成加密預(yù)測。接著解密它們,并進(jìn)行評(píng)估。
fp = 0
tn = 0
tp = 0
fn = 0
for i,h in enumerate(ham[-1000:]):
encrypted_pred = encrypted_model.predict(h)
try:
pred = prikey.decrypt(encrypted_pred) / encrypted_model.scaling_factor
if(pred < 0):
tn += 1
else:
fp += 1
except:
print("overflow")
if(i % 10 == 0):
sys.stdout.write(' I:'+str(tn+tp+fn+fp) + " % Correct:" + str(100*tn/float(tn+fp))[0:6])
for i,h in enumerate(spam[-1000:]):
encrypted_pred = encrypted_model.predict(h)
try:
pred = prikey.decrypt(encrypted_pred) / encrypted_model.scaling_factor
if(pred > 0):
tp += 1
else:
fn += 1
except:
print("overflow")
if(i % 10 == 0):
sys.stdout.write(' I:'+str(tn+tp+fn+fp) + " % Correct:" + str(100*(tn+tp)/float(tn+tp+fn+fp))[0:6])
sys.stdout.write(' I:'+str(tn+tp+fn+fp) + " % Correct:" + str(100*(tn+tp)/float(tn+tp+fn+fp))[0:6])
print(" Encrypted Accuracy: %" + str(100*(tn+tp)/float(tn+tp+fn+fp))[0:6])
print("False Positives: %" + str(100*fp/float(tp+fp))[0:4] + " <- privacy violation level")
print("False Negatives: %" + str(100*fn/float(tn+fn))[0:4] + " <- security risk level")
輸出:
Generating paillier keypair
Importing dataset from disk...
Iter:0Loss:0.0455724486216
Iter:1Loss:0.0173317643148
Iter:2Loss:0.0113520767678
Iter:3Loss:0.00455875940625
Iter:4Loss:0.00178564065045
Iter:5Loss:0.000854385076612
Iter:6Loss:0.000417669805378
Iter:7Loss:0.000298985174998
Iter:8Loss:0.000244521525096
Iter:9Loss:0.000211014087681
I:2000 % Correct:99.296
EncryptedAccuracy: %99.2
FalsePositives: %0.0 <- privacy violation level
FalseNegatives: %1.57 <- security risk level
這個(gè)模型相當(dāng)特別(而且很快!……在我的筆記本上,單線程運(yùn)行,每秒可以處理大約1000封郵件)。注意我們?cè)陬A(yù)測時(shí)沒有使用sigmoid(僅在訓(xùn)練時(shí)使用了sigmoid),因?yàn)槠浜蟮拈撝禐?.5. 因此,測試時(shí)我們可以簡單地跳過sigmoid,并將之后的閾值設(shè)為0. 好了,已經(jīng)談了夠多技術(shù)方面的內(nèi)容了,讓我們回到Bob那里。
Bob之前遇到的問題是人們可以看到預(yù)測并偽造預(yù)測。然而,現(xiàn)在所有預(yù)測都是加密的。
此外,Bob之前還遇到人們讀取權(quán)重并逆向工程的問題。然而,現(xiàn)在所有權(quán)重也是加密的(并且可以在加密狀態(tài)下預(yù)測)!
這一模型具有很多我們想要的性質(zhì)。它可以被第三方審計(jì),預(yù)測是加密的,對(duì)于想要竊取/愚弄這一系統(tǒng)的人來說,它的智能也是加密的。除此之外,它相當(dāng)精確(測試數(shù)據(jù)集上沒有假陽性結(jié)果),也很快。
六、創(chuàng)建安全犯罪檢測
讓我們考慮下這樣的模型對(duì)執(zhí)法部門來說意味著什么。今時(shí)今日,為了預(yù)測謀殺和恐怖襲擊之類的事件,執(zhí)法部門需要不受限制地訪問數(shù)據(jù)流。因此,為了檢測在數(shù)據(jù)中有0.0001%的可能性發(fā)生的事件,執(zhí)法部門需要訪問100%的數(shù)據(jù),將這些數(shù)據(jù)轉(zhuǎn)到一個(gè)秘密的數(shù)據(jù)倉庫,(我假定)數(shù)據(jù)倉庫中部署了機(jī)器學(xué)習(xí)模型。
然而,這些現(xiàn)在用來識(shí)別犯罪的機(jī)器學(xué)習(xí)模型其實(shí)可以加密自身,并部署在數(shù)據(jù)流上(例如,聊天應(yīng)用)。執(zhí)法部門僅僅訪問模型的預(yù)測,而不是訪問整個(gè)數(shù)據(jù)集。這類似機(jī)場中的緝毒犬。緝毒犬消除了執(zhí)法部門搜查每個(gè)人的箱包以尋找可卡因的需要。相反,狗通過訓(xùn)練(如同機(jī)器學(xué)習(xí)模型一樣)可以排他性地檢測毒品的存在。叫 == 有毒品。不叫 == 沒毒品。陽性的神經(jīng)網(wǎng)絡(luò)預(yù)測意味著“在這個(gè)手機(jī)上策劃一場恐怖活動(dòng)”,陰性的神經(jīng)網(wǎng)絡(luò)預(yù)測意味著“不在這個(gè)手機(jī)上策劃恐怖活動(dòng)”。執(zhí)法部門不需要看到數(shù)據(jù)。他們只需要這一個(gè)數(shù)據(jù)點(diǎn)。此外,由于模型是分散的智能,它可以被獨(dú)立地評(píng)估以確保它只檢測需要檢測之物(正如我們可以通過評(píng)估緝毒犬在測試中的精確度以獨(dú)立地審計(jì)緝毒犬用來訓(xùn)練什么)。然而,和緝毒犬不同,加密人工智能可以提供檢測任何可由電子證據(jù)檢測出的犯罪的能力。
審計(jì)考量 所以,我們應(yīng)該信任誰進(jìn)行審計(jì)?我不是一個(gè)政治科學(xué)專家,所以我將把這個(gè)問題留給其他人。然而,我認(rèn)為,第三方監(jiān)察人,政府雇員,甚至開源軟件開發(fā)者可以承擔(dān)這一角色。如果每種檢測器有足夠多的版本,惡意用戶要找出部署的是哪個(gè)版本會(huì)很困難(因?yàn)樗鼈兪羌用艿模?。我想這里有許多可行的選項(xiàng),審計(jì)實(shí)體的問題已經(jīng)有很多人討論過了,因此我將把這部分留給專家。
倫理考量 文藝作品對(duì)導(dǎo)致直接定罪的犯罪預(yù)測的倫理和道德影響有很多評(píng)論(比如《少數(shù)派報(bào)告》)。然而,犯罪預(yù)測的主要價(jià)值不在于高效的懲罰和監(jiān)禁,而在于預(yù)防傷害。因此,有兩種微不足道的方法可以防止這一倫理困境。首先,大部分重大犯罪需要一些較輕的犯罪作為預(yù)備,通過更精確地檢測較輕的犯罪預(yù)測重大犯罪可以避免許多道德困境。其次,預(yù)防犯罪的技術(shù)可以被用來優(yōu)化警力資源分配,觸發(fā)搜查/調(diào)查的方法。一個(gè)陽性的預(yù)測應(yīng)該導(dǎo)致調(diào)查,而不是直接把人投入監(jiān)獄。
法律考量 United States v. Place案判決,由于緝毒犬能夠排他性地檢測毒品的氣味(而不檢測其他東西),使用緝毒犬不認(rèn)為是“搜查”。換句話說,由于它們可以在無需居民泄露其他信息的情況下分類犯罪,它不認(rèn)為是對(duì)隱私的侵犯。此外,我認(rèn)為公眾對(duì)此的一般看法和法律是一致的。在機(jī)場中,一個(gè)毛茸茸的狗狗過來快速地嗅了下你的袋子是非常高效的保護(hù)隱私的監(jiān)控形式。說來也怪,狗無疑可以訓(xùn)練來檢測你包中任何令人尷尬的東西。然而,它僅僅訓(xùn)練檢測犯罪的跡象。同樣,智能體可以訓(xùn)練僅僅檢測犯罪的跡象,而不檢測其他東西。因此,達(dá)到足夠精確度的模型,其法律地位應(yīng)該比照緝毒犬。
腐敗考量 也許你想問:“為何在這方面進(jìn)行創(chuàng)新?為何提出新的監(jiān)控方法?我們受到的監(jiān)控還不多嗎?”我的回答是:企業(yè)或政府應(yīng)當(dāng)無法監(jiān)控任何沒有傷害他人的人(無辜者)。相反地,我們想要檢測任何即將傷害他人的人,以阻止他們。在最近的技術(shù)進(jìn)展之前,這兩者明顯無法同時(shí)達(dá)到。本文想要主張:我相信在技術(shù)上同時(shí)保障安全和隱私是可行的。我的意思是,隱私不取決于當(dāng)局的突發(fā)奇想,而取決于像加密人工智能一樣的可審計(jì)的技術(shù)。該由誰負(fù)責(zé)審計(jì)這一技術(shù),而不泄露給惡意之人?我不確定。也許是第三方監(jiān)察機(jī)構(gòu)。也許這會(huì)是人們可以選擇加入的系統(tǒng)(就像煙霧報(bào)警器),然后通過社會(huì)契約讓人們避免接觸那些不加入的人。也許它完全通過開源的方式開發(fā),但是足夠有效,無法被繞過?這是問題值得進(jìn)一步討論。本文不是一個(gè)完整的解決方案。社會(huì)結(jié)構(gòu)和政府結(jié)構(gòu)無疑需要為這類工具作出調(diào)整。然而,我相信這是一個(gè)值得追尋的目標(biāo),我也期待本文引起的討論。
七、以后的工作
首先,也是首要的,我們需要有主流深度學(xué)習(xí)框架(PyTorch、TensorFlow、Keras等)支持的現(xiàn)代的浮點(diǎn)向量同態(tài)加密算法(FV、YASHE等)。其次,探索如何提升這些算法的速度和安全性是一項(xiàng)高度創(chuàng)新和極其重要的工作。最后,我們需要設(shè)想社會(huì)結(jié)構(gòu)可以如何配合這些新的工具,在不侵犯隱私的前提下保護(hù)人們的安全(并繼續(xù)降低當(dāng)局濫用此項(xiàng)技術(shù)的風(fēng)險(xiǎn))。