通过zkSNARKs证明机器学习(ML)模型推理在本十年内将成为智能合约中最重要的进展之一。这一发展开启了一个令人兴奋的广阔设计空间,使应用程序和基础设施能够进化成更复杂和智能的系统。
通过增加机器学习功能,智能合约可以变得更加自主和动态,使其能够基于实时链上数据而做出决策,而不仅仅是静态规则。智能合约将会灵活适应各种情况,包括在合约最初创建时可能没有预料到的情况。简而言之,机器学习功能将扩大我们将其上链的任何智能合约的自动化、准确性、效率和灵活性。
在许多方面,令人惊讶的是,智能合约在如今并未使用嵌入式机器学习模型,考虑到在Web3之外的大多数应用程序中机器学习的显著地位。这种缺乏机器学习的原因主要是由于在链上运行这些模型的高计算成本。例如,一个计算优化的语言模型FastBERT使用大约1800 MFLOPS(百万浮点运算),这在以太坊虚拟机(EVM)上直接运行是不可行的。
在考虑将机器学习模型应用于链上时,主要关注的是推理阶段:将模型应用于对现实世界数据进行预测。为了拥有具备机器学习规模的智能合约,合约必须能够接受这样的预测结果,但正如前面所提到的,直接在EVM上运行模型是不可行的。zkSNARKs为我们提供了一个解决方案:任何人都可以在链下运行模型并生成简明且可验证的证明,证明特定模型确实产生了特定结果。这个证明可以发布在链上,并被智能合约接受以增强其智能性。
在本文中,我们将:
回顾链上机器学习的潜在应用和用例
探索zkML核心的新兴项目和基础设施的构建
讨论现有实现面临的一些挑战以及zkML的未来展望
机器学习(ML)简介
机器学习(Machine Learning,ML)是人工智能(Artificial Intelligence,AI)的一个子领域,专注于开发算法和统计模型,使计算机能够从数据中学习并基于数据进行预测或决策。机器学习模型通常具有三个主要组成部分:
训练数据:一组用于训练机器学习算法以进行预测或对新数据进行分类的输入数据。训练数据可以采用多种形式,例如图像、文本、音频、数值数据或它们的组合。
模型架构:机器学习模型的整体结构或设计。它定义了层的类型和数量、激活函数以及节点或神经元之间的连接方式。架构的选择取决于具体的问题和使用的数据。
模型参数:在训练过程中,模型学习的值或权重,用于进行预测。通过优化算法,这些值通过迭代调整来减小预测结果与实际结果之间的误差。
模型的生成和部署分为两个阶段:
训练阶段:在训练过程中,模型接触到带标签的数据集,并调整其参数以减小预测结果与实际结果之间的误差。训练过程通常涉及多个迭代或周期,并且模型的准确性会在单独的验证集上进行评估。
推理阶段:推理阶段是指在新的未见数据上使用经过训练的机器学习模型进行预测的过程。模型接收输入数据,并应用学习到的参数生成输出,例如分类或回归预测。
目前,zkML主要关注机器学习模型的推理阶段,而不是训练阶段,主要是由于在电路内验证训练的计算复杂性。然而,zkML对验证推理的关注并不是一种限制:我们预计推理阶段将产生一些非常有趣的用例和应用。
验证推理场景
对于验证推理,有四种可能的场景:
私有输入,公开模型。模型消费者(Model Consumer,MC)可能希望将其输入对模型提供者(Model Provider,MP)保密。例如,MC可能希望向贷款人证明信用评分模型的结果,而不需披露个人财务信息。可以使用预提交方案,并在本地运行模型来实现此目的。
公共输入,私有模型。在ML作为服务的常见问题是,MP可能希望隐藏其参数或权重以保护知识产权,而MC希望验证生成的推理确实来自指定的模型,处于对抗性环境中。可以这样理解:当向MC提供推理时,MP有动机运行较轻量的模型以节省成本。通过在链上提交模型权重的承诺,MC可以随时审计私有模型。
私有输入,私有模型。当用于推理的数据非常敏感或机密,并且模型本身被隐藏以保护知识产权时,就会出现这种情况。一个例子是使用私人患者信息对医疗模型进行审计。可以使用zk的组合技术、多方计算(MPC)或FHE的变种来实现此场景。
公共输入,公共模型。当模型的所有方面都可以公开时,zkML解决了不同的用例:将离链计算的压缩和验证置于链上环境中。对于较大的模型,验证推理的简明zk证明比重新运行模型本身更具成本效益。
应用和机会
验证的机器学习(ML)推理为智能合约开辟了新的设计空间。一些加密原生的应用包括:
DeFi
1. 可验证的链外ML预言机。持续采用生成式人工智能可能有助于推动行业实施其内容的签名方案(例如,新闻出版物签署文章或图像)。签名数据已准备好进行零知识,并使数据具有组合性和可信度。ML模型可以在链外处理这些签名数据以进行预测和分类(例如,对选举结果或天气事件进行分类)。这些链外ML预言机可以用于无需信任地解决现实世界的预测市场、保险协议合约等,通过验证推理并将证明发布到链上。
2. ML参数化的DeFi应用。DeFi的许多方面可以更加自动化。例如,借贷协议可以使用ML模型实时更新参数。目前,借贷协议主要依靠组织运行的链外模型来确定抵押因子、贷款价值比(LTV)、清算阈值等,但更好的选择可能是社区训练的开源模型,任何人都可以运行和验证。
3. 自动化交易策略。展示金融模型策略的回报概况的常见方法是由MP向投资者提供各种回测。然而,没有办法验证策略师在执行交易时是否遵循了模型,投资者必须相信策略师确实遵循了模型。zkML提供了一个解决方案,即当部署到特定头寸时,MP可以提供金融模型推理的证明。这对于DeFi的管理型保险库可能特别有用。
安全性
智能合约的欺诈监控。与其由缓慢的人工治理或集中化参与者控制暂停合约的能力,不如使用ML模型来检测可能的恶意行为并执行暂停。
传统ML
1. 去中心化、无信任的Kaggle实现。可以创建一个协议或市场,允许MC或其他有兴趣的方验证模型的准确性,而无需MP披露模型权重。这对于出售模型、围绕模型准确性举办竞赛等非常有用。
2. 用于生成AI的去中心化提示市场。生成AI的提示创建已经演变成一门复杂的技艺,其中最好的输出生成提示通常具有许多修饰符。外部方可能愿意从创建者那里购买这些复杂的提示。zkML在这里可以有两种用法:1)验证提示的输出,以向潜在购买者确保提示确实创建所需的图像;2)允许提示所有者在购买后保持提示的所有权,并对购买者隐藏它,同时为其生成经过验证的图像。
身份
1. 用保护隐私的生物特征认证取代私钥。私钥管理仍然是Web3用户体验中的最大障碍之一。通过面部识别或其他独特因素抽象私钥是zkML的一个可能解决方案。
2. 公平的空投和贡献者奖励。可以使用ML模型创建用户的详细人物画像,根据多个因素确定空投分配或贡献奖励。这在与身份解决方案结合使用时尤为强大。在这种情况下,一种可能性是让用户运行一个开源模型,评估他们在应用中的参与度以及更高层次的参与,例如在治理论坛上的帖子,以推断出他们的分配。然后,他们将提供这个证明给合约以获得他们的代币分配。
Web3社交
1. Web3社交媒体的过滤。Web3社交应用程序的去中心化性质将导致更多的垃圾邮件和恶意内容。理想情况下,社交媒体平台可以使用一个社区认可的开源ML模型,并在选择过滤帖子时发布模型推理的证明。有关详细信息,请查看Daniel Kang关于Twitter算法的zkML分析。
2. 广告/推荐。作为社交媒体用户,我可能愿意查看个性化广告,但希望将我的偏好和兴趣保密不被广告商知晓。我可以选择在本地运行一个与我的兴趣相关的模型,并将其输入到媒体应用程序中为我提供内容。在这种情况下,广告商可能愿意为最终用户支付费用,但是这些模型可能比当前生产中的定向广告模型要简单得多。
创作者经济/游戏
1. 游戏内经济再平衡。可以使用ML模型动态调整代币发行、供应、销毁、投票阈值等。一个可能的模型是一种激励性合约,如果达到某个再平衡阈值并验证了推理的证明,则重新平衡游戏内经济。
2. 新型的链上游戏。可以创建合作式人类对抗AI游戏和其他创新的链上游戏,其中无信任的AI模型充当不可玩角色(NPC)。NPC采取的每个动作都会与证明一起发布到链上,任何人都可以验证以确定正在运行正确的模型。在Modulus Labs的Leela vs. the World中,验证者希望确保所述的1900 ELO AI选择国际象棋走步,而不是Magnus Carlson。另一个例子是AI Arena,一款类似于超级马里奥兄弟的AI格斗游戏。在高风险的竞技环境中,玩家希望确保他们训练的模型没有干扰或作弊。
新兴项目和基础设施
zkML生态系统可以大致分为四个主要类别:
1. 模型到证明编译器:将现有格式(如Pytorch、ONNX等)中的模型编译为可验证的计算电路的基础设施。
2. 通用证明系统:用于验证任意计算轨迹的证明系统。
3. zkML专用证明系统:专门用于验证ML模型计算轨迹的证明系统。
4. 应用:致力于独特zkML用例的项目。

