POSEIDON: Privacy-Preserving Federated NeuralNetwork Learning

写在最前面,感觉这一篇的技术更贴近于密码学,所以部分核心技术读起来比较吃力。仅供大家参考哇~

Abstract—In this paper, we address the problem of privacypreserving training and evaluation of neural networks in an N-party, federated learning setting. We propose a novel system, POSEIDON, the first of its kind in the regime of privacy-preserving neural network training. It employs multiparty lattice-based cryptography to preserve the confidentiality of the training data, the model, and the evaluation data, under a passive-adversary model and collusions between up to N − 1 parties. To efficiently execute the secure backpropagation algorithm for training neural networks, we provide a generic packing approach that enables Single Instruction, Multiple Data (SIMD) operations on encrypted data. We also introduce arbitrary linear transformations within the cryptographic bootstrapping operation, optimizing the costly cryptographic computations over the parties, and we define a constrained optimization problem for choosing the cryptographic parameters. Our experimental results show that POSEIDON achieves accuracy similar to centralized or decentralized non-private approaches and that its computation and communication overhead scales linearly with the number of parties. POSEIDON trains a 3-layer neural network on the MNIST dataset with 784 features and 60K samples distributed among 10 parties in less than 2 hours.

本文提出了一个名为POSEIDON的新颖系统,旨在解决在多方联邦学习环境中训练和评估神经网络时的隐私保护问题。POSEIDON利用多方基于格的密码学技术,保护训练数据、模型和评估数据的机密性,即使在被动对手模型下以及多达N-1方之间的串通情况下也能保持安全。系统通过提供一种通用的打包方法,使得在加密数据上能够执行单指令多数据(SIMD)操作,从而高效执行安全的反向传播算法。此外,POSEIDON引入了密码学自举操作中的任意线性变换来优化密码计算,并通过定义一个受限制的优化问题来选择密码学参数。实验结果表明,POSEIDON不仅能够实现与非隐私方法相似的准确性,而且其计算和通信开销随着参与方数量的增加而线性增长。POSEIDON能够在不到2小时的时间内,在10个参与方中完成对MNIST数据集上3层神经网络的训练。

Introduction

这一部分首先讲了在大数据和机器学习时代,神经网络作为最先进的模型,在医疗保健、金融和图像识别等多个领域取得了显著的预测性能。然而,要训练一个准确且健壮的深度学习模型,需要大量多样化和异构的数据。但是,由于数据的敏感性、严格的隐私法规或商业竞争,医疗机构、公司和组织等实体之间的数据共享常常是不可行的。因此,许多领域都非常需要能够保护隐私的神经网络训练方案。

一个简单的集体训练解决方案是将多个参与方的数据外包给一个可信第三方,该第三方代表他们训练神经网络模型,并基于严格的保密协议保留数据和模型的机密性。然而,这些保密协议需要法律和技术团队花费大量时间准备,并且成本非常高。

为了解决这个问题,Froelicher等人提出了SPINDLE,这是一种在N方设置中保护隐私的机器学习模型训练的通用方法,它采用多方基于格的密码学,从而提供后量子安全保证。但作者只展示了他们的方法适用于广义线性模型,并没有提供支持复杂机器学习模型如神经网络训练所需的必要协议和功能。

接下来介绍了POSEIDON,这是一个新颖的系统,它扩展了SPINDLE的方法,能够在分布式环境中训练和评估神经网络,并为参与方的训练数据、生成的模型和评估数据提供全面的保护。POSEIDON使用多方基于格的同态加密技术,使得在N个参与方之间分布的数据集上执行具有全连接、卷积和池化等不同类型的层的神经网络成为可能。它依赖于小批量梯度下降,并通过在训练阶段保持权重和梯度的加密,来保护模型的中间更新不受任何参与方的侵犯。POSEIDON还使得加密后的模型能够用于在加密评估数据上进行保护隐私的推理。

在多个真实世界数据集和不同网络架构上对POSEIDON进行评估后,研究发现它在训练精度上与集中式或分散式非隐私方法相当。POSEIDON在训练时间上表现出色,例如,在10个参与方中,使用23个特征和30,000个样本的数据集训练一个2层NN模型只需要8.7分钟;在10个参与方之间共享60K个样本和784个特征的MNIST数据集上训练一个有64个神经元的3层NN需要1.4小时;在50个参与方之间分布的CIFAR-10数据集(60K个样本和3,072个特征)上训练一个带有卷积和池化层的NN需要175小时。

