隱私AI實戰案例(二):基於Rosetta的人臉識別行業應用場景

買賣虛擬貨幣

此前我們透過基於Rosetta的隱私保護多方金融聯合AI建模場景,瞭解了Rosetta在金融行業中的實際應用。實際上,隱私開源框架Rosetta可應用範圍極廣,各行各業中需要在隱私保護下聯合建模的場景中,都會用到Rosetta。下面我們從人臉識別的應用場景中解析Rosetta的實際應用。

現實中有一類典型的場景是一方有資料,一方有模型引數。都很需要彼此,但因為資料與引數的敏感性,又顯得“貌合神離”。

比如,一家專注AI視覺演算法的公司A有一套先進的人臉識別模型,並且模型引數在不斷的迭代最佳化中,其服務可以透過RESTful API來訪問。而另一家公司B需要基於人臉識別系統構建自己的使用者認證系統,但是使用者的人臉影象等敏感資料不能洩露。

此時A方和B方如果需要進行合作,由於隱私方面的問題會存在困難,B不能用自己明文的人臉影象作為輸入直接呼叫A的介面,因為很容易將人臉影象資料暴露給了對方,而且很難知道雙方會不會用資料和引數去做別的事情。而基於Rosetta提供的隱私AI框架可以輕鬆解決這個難點。

基於Rosetta只需要本地先呼叫加密轉換的介面,將本地待處理資料集和模型引數都加密後,就可以在後面的複雜模型上執行。B公司完全不會洩露自己這些敏感的人臉影象資料,A公司也不會洩露屬於自己公司核心資產的這些模型引數。由於篇幅限制,我們仍以上述LR簡單模型來示例,假定A公司角色是P0,B公司角色是P1,而P2只需要是一個臨時的無輸入、無輸出的輔助節點。可以對基於安全多方計算技術的整套業務過程進行加速。

import latticex.rosetta as rtt
import os
import csv
import tensorflow as tf
import numpy as np
from util import read_dataset
# load P0's private feature data to be predicted.
file_feature = 'test_feature.csv'
cipher_feature= rtt.SecureDataSet().load_X(file_feature, header=None)
DIM_NUM = cipher_feature.shape[1]
X = tf.placeholder(tf.float64, [None, DIM_NUM])
if rtt.get_party_id() == 0:
    model_W = np.loadtxt('W.txt')
    model_b = np.loadtxt('b.txt')
else:
    model_W = None
    model_b = None
# initialize model W & b with P1's private data
W = rtt.private_input(1, model_W)
b = rtt.private_input(1, model_b)
# predict with model
pred_Y = tf.sigmoid(tf.matmul(X, W) + b)
# for demo, only P0 can get this plain result
plain_Y = rtt.SecureReveal(pred_Y, 1)
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    # predict
    Y_cipher, Y_plain = sess.run([pred_Y, plain_Y], feed_dict={X: cipher_feature})
    print("cipher Y:", Y_cipher)
    print("plain Y:", Y_plain)

在這裡透過Rosetta的隱私資料處理介面,分別指定了各方輸入自己的隱私資料,然後就可以和原生TensorFlow一樣,執行模型預測的任務了。

我們可以在最後列印一下輸出的密文值和明文值看一下效果(注意我們指定了只有P0(即A方)才可以返回明文結果)。

以下為A方的輸出:

以下為B方的輸出:

可以看出A方按照預期順利地拿到了預測的結果,而且在整個計算過程中,A方的模型引數不會暴露,B方的明文資料也不會暴露。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;