模型到证明编译器
在研究zkML生态系统时,最多的关注点是创建模型到证明编译器。通常情况下,这些编译器将使用Pytorch、TensorFlow等高级ML模型转换为zk电路。
EZKL是一个库和命令行工具,用于在zk-SNARK中进行深度学习模型推理。使用EZKL,可以使用Pytorch或TensorFlow定义计算图,并将其导出为带有JSON文件中一些样本输入的ONNX文件,然后将这些文件指向EZKL以生成zkSNARK电路。通过最新的性能改进,EZKL现在可以在约2秒钟内和700MB的RAM中证明一个MNIST. 大小的模型。迄今为止,EZKL已经在各种黑客马拉松项目中作为基础设施得到了显著的早期采用。
Cathie So的circomlib-ml库包含了Circom的各种ML电路模板。电路包括一些最常见的ML函数。Cathie还开发了Keras2circom,这是一个使用底层circomlib-ml库将Keras模型转换为Circom电路的Python工具。
LinearA开发了两个zkML框架:Tachikoma和Uchikoma。Tachikoma用于将神经网络转换为仅支持整数的形式,并生成计算轨迹。Uchikoma是一个工具,将TVM的中间表示转换为不支持浮点运算的编程语言。LinearA计划支持使用字段算术的Circom和使用有符号和无符号整数算术的Solidity。
Daniel Kang的zkml是一个基于他在《Scaling up Trustless DNN Inference with Zero-Knowledge Proofs》论文中的工作,用于在ZK-SNARK中构建ML模型执行证明的框架。截至撰写本文时,它能够在约5GB的内存和约16秒的运行时间内证明一个MNIST电路。
在更通用的模型到证明编译器方面,有Nil Foundation和Risc Zero。Nil Foundation的zkLLVM是基于LLVM的电路编译器,可以验证使用流行编程语言(如C++、Rust和JavaScript/TypeScript)编写的计算模型。它是一种通用的基础设施,适用于复杂的计算,例如zkML。当与他们的证明市场结合使用时,这可以特别强大。
Risc Zero构建了一个针对开源RISC-V指令集的通用zkVM,因此支持C++和Rust等现有成熟语言,以及LLVM工具链。这允许主机和客户zkVM代码之间的无缝集成,类似于Nvidia的CUDA C++工具链,但是在其中GPU的位置上有一个ZKP引擎。与Nil类似,可以使用Risc Zero验证ML模型的计算轨迹。
通用证明系统
证明系统的改进是实现zkML的主要推动因素,特别是引入自定义门和查找表。这主要是因为ML对非线性的依赖性。简而言之,非线性通过激活函数(如ReLU、sigmoid和tanh)引入,这些函数应用于神经网络中的线性变换的输出。由于数学运算门的限制,这些非线性在zk电路中很难实现。位分解和查找表可以通过预计算非线性的可能结果到查找表中来解决这个问题,有趣的是,在zk中,这种方法在计算效率上更高。
基于Plonkish. 证明系统的后端通常是zkML最受欢迎的选择,原因就在于它们的表格式算术化方案可以很好地处理神经网络的非线性。Halo2和Plonky2以其表格化方案成为许多项目(包括EZKL)的事实标准后端,前者还具有丰富的开发者工具生态系统和灵活性。
其他证明系统也有其优势。基于R1CS的证明系统包括Groth16,其证明大小较小,以及Gemini,其能够处理极大电路和线性时间证明器。基于STARK的系统,如Winterfell prover/verifier库,尤其在通过Giza的工具链实现时非常有用,它将Cairo程序的轨迹作为输入,并使用Winterfell生成STARK证明来验证输出的正确性。
zkML-Specific Proving Systems(zkML特定的证明系统)
在设计能够处理高级ML模型复杂、不适合电路操作的高效证明系统方面取得了一些进展。例如基于GKR证明系统的zkCNN或在Zator等系统中使用组合技术,这些系统通常比它们的通用对应物更高效,这一点在Modulus Labs的基准测试报告中得到了证明。
zkCNN是一种使用零知识证明验证卷积神经网络正确性的方法。它使用和校验协议来证明快速傅里叶变换和卷积,其线性证明时间比渐近计算结果更快。已经对交互式证明引入了几种改进和泛化,包括验证卷积层、ReLU激活函数和最大池化。zkCNN尤其有趣,因为Modulus Labs的基准测试报告发现它在证明生成速度和RAM消耗方面表现优于其他通用证明系统。
Zator是一个旨在探索使用递归SNARK来验证深度神经网络的项目。验证更深层次模型的当前约束是将整个计算轨迹适应单个电路中。Zator建议使用递归SNARK逐层验证,逐步验证N步重复计算。他们使用Nova将N个计算实例减少为一个可以在单个步骤的代价下验证的单个实例。通过这种方法,Zator能够验证具有512层的网络,这与当前大多数生产AI模型的深度相当。虽然Zator的证明生成和验证时间对于主流用例来说仍然过长,但他们的组合技术仍然是有趣的。
应用
鉴于zkML处于早期阶段,大部分关注点集中在上述基础设施上。然而,现在有一些项目致力于应用方面的工作。
Modulus Labs是zkML领域中最多样化的项目之一,既在示例应用程序方面进行了工作,又进行了相关研究。在应用方面,Modulus Labs通过RockyBot(一个链上交易机器人)和Leela vs. the World(一个棋盘游戏,所有人类都与一个经过验证的链上Leela国际象棋引擎实例对弈)展示了zkML的用例。该团队还从研究角度入手,撰写了《The Cost of Intelligence》一文,对不同模型大小的证明系统的速度和效率进行了基准测试。
Worldcoin正在尝试将zkML应用于其隐私保护的人类身份证明协议。Worldcoin使用定制硬件处理高分辨率虹膜扫描图像,将其插入其Semaphore实现中。这可以用于执行诸如成员资格证明和投票等有用的操作。他们目前使用可信运行时环境和安全的隔离区来验证相机签名的虹膜扫描图像,但他们最终的目标是使用零知识证明来证明神经网络的正确推理,以提供加密级别的安全保证。
Giza是一个使用完全信任的方法在链上部署AI模型的协议。它使用技术堆栈,其中包括用于表示机器学习模型的ONNX格式、用于将这些模型转换为Cairo程序格式的Giza转译器、用于以可验证和确定性的方式执行模型的ONNX Cairo Runtime,以及用于在链上部署和执行模型的Giza Model智能合约。虽然Giza也可以归入模型到证明编译器的类别,但他们作为ML模型市场的定位是当今最有趣的应用之一。
Gensyn是一个分布式硬件供应网络,用于训练ML模型。具体而言,他们正在开发一种基于梯度下降的概率审计系统,并使用模型检查点来实现分散GPU网络来训练全尺寸模型。虽然他们在这里的zkML应用非常特定于他们的用例-他们希望确保当一个节点下载和训练模型的一部分时,他们对模型更新的诚实性-但它展示了结合zk和ML的强大力量。
ZKaptcha专注于解决web3中的机器人问题,为智能合约提供验证码服务。他们目前的实现方式是,最终用户通过完成验证码来生成人类工作的证明,这由他们的链上验证器进行验证,并通过几行代码可供智能合约访问。目前,他们主要依赖于zk,但他们打算在未来实现zkML,类似于现有的web2验证码服务,这些服务通过分析鼠标移动等行为来确定用户是否为人类。
鉴于zkML市场仍处于早期阶段,很多应用案例都是在黑客马拉松层面进行尝试的。项目包括AI Coliseum(使用EZKL构建的链上AI竞赛,使用ZK证明验证机器学习输出)、Hunter z Hunter(使用EZKL库进行照片寻宝游戏,使用halo2电路验证图像分类模型的输出)以及zk Section 9(将AI图像生成模型转换为电路,用于AI艺术的铸造和验证)。
zkML的挑战
虽然在改进和优化方面取得了一些成果,但zkML领域仍面临一些核心挑战。这些挑战涉及技术和实践等各个方面,包括:
1. 最小精度损失的量化
2. 特别是当网络由许多层组成时的电路规模
3. 矩阵乘法的高效证明
4. 对抗性攻击
量化是将浮点数(大多数ML模型用于表示模型参数和激活)表示为定点数的过程,在处理zk电路的场合下,这是必要的。量化对机器学习模型的准确性的影响取决于所使用的精度级别。通常情况下,使用较低的精度(即较少的比特数)可能会导致准确性降低,因为可能引入舍入和近似误差。然而,有几种技术可用于最小化量化对准确性的影响,例如在量化后微调模型和使用量化感知训练等技术。此外,Zero Gravity是zkSummit 9黑客马拉松的一个项目,展示了为边缘设备开发的备选神经网络架构(如无权重神经网络),以避免电路中的量化问题。
除了量化外,硬件是另一个关键挑战。一旦将机器学习模型适当地表示为电路,由于zk的简洁性质,验证其推理的证明变得廉价且快速。挑战在于证明者,而不是验证者,因为随着模型规模的增长,RAM消耗和证明生成时间会迅速增加。某些证明系统(例如使用和校验协议和分层算术电路的基于GKR的系统)或组合技术(例如将效率高但对于大型模型的证明大小效率低的Plonky2与随着模型复杂性不断增加而不断增加的Groth16结合在一起)更适合处理这些问题,但在构建zkML项目时管理权衡是一个核心挑战。
在对抗性方面,仍然有工作要做。首先,如果一个信任协议或DAO决定实施一个模型,在训练阶段仍存在对抗性攻击的风险(例如训练一个模型以在看到特定输入时以特定方式行为,以便在以后的推理中进行操纵)。联邦学习技术和训练阶段的zkML可能是减小这种攻击面的一种方式。
另一个核心挑战是在隐私保护的模型中发生模型窃取攻击的风险。虽然模型的权重可以被混淆,但在足够数量的输入-输出对的情况下,理论上仍然有可能逆向工程出权重。尽管这主要是针对规模较小的模型的风险,但仍然是一个风险。
扩展智能合约
虽然在优化这些模型以符合zk的约束方面还存在一些挑战,但改进工作正以指数速度进行,并有人预计在进一步的硬件加速下,我们很快就能够实现与更广泛的ML领域的相当水平的效果。值得强调的是,zkML已经从0xPARC的zk-MNIST演示开始(展示了如何在可验证电路中执行小规模的MNIST图像分类模型),到Daniel Kang在不到一年的时间内为ImageNet规模的模型做同样演示的论文。2022年4月,这个ImageNet规模的模型的准确率从79%提高到了92%,并且像GPT-2这样的模型在不久的将来也有可能实现,尽管当前的证明时间较长。
我们认为zkML是一个丰富且不断发展的生态系统,旨在提高区块链和智能合约的灵活性、适应性和智能性。
尽管zkML仍处于发展的早期阶段,但它已经展现出了有希望的结果。随着技术的不断演进和成熟,我们可以期待在链上看到更多zkML创新的应用案例。
所有评论