ZKML:区块链世界的AI+隐私

news2024/11/24 11:40:19

1. 引言

本文主要参考:

  • 2023年6月drCathieSo.eth 与 Ethereum Malaysia 视频 ZKML: Verifiable & Privacy-Preserving Compute in Blockchain
  • 2023年6月drCathieSo.eth 与 PSE 视频 Folding Circom circuits: a ZKML case study - Dr. Cathie So

ZKML(Zero-Knowledge Machine Learning),本文内容主要分为三大块:

  • 1)背景知识:
    • ZKP介绍
    • 为何需要ZKML?
    • 什么是ZKML?
  • 2)当前现状:
    • ZKML现状
    • ZKML挑战
    • 现有ZKML库
  • 3)未来展望:
    • ZKML方向PSE未来规划
    • 从何处着手做ZKML
    • 有启发的ZKML应用
    • 头脑风暴

2. 背景知识

2.1 ZKP介绍

何为ZKP(Zero-Knowledge Proof):
在这里插入图片描述
ZKP具有4大属性:

  • 1)Completeness完备性:若Prover诚实,则最终将让Verifier信服。
  • 2)Soundness可靠性:当且仅当statement为true时,Prover才能让Verifier信服;若statement为false,则无法让Verifier信服。
  • 3)Zero-Knowledge零知识性:除了statement为true这个事实,不会向Verifier泄露额外信息。
  • 4)Succinctness简洁性:相比于底层计算,proof size要明显小很多。【简洁性,对于区块链场景来说,是一个尤其用用的属性。】

2.2 为何需要ZKML?

以太坊,被称为World Computer(世界计算机),当前期存在以下2大限制,可借助ZK(ML)来解决:

  • 1)以太坊具有有限的区块size和合约size:如当前合约size约为24KB,当做复杂逻辑时,需将拆分为多个合约。
    借助ZKP的第4个属性(简洁性),可将复杂的链下计算压缩为一个简洁证明,并在以太坊链上验证。应用案例有:L2 zkRollups等。
  • 2)以太坊交易是完全透明的。
    借助ZKP的第3个属性(零知识性):在保证隐私的前提下,证明拥有特定信息或数据。应用案例有:Tornado Cash、zkID等。

即,可借助ZK来证明拥有特定数据,如:

  • 知道某图片上 ( x , y ) (x,y) (x,y)坐标位置上的像素值为 z z z

不过这种data(或value) proving 应用相对来说意义不大,且仅借助ZK就够了,无需ZKML。借助机器学习,可证明与数据(data)关联的信息,如:

  • 某图片上有一只猫。

这样仅借助ZK就不够了,还需要某些机器学习模型或算法。因此就需要ZK+ML,来证明数据内容关联的信息。

2.3 什么是ZKML?

ZKML,主要针对的是机器学习推理证明,而不是模型训练证明:
在这里插入图片描述
有针对NN(Neural Network神经网络)的ZKP电路。
根据不同的应用场景,主要分为三大类:

  • 1)公开的输入数据 和 公开的模型权重,对应的输出也为公开的
  • 2)私有的输入数据 和 公开的模型权重
  • 3)公开的输入数据 和 私有的模型权重

2.3.1 ZKML:公开的输入数据 和 公开的模型权重

公开的输入数据 和 公开的模型权重,对应的输出也为公开的:借助ZKP的简洁性,可将整个机器学习模型压缩在单个solidity合约内。从而实现在链下进行机器学习,在链上进行验证。这与zkRollup类似,只不过此处链下进行的是机器学习推理计算,而不是L2交易计算。
在这里插入图片描述
最近的应用案例有:

  • EIP-7007: zkML AIGC-NFTs, an ERC-721 extension interface for zkML based AIGC-NFTs:Verifiable AI generated NFT。

开源代码实现见:

  • https://github.com/AIGC-NFT/implementation(Solidity + JavaScript)

其简化的工作流示意为:
在这里插入图片描述

