用ZK来解决近期缠绕ChatGPT面临的最大问题:隐私。
原文:《Checks and balances: Machine learning and zero-knowledge proofs》by Elena Burger,a16z crypto 交易合伙人
编译:Kate
本文作者 Elena Burger,是 a16z crypto 的交易合伙人,专注于游戏、NFT、web3 媒体和去中心化基础设施。在加入团队之前,她在 Gilder, Gagnon, Howe, and Co 担任了四年的股票分析师。她拥有哥伦比亚大学巴纳德学院的历史学学士学位。
在过去的几年里,区块链上的零知识证明在两个关键目的上非常有用:(1) 通过处理链下交易和验证主网上的结果来扩展计算受限的网络;(2) 通过启用屏蔽交易来保护用户隐私,只有拥有解密密钥的人才能看到。在区块链的背景下,很明显为什么这些属性是可取的:像以太坊这样的去中心化网络如果没有对验证器处理能力、带宽和延迟无法维持的需求 ( 因此需要有效性 Rollup),就无法增加吞吐量或区块大小,并且所有交易对任何人都是可见的 ( 因此需要链上隐私解决方案 )。
但是零知识证明对于第三类功能也很有用:有效地验证任何类型的计算是否正确运行 ( 不仅仅是 EVM 链下实例化中的计算 )。这远远超出了区块链的范畴。
利用零知识证明的能力来简洁地验证计算系统的进步,现在使得用户可以从现有的每个数字产品 ( 最关键的是机器学习模型 ) 中要求区块链确保相同程度的不可信任和可验证性。对区块链计算的高需求激励了零知识证明研究,创建了具有更小内存占用和更快证明和验证时间的现代证明系统,使得现在可以在链上验证某些小型机器学习算法。
到目前为止,我们可能都体验过与一个极其强大的机器学习产品交互的潜力。几天前,我使用 GPT-4 帮助我创建了一个在国际象棋中不断击败我的 AI。这感觉像是过去几十年机器学习领域所有进步的一个缩影:IBM 的开发人员花了 12 年时间开发出 Deep Blue,一个运行在 32 节点 IBM RS/6000 SP 计算机上的模型,能够每秒评估近 2 亿步国际象棋,在 1997 年击败了国际象棋冠军加里·卡斯帕罗夫 (Gary Kasparov)。相比之下,我只花了几个小时,我只编写了很少的代码,就编写了一个能够战胜我的程序。
诚然,我怀疑我创造的人工智能能否在国际象棋中击败 Gary Kasparov,但这不是重点。关键是任何玩 GPT-4 的人都可能有类似的获得超能力的经历:不费什么力气,你就可以创造出接近或超过你自己能力的东西。我们都是 IBM 的研究人员;我们都是 Gary Kasparov。
显然,这是令人兴奋和有点令人生畏的思考。对于任何在加密行业工作的人来说,自然的冲动 ( 在惊叹于机器学习可以做什么之后 ) 是考虑潜在的中心化向量,以及如何将这些向量去中心化到一个人们可以透明地审计和拥有的网络中。目前的模型是通过吸收大量公开可用的文本和数据来构建的,但目前只有少数人控制和拥有这些模型。更具体地说,问题不是「人工智能是否具有巨大的价值」,而是「我们如何构建这些系统,使与之交互的任何人都能获得经济利益,如果他们愿意,还能确保他们的数据以尊重他们隐私权的方式使用。」
最近,有一种声音呼吁暂停或减缓 Chat-GPT 等大型人工智能项目的进展。停止进展可能不是这里的解决方案:相反,更好的做法是推动开源模型,在模型提供者希望其权重或数据是私有的情况下,用链上和完全可审计的隐私保护的零知识证明来保护它们。如今,后一种围绕私有模型权重和数据的用例在链上尚不可行,但零知识证明系统的进步将使其在未来成为可能。
可验证和可拥有的机器学习
像我使用 Chat-GPT 构建的象棋 AI 在这一点上感觉相对良性:一个具有统一输出的程序,它不会使用侵犯有价值的知识产权或侵犯隐私的数据。但是,当我们想要确保我们被告知的模型在 API 后面运行时确实是运行的模型时会发生什么?或者如果我想将经过验证的数据提取到链上的模型中,并确保数据确实来自合法方?如果我想确保提交数据的「人」确实是人,而不是试图攻击我的网络的机器人,该怎么办?零知识证明,凭借其简洁地表示和验证任意程序的能力,是实现这一目标的一种方式。
值得注意的是,今天,在链上机器学习环境中零知识证明的主要用例是验证正确的计算。换句话说,零知识证明,更具体地说,SNARK ( 简洁的非交互式知识论证 ),在 ML 上下文中因其简洁属性而最有用。这是因为零知识证明保护了证明者 ( 及其处理的数据 ) 的隐私不受窥探验证者的侵害。像全同态加密 (FHE)、功能加密或可信执行环境 (TEE) 这样的隐私增强技术更适用于让不受信任的验证者对私有输入数据运行计算 ( 更深入地探索这些技术不在本文的范围内 )。
让我们退一步,从更高层次上理解你可以用零知识表示的机器学习应用程序的类型。( 要想更深入地了解 ZK,请参阅我们关于零知识证明算法和硬件改进的文章,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% (与性能最高的非 ZK 验证 ImageNet 模型相当)。
但是仅仅收到提交的模型已经运行的证据是不够的。模型可能不能准确地表示给定的程序,因此希望提交的模型由第三方进行审计。功能承诺允许证明者确定它使用了一个已提交的模型,但它们不能保证关于已提交模型的任何内容。如果我们能够使零知识证明具有足够的可执行性来证明训练 ( 参见下面的示例#4),那么有一天我们也可以开始得到这些保证。
2. 模型完整性:你希望确保相同的机器学习算法以相同的方式在不同用户的数据上运行。这在你不希望应用任意偏见的领域非常有用,例如信用评分决策和贷款申请。你也可以使用功能承诺。为此,你将提交一个模型及其参数,并允许人们提交数据。输出将验证模型是否使用每个用户数据的提交参数运行。或者,模型及其参数可以公开,用户自己可以证明他们将适当的模型和参数应用于他们自己的(经过身份验证的)数据。这在医疗领域可能特别有用,因为法律规定患者的某些信息必须保密。在未来,这可能会使医疗诊断系统能够从完全私密的实时用户数据中学习和改进。
3.证明:你希望将来自外部经过验证的各方 ( 例如,任何可以产生数字签名的数字平台或硬件 ) 的证明集成到一个模型或任何其他类型的链上运行的智能合约中。为此,你将使用零知识证明来验证签名,并将该证明用作程序的输入。Anna Rose 和 Tarun Chitra 最近与 Daniel Kang 和 Yi Sun 一起主持了一集零知识播客,探讨了这一领域的最新进展。
具体来说,Daniel 和 Yi 最近发布了一项工作,研究如何验证由经过验证的传感器拍摄的图像是否经过裁剪、调整大小或有限的编辑等转换——这在你想证明图像不是深度伪造而是经过某种合法形式的编辑的情况下很有用。Dan Boneh 和 Trisha Datta 也做了类似的工作,使用零知识证明来验证图像的来源。
但是,更广泛地说,任何经过数字认证的信息都可以进行这种形式的验证:正在研究 EZKL 库的 Jason Morton( 下一节将详细介绍 ) 将其称为「给区块链眼睛」。任何签名的端点:( 例如,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,但不支持个人用户跟踪 ( 更多细节,请参阅这篇文章)。
这个例子是用零知识证明的隐私保护特性来对抗更弱、更恶意的人工智能形式的一种形式,所以它与上面列出的其他例子有很大的不同 ( 例如,证明你是一个真正的人,而不是一个机器人,而不透露任何关于你自己的信息 )。
模型架构和挑战
实现 SNARK( 简洁的非交互式知识论证 ) 的证明系统的突破是将许多机器学习模型放在链上的关键驱动因素。一些团队正在现有的架构 ( 包括 Plonk、Plonky2、Air 等 ) 中制作定制电路。在自定义电路方面,Halo 2 已经成为 Daniel Kang 和 Jason Morton 的 EZKL 项目等在工作中使用的流行后端,。Halo 2 的证明时间是准线性的,证明大小通常只有几千字节,验证时间是常数。也许更重要的是,Halo 2 拥有强大的开发人员工具,使其成为开发人员使用的流行 SNARK 后端。其他的团队,比如 Risc Zero,则致力于一个通用的 VM 策略。其他人正在使用 Justin Thaler 基于求和校验协议的超高效证明系统创建自定义框架。
证明生成和验证时间绝对取决于生成和检查证明的硬件,以及生成证明的电路的大小。但这里需要注意的关键是,无论所表示的程序是什么,证明的大小总是相对较小,因此验证者检查证明的负担是有限的。然而,这里有一些微妙之处:对于像 Plonky2 这样使用基于 FRI 的承诺方案的证明系统,证明大小可能会增加。( 除非它被包装在一个基于配对的 SNARK 中,如 Plonk 或 Groth16,它们的大小不会随着语句的复杂性而增长。)
这里机器学习模型的含义是,一旦你设计了一个证明系统,准确地表示一个模型,实际验证输出的成本将非常便宜。开发人员必须考虑最多的事情是证明时间和内存:以一种可以相对快速地证明模型的方式表示模型,并且理想的证明大小在几千字节左右。为了证明机器学习模型在零知识下的正确执行,你需要对模型架构 ( 层、节点和激活函数 )、参数、约束和矩阵乘法操作进行编码,并将它们表示为电路。这涉及到将这些属性分解为可以在有限域上执行的算术运算。
该领域仍处于起步阶段。在将模型转换为电路的过程中,准确性和保真度可能会受到影响。当一个模型被表示为一个算术电路时,那些前面提到的模型参数、约束和矩阵乘法操作可能需要近似和简化。当算术运算被编码为证明的有限域中的元素时,一些精度可能会丢失 ( 或者在没有这些优化的情况下,使用当前的零知识框架生成证明的成本将高得离谱 )。此外,为了精确起见,机器学习模型的参数和激活通常被编码为 32 位,但今天的零知识证明不无法在没有大量开销的情况下以必要的算术电路格式表示 32 位浮点运算。因此,开发人员可以选择使用量化的机器学习模型,其 32 位整数已经转换为 8 位精度。这些类型的模型有利于表示为零知识证明,但被验证的模型可能是高质量初始模型的粗略近似。
在这个阶段,无可否认,这是一场追赶游戏。随着零知识证明变得更加优化,机器学习模型的复杂性也在增长。已经有许多有前景的优化领域:证明递归可以通过允许证明用作下一个证明的输入来减少整体证明的大小,解锁证明压缩。也有一些新兴的框架,比如 Linear A 的 Apache 张量虚拟机 (TVM) 的分支,它改进了一个转译器,用于将浮点数转换为零知识友好的整数表示。最后,我们 a16z crypto 乐观地认为,未来的工作将使在 SNARK 中表示 32 位整数变得更加合理。
「规模」的两种定义
零知识证明可通过压缩进行扩展:SNARK 允许你使用一个极其复杂的系统 ( 虚拟机、机器学习模型 ),并以数学方式表示它,以便验证它的成本小于运行它的成本。另一方面,机器学习通过扩展来扩展:今天的模型随着更多的数据、参数和 GPU/TPU 参与训练和推理过程而变得更好。中心化的公司可以以几乎不受限制的规模运行服务器:按月收取 API 调用费用,并支付运营成本。
区块链网络的经济现实几乎以相反的方式运行:鼓励开发人员优化他们的代码,使其在计算上可行 ( 并且便宜 )。这种不对称有一个巨大的好处:它创造了一个证明系统需要变得更有效的环境。我们应该推动在机器学习中要求区块链提供同样的好处——即可验证的所有权和共享的真理概念。
虽然区块链激励了 zk-SNARK 的优化,但计算的每个领域都将受益。
致谢: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, Sun Yi, Anna Rose, Modulus Labs, DC Builder。