此外,POSEIDON在密码学参数选择、平衡分布式设置中训练和评估NN所需的昂贵密码学操作数量方面制定了一个受限制的优化问题。POSEIDON在灵活性、安全性和可扩展性方面都取得了进步,它不需要在参与方场所外通信保密数据,这在隐私法规下可能不可行,与需要各方在多个服务器之间分布数据的MPC解决方案形成对比。POSEIDON在通信方面与参与方数量成线性关系,而基于MPC的解决方案则是二次方的。与基于差分隐私的联邦学习方法不同,POSEIDON不会降低数据的效用,对模型准确性的影响可以忽略不计。

POSEIDON是第一个在联邦学习环境中启用N方神经网络的量子抵抗分布式学习系统,并且保护各方的机密数据、中间模型更新和最终模型权重的隐私。

Related Work

讨论了隐私保护机器学习(PPML)的两个主要研究方向:一是在多方设置中保护隐私的机器学习模型的训练,二是在神经网络模型上进行隐私保护的推理。在第一个方向上,以往的工作主要集中在广义线性模型的训练上,通常依赖于将学习任务安全外包给服务器的集中式解决方案,特别是使用同态加密(HE)技术。然而,这些工作并没有解决在多方分布式环境中保护隐私的机器学习问题,即多个参与方共同在他们的数据上训练机器学习模型。为了解决这个问题,一些工作提出了多方计算(MPC)解决方案,将任务如聚类和回归分配给2或3个服务器。尽管这些解决方案允许多个参与方在他们的数据上共同学习,但信任分配仅限于训练模型的计算服务器数量,并且依赖于诸如非共谋或服务器之间的诚实多数等假设。

只有少数工作将ML计算的分配扩展到N个参与方(N ≥4),并且消除了外包的需求。例如,Zheng等人提出了Helen系统,这是一个结合了HE和MPC技术的隐私保护线性模型学习系统。但是,使用Paillier加HE方案使得他们的系统容易受到后量子攻击。为了解决这个问题,Froelicher等人引入了SPINDLE,是一个为广义线性模型和针对后量子攻击的安全提供支持的系统。

在神经网络的隐私保护推理方面,大多数工作的操作设置是:一个中央服务器持有一个训练有素的NN模型,客户端通信他们的评估数据以获得预测即服务。他们的目标是保护服务器模型的机密性和客户端数据的机密性。一些工作提出使用基于环的分层HE方案来启用加密数据上的推理阶段,其他工作则依赖于混合方法,采用两方计算(2PC)和HE,或者秘密共享和混乱电路来实现NN上的隐私保护推理。

Boemer等人为多个HE密码库开发了一个深度学习图编译器,使得可以使用众所周知的框架(例如Tensorflow, PyTorch)训练的模型部署,并能够在加密数据上进行预测。Dalskov等人使用量化技术,通过使用MP-SPDZ,使得在Tensorflow训练的模型上进行高效的隐私保护推理成为可能。

然而,所有上述解决方案仅支持NN上的隐私保护推理,而本文的工作集中在NN的隐私保护训练和推理上,保护训练数据、生成的模型和评估数据。

接下来讨论了隐私保护神经网络(NN)训练的多种方法。一些工作集中在集中式解决方案上,使用差分隐私技术来执行随机梯度下降,以训练出能够抵御推理攻击的模型,但这些方法假设训练数据对一个可信第三方是可用的。还有一些工作依赖于同态加密(HE)将多层感知器的训练外包给中央服务器,但这些解决方案要么采用不现实的密码学参数,要么产生不切实际的性能,并且不支持N方设置中的NN训练。

为了解决这些问题,一些工作采用了多方计算(MPC)方法,将保密数据分散在多个服务器上。尽管这些方法能够在多个服务器之间分散信任并实现更好的轮复杂性,但它们没有解决N方之间的NN训练问题,并且属于云外包模型,因为各方的数据必须转移到几个服务器中,其中大多数必须被信任。

本文的工作集中在一个分布式设置中,数据所有者在本地维护他们的数据,并迭代更新集体模型,即使在存在不诚实多数的半诚实环境中,也能确保数据和模型的机密性,从而抵御被动对手和他们之间高达N-1的共谋。