ZKML-AIGC-NFTs(兼容EIP7007,并做了Claimable扩展)中主要包含4大模块:

  • 1)ML Model机器学习模型:包含预训练模型的权重,根据推理输入,可生成输出。
  • 2)ZKML Prover:基于输入、输出以及推理任务,生成zk proof。
  • 3)AIGC-NFT智能合约:为兼容ERC7007的合约,具有全部ERC721功能。
  • 4)Verifier智能合约:实现了verify函数,根据推理任务以及zk proof,返回验证boolean结果。

关键点在于:

  • 用户在将prompt提交给ML Model之前,会先调用AIGC-NFT合约的claim接口(即用户先向以太坊发起一笔交易),来claim对该prompt的所有权。这样模型owner就仅能为用户上传aigc并mint NFT,而无法窃取所有权。

2.3.2 ZKML:私有的输入数据 和 公开的模型权重

私有的输入数据 和 公开的模型权重:私有的输入数据,可为想要隐藏的个人敏感数据。而公开的模型权重,对应用户信任的可验证模型。
在这里插入图片描述
可用于需要隐私的场景,如:

  • 智能合约钱包的生物特征认证:在合约内进行生物特征认证,而不是在设备端进行生物特征认证,从而实现trustless生物特征认证。公开的模型权重,对应为某知名的擅长识别指纹或人脸的模型。
  • 私有图像市场或私有数据市场:实现图像或数据的买卖。

2.3.3 ZKML:公开的输入数据 和 私有的模型权重

公开的输入数据 和 私有的模型权重:
在这里插入图片描述
应用案例,类似具有某专利模型的某(Web2)公司,证明其对每个人都采用了相同的模型。如,Twittter最近开源了其算法,但如何来确认其实际运行的是相同的算法——可在隐藏模型权重的情况下,对模型哈希值进行比较。

一个具体的应用案例为:

  • ZKaggle:为去中心化的bounty平台,用于主办、验证和支付bounty。与Kaggle类似,但是添加了隐私保护特性。
    解决了传统机器学习bounty平台的限制——为验证性能,要求公开整个模型。借助ZKP,使得开发者可用公开数据来验证私有模型。

开源代码见:

  • https://github.com/socathie/ZKaggleV2(Solidity + JavaScript)

基本架构图为:
在这里插入图片描述

其中:

  • circomlib-ml:为易于理解的Circom库,包含了TensorFlow Kera中计算common layers的电路。
  • keras2circom:为用户友好的转换器,将用Python编写的ML模型转换为Circom电路。
  • pyTorch2circom:

3. 当前现状

3.1 ZKML现状

当前并没有ZKML相关产品,现阶段主要有:

  • ZKML黑客松
  • POC原型
  • 研究
  • 服务端ZKML:即Prover为具有数TB内存的大型机器,但是更多的应用场景在客户端(设备端)。

3.2 ZKML挑战

ZKML挑战主要在于:

  • 1)挑战一:机器学习与ZK电路内在数学不兼容:

    • ML模型采用浮点数权重:机器学习模型中的基础梯度演算中包含了大量的小数,性能好的模型通常使用(至少32bit的)浮点数权重。

    • ZK电路采用定点数运算:ZK电路中通常使用整数。

    • 需要量化:若想要在手机上做机器学习,工程师并不知道如何 使用量化来 将其模型转换为8-bit或16-bit模型。
      量化分为2方面:

      • 训练或预训练量化:这样量化模型不会丢失太多精度。
      • 后训练量化:即正常训练模型,尽量根据量化位数字来量化。这样会丢失更多的精度。

      当某些应用(如指纹识别)要求很高的精度时,这是一大挑战。不过现有的LLM(大语言模型)和 stable diffusion模型,量化时,性能降级并不明显。因此有Fackbook LLM的8-bit版本——LLaMA,可在笔记本上运行。原因在于这些大模型对量化更模糊。
      当需要更高的精度时——如分类场景,量化就是挑战了。

  • 2)挑战二:ZKML太太昂贵了:

    • 用ZK方式做机器学习,比只做机器学习,要贵约1000倍:如在GB级内存机器上做ML,则需要在TB级内存机器上做ZKML。
    • 借助Recursive ZKP?:可用于提升客户端ZKML性能。
    • 等待硬件加速技术的发展?:可用于提升服务端ZKML性能。

    需注意的是,不同于证明神经网络模型中的所有层,能否只证明某数据模型中的最后三层呢?——答案是肯定的,具体取决于应用场景。如证明某图像,可对该图像进行哈希,与此同时,将该图像输入到某模型并获得某结果,仅对模型的最后三层进行ZK证明,可能存在如下问题:

    • 在最后三层之前,可能篡改数据。
    • 可能泄露数据的某些细节。
  • 3)挑战三:现有投入不够。

    • 当前约有四五个项目致力于ZKML,以ZKML作为其商业目标:与TensorFlow和PyTorch的人员投入相比,远远不够。
    • 需将ML operation 定制化转换为 ZK template
    • 想法很多,但人手不够

