成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Concrete ML為模型訓練和推理確保端到端隱私 原創

發布于 2024-9-19 18:44
瀏覽
0收藏

本文介紹了使用完全同態加密(FHE)為scikit-learn聯合訓練模型和加密推理確保端到端隱私。

在云計算和基于機器學習的服務唾手可得的時代,隱私是一大挑戰。將端到端隱私添加到協作式機器學習用例聽起來像是一項艱巨的任務。幸好,諸如完全同態加密(FHE)之類的密碼學突破提供了解決方案。Zama的新演示展示了如何利用開源機器學習工具使用聯合學習和FHE來添加端到端隱私。這篇博文解釋了這番演示的底層工作機理,結合了scikit-learn、聯合學習和FHE。

FHE這種技術使應用程序提供方能夠構建基于云的應用程序以保護用戶隱私,而Concrete ML這種機器學習工具包可以讓模型改而使用FHE。Concrete ML利用了scikit-learn中強大穩健的模型訓練算法來訓練與FHE兼容的模型,無需任何密碼學知識。

Concrete ML使用scikit-learn作為構建與FHE兼容的模型的基礎,這是由于scikit-learn擁有出色的易用性、可擴展性、健壯性以及用于構建、驗證和調整數據管道的眾多工具。雖然深度學習在非結構化數據上表現良好,但它通常需要超參數調優才能達到高精度。在許多用例中,特別是針對結構化數據,scikit-learn憑借其訓練算法的穩健性表現出色。

本地訓練模型,并安全地部署

當數據科學家擁有所有訓練數據時,訓練很安全,因為沒有數據離開機器,并且在部署模型時只需要確保推理安全。然而,用FHE保護的推理的訓練模型對模型訓練實施了一定的限制。雖然過去使用FHE需要密碼學專業知識,但像Concrete ML這樣的工具將密碼學這部分屏蔽起來,使數據科學家可以享用FHE。此外,FHE增加了計算開銷,這意味著機器學習模型可能需要針對準確性和運行時延遲進行調整。Concrete ML使用scikit-learn實用程序類(比如GridSearchCV)充分利用參數搜索,從而使這種調整變得很容易。

若使用Concrete ML本地訓練模型,語法對scikit-learn來說一樣,可以在??視頻??教程中找到解釋。如果是MNIST上的邏輯回歸模型,只需運行以下代碼片段:

from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split

mnist_dataset = fetch_openml("mnist_784")

x_train, x_test, y_train, y_test = train_test_split(
    mnist_dataset.data, 
    mnist_dataset.target.astype("int"), 
    test_size=10000,
) 

接下來,擬合Concrete ML邏輯回歸模型,該模型是scikit-learn等效模型的臨時替代品。只需要一個額外的步驟:編譯,就可以生成對加密數據執行推理的FHE計算電路。編譯由Concrete完成,它是將程序變成FHE等效程序的過程,直接處理加密后的數據。

from concrete.ml.sklearn.linear_model import LogisticRegression

model = LogisticRegression(penalty="l2")
model.fit(X=x_train, y=y_train)
model.compile(x_train)

現在測試模型針對加密數據執行時的準確性。該模型的準確率約為92%。與scikit-learn一樣,Concrete ML支持其他許多線性模型,比如SVM、Lasso和ElasticNet,你通過簡單地更改模型類就可以使用它們。此外,還支持等效scikit-learn模型的所有超參數(如上面代碼片段中的penalty)。

from sklearn.metrics import accuracy_score
y_preds_clear = model.predict(x_test, fhe="execute")
print(f"The test accuracy of the model on encrypted data {accuracy_score(y_test, y_preds_clear):.2f}")

用于訓練數據隱私的聯合學習

通常,在有許多用戶的生產系統中,機器學習模型需要針對所有用戶數據的集合進行訓練,同時保留每個用戶的隱私。這種場景下的常見用例包括數字健康、垃圾郵件檢測、在線廣告,甚至更簡單的用例,比如下一個單詞預測輔助。

Concrete ML可以導入由??Flower??等工具使用聯合學習(FL)訓練的模型。要使用FL訓練與上述相同的模型,必須定義一個客戶端應用程序和服務器應用程序。首先,客戶端由partition_id標識,partition_id是一個介于0和客戶端數量之間的數字。要分割MNIST數據集并獲得當前客戶端的切片,應使用Flower federated_utils軟件包。

(X_train, y_train) = federated_utils.partition(X_train, y_train, 10)[partition_id]

現在定義訓練客戶端邏輯:

import flwr as fl
from sklearn.linear_model import LogisticRegression

# Create LogisticRegression Model
model = LogisticRegression(
    penalty="l2",
    warm_start=True,  # prevent refreshing weights when fitting
)