另一种广泛采用的分布式训练NN的方法是联邦学习,其主要思想是在分散在多个客户端的数据上训练一个全局模型,并借助一个服务器的协助,该服务器协调每个客户端上的模型更新并平均它们。然而,这种方法存在客户端模型更新泄露本地数据信息的问题。为了解决这个问题,一些工作集中在基于HE或MPC的安全聚合技术上,但这些解决方案没有考虑到聚合值本身的潜在泄露。

另一研究领域依赖于差分隐私(DP)来实现保护隐私的联邦学习,用于NN。尽管基于DP的学习旨在减轻推理攻击,但它显著降低了模型的效用,因为训练准确的NN模型需要高隐私预算。因此,很难量化这些方法能够实现的隐私保护水平。

为了解决这些问题,本文的工作采用多方同态加密技术,在分布式环境中实现NN的零泄露训练,其中各方的中间更新和最终模型保持加密状态。

PRELIMINARIES

Neural NetWorks

这一部分介绍了神经网络(NN)的基础概念和训练过程,包括多层感知器(MLP)和卷积神经网络(CNN)的结构和工作原理。NN通过层的管道,应用前馈和反向传播步骤来提取输入和输出数据之间的复杂非线性关系。MLP由输入层、一个或多个隐藏层和输出层组成,层与层之间全连接,每层的权重通过激活函数转化为下一层的激活值。在训练过程中,每个迭代包括一次前向传播和一次反向传播,目标是最小化基于代价函数E的误差并更新权重,这个过程称为梯度下降。

CNN与MLP类似,通常包含卷积层、池化层和全连接层。卷积层通过矩阵乘法表示,并在协议中简化了操作。池化层是下采样层,它通过核与输入矩阵的当前子矩阵进行卷积,产生每个子矩阵的最小值、最大值或平均值。

反向传播是NN训练的关键部分,它需要对矩阵和向量进行转置操作,以更新权重并优化模型。本文描述了小批量梯度下降的更新规则,其中每次迭代使用大小为B的随机样本输入批次,并基于学习率η和代价函数相对于权重的梯度来更新权重。

Distributed Deep Learning

介绍了一种分布式深度学习方法,该方法使用MapReduce模型来处理多个数据提供者在分布式环境中并行训练神经网络的情况。每个参与方独立进行迭代计算,得到局部梯度,然后这些梯度在所有参与方中被聚合,并通过聚合器更新模型的平均值。这个过程会重复多次,以完成全局迭代。通过这种方式,可以在不直接共享数据的情况下,实现模型的协同训练。此外,文中还区分了局部批量大小和全局批量大小,以适应不同规模的数据集和训练需求。

Multiparty Homomorphic Encryption (MHE)

Tips:Multiparty Homomorphic Encryption (MHE) 是一种密码学技术,它允许在加密数据上直接进行计算,而不需要对数据首先进行解密。这种加密方式保留了数据的数学结构,使得加密后的数据能够参与特定的算术运算,并且当运算完成后,结果仍然是加密的。重要的是,这些计算结果在被拥有相应解密密钥的授权方解密后,会得到与原始明文数据直接进行相同运算的结果。

该系统采用CKKS变体的MHE方案,通过公共集体密钥和分布式秘密密钥实现密钥管理,支持浮点运算,并基于RLWE问题提供后量子安全保护。它允许在不共享各自秘密密钥的情况下进行安全和灵活的协作计算,并具备集体密钥切换功能,可在不解密的情况下更改密文的加密密钥。系统定义了明文和密文空间,并包含分布式和非分布式功能,如自举、编码和密钥切换,以支持同态操作和本地计算中的特定操作。

System Overview

System and threat Model

POSEIDON系统是一个多方参与的分布式神经网络训练模型,旨在保护参与方的本地数据、中间模型更新和最终模型的隐私。系统假设各方通过树状网络结构进行高效通信,但对网络拓扑保持灵活性。威胁模型考虑了被动对手和最多N-1方的勾结,这些勾结方可能会在训练阶段共享输入和观察,以提取其他方的信息。本工作不包括对模型预测阶段的推断攻击,但会讨论补充安全机制和对主动对手模型的扩展。

