通過zkSNARKs 證明機器學習(ML) 模型推理有望成為這十年智能合約最重要的進步之一。這一發展開闢了一個令人興奮的大設計空間,允許應用程序和基礎設施發展成為更複雜和智能的系統。
通過添加ML 功能,智能合約可以變得更加自主和動態,允許它們根據實時鏈上數據而不是靜態規則做出決策。智能合約將是靈活的,可以適應各種場景,包括那些在最初創建合約時可能沒有預料到的場景。簡而言之,ML 功能將擴大我們放在鏈上的任何智能合約的自動化、準確性、效率和靈活性。
ML 在web3 之外的大多數應用程序中被廣泛應用,在智能合約中的應用幾乎是零。其主要是由於在鏈上運行這些模型的計算成本很高。例如,FastBERT 是一種計算優化語言模型,使用約1800 MFLOPS(百萬浮點運算),這無法直接在EVM 上運行。
鏈上ML 模型的應用,主要關注的是推理階段:應用模型對真實世界的數據進行預測。為了擁有ML 規模的智能合約,合約必須能夠攝取此類預測,但正如我們之前提到的,直接在EVM 上運行模型是不可行的。 zkSNARKs 為我們提供了一個解決方案:任何人都可以在鏈下運行一個模型,並生成一個簡潔且可驗證的證明,表明預期的模型確實產生了特定的結果。該證明可以在鏈上發布並由智能合約攝取以增強其智能。
在這篇文章中,我們將:
-
查看鏈上ML 的潛在應用程序和用例
-
探索zkML 核心的新興項目和基礎設施建設
-
討論現有實現的一些挑戰以及zkML 的未來會是什麼樣子
機器學習(ML)簡介
機器學習(ML)是人工智能(AI)的一個子領域,專注於開發能夠讓計算機從數據中學習並進行預測或決策的算法和統計模型。 ML 模型通常具有三個主要組成部分:
-
訓練數據:一組用於訓練機器學習算法進行預測或對新數據進行分類的輸入數據。訓練數據可以採用多種形式,如圖像、文本、音頻、數值數據或其組合。
-
模型架構:機器學習模型的整體結構或設計。它定義了層次結構、激活函數和節點或神經元之間的連接類型和數量。架構的選擇取決於具體的問題和使用的數據。
-
模型參數:模型在訓練過程中學習的值或權重,用於進行預測。這些值通過優化算法進行迭代調整,以最小化預測結果與實際結果之間的誤差。
模型的生成和部署分為兩個階段:
-
訓練階段:在訓練階段,模型會接觸到一個帶標籤的數據集,並調整其參數以最小化預測結果與實際結果之間的誤差。訓練過程通常涉及多次迭代或週期,模型的準確性會在單獨的驗證集上進行評估。
-
推理階段:推理階段是使用經過訓練的機器學習模型對新的未見數據進行預測的階段。模型接收輸入數據,並應用學習到的參數生成輸出,如分類或回歸預測。
目前,zkML 主要關注於機器學習模型的推理階段,而不是訓練階段,主要是由於驗證電路中訓練的計算複雜性。然而,zkML 對推理的關注並不是一種限制:我們預計將會產生一些非常有趣的用例和應用。
已驗證的推理場景
驗證推理有四種可能的場景:
-
私有輸入,公共模型。模型消費者(MC) 可能希望對模型提供者(MP) 保密他們的輸入。例如,MC 可能希望在不披露其個人財務信息的情況下向貸方證明信用評分模型的結果。這可以使用預先承諾方案並在本地運行模型來完成。
-
公共輸入,私有模型。 ML-as-a-Service 的一個常見問題是MP 可能希望隱藏其參數或權重以保護其IP,而MC 想要驗證生成的推理確實來自對抗設置中的指定模型. 這樣想:當向MC 提供推理時,MP 有動機運行更輕的模型以節省成本。使用鏈上模型權重的承諾,MC 可以隨時審核私有模型。
-
私有輸入,私有模型。當用於推理的數據高度敏感或機密,並且模型本身被隱藏以保護IP 時,就會出現這種情況。這方面的一個例子可能包括使用私人患者信息審核醫療保健模型。 zk 中的組合技術或使用多方計算(MPC) 或FHE 的變體可用於服務此場景。
-
公共輸入,公共模型。當模型的所有方面都可以公開時,zkML 解決了一個不同的用例:將鏈下計算壓縮和驗證到鏈上環境。對於較大的模型,驗證推理的簡潔zk 證明比自己重新運行模型更具成本效益。
驗證的 ML 推理為智能合約開闢了新的設計空間。一些加密原生應用包括:
1、DeFi
可驗證的鏈下 ML 預言機。繼續採用生成式人工智能可能推動行業實施其內容的簽名方案(例如,新聞出版物簽署文章或圖像)。簽名數據準備好進行零知識證明,使數據可組合且可信。 ML 模型可以在鏈下處理這些簽名數據以進行預測和分類(例如,對選舉結果或天氣事件進行分類)。這些鏈下 ML 預言機可以通過驗證推理並在鏈上發布證明來無需信任地解決現實世界的預測市場、保險協議合約等問題。
基於 ML 參數的 DeFi 應用。 DeFi 的許多方面可以更加自動化。例如,借貸協議可以使用 ML 模型實時更新參數。目前,借貸協議主要依賴由組織運行的鏈下模型來確定抵押因子、貸款價值比、清算閾值等,但更好的選擇可能是社區訓練的開源模型,任何人都可以運行和驗證。
自動化交易策略。展示金融模型策略的回報特徵的常見方式是 MP 向投資者提供各種回測數據。然而,沒有辦法在執行交易時驗證策略師是否遵循該模型- 投資者必須信任策略師確實遵循模型。 zkML 提供了一個解決方案,MP 可以在部署到特定頭寸時提供金融模型推理的證明。這對於 DeFi 管理的保險庫可能尤其有用。
2、安全性
智能合約的欺詐監控。與其讓緩慢的人工治理或中心化參與者控制暫停合約的能力,可以使用 ML 模型來檢測可能的惡意行為並暫停合約。
3、傳統 ML
分散的、無信任的 Kaggle 實現。可以創建一個協議或市場,允許 MC 或其他感興趣的方驗證模型的準確性,而無需 MP 披露模型權重。這對於銷售模型、圍繞模型準確性進行競賽等方面非常有用。
生成式 AI 的去中心化提示市場。生成式 AI 的提示創作已經發展成為一門複雜的工藝,最佳輸出生成提示通常具有多個修改器。外部方可能願意從創作者那裡購買這些複雜的提示。 zkML 在這裡可以有兩種用法: 1 )驗證提示的輸出,以向潛在買家確保提示確實創建所需的圖像;
2 )允許提示所有者在購買後保持對提示的所有權,同時對買家保持模糊,但仍為其生成經過驗證的圖像。
4、身份
用保護隱私的生物識別認證替代私鑰。私鑰管理仍然是web3用戶體驗中最大的障礙之一。通過面部識別或其他獨特因素抽象私鑰是 zkML 的一種可能解決方案。
公平的空投和貢獻者獎勵。可以使用 ML 模型創建用戶的詳細人物畫像,根據多個因素確定空投分配或貢獻獎勵。當與身份解決方案結合使用時,這可能特別有用。在這種情況下,一種可能性是讓用戶運行一個開源模型,評估他們在應用程序中的參與情況以及更高層次的參與,比如治理論壇的帖子,以推理他們的分配。然後提供這個證明給合約,以獲得相應的代幣分配。
5、Web3社交
用於web3社交媒體的過濾。 web3社交應用的去中心化性質將導致垃圾信息和惡意內容的增加。理想情況下,社交媒體平台可以使用一個社區共識的開源 ML 模型,並在選擇過濾帖子時發布模型推理的證明。案例:關於 Twitter 算法的 zkML 分析。
廣告/推薦。作為一個社交媒體用戶,我可能願意看到個性化的廣告,但希望將我的偏好和興趣對廣告商保密。我可以選擇在本地運行一個關於我的興趣的模型,將其輸入到媒體應用程序中為我提供內容。在這種情況下,廣告商可能願意為最終用戶支付費用,以實現這一點,然而,這些模型可能遠不如目前生產中的定向廣告模型複雜。
6、創作者經濟/遊戲
遊戲內經濟再平衡。可以使用 ML 模型動態調整代幣發行、供應、銷毀、投票門檻等。一個可能的模型是一個激勵合約,如果達到一定的再平衡門檻並驗證了推理的證明,就會重新平衡遊戲內經濟。
新類型的鏈上游戲。可以創建合作的人類對抗 AI 遊戲和其他創新的鏈上游戲,其中無信任的 AI 模型充當一個不可玩的角色。 NPC 採取的每個動作都會與一個任何人都可以驗證的證明一起發佈到鏈上,以確定正在運行正確的模型。在 Modulus Labs 的 Leela vs. the World 中,驗證者希望確保所述的 1900 ELO AI 選擇棋步,而不是 Magnus Carlson。另一個例子是 AI Arena,一個類似於 Super Smash Brothers 的 AI 格鬥遊戲。在高風險的競爭環境中,玩家希望確保他們訓練的模型沒有乾擾或作弊。
新興項目和基礎設施
zkML 生態系統可以廣泛分為四個主要類別:
-
模型到證明編譯器:將現有格式(例如 Pytorch、ONNX 等)的模型編譯成可驗證的計算電路的基礎設施。
-
廣義證明系統:構建用於驗證任意計算軌蹟的證明系統。
-
zkML 特定的證明系統:專門構建用於驗證 ML 模型計算軌蹟的證明系統。
-
應用程序:致力於獨特 zkML 用例的項目。
01 模型驗證編譯器(Model-to-Proof Compilers)
在 zkML 生態系統中,大部分關注都集中在創建模型到證明編譯器上。通常,這些編譯器將使用 Pytorch、Tensorflow 等高級 ML 模型轉換為 zk 電路。
EZKL 是一個庫和命令行工具,用於在 zk-SNARK 中進行深度學習模型的推理。使用 EZKL,您可以在 Pytorch 或 TensorFlow 中定義一個計算圖,並將其導出為帶有 JSON 文件中一些示例輸入的 ONNX 文件,然後將 EZKL 指向這些文件以生成 zkSNARK 電路。通過最新一輪的性能改進,EZKL 現在可以在約 6 秒和 1.1 GB 的 RAM 內證明一個 MNIST 大小的模型。迄今為止,EZKL 已經得到了一些顯著的早期採用,被用作各種黑客馬拉松項目的基礎設施。
Cathie So 的 circomlib-ml 庫包含了用於 Circom 的各種 ML 電路模板。電路包括一些最常見的 ML 函數。由 Cathie 開發的 Keras 2c ircom 是一個 Python 工具,使用底層的 circomlib-ml 庫將 Keras 模型轉換為 Circom 電路。
LinearA 開發了兩個用於 zkML 的框架:Tachikoma 和 Uchikoma。 Tachikoma 用於將神經網絡轉換為僅使用整數的形式並生成計算軌跡。 Uchikoma 是一個工具,將 TVM 的中間表示轉換為不支持浮點運算的編程語言。 LinearA 計劃支持使用域算術的 Circom 和使用有符號和無符號整數算術的 Solidity。
Daniel Kang 的 zkml 是一個基於他在《Scaling up Trustless DNN Inference with Zero-Knowledge Proofs》論文中的工作構建的 ML 模型執行證明的框架。在撰寫本文時,它能夠在約 5 GB 的內存和約 16 秒的運行時間內證明一個 MNIST 電路。
在更廣義的模型到證明編譯器方面,有 Nil Foundation 和 Risc Zero。 Nil Foundation 的 zkLLVM 是一個基於 LLVM 的電路編譯器,能夠驗證用流行編程語言(如 C++、Rust 和 JavaScript/TypeScript 等)編寫的計算模型。與這裡提到的其他模型到證明編譯器相比,它是通用的基礎設施,但仍適用於復雜的計算,如 zkML。當與他們的證明市場結合使用時,這可能尤為強大。
Risc Zero 構建了一個通用的 zkVM,針對開源的 RISC-V 指令集,因此支持現有成熟的語言,如 C++和 Rust,以及 LLVM 工具鏈。這允許在主機和客戶 zkVM 代碼之間實現無縫集成,類似於 Nvidia 的 CUDA C++工具鏈,但是使用 ZKP 引擎代替 GPU。與 Nil 類似,使用 Risc Zero 可以驗證 ML 模型的計算軌跡。
02 廣義證明系統
證明系統的改進是使zkML 取得成果的主要推動力,特別是自定義門和查找表的引入。這主要是由於ML 對非線性的依賴。簡而言之,非線性是通過激活函數(例如ReLU、sigmoid 和tanh)引入的,這些激活函數應用於神經網絡中線性變換的輸出。由於數學運算門的限制,這些非線性在zk 電路中實現起來具有挑戰性。按位分解和查找表可以通過將非線性的可能結果預先計算到查找表中來幫助解決這個問題,有趣的是,這在zk 中的計算效率更高。
出於這個原因,Plonkish 證明系統往往是zkML 最受歡迎的後端。 Halo 2 和Plonky 2 及其表式算術方案可以通過查找參數很好地處理神經網絡非線性。此外,前者擁有充滿活力的開發人員工俱生態系統和靈活性,使其成為包括EZKL 在內的許多項目的實際後端。
其他證明系統也有其優勢。基於 R 1 CS 的證明系統包括 Groth 16 ,因其小型證明尺寸而聞名,以及 Gemini,因其處理極大電路和線性時間驗證器而聞名。基於 STARK 的系統,例如 Winterfell 證明器/驗證器庫,尤其在通過 Giza 的工具將 Cairo 程序的追踪作為輸入,並使用 Winterfell 生成 STARK 證明來驗證輸出的正確性時,非常有用。
03 zkML 特定的證明系統
在設計能夠處理先進的機器學習模型的複雜、電路不友好的操作的高效證明系統方面已經取得了一些進展。基於 GKR 證明系統的 zkCNN 和基於組合技術的 Zator 等系統往往比通用證明系統更具性能,這一點在 Modulus Labs 的基準測試報告中有所體現。
zkCNN 是一種使用零知識證明來證明卷積神經網絡正確性的方法。它使用 sumcheck 協議來證明快速傅里葉變換和卷積,具有線性的證明時間,比漸近計算結果更快。已經引入了幾個改進和泛化的交互證明,包括驗證卷積層、ReLU 激活函數和最大池化。根據 Modulus Labs 的基準測試報告,zkCNN 特別有趣的地方在於它在證明生成速度和 RAM 消耗方面優於其他通用證明系統。
Zator 是一個旨在探索使用遞歸 SNARK 來驗證深度神經網絡的項目。驗證更深層次模型的當前限制是將整個計算軌跡適應單個電路中。 Zator 提出使用遞歸 SNARK 逐層進行驗證,可以逐步驗證 N 步重複計算。他們使用 Nova 將 N 個計算實例減少為一個可以通過單個步驟進行驗證的實例。採用這種方法,Zator 能夠對具有 512 層的網絡進行 SNARK,這與大多數當前的生產 AI 模型一樣深。 Zator 的證明生成和驗證時間仍然對於主流應用案例來說過長,但他們的組合技術仍然是非常有趣的。
應用領域
鑑於 zkML 處於早期階段,其關注點主要集中在上述基礎設施上。然而,目前也有一些項目致力於應用開發。
Modulus Labs 是 zkML 領域中最多樣化的項目之一,他們既開展示例應用,也從事相關研究。在應用方面,Modulus Labs 通過 RockyBot(一個鏈上交易機器人)和 Leela vs. the World(一個人類與經過驗證的鏈上 Leela 國際象棋引擎對戰的棋盤遊戲)展示了 zkML 的用例。該團隊還進行了研究,編寫了《智能的代價》,對不同模型規模下的各種證明系統的速度和效率進行了基準測試。
Worldcoin 正在嘗試應用 zkML 來創建一個保護隱私的人類身份證明協議。 Worldcoin 使用定制硬件處理高分辨率虹膜掃描,並將其插入到 Semaphore 實現中。然後可以使用該系統執行諸如成員資格證明和投票等有用操作。他們目前使用受信任的運行時環境和安全的安全區域來驗證相機簽名的虹膜掃描,但他們最終的目標是使用零知識證明來驗證神經網絡的正確推理,以提供加密級別的安全保證。
Giza 是一種協議,採用完全無信任的方法在鏈上部署 AI 模型。它使用包括 ONNX 格式表示機器學習模型、Giza Transpiler 用於將這些模型轉換為 Cairo 程序格式、ONNX Cairo Runtime 用於以可驗證和確定性的方式執行模型,以及 Giza Model 智能合約用於在鏈上部署和執行模型的技術堆棧。儘管 Giza 也可以歸類為模型到證明編譯器的類別,但他們作為一個 ML 模型市場的定位是目前最有趣的應用之一。
Gensyn 是一個分佈式硬件供應網絡,用於訓練 ML 模型。具體而言,他們正在開發一個基於梯度下降的概率審計系統,並使用模型檢查點來使分散式 GPU 網絡能夠為全尺度模型提供訓練服務。儘管他們在這裡的 zkML 應用非常特定於他們的用例——他們希望確保當一個節點下載和訓練模型的一部分時,他們對模型更新的誠實性——但它展示了將 zk 和 ML 相結合的強大力量。
ZKaptcha 專注於web3 中的bot 問題,為智能合約提供驗證碼服務。他們目前的實施讓最終用戶通過完成驗證碼來生成人類工作的證明,驗證碼由他們的鏈上驗證程序驗證,並通過幾行代碼由智能合約訪問。今天,他們主要只依賴於zk,但他們打算在未來實現zkML,類似於現有的web2 驗證碼服務,分析鼠標移動等行為以確定用戶是否是人類。
鑑於zkML 市場還很早,許多應用程序已經在黑客馬拉松級別進行了試驗。項目包括AI Coliseum,一個使用ZK 證明來驗證機器學習輸出的鏈上AI 競賽,Hunter z Hunter,一個使用EZKL 庫來驗證帶有halo 2 電路的圖像分類模型輸出的照片尋寶遊戲,以及zk Section 9 ,它將AI 圖像生成模型轉換為用於鑄造和驗證AI 藝術的電路。
zkML 面臨的挑戰
儘管在提高和優化方面取得了飛速的進展,但 zkML 領域仍然面臨一些核心挑戰。這些挑戰涉及技術和實踐等方面,包括:
-
以最小的精度損失進行量化
-
電路規模,特別是當網絡由多個層組成時
-
矩陣乘法的高效證明
-
對抗攻擊
量化是將浮點數表示為定點數的過程,大多數機器學習模型使用浮點數表示模型參數和激活函數,在處理 zk 電路的域算術時,需要使用定點數。量化對機器學習模型的準確性的影響取決於所使用的精度級別。一般來說,使用較低的精度(即較少的比特數)可能會導致準確性降低,因為這可能引入舍入和近似誤差。然而,有幾種技術可用於最小化量化對準確性的影響,例如在量化後對模型進行微調,以及使用量化感知訓練等技術。此外,zkSummit 9 上的一項黑客馬拉松項目 Zero Gravity 顯示出,針對邊緣設備開發的替代神經網絡架構(例如無權重神經網絡)可以用於避免電路中的量化問題。
除了量化之外,硬件是另一個關鍵挑戰。一旦通過電路正確地表示了機器學習模型,由於 zk 的簡潔性,驗證其推理的證明將變得廉價且快速。這裡的挑戰不在於驗證者,而在於證明者,因為隨著模型規模的增長,RAM 消耗和證明生成時間會迅速增加。某些證明系統(例如使用 sumcheck 協議和分層算術電路的基於 GKR 的系統)或組合技術(例如將 Plonky 2 與 Groth 16 相結合,Plonky 2 在證明時間方面效率高但對於大型模型的高效證明大小較差,而 Groth 16 在復雜模型的複雜度上不會導致證明大小增長)更適合處理這些問題,但在 zkML 項目中管理權衡是一個核心挑戰。
在對抗攻擊方面,仍然有待努力。首先,如果一個無信任的協議或 DAO 選擇實施一個模型,在訓練階段仍然存在對抗攻擊的風險(例如訓練模型以在看到特定輸入時表現出特定行為,這可能被用來操縱後續的推理)。聯邦學習技術和訓練階段的 zkML 可能是最小化這種攻擊面的一種方式。
另一個核心挑戰是當模型保護隱私時存在模型盜竊攻擊的風險。雖然可以混淆模型的權重,但在給定足夠的輸入輸出對的情況下,從理論上講,仍然有可能反向推導出權重。這主要是對小規模模型的風險,但仍然存在風險。
智能合約的可擴展
儘管在將這些模型優化為在 zk 的限制條件下運行時存在一些挑戰,但改進工作正在以指數速度進行,一些人預計在進一步的硬件加速下,我們很快就能與更廣泛的機器學習領域達到同等水平。為了強調這些改進的速度,zkML 從0x PARC 在 2021 年展示瞭如何在可驗證電路中執行小規模 MNIST 圖像分類模型的演示,到 Daniel Kang 在不到一年後為 ImageNet 規模的模型做同樣的工作的論文。在 2022 年 4 月,這個 ImageNet 規模的模型的準確性從 79% 提高到 92% ,並且像 GPT-2 這樣的大型模型在近期內有望成為可能,儘管目前的證明時間較長。
我們認為 zkML 是一個豐富而不斷發展的生態系統,旨在擴展區塊鍊和智能合約的能力,使其更加靈活、適應性強和智能化。
儘管 zkML 仍處於早期開發階段,但它已經開始顯示出有希望的結果。隨著技術的發展和成熟,我們可以期待在鏈上看到更多創新的 zkML 用例。