federated_utils.set_initial_params(model)

class MnistClient(fl.client.NumPyClient):
    def get_parameters(self, config):  # type: ignore
        return federated_utils.get_model_parameters(model)

    def fit(self, parameters, config):  # type: ignore
        federated_utils.set_model_params(model, parameters)
        model.fit(X_train, y_train)
        print(f"Training finished for round {config['server_round']}")
        return federated_utils.get_model_parameters(model), len(X_train), {}

    def evaluate(self, parameters, config):  # type: ignore
        federated_utils.set_model_params(model, parameters)
        loss = log_loss(y_test, model.predict_proba(X_test))
        accuracy = model.score(X_test, y_test)
        return loss, len(X_test), {"accuracy": accuracy}

# Start Flower client
fl.client.start_numpy_client(
    server_address="0.0.0.0:8080",
    client=MnistClient()
)

最后,必須創建一個典型的Flower服務器實例:

model = LogisticRegression()
federated_utils.set_initial_params(model)
strategy = fl.server.strategy.FedAvg()

fl.server.start_server(
    server_address="0.0.0.0:8080",
    strategy=strategy,
    config=fl.server.ServerConfig(num_rounds=5),
)

訓練停止后,客戶端或服務器可以將模型存儲到文件中:

with open("model.pkl", "wb") as file:
    pickle.dump(model, file)

一旦模型得到訓練,就可以從pickle文件中加載它,并將其轉換成Concrete ML模型,以啟用保護隱私的推理。實際上,Concrete ML既可以訓練新模型(如上文所示),也可以轉換現有模型(比如FL創建的模型)。使用from_sklearn_model函數的這個轉換步驟在下面用于使用聯合學習訓練的模型上。該??視頻??進一步解釋了如何使用該函數。

with path_to_model.open("rb") as file:
    sklearn_model = pickle.load(file)

compile_set = numpy.random.randint(0, 255, (100, 784)).astype(float)

sklearn_model.classes_ = sklearn_model.classes_.astype(int)

from concrete.ml.sklearn.linear_model import LogisticRegression
model = LogisticRegression.from_sklearn_model(sklearn_model, compile_set)
model.compile(compile_set)

至于本地訓練,使用一些測試數據評估該模型:

from sklearn.metrics import accuracy_score

y_preds_enc = model.predict(x_test, fhe="execute")

print(f"The test accuracy of the model on encrypted data {accuracy_score(y_test, y_preds_enc):.2f}")

總之,使用scikit-learn、Flower和Concrete ML,只需要幾行代碼,就可以以完全保護隱私的方式訓練模型并預測新數據:數據集片段是保密的,預測針對加密數據執行。這里訓練的模型針對加密數據執行時達到了92%的準確率。

結論

上面討論了基于Flower和Concrete ML的完整端到端專有訓練演示的最重要步驟。你可以在我們的開源代碼存儲庫中找到??所有源代碼??。與scikit-learn兼容使Concrete ML的用戶能夠使用熟悉的編程模式,并便于與scikit-learn兼容的工具包(比如Flower)兼容。本文中的示例僅對原始scikit-learn管道進行了一些更改,表明了如何使用聯合學習和FHE為使用MNIST訓練分類器增添端到端隱私。

原文標題:End-to-end privacy for model training and inference with Concrete ML

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 亚洲国产欧美精品 | 日韩欧美在线观看 | 国产伦一区二区三区四区 | 日本精品视频 | 99精品久久久久 | 国产不卡一区在线观看 | 成人免费视频网站在线看 | 黄色一级大片在线免费看产 | 日韩精品一区二区三区在线观看 | 国产成人免费视频网站高清观看视频 | 国产一区h | 777zyz色资源站在线观看 | www国产成人免费观看视频,深夜成人网 | 日本xx视频免费观看 | 精品日韩 | 亚洲精品国产综合区久久久久久久 | 久久精品免费观看 | 亚洲精品一区二区三区在线 | 欧美成人精品欧美一级 | 二区欧美| 天天操操 | 免费爱爱视频 | 久草视频观看 | 成人一区二区三区在线观看 | 国产在线精品一区二区 | av一区二区三区在线观看 | 日韩精品极品视频在线观看免费 | 很黄很污的网站 | 亚洲一区 中文字幕 | 狠狠草视频 | 日韩在线观看中文字幕 | 日韩电影免费在线观看中文字幕 | 欧美成人高清 | 天堂综合网久久 | 久久精彩视频 | 国产高清视频一区 | 搞av.com| 一区二区高清 | 情侣黄网站免费看 | www.五月婷婷.com | 性高湖久久久久久久久3小时 |