zkMLと暗号学的証明による検証可能なオンチェーンAI
イントロダクション:ブロックチェーン上で検証可能なAIの必要性
AIシステムの影響力が増すにつれて、その出力が信頼できるものであることを保証することが重要になります。従来のメソッドは制度的な保証(本質的には 「ただ信頼してください」)に依存しており、暗号学的な保証は提供されません。これは、スマートコントラクトやユーザーが、重いモデルをオンチェーンで再実行することなくAI由来の結果を信頼しなければならないブロックチェーンのような分散型コンテキストでは特に問題となります。ゼロ知識機械学習 (zkML) は、ML計算の 暗号学的な検証 を可能にすることでこの問題に対処します。本質的に、zkMLはプルーバーが 「出力 $Y$ は、入力 $X$ に対してモデル $M$ を実行した結果である」 という簡潔な証明を、$X$ や $M$ の内部詳細を 明かすことな く 生成することを可能にします。これらのゼロ知識証明 (ZKP) は、誰でも(あるいはどのコントラクトでも)効率的に検証でき、AIへの信頼を 「ポリシーから証明へ」 と移行させます。
AIのオンチェーン検証可能性とは、ブロックチェーンが計算自体を実行する代わりに、正しい実行の証明を検証することによって、高度な計算(ニューラルネットワークの推論など)を組み込むことができることを意味します。これには広範な影響があります。スマートコントラクトはAIの予測に基づいて意思決定を行うことができ、分散型自律エージェントはアルゴリズムに従ったことを証明でき、クロスチェーンまたはオフチェーンの計算サービスは検証不可能なオラクルではなく 検証可能な出力 を提供できます。最終的に、zkMLは トラストレスでプライバシーを保護するAI への道を提供します。例えば、AIモデルの決定が正しく、承認されていることを、プライベートデータや独自のモデルの重みを公開することなく証明できます。これは、安全な医療分析からブロックチェーンゲーム、DeFiオラクルまで、幅広いアプリケーションにとって鍵となります。
zkMLの仕組み:ML推論を簡潔な証明に圧縮する
大まかに言うと、zkMLは暗号学的証明システムとML推論を組み合わせることで、複雑なモデル評価を小さな証明に「圧縮」できるようにします。内部的には、MLモデル(例:ニューラルネットワーク)は、多くの算術演算(行列乗算、活性化関数など)からなるサーキットまたはプログラムとして表現されます。すべての中間値を公開する代わりに、プルーバーはオフチェーンで完全な計算を実行し、その後 ゼロ知識証明プロトコル を使用して、すべてのステップが正しく行われたことを証明します。ベリファイアは、証明といくつかの公開データ(最終出力やモデルの識別子など)のみを与えられ、モデルを再実行することなく、その正当性を 暗号学的に確信 することができます。
これを達成するために、zkMLフレームワークは通常、モデルの計算をZKPに適した形式に変換します:
- サーキットコンパイル: SNARKベースのアプローチでは、モデルの計算グラフは 算術サーキット または多項式制約の集合にコンパイルされます。ニューラルネットワークの各層(畳み込み、行列乗算、非線形活性化)は、入力に対して出力が正しいことを保証する制約を持つサブサーキットになります。ニューラルネットワークには、多項式に自然に適さない非線形演算(ReLU、Sigmoidなど)が含まれるため、これらを効率的に処理するために ルックアップテーブル のような技術が使用されます。例えば、ReLU(出力 = max(0, 入力))は、input≥0の場合は出力が入力と等しく、それ以外はゼロであることを検証するカスタム制約またはルックアップによって強制できます。最終結果は、プルーバーが満たさなければならない暗号学的制約の集合であり、こ れによりモデルが正しく実行されたことが暗黙的に証明されます。
- 実行トレースと仮想マシン: 別の方法は、zkVM アプローチで行われるように、モデルの推論をプログラムトレースとして扱うことです。例えば、JOLT zkVMはRISC-V命令セットを対象としています。MLモデル(またはそれを計算するコード)をRISC-Vにコンパイルし、各CPU命令が適切に実行されたことを証明できます。JOLTは 「ルックアップ特異点」 技術を導入し、高価な算術制約を、各有効なCPU操作のための高速なテーブルルックアップに置き換えます。すべての操作(加算、乗算、ビット単位演算など)は、事前計算された有効な結果の巨大なテーブルでのルックアップを介してチェックされ、これを効率的に保つために特殊な引数(Lasso/SHOUT)が使用されます。これにより、プルーバーの作業負荷が劇的に削減されます。複雑な64ビット操作でさえ、多くの算術制約の代わりに、証明内で単一のテーブルルックアップになります。
- 対話型プロトコル (GKRサムチェック): 3番目のアプローチは、GKR(Goldwasser–Kalai–Rotblum)のような対話型証明を使用して、層状の計算を検証します。ここでは、モデルの計算は層状の算術サーキットとして見なされます(各ニューラルネットワーク層はサーキットグラフの1つの層です)。プルーバーは通常通りモデルを実行しますが、その後、各層の出力がその入力に対して正しいことを証明するために サムチェックプロトコル に参加します。Lagrangeのアプローチ(DeepProve、次に詳述)では、プルーバーとベリファイアは、各層の計算を再実行することなく、 その一貫性をチェックする対話型多項式プロトコル(Fiat-Shamirヒューリスティックにより非対話型にされる)を実行します。このサムチェックメソッドは、一枚岩の静的サーキットを生成するのを避け、代わりに最小限の暗号操作(主にハッシュ化または多項式評価)で段階的に 計算の一貫性 を検証します。
どのアプローチであっても、結果は推論全体の正当性を証明する 簡潔な証明(通常は数キロバイトから数十キロバイト)です。この証明は ゼロ知識 であり、秘密の入力(プライベートデータやモデルパラメータ)を隠しておくことができることを意味します。それらは証明に影響を与えますが、ベリファイアには公開されません。意図された公開出力または表明のみが公開されます。これにより、「モデル $M$ を患者データ $X$ に適用すると診断 $Y$ が得られることを、$X$ やモデルの重みを公開せずに証明する」 といったシナリオが可能になります。
オンチェーン検証の実現: 証明が生成されると、ブロックチェーンに投稿できます。スマートコントラクトには、プリコンパイルされた暗号プリミティブを使用して、証明をチェックするための検証ロジックを含めることができます。例えば、Ethereumには多くのzk-SNARKベリファイアで使用されるBLS12-381ペアリング操作のためのプリコンパイルがあり、SNARK証明のオンチェーン検証を効率的にします。STARK(ハッシュベースの証明)はサイズが大きくなりますが、慎重な最適化や、場合によってはいくつかの信頼の仮定(例えば、StarkWareのL2は、SNARKよりも高いガス代がかかるものの、オンチェーンのベ リファイアコントラクトによってEthereum上でSTARK証明を検証します)によって、オンチェーンで検証することが可能です。重要なのは、チェーンがMLモデルを実行する必要がなく、元の計算よりも はるかに安価な 検証のみを実行する点です。要約すると、zkMLは 高価なAI推論を、ブロックチェーン(または任意のベリファイア)がミリ秒から数秒でチェックできる小さな証明に圧縮します。
Lagrange DeepProve:zkMLのブレークスルーのアーキテクチャとパフォーマンス
Lagrange Labsによる DeepProve は、速度とスケーラビリティに焦点を当てた最先端のzkML推論フレームワークです。2025年に発表されたDeepProveは、Ezklのような以前のソリューションよりも劇的に高速な新しい証明システムを導入しました。その設計は、サムチェック付きGKR対話型証明プロトコル とニューラルネットワークサーキット向けの特殊な最適化を中心にしています。以下にDeepProveの仕組みとそのパフォーマンス達成方法を説明します:
-
ワンタイム前処理: 開発者は、訓練済みのニューラルネットワーク(現在サポートされているタイプには、多層パーセプトロンや一般的なCNNアーキテクチャが含まれます)から始めます。モデルは標準的なグラフ表現であるONNX形式にエクスポートされます。次に、DeepProveのツールがONNXモデルを解析し、効率的な体演算のために 量子化(重みを固定小数点/整数形式に変換)します。この段階で、暗号プロトコルのための証明鍵と検証鍵も生成します。このセットアップはモデルごとに1回行われ、推論ごとに繰り返す必要はありません。DeepProveは統合の容易さを強調しています:「モデルをONNXにエクスポート → ワンタイムセットアップ → 証明を生成 → どこでも検証」。
-
証明 (推論 + 証明生成): セットアップ後、プルーバー(ユーザー、サービス、またはLagrangeの分散型プルーバーネットワークによって実行可能)は新しい入力 $X$ を受け取り、それに対してモデル $M$ を実行して出力 $Y$ を得ます。この実行中、DeepProveは各層の計算の 実行トレース を記録します。SNARKアプローチのようにすべての乗算を事前に静的サーキットに変換するのではなく、DeepProveは 線形時間のGKRプロトコル を使用して各層をその場で検証します。各ネットワーク層について、プルーバーは層の入力と出力にコミットし(例えば、暗号学的ハッシュや多項式コミットメントを介して)、その後、出力が層の関数に従って入力から実際に得られたものであることを証明するためにサムチェック引数に参加します。サムチェックプロトコルは、実際の値を明らかにすることなく、層の計算をエンコードする多項式の評価の合計の正しさをベリファイアに繰り返し納得させます。非線形操作(ReLU、softmaxなど)は、DeepProveでは ルックアップ引数 を通じて効率的に処理されます。活性化関数の出力が計算された場合、DeepProveは各出力がその関数のために事前計算されたテーブルからの有効な入力-出力ペアに対応することを証明できます。層ごとに証明が生成され、その後、モデル全体のフォワードパスをカバーする 1つの簡潔な証明に集約 されます。暗号技術の重い処理は最小限に抑えられます。DeepProveのプルーバーは、巨大な制約システムを解くのではなく、主に通常の数値計算(実際の推論)といくつかの軽い暗号コミットメントを実行します。
-
検証: ベリファイアは、最終的な簡潔な証明といくつかの公開値(通常はモデルのコミットされた識別子($M$ の重みへの暗号コミットメント)、入力 $X$(プライベートでない場合)、および主張された出力 $Y$)を使用して正しさをチェックします。DeepProveのシステムでの検証には、サムチェックプロトコルのトランスクリプトと最終的な多項式またはハッシュコミットメントの検証が含まれます。これは古典的なSNARKの検証(数回のペアリングかもしれない)よりも複雑ですが、モデルを再実行するよりもはるかに安価 です。Lagrangeのベンチマークでは、中規模のCNNに対するDeepProve証明の検証には、ソフトウェアで 0.5秒 程度かかります。これは、例えば、数十万のパラメータを持つ畳み込みネットワークが正しく実行されたことを確認するのに約0.5秒かかることを意味し、検証のためにGPUでそのCNNをナイーブに再計算するよりも 500倍以上高速 です。(実際、DeepProveはCNNで最大 521倍、MLPで 671倍 の検証高速化を再実行と比較して測定しました。)証明サイズはオンチェーンで送信するのに十分小さく(数十KB)、検証は必要であればスマートコントラクトで実行できますが、0.5秒の計算には慎重なガス最適化またはレイヤー2での実行が必要になるかもしれません。
アーキテクチャとツール: DeepProveはRustで実装されており、開発者向けにツールキット(zkml
ライブラリ)を提供しています。ONNXモデルグラフをネイティブにサポートしているため、PyTorchやTensorFlowからのモデル(エクスポート後)と互換性があります。証明プロセスは現在、数百万パラメータまでのモデルを対象としています(テストには400万パラメータの密結合ネットワークが含まれます)。DeepProveは、多線形多項式コミットメント(層の出力にコミットするため)、計算を検証するためのサムチェックプロトコル、非線形操作のためのルックアップ引数など、暗号コンポーネントの組み合わせを活用しています。特筆すべきは、Lagrangeのオープンソースリポジトリが、以前の研究(ScrollのCenoプロジェクトからのサムチェックとGKRの実装)に基づいていることを認めており、zkMLとゼロ知識ロールアップ研究の交差点を示していることです。
リアルタイムのスケーラビリティを達成するために、LagrangeはDeepProveをその プルーバーネットワーク(特殊なZKプルーバーの分散型ネットワーク)と組み合わせています。重い証明生成はこのネットワークにオフロードできます。アプリケーションが推論の証明を必要とするとき、ジョブをLagrangeのネットワークに送信し、そこで多くのオペレーター(セキュリティの ためにEigenLayerにステークされている)が証明を計算して結果を返します。このネットワークは、信頼性の高い証明生成を経済的にインセンティブ付けします(悪意のあるまたは失敗したジョブはオペレーターをスラッシングします)。プルーバー間で作業を分散させることで(そして潜在的にGPUやASICを活用することで)、Lagrangeプルーバーネットワーク はエンドユーザーから複雑さとコストを隠します。その結果、高速でスケーラブル、かつ分散型のzkMLサービスが実現します:「検証可能なAI推論を高速かつ手頃な価格で」。
パフォーマンスのマイルストーン: DeepProveの主張は、以前の最先端技術であるEzklに対するベンチマークによって裏付けられています。約26.4万パラメータを持つCNN(CIFAR-10スケールのモデル)に対して、DeepProveの証明時間は約1.24秒であったのに対し、Ezklでは 約196秒 であり、約 158倍高速 でした。400万パラメータを持つより大きな密結合ネットワークでは、DeepProveは約2.3秒で推論を証明したのに対し、Ezklでは約126.8秒(約54倍高速)でした。検証時間も短縮されました。DeepProveは26.4万CNNの証明を約0.6秒で検証しましたが、Ezklの証明(Halo2ベース)をCPUで検証するにはそのテストで5分以上かかりました。この高速化は、DeepProveのほぼ線形な複雑さから来ています。そのプルーバーは操作の数に対してほぼ O(n) でスケールしますが、サーキットベースのSNARKプルーバーはしばしば超線形なオーバーヘッド(FFTと多項式コミットメントのスケーリング)を持ちます。実際、DeepProveの プルーバーのスループット は、プレーン な推論ランタイムの1桁以内に収まることがあります。最近のGKRシステムは、大規模な行列乗算において生の実行よりも10倍未満の遅さであり、これはZKにおける印象的な成果です。これにより、リアルタイムまたはオンデマンドの証明 がより実現可能になり、対話型アプリケーションにおける検証可能なAIへの道が開かれます。
ユースケース: LagrangeはすでにWeb3およびAIプロジェクトと協力してzkMLを適用しています。ユースケースの例としては、検証可能なNFTの特性(ゲームキャラクターやコレクティブルのAI生成による進化が、承認されたモデルによって計算されたことを証明する)、AIコンテンツの来歴(ディープフェイクと戦うために、画像やテキストが特定のモデルによって生成されたことを証明する)、DeFiリスクモデル(独自のデータを明らかにすることなく、金融リスクを評価するモデルの出力を証明する)、および医療や金融における プライベートAI推論(病院が患者データを公開することなく、正しさを保証する証明付きでAI予測を得ることができる)などがあります。AIの出力を 検証可能かつプライバシー保護 にすることで、DeepProveは分散システムにおける 「信頼できるAI」 への扉を開きます。これは 「ブラックボックスモデルへの盲目的な信頼」 の時代から 「客観的な保証」 の時代への移行を意味します。
SNARKベースのzkML:EzklとHalo2アプローチ
zkMLへの従来のアプローチは、zk-SNARK (Succinct Non-interactive Arguments of Knowledge) を使用してニューラルネットワークの推論を証明します。Ezkl (ZKonduit/Modulus Labsによる) は、このアプローチの代表的な例です。これはHalo2証明システム(BLS12-381上の多項式コミットメントを持つPLONKスタイルのSNARK)を基盤としています。Ezklは、開発者がPyTorchやTensorFlowモデルを取得し、ONNXにエクスポートし、Ezklがそれを自動的にカスタム算術サーキットにコンパイルするツールチェーンを提供します。
仕組み: ニューラルネットワークの各層は制約に変換されます:
- 線形層(密結合または畳み込み)は、入力、重み、出力間のドット積を強制する乗算-加算制約の集合になります。
- 非線形層(ReLU、sigmoidなど)は、そのような関数が多項式ではないため、ルックアップまたは区分的制約 を介して処理されます。例えば、ReLUは、ブールセレクタ $b$ と、$y = x \cdot b$、$0 \le b \le 1$、そして $x>0$ の場合に $b=1$ を保証する制約によって実装できます(これは一つの方法です)。あるいは、より効率的には、$x$ の値の範囲に対して $x \mapsto \max(0,x)$ をマッピングするルックアップテーブルを使用します。Halo2のルックアップ引数は16ビット(またはそれ以下)の値のチャンクをマッピングできるため、大きなドメイン(すべての32ビット値など)は通常、いくつかの小さなルックアップに 「チャンク化」 されます。このチャンク化は制約の数を増やします。
- 大きな整数の演算や除算(もしあれば)も同様に小さな部分に分割されます。結果として、特定のモデルアーキテクチャに合わせた大規模な R1CS/PLONK制約 の集合ができあがります。
Ezklはその後、Halo2を使用して、秘密の入力(モデルの重み、プライベートな入力)と公開の出力が与えられた場合にこれらの制約が成り立つという証明を生成します。ツールと統合: SNARKアプローチの利点の一つは、よく知られたプリミティブを活用することです。Halo2はすでにEthereumのロールアップ(例:Zcash、zkEVM)で使用されているため、実戦でテストされており、オンチェーンベリファイアがすぐに利用できます。Ezklの証明はBLS12-381曲線を使用しており、これはEthereumがプリコンパイルを介して検証できるため、スマートコントラクトでEzklの証明を検証するのは簡単です。チームはまた、ユーザーフレンドリーなAPIも提供しています。例えば、データサイエンティストはPythonでモデルを扱い、EzklのCLIを使用して、サーキットに関する深い知識がなくても証明を生成できます。
長所: Ezklのアプローチは、SNARKの一般性とエコシステムから恩恵を受けます。それは合理的に複雑なモデルをサポートし、すでに 「実用的な統合(DeFiリスクモデルからゲーミングAIまで)」 を実現し、現実世界のMLタスクを証明しています。モデルの計算グラフのレベルで動作するため、ML固有の最適化を適用できます。例えば、重要でない重みを枝刈りしたり、パラメータを量子化してサーキットサイズを削減したりします。これはまた、モデルの機密性 が自然に保たれることを 意味します。重みはプライベートなウィットネスデータとして扱うことができるため、ベリファイアは 何らかの 有効なモデルが出力を生成したこと、あるいはせいぜいモデルへのコミットメントしか見ることができません。SNARK証明の検証は非常に高速 であり(通常、オンチェーンで数ミリ秒以下)、証明サイズも小さい(数キロバイト)ため、ブロックチェーンでの使用に理想的です。
短所: パフォーマンスがアキレス腱です。サーキットベースの証明は、特にモデルが大きくなるにつれて、大きなオーバーヘッドを伴います。歴史的に、SNARKサーキットは、プルーバーにとってモデルを単に実行するよりも 百万倍もの作業 になる可能性があると指摘されています。Halo2とEzklはこれを最適化していますが、それでも、大規模な行列乗算のような操作は 大量の 制約を生成します。モデルに数百万のパラメータがある場合、プルーバーはそれに対応する数百万の制約を処理し、その過程で重いFFTや多重指数演算を実行する必要があります。これにより、証明時間が長くなり(重要でないモデルでもしばしば数分から数時間)、メモリ使用量も多くなります。例えば、比較的小さなCNN(例:数十万パラメータ)でさえ、Ezklを単一のマシンで実行すると証明に数十分かかることがあります。DeepProveのチームは、DeepProveが数分でできる特定のモデルの証明にEzklが数時間かかったと述べています。大規模なモデルはメモリに収まらないか、複数の証明に分割する必要があるかもしれません(その場合、再帰的な集約が必要になります)。Halo2は 「適度に最適化」 さ れていますが、ルックアップを「チャンク化」したり、広範なビット操作を処理したりする必要がある場合は、追加のオーバーヘッドが発生します。要約すると、スケーラビリティは限定的 です。Ezklは小から中規模のモデルにはうまく機能しますが(そして実際、ベンチマークではいくつかの初期の代替案、例えばナイーブなStarkベースのVMを 上回りました)、モデルサイズがある点を超えると苦戦します。
これらの課題にもかかわらず、Ezklや同様のSNARKベースのzkMLライブラリは重要な足がかりです。それらは、検証済みML推論がオンチェーンで可能である ことを証明し、活発に利用されています。特筆すべきは、Modulus Labs のようなプロジェクトが、SNARKを使用して(重い最適化を伴い)1800万パラメータのモデルをオンチェーンで検証したことを実証したことです。コストは些細なものではありませんでしたが、それはその軌道を示しています。さらに、Mina Protocol は独自のzkMLツールキットを持っており、SNARKを使用してMina上のスマートコントラクト(Snarkベース)がMLモデルの実行を検証できるようにしています。これは、SNARKベースのzkMLに対するマルチプラットフォームサポートの拡大を示しています。