原文:a16z
在過去的幾年裡,區塊鏈上的零知識證明主要用於兩個關鍵目的:
(1) 通過在鏈下處理交易並在主網上驗證結果來擴展計算受限網絡的規模;
(2) 通過實現屏蔽交易來保護用戶隱私,只有擁有解密密鑰的人才能查看。
在區塊鏈背景下,這些特性顯然是可取的:去中心化網絡(如以太坊)不能在不對驗證者處理能力、帶寬和延遲提出無法承受的要求的情況下提高吞吐量或區塊大小(因此需要有效性滾動),所有交易都對任何人可見(因此需要鏈上隱私解決方案)。
但零知識證明對於第三類功能也是有用的:高效地驗證任何類型的計算(而不僅僅是在鏈下實例化的EVM中的計算)已經正確運行。這對區塊鏈之外的領域也有很大影響。
現在,利用零知識證明簡潔地驗證計算能力的系統的進步使用戶能夠從每一個數字產品中要求與區塊鏈所保證的相同程度的無信任和可驗證性,尤其是從機器學習模型中。區塊鏈計算的高需求激勵了零知識證明研究,創造了具有較小內存佔用和更快證明和驗證時間的現代證明系統——使得現在可以在鏈上驗證某些小型機器學習算法。
到目前為止,我們都可能已經體驗到了與一個非常強大的機器學習產品互動的潛力。幾天前,我用GPT-4幫助我創建了一個能連續擊敗我下棋的AI。這感覺像是過去幾十年裡機器學習取得的所有進步的一個詩意的縮影:IBM的開發人員花了十二年時間製作出Deep Blue,一個運行在32節點IBM RS/6000 SP計算機上、能每秒評估近2億個棋步的模型,該模型在1997年擊敗了國際象棋冠軍加里·卡斯帕羅夫。相比之下,我花了幾個小時——在我這邊只進行了最少的編碼——就創建了一個能戰勝我的程序。
誠然,我懷疑我創建的AI是否能在國際象棋上擊敗加里·卡斯帕羅夫,但這並不是重點。重點是任何玩弄GPT-4的人都可能在獲得超能力方面有類似的經歷:你只需要付出很小的努力,就可以創造出接近或超越你自己能力的東西。我們都是IBM的研究員;我們都是加里·卡斯帕羅夫。
顯然,這讓人興奮又有些畏懼。對於任何在加密貨幣行業工作的人來說,自然的反應(在驚嘆於機器學習能做什麼之後)是考慮潛在的集中化途徑以及如何將這些途徑去中心化,形成一個人們可以透明審計和擁有的網絡。現在的模型是通過吞噬大量公開可用的文本和數據製作的,但目前只有少數人控制和擁有這些模型。更具體地說,問題不是“人工智能是否具有巨大價值”,而是“我們如何構建這些系統,使得與之互動的任何人都能獲得其經濟利益,並在他們希望的情況下,確保他們的數據以尊重隱私權的方式使用”。
最近,有人呼籲暫停或減緩類似Chat-GPT這樣的重大人工智能項目的發展。阻止進步可能不是解決方案:更好的方法是推動開源模型,並在模型提供商希望保護其權重或數據私密性的情況下,使用保護隱私的零知識證明對它們進行保護,這些證明在鏈上並且可以完全審計。如今,關於私有模型權重和數據的後一種用例尚無法在鏈上實現,但零知識證明系統的進步將在未來實現這一目標。
可驗證和可擁有的機器學習
我使用Chat-GPT構建的國際象棋AI在目前看來相對無害:輸出相對一致的程序,不使用侵犯有價值知識產權或侵犯隱私的數據。但當我們想確保我們被告知的在API後面運行的模型確實是運行過的模型時會怎麼樣?或者,如果我想將認證過的數據輸入到鏈上的模型中,並確保數據確實來自合法方?如果我想確保提交數據的“人”實際上是人而不是試圖對我的網絡發起拜占庭攻擊的機器人呢?零知識證明及其簡潔地表示和驗證任意程序的能力是一種解決方法。
需要注意的是,目前在鏈上機器學習背景下,零知識證明的主要用途是驗證正確的計算。換句話說,在機器學習背景下,零知識證明和更具體的SNARK(簡潔的非交互式知識論證)最有用的地方在於它們的簡潔性特性。這是因為零知識證明保護了證明者(及其處理的數據)免受窺視者的侵犯。完全同態加密(FHE)、功能加密或可信執行環境(TEE)等增強隱私的技術更適用於讓不受信任的證明者在私有輸入數據上運行計算(更深入地探討這些技術超出了本文的範圍)。
讓我們退後一步,從高層次了解可以用零知識表示的機器學習應用類型(要深入了解零知識,請參閱我們關於零知識證明算法和硬件的改進的文章,查看Justin Thaler關於SNARK性能的研究,或者查看我們的零知識教材)。零知識證明通常將程序表示為算術電路:使用這些電路,證明者從公共和私有輸入生成證明,驗證者通過數學計算來確保此語句的輸出是正確的——而不獲取關於私有輸入的任何信息。
我們仍處於使用鏈上零知識證明驗證計算的非常早期階段,但算法的改進正在擴大可行的範圍。以下是五種在機器學習中應用零知識證明的方法。
1.模型真實性:您希望確保某個實體聲稱已經運行的機器學習模型確實是運行過的模型。例如,在某個模型位於API後面的情況下,提供特定模型的實體可能有多個版本,例如一個較便宜、準確度較低的版本,以及一個較貴、性能更高的版本。沒有證明,您無法知道當您實際支付了更昂貴的版本時,提供商是否為您提供了更便宜的模型(例如,提供商希望節省服務器成本並提高利潤率)。
為此,您需要為每個模型實例提供單獨的證明。一個實際的方法是通過Dan Boneh、Wilson Nguyen和Alex Ozdemir的功能承諾框架,這是一個基於SNARK的零知識承諾方案,允許模型所有者承諾一個模型,用戶可以將他們的數據輸入到該模型中,並接收到已經運行的承諾模型的驗證。一些基於Risc Zero(一個通用的基於STARK的虛擬機)的應用程序也實現了這一點。 Daniel Kang、Tatsunori Hashimoto、Ion Stoica和Yi Sun進行的其他研究表明,可以在ImageNet數據集上驗證有效的推斷,準確率為92%(與最高性能的非零知識驗證ImageNet模型相當)。
但僅僅接收到已提交模型已運行的證明並不一定足夠。一個模型可能無法準確地表示給定的程序,因此您會希望第三方審核已提交的模型。功能承諾允許證明者證明其使用了已承諾的模型,但不能保證已承諾模型的任何信息。如果我們能讓零知識證明在證明訓練方面表現得足夠好(請參見下面的示例#4),我們將來也可能開始獲得這些保證。
2.模型完整性:您希望確保相同的機器學習算法以相同的方式在不同用戶的數據上運行。這在您不希望應用任意偏見的領域非常有用,如信用評分決策和貸款申請。您也可以使用功能承諾來實現這一點。為此,您需要承諾一個模型及其參數,並允許人們提交數據。輸出將驗證該模型是否針對每個用戶的數據運行已承諾的參數。或者,可以公開模型及其參數,並讓用戶自己證明他們將適當的模型和參數應用於自己的(經過認證的)數據。這在醫療領域可能尤其有用,因為法律要求某些關於患者的信息必須保密。將來,這可以實現一個醫學診斷系統,它能夠從完全私密的實時用戶數據中學習和改進。
3.認證:您希望將來自外部經過驗證的方(例如,任何可以生成數字簽名的數字平台或硬件設備)的認證整合到鏈上運行的模型或任何其他類型的智能合約中。要做到這一點,您將使用零知識證明驗證簽名,並將證明作為程序的輸入。 Anna Rose和Tarun Chitra最近主持了一期零知識播客節目,嘉賓是Daniel Kang和Yi Sun,他們探討了這一領域的最新進展。
具體來說,Daniel和Yi最近發布了一項研究,探討瞭如何驗證由具有經過認證的傳感器的攝像機拍攝的圖像是否經過瞭如裁剪、縮放或有限遮蓋等變換,這在您希望證明圖像沒有經過深度偽造但確實經過了某種合法編輯的情況下很有用。 Dan Boneh和Trisha Datta也做過類似的研究,使用零知識證明驗證圖像的出處。
但更廣泛地說,任何經過數字認證的信息都是這種驗證形式的候選對象:Jason Morton正在開發EZKL庫(在下一節將有更多介紹),他稱這種方法為“賦予區塊鏈視力”。任何已簽名的端點(例如,Cloudflare的SXG服務,第三方公證人)都會產生可以驗證的數字簽名,這可能對於證明來自可信任方的出處和真實性非常有用。
4.分佈式推理或訓練:您希望以分佈式的方式執行機器學習推理或訓練,並允許人們向公共模型提交數據。為此,您可以將已有的模型部署到鏈上,或者設計一個全新的網絡,並使用零知識證明來壓縮模型。 Jason Morton的EZKL庫正在創建一種用於攝取ONXX和JSON文件並將它們轉換為ZK-SNARK電路的方法。最近在ETH Denver的一個演示表明,這種技術可用於創建基於圖像識別的鏈上尋寶遊戲,遊戲創作者可以上傳照片,生成圖像的證明,玩家可以上傳圖像;驗證器檢查用戶上傳的圖像是否與創作者生成的證明足夠匹配。 EZKL現在可以驗證多達1億個參數的模型,這意味著它可以用於在鏈上驗證ImageNet大小的模型(這些模型具有6000萬個參數)。
其他團隊,如Modulus Labs,正在為鏈上推理對不同證明系統進行基準測試。 Modulus的基準測試涵蓋了多達1800萬個參數。在訓練方面,Gensyn正在構建一個分佈式計算系統,用戶可以輸入公共數據,並通過分佈式節點網絡進行模型訓練,同時驗證訓練的正確性。
5.人證明:您希望驗證某人是一個獨特的個體,而不損害其隱私。為此,您將創建一種驗證方法,例如生物識別掃描或以加密方式提交政府ID的方法。然後,您將使用零知識證明來檢查某人是否已經過驗證,而不會洩露關於該人身份的任何信息,無論該身份是完全可識別的,還是像公鑰那樣的偽名。
Worldcoin通過他們的人證明協議來實現這一點,該協議通過為用戶生成獨特的虹膜代碼來確保抗攻擊性。關鍵的是,為WorldID創建的私鑰(以及為Worldcoin用戶創建的加密錢包的其他私鑰)與項目的眼球掃描器本地生成的虹膜代碼完全分離。這種分離完全將生物識別標識符與可能歸因於某人的任何形式的用戶密鑰分離。 Worldcoin還允許應用程序嵌入一個SDK,使用戶可以使用WorldID登錄,並通過允許應用程序檢查人是否擁有WorldID來利用零知識證明來保護隱私,但不允許跟踪個別用戶(更多細節,請參閱此博客文章)。
這個例子是用零知識證明的隱私保護特性來對抗較弱且惡意的人工智能的形式,因此它與上述其他示例(例如,證明你是一個真實的人類而不是機器人,同時不洩露任何關於自己的信息)有很大不同。
模型架構和挑戰
在實現SNARKs(簡潔非交互式知識論證)的證明系統方面的突破已經成為將許多機器學習模型上鍊的關鍵驅動力。一些團隊正在現有的架構(包括Plonk、Plonky2、Air等)中製作定制電路。在定制電路方面,Halo 2已成為Daniel Kang等人的工作和Jason Morton的EZKL項目中廣泛使用的後端。 Halo 2的證明者時間近似線性,證明大小通常只有幾千字節,驗證者時間恆定。或許更重要的是,Halo 2擁有強大的開發者工具,使其成為開發者喜歡使用的SNARK後端。其他團隊,如Risc Zero,正在尋求通用VM策略。還有些團隊正使用基於求和檢查協議的Justin Thaler的超高效證明系統創建定制框架。
證明生成和驗證器時間絕對取決於生成和檢查證明的硬件以及生成證明的電路大小。但這裡需要注意的關鍵點是,無論代表的程序是什麼,證明的大小總是相對較小,因此驗證證明的驗證者的負擔是受限的。然而,在這裡有一些細微之處:對於像Plonky2這樣使用基於FRI的承諾方案的證明系統,證明大小可能會增加。 (除非最後使用像Plonk或Groth16這樣基於配對的SNARK包裝,這些證明不會隨著所證明陳述的複雜性而增長。)
對於機器學習模型的啟示是,一旦設計了一個準確表示模型的證明系統,實際驗證輸出的成本將非常便宜。開發者需要考慮的最重要的是證明者時間和內存:以一種可以相對快速證明的方式表示模型,並且證明大小理想地在幾千字節左右。要證明機器學習模型在零知識情況下的正確執行,你需要將模型架構(層、節點和激活函數)、參數、約束和矩陣乘法運算編碼並表示為電路。這涉及將這些屬性分解為可以在有限域上執行的算術運算。
這個領域還處於起步階段。在將模型轉換為電路的過程中,準確性和保真度可能會受到影響。當模型表示為算術電路時,前面提到的模型參數、約束和矩陣乘法運算可能需要近似和簡化。當將算術運算編碼為證明的有限域中的元素時,可能會丟失一些精度(或者在不進行這些優化的情況下生成證明的成本在當前的零知識框架下將不堪重負)。此外,機器學習模型的參數和激活通常以32位進行編碼以提高精度,但是今天的零知識證明無法在必要的算術電路格式中表示32位浮點運算,而不產生巨大的開銷。因此,開發者可能會選擇使用量化的機器學習模型,其中32位整數已經轉換為8位精度。這些類型的模型有利於表示為零知識證明,但是被驗證的模型可能是較高質量初始模型的粗略近似。
在這個階段,這確實是一場迎頭趕上的遊戲。隨著零知識證明變得更加優化,機器學習模型變得越來越複雜。已經有一些優化的有前景的領域:證明遞歸可以通過允許證明用作下一個證明的輸入來減小整體證明大小,從而實現證明壓縮。還有一些新興的框架,比如Linear A的Apache Tensor虛擬機(TVM)分支,該框架推出了一種轉換器,可以將浮點數轉換為零知識友好的整數表示。最後,我們在a16z crypto對未來的工作感到樂觀,它將使在SNARKs中表示32位整數變得更加合理。
“規模”的兩種定義零知識證明通過壓縮實現規模化:SNARKs允許你將一個極其複雜的系統(如虛擬機或機器學習模型)數學表示,使得驗證它的成本低於運行它的成本。另一方面,機器學習是通過擴展實現規模化的:如今的模型隨著更多數據、參數以及參與訓練和推理過程的GPU/TPU而變得更好。中心化公司可以以幾乎無限制的規模運行服務器:收取API調用的月費,並支付運營成本。
區塊鍊網絡的經濟現實幾乎正好相反:開發者被鼓勵優化他們的代碼,使其在鏈上運行既可行又便宜。這種不對稱具有巨大的優勢:它創造了一個需要提高證明系統效率的環境。我們應該尋求在機器學習中要求與區塊鏈提供的相同好處,即可驗證的所有權和共享的真實觀念。
儘管區塊鏈激勵了優化zk-SNARKs,但計算相關的每個領域都將受益。
致謝:Justin Thaler, Dan Boneh, Guy Wuollet, Sam Ragsdale, Ali Yahya, Chris Dixon, Eddy Lazzarin, Tim Roughgarden, Robert Hackett, Tim Sullivan, Jason Morton, Peiyuan Liao, Tarun Chitra, Brian Retford, Daniel Kang, Yi Sun, Anna Rose, Modulus Labs, DC Builder。