3.3 现有ZKML库

现有ZKML库有:

  • 1)https://github.com/zkonduit/ezkl(Rust):ezkl为可做深度学习模型推理的库和命令行工具。将ML转换为ZK电路。基本工作流程为:

    • 1.1)使用常规PyTorch或Tensorflow来定义某computational graph。
    • 1.2)将最终的operation graph导出为.onnx文件,将某些sample输入导出为.json文件。
    • 1.3)使用ezkl来处理.onnx和.json文件,以生成相应的ZK电路(当前为Halo2电路)。

    ezkl 近期增加了Python bindings,可在不安装Rust的情况下,直接在Python环境下运行 。

  • 2)https://github.com/ddkang/zkml:以ZK方式构建机器学习模型执行证明的框架。亮点为:

    • 2.1)致力于解决模型训练的ZKML
    • 2.2)致力于如GPT2、Bert和Diffusion模型
    • 2.3)与Daniel Kang的论文配套
  • 3)https://github.com/socathie/circomlib-ml 和 https://github.com/socathie/keras2circom:开源库,寻找贡献者ing。定位为:

    • 机器学习的Circom电路库。
    • Python工具:将tf.keras模型移植到某circom电路中。

4. 未来展望

4.1 ZKML方向PSE未来规划

当前PSE在ZKML方向的规划见:

  • ZKML Research Initiatives

具体规划主要分为3大方向:

  • 1)Benchmarking:
    • 1.1)quantization量化如何影响模型精度?即如何避免性能降级。
    • 1.2)证明时长、验证时长、所需内存量等等。
    • 1.3)类似工作有:Modulus Labs的《The Cost of Intelligence: Proving Machine Learning Inference with Zero-Knowledge》。
  • 2)ZK友好的机器学习:如:
    • 2.1)无权重神经网络:如https://github.com/zkp-gravity/0g-halo2(Rust):使用Halo2来做无权重神经网络推理证明。
    • 2.2)Boolean circuits:见[2023年4月twitter讨论]。(https://twitter.com/cronokirby/status/1642963522924711936)
    • 2.3)Binarized神经网络:见2016年论文《Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1》。
    • 2.4)Truth table net:见2023年论文《A Scalable, Interpretable, Verifiable & Differentiable Logic Gate Convolutional Neural Network Architecture From Truth Tables》。
    • 2.5)以及受全同态加密启发的机器学习方案等等。
  • 3)Folding using Nova/Sangria:使用Nova(基于R1CS约束系统nova-ml) 或 Sangria(基于PLONK约束系统) 来实现Recursive ZKML。如对大量图片应用同一模型。

4.2 从何处着手做ZKML

不同的技术或知识背景,可采用不同的方式来着手做ZKML:

  • 1)若具有机器学习背景,可 :

    • 1.1)玩转 ezkl(Rust)库,将某些现有模型转换为ZK电路并证明。
    • 1.2)构建ZKML应用,如algo trading算法交易、指纹识别等。
  • 2)若具有ZK背景,可:

    • 2.1)学习Circom、Halo2、Nova
    • 2.2)帮助ML工程师将其模型转换为ZK版本
    • 2.3)为 circomlib-ml、ezkl、keras2circom等开源库贡献。
    • 2.4)加入PSE research initiative。