Objective

POSEIDON的主要目标是在多方参与的神经网络训练和评估过程中保护隐私。它旨在防止任何一方获取其他方的输入数据信息,以及防止各方和查询者获取模型的权重信息。POSEIDON特别强调数据机密性和模型机密性,确保各方和查询者只能从自己的数据中获取有限的信息,而无法了解其他方的数据或模型的具体细节。通过这种方式,POSEIDON旨在实现一个隐私保护的多方协作学习环境。

Overview of POSEIDON

POSEIDON是一个旨在实现隐私保护的神经网络训练和评估系统。它通过使用MHE加密方案来保持模型权重的加密状态,利用计算同态特性和密钥切换功能来保护参与方和查询者的数据隐私。POSEIDON采用打包方案和近似方法来支持加密下的SIMD操作和激活函数的评估,并利用分布式自举能力来处理训练中的复杂操作并刷新密文。文章将POSEIDON描述为同步分布式学习协议,并在附录中讨论了其异步版本。

High-Level Protocols

这一部分描述了POSEIDON系统中分布式神经网络(NN)训练和评估的四个阶段:PREPARE(准备)、MAP(映射)、COMBINE(组合)和REDUCE(归约)。

PREPARE(准备阶段):各方共同确定学习参数,包括隐藏层数、每层神经元数、学习率、全局迭代次数、每层使用的激活函数及其近似方法,以及本地批量大小。生成各自的密钥,并集体生成公钥。对输入数据进行编码,根节点(P1)初始化并加密全局权重。

MAP(映射阶段):根节点(P1)将当前加密权重发送给其他各方,以便进行本地梯度下降(LGD)计算。每个参与方Pi执行前向和反向传播,计算本地梯度。

COMBINE(组合阶段):各方将加密的本地梯度发送给其父节点,父节点同态地将接收到的梯度与自己的梯度相加。根节点(P1)接收全局聚合梯度。

REDUCE(归约阶段):P1使用平均聚合梯度更新全局模型权重。系统在预定义的迭代次数后停止学习过程,但也可以将多种提前停止技术集成到POSEIDON中。

然后是预测阶段。训练结束后,模型以加密形式保存,没有个体方或查询者可以访问模型权重。为了实现无意识推理,查询者使用各方的集体密钥加密其评估数据Xq。无意识推理等同于一次前向传播,但使用密文乘法代替L0与第一层权重的首次明文乘法。前向传播结束后,各方使用底层MHE方案的密钥切换功能,集体重新加密结果,以便只有查询者能够解密预测结果。

此外,文中还提到了本地梯度下降(LGD)计算的具体步骤,包括前向传播和反向传播的计算过程,以及如何使用加密数据执行这些操作。POSEIDON系统的设计目标是在保护各方数据隐私的同时,实现有效的神经网络训练和评估。

CRYPTOGRAPHIC OPERATIONS AND OPTIMIZATIONS

首先是一个小小的综述,描述了一种用于神经网络权重矩阵加密的交替打包方法,以及如何在加密数据上实现激活函数。此外,还介绍了POSEIDON加密系统中使用的密码学构件和函数,包括它们的执行流程和复杂性。最后,提出了一个优化问题,用于选择加密方案的参数,以实现成本和效率的最优平衡。

Alternating Packing (AP) Approach

详细描述了一种用于提高加密神经网络计算效率的交替打包(AP)方法。该方法通过优化旋转数量、消除矩阵转置操作,并与层的维度和神经元数量成对数关系来提高性能。AP方法结合了基于行和基于列的打包,并通过填充零来实现二的幂次维数。此外,还介绍了如何处理卷积层和池化层的打包,以及如何通过不同的打包优化策略来处理具有大量核的层。最后,协议3提供了一种初始化加密权重和编码输入矩阵及标签的通用方法。

Approximated Activation Functions

描述了在加密环境下评估非线性激活函数的方法。主要采用了最小二乘近似和优化的多项式评估技术,并针对不同的激活函数(如Sigmoid、Softmax和SmoothReLU)进行了特定的处理。为了在保持低度数的同时获得更好的近似效果,文中提出了两种方法:使用不同的权重初始化技术和进行数据的集体归一化。最后,近似的区间和度数是基于数据分布的启发式,并以保护隐私的方式进行选择。

