通过 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.1GB的RAM内证明一个MNIST大小的模型。迄今为止,EZKL已经得到了一些显着的早期采用,被用作各种黑客马拉松项目的基础设施。
Cathie So的circomlib-ml库包含了用于Circom的各种ML电路模板。电路包括一些最常见的ML函数。由Cathie开发的Keras2circom是一个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模型执行证明的框架。在撰写本文时,它能够在约5GB的内存和约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 最受欢迎的后端。Halo2 和 Plonky2 及其表式算术方案可以通过查找参数很好地处理神经网络非线性。此外,前者拥有充满活力的开发人员工具生态系统和灵活性,使其成为包括 EZKL 在内的许多项目的实际后端。
其他证明系统也有其优势。基于R1CS的证明系统包括Groth16,因其小型证明尺寸而闻名,以及Gemini,因其处理极大电路和线性时间验证器而闻名。基于STARK的系统,例如Winterfell证明器/验证器库,尤其在通过Giza的工具将Cairo程序的追踪作为输入,并使用Winterfell生成STARK证明来验证输出的正确性时,非常有用。
03zkML特定的证明系统
在设计能够处理先进的机器学习模型的复杂、电路不友好的操作的高效证明系统方面已经取得了一些进展。基于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 库来验证带有 halo2 电路的图像分类模型输出的照片寻宝游戏,以及 zk Section 9,它 将 AI 图像生成模型转换为用于铸造和验证 AI 艺术的电路。
zkML面临的挑战
尽管在提高和优化方面取得了飞速的进展,但zkML领域仍然面临一些核心挑战。这些挑战涉及技术和实践等方面,包括:
以最小的精度损失进行量化电路规模,特别是当网络由多个层组成时矩阵乘法的高效证明对抗攻击
量化是将浮点数表示为定点数的过程,大多数机器学习模型使用浮点数表示模型参数和激活函数,在处理zk电路的域算术时,需要使用定点数。量化对机器学习模型的准确性的影响取决于所使用的精度级别。一般来说,使用较低的精度(即较少的比特数)可能会导致准确性降低,因为这可能引入舍入和近似误差。然而,有几种技术可用于最小化量化对准确性的影响,例如在量化后对模型进行微调,以及使用量化感知训练等技术。此外,zkSummit 9上的一项黑客马拉松项目Zero Gravity显示出,针对边缘设备开发的替代神经网络架构(例如无权重神经网络)可以用于避免电路中的量化问题。
除了量化之外,硬件是另一个关键挑战。一旦通过电路正确地表示了机器学习模型,由于zk的简洁性,验证其推理的证明将变得廉价且快速。这里的挑战不在于验证者,而在于证明者,因为随着模型规模的增长,RAM消耗和证明生成时间会迅速增加。某些证明系统(例如使用sumcheck协议和分层算术电路的基于GKR的系统)或组合技术(例如将Plonky2与Groth16相结合,Plonky2在证明时间方面效率高但对于大型模型的高效证明大小较差,而Groth16在复杂模型的复杂度上不会导致证明大小增长)更适合处理这些问题,但在zkML项目中管理权衡是一个核心挑战。
在对抗攻击方面,仍然有待努力。首先,如果一个无信任的协议或DAO选择实施一个模型,在训练阶段仍然存在对抗攻击的风险(例如训练模型以在看到特定输入时表现出特定行为,这可能被用来操纵后续的推理)。联邦学习技术和训练阶段的zkML可能是最小化这种攻击面的一种方式。
另一个核心挑战是当模型保护隐私时存在模型盗窃攻击的风险。虽然可以混淆模型的权重,但在给定足够的输入输出对的情况下,从理论上讲,仍然有可能反向推导出权重。这主要是对小规模模型的风险,但仍然存在风险。
智能合约的可扩展
尽管在将这些模型优化为在zk的限制条件下运行时存在一些挑战,但改进工作正在以指数速度进行,一些人预计在进一步的硬件加速下,我们很快就能与更广泛的机器学习领域达到同等水平。为了强调这些改进的速度,zkML从0xPARC在2021年展示了如何在可验证电路中执行小规模MNIST图像分类模型的演示,到Daniel Kang在不到一年后为ImageNet规模的模型做同样的工作的论文。在2022年4月,这个ImageNet规模的模型的准确性从79%提高到92%,并且像GPT-2这样的大型模型在近期内有望成为可能,尽管目前的证明时间较长。
我们认为zkML是一个丰富而不断发展的生态系统,旨在扩展区块链和智能合约的能力,使其更加灵活、适应性强和智能化。
尽管zkML仍处于早期开发阶段,但它已经开始显示出有希望的结果。随着技术的发展和成熟,我们可以期待在链上看到更多创新的zkML用例。