4.3 有启发的ZKML应用

Modulus Labs发布了RockyBot——首个完全链上AI交易机器人。
在这里插入图片描述
Modulus Labs还发布了链上机器学习游戏 Leela Vs World Chess Game:
在这里插入图片描述

4.4 头脑风暴

具体见2023年6月drCathieSo.eth 视频 ZKML: Verifiable & Privacy-Preserving Compute in Blockchain 最后半小时讨论。

参考资料

[1] 2023年6月PSE视频 ZKML: Verifiable & Privacy-Preserving Compute in Blockchain
[2] Zero Knowledge Proofs : What exactly are they?
[3] drCathieSo.eth 2023年3月hackmd ZKML: Bridging AI/ML and Web3 with Zero-Knowledge Proofs
[4] zkML: Demo for circomlib-ml on Goerli testnet
[5] drCathieSo.eth 2023年5月hackmd ZKML Research Initiatives
[6] Modulus Labs团队2023年3月博客 Chapter 6: The World’s 1st On-Chain AI Game

zkML系列博客

  • zkML零知识机器学习介绍
  • ZKML:ZK+机器学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/752499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决SpringMVC中@ResponseBody返回中文乱码

错误 解决方案一 Controller中的注解采用如下方式&#xff1a; GetMapping(value "/init" ,produces "application/json;charsetutf-8")这种方式仅对设置了的方法有效。 解决方案二 在applicationContext.xml中添加如下代码&#xff1a; <!-- 解…

广播与组播

目录 一、广播1. 什么是广播&#xff1f;2. 广播的实现 二、组播1. 分类的IP地址2. 多播IP地址3. 组播的实现 广播与组播和实现UDP通信的代码差不多 一、广播 1. 什么是广播&#xff1f; 数据包发送方式只有一个接受方&#xff0c;称为单播 如果同时发给局域网中的所有主机&…

解决vite+vue3打包部署到非根目录路径问题

修改vite.config.js文件&#xff0c;base为部署路径 base配置选项&#xff1a;

vue3 my-cron-vue3插件的使用

my-cron-vue3 这是一个cron表达式生成插件,基于vue3.0与element-plus实现。 npm i my-cron-vue3//前置配置 import { createApp } from vue import ElementPlus from element-plus; import element-plus/lib/theme-chalk/index.css; import App from ./App.vue //全局引入 imp…

探索华为、思科和瞻博网络的基本ACL和高级ACL配置方法

在网络安全中&#xff0c;访问控制列表&#xff08;Access Control List&#xff0c;简称ACL&#xff09;是一种重要的工具&#xff0c;用于控制数据包在网络中的流动。多家网络设备厂商提供了各自的ACL配置方法&#xff0c;其中华为、思科和瞻博网络是备受认可和使用广泛的品牌…

(中等)LeetCode 剑指OfferII 074. 合并区间

排序&#xff1a; 用数组merged存储最终的答案 首先&#xff0c;将列表中的区间按照左端点升序排序&#xff0c;将第一个区间加入merged数组中&#xff0c;并按顺序依次考虑之后的每个区间&#xff1a; 如果当前区间的左端点在数组merged中最后一个区间的右端点之后&#xf…

ChatGPT提问的万能公式,强烈建议收藏!泰裤辣!

在实际使用GPT的时候&#xff0c;并不是GPT不够强大&#xff0c;而是我们需要很多时间去调教AI&#xff0c;以便输出我们期望的答案&#xff0c;为了让输出无限的靠近你的期望&#xff0c;就需要下面这个万能的框架&#xff0c;如果大家记不住这个框架或者没有形成习惯&#xf…

nginx相关

1、nginx无默认配置文件 参考文章&#xff1a;nginx配置失败&#xff0c;卸载后重装无 nginx.conf文件_haojuntu的博客-CSDN博客 2、nginx更改服务器的端口号 参考文章&#xff1a;https://www.cnblogs.com/chaosfe/p/16123585.html#:~:text%E6%88%91%E4%BB%AC%E6%9F%A5%E7%…

【雕爷学编程】Arduino动手做(149)---MAX9814咪头传感器模块7

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