Cryptographic Building Blocks

描述了在加密环境中优化神经网络操作的方法,特别是如何避免在加密域中执行代价高昂的转置操作。主要内容包括:

介绍了两种旋转函数RIS和RR,用于计算打包向量的内积和复制密文中槽的值。

通过修改自举操作来减少旋转次数,使用分布式自举提高效率。

提出了减少旋转次数的几种方法,包括并行处理小批量样本、利用向量中的间隙以及在自举期间嵌入旋转作为线性变换。

通过这些优化,可以在加密环境中更高效地执行神经网络训练所需的矩阵操作。

Execution Pipeline

这段文字主要描述了在加密环境下,如何高效地执行多层感知器(MLP)中的线性梯度下降(LGD)计算,特别强调了卷积层(CV)和池化层的处理方式。核心思想包括:

使用交替打包(AP)方法对权重进行编码和加密,并展示了每个步骤打包密文的形状。

在执行流水线的每个前向和后向传递中,除了最后一层外,都会消耗RIS和RR操作。

通过分布式自举(DBootstrapALT)嵌入掩蔽和旋转操作,以最小化计算成本。

对于CV层,由于内核尺寸通常小于FC层中的神经元数量,因此需要较少的RIS操作。

当CV层后跟FC层时,CV层的输出已经提供了矩阵的展平版本;而当CV层后跟池化层时,不需要RR操作,可以通过DBootstrapALT来避免。

平均池化作为线性函数,可以在加密环境下高效评估,而最大/最小池化作为非线性函数,在加密评估中不实用。

Complexity Analysis

这段是对POSEIDON中使用的密码学构件的通信和计算复杂度的详细分析。包括:表II提供了POSEIDON构件的通信和计算复杂度数据。复杂度用密钥切换操作来定义,加法操作的复杂度可以忽略。POSEIDON的通信复杂度仅取决于参与方数、全局迭代中发送的密文数量和密文大小。前向和后向传递的复杂度对CV层而言是被高估的,因为乘法数量取决于打包方案。在反向传播和前向传递的特定层可以节省旋转操作。在MAP阶段提供了每个参与方的局部计算复杂度,COMBINE阶段的加法操作复杂度可以忽略。权重更新由一方完成,使用SetScale进行除法不会消耗级别。激活函数和其导数的复杂度取决于近似度数。分布式自举的通信量与参与方数和密文大小成比例。

Parameter Selection

主要讨论了优化加密神经网络中Res操作数量的方法,并提出了一个成本函数来计算这些操作的复杂度。基于这个成本函数,作者提出了一个优化问题,用于选择加密参数POSEIDON。文章还讨论了如何根据乘法深度和安全参数来优化自举操作的数量,以及如何根据固定的规模和安全级别来制定优化问题。此外,还提出了一种多密文方法来处理大权重矩阵,通过将权重向量分割成多个密文并并行执行操作。

Security Analysis

首先是POSEIDON通过被动攻击模型下保护数据和模型的保密性,并且其安全性得到了严格的数学证明。具体来说:POSEIDON实现了数据和模型保密性,适用于至多N-1个勾结方的被动攻击模型。安全性证明遵循真实/理想世界模拟范式。CKKS方案的语义安全性基于决策性RLWE问题的难度。实用比特安全性可以通过Albrecht的LWE-Estimator工具来计算。分布式密码学协议DKeyGen和DKeySwitch的安全性基于Mouchet等人的证明。在假设RLWE问题是困难的情况下,这些协议在被动攻击模型下是安全的。DBootstrap及其变体DBootstrapALT的安全性基于引理1。

Remark1的核心思想是POSEIDON协议能够确保在被动攻击模型下,即使有N-1方被敌手腐化,也能保护训练过程中的数据和模型保密性。通过使用CKKS密码系统和一系列被证明安全的密码学协议,POSEIDON能够保证交换的模型参数是加密的,并且所有通信值在训练阶段都是安全的。模拟器能够模拟所有通信值,并且敌手无法利用随机值之间的依赖性或解密诚实方的通信值。因此,POSEIDON能够防止联邦学习攻击,这些攻击旨在从中间参数或最终模型中提取各方的私密信息。