​LeetCode解法汇总​979. 在二叉树中分配硬币

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给定一个有 N 个结点的二叉树的根结点 root&#xff0c;树中的每个结点上都对应…

从0到1学习Yalmip工具箱(2)-决策变量进阶

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 1.决策变量的定义 1.1 sdpvar 上文简单介绍了sdpvar函数的用法&#xff0c;接下来将对其进行详细介绍。复习一下&#xff0c;sdpvar函数的基本语…

模板方法模式:简化代码,提高复用性

在软件开发中&#xff0c;我们经常会遇到一些算法或业务流程&#xff0c;其中的步骤或顺序是固定的&#xff0c;但某些步骤的具体实现方式可能会有所不同。这时&#xff0c;模板方法模式就能派上用场。模板方法模式是一种行为设计模式&#xff0c;它定义了一个算法的骨架&#…

环肽科研试剂:161552-03-0,Cyclo(-Arg-Gly-Asp-D-Phe-Lys),IC50为0.94nM

资料编辑|陕西新研博美生物科技有限公司小编MISSwu 五元环肽Cyclo(-Arg-Gly-Asp-D-Phe-Lys) &#xff08;CAS号&#xff1a;161552-03-0&#xff09;&#xff0c;是αvβ3整联蛋白的有效和选择性抑制剂&#xff0c;IC50为0.94nM。可以高放射化学纯度&#xff08;>97&#xf…

高数笔记2(第一章函数 极限 连续-无穷小量与无穷大量)

目录 二、无穷小量与无穷大量概念 &#xff08;1&#xff09;无穷小的概念&#xff08;2&#xff09;无穷小的性质无穷个无穷小的和不是无穷小-证明无穷个无穷小量的乘积不是无穷小-证明&#xff08;没看懂&#xff09;无穷小量与有界量的乘积仍是无穷小-证明 &#xff08;3&am…

IIS部署vue项目刷新404问题

在dist目录下新建web.config文件 <?xml version"1.0" encoding"UTF-8"?> <configuration><system.webServer><rewrite><rules><rule name"Handle History Mode and custom 404/500" stopProcessing"t…

前端(六)——TypeScript在前端中的重要性与应用

&#x1f60a;博主&#xff1a;小猫娃来啦 &#x1f60a;文章核心&#xff1a;TypeScript在前端中的重要性与应用 文章目录 什么是TypeScript&#xff1f;TypeScript与JavaScript的关系如何使用TypeScriptTypeScript在前端开发中的应用场景提升开发效率减少错误和调试时间优化…

剑指offer04:在有序二维数组中查找某个数字

文章目录 一、题目描述二、解题思路与代码实现1.解题思路2.代码实现 一、题目描述 二、解题思路与代码实现 1.解题思路 方法一&#xff1a; 暴力遍历&#xff0c;可以做剪枝操作&#xff0c;如果遍历的数字大于target&#xff0c;就直接break。 方法二&#xff1a; 二分查找…

javaweb使用Thymeleaf 最凝练的CRUD项目-下

javaweb使用Thymeleaf 最凝练的CRUD项目-下 10、执行保存 ①目标 提交表单后&#xff0c;将表单数据封装为Soldier对象&#xff0c;然后将Soldier对象保存到数据库。 ②思路 ③代码 [1]Servlet方法 protected void saveSoldier(HttpServletRequest request, HttpServletR…

第三方api对接怎么做?淘宝1688api接口怎么对接?

在今天的互联网上&#xff0c;第三方API对接是必不可少的。这种技术将不同的应用程序/服务连接在一起&#xff0c;创造了无限的可能性。 第三方api对接怎么做&#xff1f; 1、与支付公司签约 首先&#xff0c;通过正规的渠道&#xff0c;如支付公司官网或正规服务商&#xf…

spring boot学习第二篇:spring boot2.6.4版本启动接口服务

1、先启动好 参考我的spring boot学习第一篇文档&#xff1a;spring boot 1.5.x版本启动接口服务_veminhe的博客-CSDN博客 需要改动2个地方 pom.xml里面 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par…