命题2的核心思想是POSEIDON协议在预测阶段也能保护数据和模型的保密性,即使在被动敌手腐化最多N-1方的情况下。通过假设模拟器来模拟敌手的观点,证明了数据保密性和模型保密性。预测协议等同于训练迭代中的前向传递,且所有通信都是加密的,模拟器可以模拟这些加密。此外,还提到了成员推断和模型反演是范围外的攻击,并在附录中讨论了针对这些攻击的补充安全机制。

EXPERIMENTAL EVALUATION

Implementation Details

POSEIDON系统采用Go语言开发,并集成了Lattigo库来处理涉及多方的密码学操作。此外,系统利用Onet技术构建了一个去中心化的网络架构,确保了参与方之间可以通过TLS加密的TCP通道安全地交换信息。旨在保障系统的安全性和去中心化特性。

Experimental Setup

规定了一些基本的参数指标

Datasets

这一部分的核心思想是POSEIDON系统的性能评估使用了多个公开的现实世界数据集,包括乳腺癌、手写数字、癫痫发作识别、信用卡违约和街景房屋号码等数据集。实验中将彩色图像转换为灰度以减少通道数,并将特征维度调整为二的幂次以适应打包需求。为了评估系统的可扩展性,还生成了合成数据集并改变了特征或样本数量。实验中将数据集均匀随机地分配给参与方,而数据和标签的分配及其对准确性的影响则不是本文的重点。

Neural Network Configuration

这一部分的核心思想是POSEIDON系统在不同数据集上部署了不同结构的神经网络,并使用了不同的激活函数和训练策略。实验中包括了全连接网络和卷积网络,使用了不同的激活函数,并根据数据集的特性调整了网络结构和参数。此外,还提到了在实际的联邦学习环境中,参与方可以通过安全的方式共同决定学习参数。这些设置旨在测试POSEIDON的性能和可扩展性,并展示了在不同数据集上训练模型时的具体配置。

Empirical Results

这一部分主要讲述了POSEIDON系统在多个方面的性能评估结果。包括:在不同参与方数量下,POSEIDON在多个真实世界数据集上的模型准确性。POSEIDON在训练不同数据集时所需的执行时间,并讨论了如何通过增加迭代次数来提高准确性。POSEIDON的可扩展性,包括随数据特征数量、参与方数量和数据样本数量的扩展情况。讨论了POSEIDON在不同网络结构下的扩展性,特别是当网络层数增加时的表现。提供了实验数据和图表来支持评估结果,包括执行时间和通信开销的具体数值。强调了POSEIDON在保护隐私的同时,通过合作提高了模型的准确性,并且在执行时间和准确性之间寻求平衡。

Comparison with Prior Work

这一部分主要和之前的工作进行了对比,核心思想是POSEIDON作为一种隐私保护的神经网络执行解决方案,与其他最新解决方案相比,在多个方面具有优势。主要内容包括:POSEIDON在联邦学习环境中运行,与基于MPC的解决方案相比,支持更多的参与方,并且与参与方数量成线性扩展。POSEIDON在训练时间和准确率方面与其他解决方案进行了比较,并展示了其性能。POSEIDON与基于差分隐私的联邦学习方法相比,引入了不同的权衡,将准确性与隐私解耦,并为了复杂性(执行时间和通信开销)牺牲准确性。POSEIDON相比现有的基于同态加密的解决方案,在响应时间上有显著提升,并且提供了更强的安全保障。POSEIDON是唯一一个在多方设置中既执行训练也执行推理的解决方案,同时保护数据和模型的保密性,能够抵御多达N-1方的勾结。

Conclusion

这一部分是结论的总结。POSEIDON是一个创新的系统,它利用基于格的多方同态加密技术,在N方之间实现了零泄露的隐私保护联邦神经网络学习。POSEIDON不仅保护了训练数据、模型和评估数据的保密性,而且在多方勾结的被动攻击模型下也能保持安全。通过打包策略和分布式自举功能,POSEIDON证明了在多方同态加密下进行安全联邦学习的可行性。实验评估显示,POSEIDON显著提高了本地训练的准确性,并在计算和通信开销方面比传统同态加密方法有显著的效率提升。这项工作为被动对抗环境中的实用且安全的联邦训练铺平了道路,并为未来的研究指明了方向,包括扩展到有主动敌手的场景和进一步优化学习过程。

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值