AlphaX: eXploring Neural Architectures with Deep Neural Networks and Monte Carlo Tree Search中文译文

AlphaX:利用深度神经网络和蒙特卡罗树搜索探索神经结构

Linnan Wang   Yiyang Zhao   Yuu Jinnai   Yuandong Tian   Rodrigo Fonseca           Brown University  Facebook AI Research

摘要

我们介绍AlphaX,一个完全自动化的代理,从零开始设计复杂的神经架构。AlphaX使用分布式蒙特卡罗树搜索(MCTS)和超深度神经网络(DNN)来探索搜索空间。MCTS引导转移学习,通过在细粒度状态下动态平衡探索(exploration)开发(exploitation),从本质上提高了搜索效率,而Meta- DNN预测网络的准确性来指导搜索,并提供一个估计的奖励来加速推出( rollout)。随着搜索的进展,AlphaX也会为Meta- DNN生成训练数据。因此,Meta- DNN的学习是端到端的。在GPU的8天内,AlphaX找到了在CIFAR-10上排名第一的类别与实际结果相符的准确率到97.88%的神经架构找到了在ImageNet上的排名第一的类别与实际结果相符的准确率达到75.5%的神经架构。我们还在大规模NAS数据集上评估AlphaX的再现性。在NASBench- 101中,AlphaX还演示了随机搜索和正则化进化找到全局最优过程中3倍和2.8倍的速度。最后,我们证明所搜寻的架构改善了各种视觉应用,从神经风格的转移,到图像字幕和目标侦测

 

  1. 介绍

设计高效的神经结构是非常困难的。典型的设计迭代从领域专家的探索式设计假设开始,然后是经过数小时GPU训练的设计验证。在找到一个令人满意的架构之前,整个设计过程会呈现许多这样的迭代。神经架构搜索(Neural Architecture Search, NAS)已经成为一种很有前途的工具,可以减轻人类在这个尝试和错误设计过程中的努力,但是目前NAS方法所需要的大量计算资源促使我们研究搜索效率。

AlphaGo/AlphaGoZero[33]最近在围棋游戏中表现出了超人的表现,通过使用一种特定的搜索算法——蒙特卡罗树搜索(MCTS)[14, 4]。考虑到当前的游戏状态,MCTS逐渐为其后续的游戏状态建立一个在线模型,根据当前和之前游戏的搜索经验评估在该状态下的获胜机会,并做出决策。搜索经验来自以前的搜索轨迹尝试过的目标(称为rollouts)及其结果(无论玩家是否获胜)。与传统的通过随机自玩直至游戏结束来评估轨迹结果的MCTS方法不同,AlphaGo使用预测模型(或价值网络)来预测结果,其方差要小得多。此外,由于其内置的探索机制使用的树(UCT)[2]的上置信界,基于其在线模型,MCTS动态调整自己以适应最有前途的搜索区域,在这些区域可能会产生良好的结果。

受此启发,我们提出AlphaX使用MCTS进行有效的模型架构搜索,使用Meta- DNN作为预测模型来估计采样架构的准确性。与随机搜索相比,AlphaX建立了一个指导未来搜索的在线模型,与Q-learning、正则化进化、Top-K等贪心方法相比,AlphaX能够动态地权衡探索和开发,用更少的搜索尝试就能摆脱局部最优解。图1总结了这些权衡。此外,虽然之前适用于特定应用架构搜索[40,28]只在CIFAR-10做了性能报告,我们的分布式AlphaX系统可以按比例放大到32个机器(用32倍的加速比例),在CIFAR-10上达到更好的精度,并且能在大规模数据集ImageNet上与SOTA表现得不相上下。特别是,AlphaX在NASBench-101上寻找最佳性能网络的速度比随机搜索和正则化进化快3倍。

 

图1:NAS算法的比较:

  1. 随机搜索在不使用之前的rollouts(之前的搜索轨迹)的情况下做出独立的决策。在线模型是基于之前的rollouts来评估当前搜索分支的前景如何,而随机搜索没有在线模型
  2. 搜索方法由以前的发布建立的在线性能模型指导。对于静态的、粗粒度的探索策略(例如Q-learning中的贪心策略),它们可能很快陷入次优解决方案;逃逸的机会沿轨迹呈指数递减。
  3. AlphaX为适应性探索建立了性能和访问计数的在线模型。
  4. 不同搜索算法在NASBench-101上的性能。AlphaX的采样效率比随机搜索h和基于贪婪的Q-Learning高3倍和1.5倍。

2. 相关介绍

蒙特卡洛树搜索(MCTS): DeepArchitect[28]为NAS实现了普通的MCTS,但没有一个预测模型,Wistuba[40]使用当前搜索的统计数据(例如RAVE和上下文奖励预测)来预测状态的性能。相比之下,我们的性能评估来自到目前为止的搜索结果和从已知架构的性能中学习的模型(Meta-dnn),并且可以推广到不可见的架构。之前的工作只在CIFAR-10上做了性能报告,而AlphaX在CIFAR-10、ImageNet和NASBench-101上的都做了性能报告。最重要的是,AlphaX是第一个可伸缩的基于MCTS的设计代理。

贝叶斯优化(Bayesian Optimization(BO)):是超参数搜索的一种常用方法[11,34,39,13];实践证明,该方法是解决小规模问题的有效黑盒优化技术,例如为随机梯度下降(SGD)找到较优的超参数。在一个大规模的问题中,它需要一个良好的、复杂的高维表示内核来工作,需要计算协方差矩阵O(n)的逆,该逆随样本(n)二次增加,所以BO不是一个实用的NAS算法。

强化学习(RL):已经研究了几种用于NAS的RL技术[3,44]。Baker等人提出了一种Q-learning agent来设计网络架构[3]。agent采取一种e-greedy策略:在概率为1 - e的情况下,它选择当前模型估计的最佳预期收益(即准确性)的操作,否则一致选择一个操作。Zoph等人构建了一个经过策略梯度训练的RNN agent来设计CNN和LSTM[44]。然而,在香草策略梯度中直接最大化期望收益可以得到局部最优解[27]。相比之下,MCTS记录了各状态的预期回报和探索次数,以在状态水平来平衡探索和开发。

爬山算法(hill climbing (HC): Elsken等人提出了NAS[7]的一种简单的爬山算法。从一个架构开始,他们在转移到性能最好的子代之前培训每个后代网络。Liu等人部署了一种波束搜索,其过程类似于爬山,但选择的是top-K架构,而不是最好的[17]。HC类似于普通的策略梯度,倾向于陷入一个局部最优,而它永远无法逃脱,而MCTS证明了在给定足够时间[14]的情况下,向全局最优收敛。

进化算法(Evolutionary AlgorithmEA):进化算法将每个神经网络表示为一串基因,通过突变和重组来搜索架构空间[26、36、35、12、8、19、31、41、25、37、30]。选择性能最好的神经网络字符串生成子模型。选择的过程代替了开发,而突变是为了鼓励探索。然而,遗传算法不考虑单个状态的访问统计,其性能与随机搜索不相上下,因为缺少一个在线模型来提供决策

 

3.AlphaX:一个可伸缩的MCTS设计代理

3.1。设计、状态和动作空间

设计空间:

不同领域任务的神经结构,例如对象检测和图像分类,遵循的是完全不同的设计。这将为设计代理呈现不同的设计空间。AlphaX非常灵活,可以用直观的状态和抽象动作来支持各种搜索空间。在这里,我们提供了在我们的实验中使用的两个搜索空间的简要描述。

•NASNet搜索空间: 提出的搜索一个阶级式的cell结构,如图3a所示。 有两种类型的cell,Normal Cell(NCell)和Reduction Cell(RCell)。NCell使用padding来保持输入和输出的尺寸大小,而RCell使用stride将高度和宽度减半。然后将多个cell堆叠在一起构成网络。

•NASBench搜索空间: 提出搜索一个小的有向无环图(DAG),每个节点表示一个层,每个边表示层间依赖关系。类似地,网络是由多个这样的DAG叠加而成的。

表1:NAS搜索算法的重点:与DeepArchitect和Wistuba相比,AlphaX具有可伸缩的在线模型,可以用于分布式系统。

 

 

图3:设计空间:

  1. NASNet的cell结构,
  2. NASBench-101的DAG结构。

然后通过叠加多个cell或DAG来构建网络

 

状态空间:

状态表示网络架构,AlphaX利用状态(或节点)来跟踪过去的轨迹,从而为将来的决策提供信息。我们状态实现为一个map,它定义了每个网络层及其依赖项的所有超参数。我们还引入了一个特殊的终端状态来支持多个动作。其他所有状态都可以通过终端动作过渡到终端状态,而agent只训练网络,从网络到达终端。在终端状态下,代理在到达终端之前可以自由地修改架构。这使得设计代理的多个动作可以绕过浅层架构。

动作空间:

一个动作改变当前的网络架构,即从当前状态过渡到下一个状态。它不仅显式地指定层间连接,而且还为每个层指定所有必要的超参数。与游戏不同,NAS中的动作会动态地改变当前的状态和设计空间。例如,AlphaX需要利用当前的DAG(状态)来枚举“添加边”的所有可行动作。在我们的实验中,NASNet搜索域的动作是在一个cell的第i个block的左或右分支中添加一个新层,创建一个具有不同输入组合的新的block,以及终端动作。NASBench搜索域的动作是添加节点或边,以及终端动作。

3.2。搜索过程

        图2:AlphaX搜索过程概述:四步解释见第3.2节。

本节阐述了在AlphaX中MCTS与meta-DNN的集成。MCTS是在一种状态下分析最有前景的移动,而meta-DNN是学习采样架构的性能,并将其推广到未开发的结构,这样MCTS在评估新节点时仅仅只需进行一次实际的网络训练,就可以模拟许多的rollout。 AlphaX优越的搜索效率是通过利用访问统计信息,从而在最细粒度(即状态级别)上平衡探索和开发。每个节点跟踪这两个统计信息: 1)N(s, a)在状态s选择动作a的次数;  2) Q(s, a)是在状态s采取动作a后的预期回报,直观的讲,Q(s, a)是对这个搜索方向的前景的估计。图2展示了AlphaX中典型的搜索迭代,包括选择、扩展、meta-DNN辅助模拟和反向传播。我们把每一步解释如下。

Selection:选择沿搜索树向下遍历,以跟踪当前最有希望的搜索路径。它从根开始,一直到叶子。在节点上,agent基于UCB1[2]选择动作:

 

其中N(s)为访问状态s的次数(即N(s) = 西格玛N(s, a)), c为常数。 第一项(N(s,a)/ Q(s,a))是估计后代的期待值的开发组件。第二项是鼓励较少访问节点的探索组件。探索项在N(s,a)很小的时候在整个函数的值中占主导地位,N(s,a)比较大的时候开发组件占主导地位。因此,函数在开始时倾向于探索,直到建立起合适的开采信值。c控制探索的权重,并根据经验将其设置为0.5。我们迭代树策略以到达一个新节点。

Expansion :展开将一个新节点添加到树中。Q(s, a)和N(s, a)初始化为零。Q(s, a)将在模拟步骤中更新。

随机抽取一个新节点的后代们,以其准确值近似节点的Q(s, a)。这个过程是为了评估新节点及其后代节点的搜索方向的前景。模拟从新节点开始。代理通过采取统一随机动作遍历树,直到到达一个终端状态,然后分发体系结构来进行训练。

我们进行的模拟越多,对搜索方向的估计就越准确。然而,由于网络训练非常耗时,我们无法进行多次模拟。AlphaX采用了一种新的混合策略来解决这个问题,除了实际的训练外,还加入了一个meta-dnn来预测网络的准确性。我们将meta-DNN的引入推迟到3.3节。具体地,我们估计q = Q(s, a)使用如下:

 

其中,s` = s + a, sim(s`)表示从状态s`开始的模拟。Acc是第一次模拟中实际训练的值,Pred是后续k次模拟中Meta-DNN的预测值。如果一个搜索分支呈现的架构与之前训练好的架构类似,那么Meta-DNN会更新公式1中的开发项,以增加使用这个分支的可能性。

反向传播

反向跟踪从新节点到根节点的搜索路径,以更新访问统计信息。请注意,我们在这里讨论的是连续的情况,在分布式设置中,反向传播将分为两部分(第3.5节)。对于新节点的估计值q,我们迭代地将信息反向传播到其祖先节点:

 

直到它到达根节点。

 

3.3。Meta-DNN的设计及其相关问题

Meta-DNN旨在基于先前采样的网络来推广不可见架构的性能。它提供了一种实用的解决方案,可以在不涉及实际训练的情况下,通过多次模拟准确地估计搜索分支(详细信息请参阅meta-DNN辅助模拟)。当AlphaX在搜索中前进时,会生成新的训练数据。因此,meta-dnn的学习是端到端的。Meta-dnn的输入是网络架构的向量表示,输出是架构性能的预测,即测试准确值

NASNet架构的编码方案如下:使用6位向量对一个块进行编码;前两个数字在左分支中表示最多两层,第三和第四层表示右分支。每一层用[1,12]中的一个数字表示,表示12个不同的层,具体层代码见附录表4。如果没有层,我们用0填充向量。最后两个数字分别表示左右分支的输入。对于块输入的编码,0 代表前一个单元的输出,1是前一个单元,前一个单元,i + 2是块的输出。如果没有块,它是[0,0,0,0,0,0]。图4的左边部分展示了一个NASNet编码方案的例子。一个单元最多有5个块,因此一个60位的向量就足以表示一个完全指定RCell和NCell的状态。

NASBench架构的编码方案是一个平面邻接矩阵向量,加上节点列表。类似地,如果没有层或边,我们将填充0。图4的右边部分展示了一个NASBench编码方案的例子。由于NASBench的限制节点数≤7,因此7×7(邻接矩阵)+ 7(节点列表)= 56位可以完全指定NASBench体系结构。

 

图4:NASNet和NASBench的编码风格

 

现在我们将架构性能的预测转换为一个回归问题。寻找一个好的Meta-adnn是启发式的,它应该根据任务的不同而有所不同。在评价meta-dnn的设计时,我们计算了抽样构的预测真实之间的相关性理想情况下,meta-DNN应该排列出一个与它的真实测试(即corr = 1)大致相似的不可见的架构。各种ML模型,如高斯过程、神经网络或决策树,都是此回归任务的候选模型。由于神经网络对高维数据的和在线训练具有的强大泛化能力,所以我们选择神经网络作为骨干模型。对于metaDNN的具体选择,更多的研究可以在4.2节中找到。

3.4。转移学习

当MCTS使用原始操作逐步构建网络时,处于相同搜索路径的网络呈现相似的结构。这激发了我们在AlphaX中加入转移学习来加速网络评估。在模拟中(图2),AlphaX递归地遍历树,以找到与新采样网络的最小编辑距离的以前训练过的网络。然后我们转移重叠层的权值,并随机初始化新层。在预训练中,我们对每个样本进行70个epoch的训练,而如果父类权重可用,我们对架构进行20个epoch的训练。我们在图12中提供了研究以证明设计的合理性。

3.5。分布式AlphaX

必须将AlphaX并行化以在大型分布式系统上工作,以处理NAS带来的计算挑战。图5展示了分布式AlphaX。有一个主节点专门用于调度搜索,而有多个客户端(GPU)专门用于训练网络。服务器端一般流程如下:(1)agent遵循图2所示的选择和扩展步骤。(2) MCTS中的模拟选择一个网络arch-n进行实际的训练,agent通过遍历得到父架构到arch-n的最小编辑距离的权值进行转移学习; 然后将arch-n和父权重都推入作业队列。我们定义arch-n为迭代n时所选择的网络架构,并将rollout _from(arch-n)作为节点,从该节点开始rollout到到达arch。(3)代理先发制人的反向传播

基于第n次迭代时meta-dnn的预测值。

 

(4)服务器检查接收缓冲区,从包含archZ、accZ的客户端检索完成的作业。然后代理开始第二个反向传播。从节点开始推出用来用q代替q-hat。

 

客户端不断尝试从主作业队列检索空闲的作业。一旦获得作业,它就开始训练,然后将完成的作业传回服务器。所以,每个客户都是一个专门的训练师。我们还通过每隔几次迭代获取服务器状态的快照来考虑容错性,并且AlphaX可以使用最新的快照从断点继续搜索。

 

图5:分布式AlphaX:

我们将原始的反向传播解耦为两部分:一部分使用预测值(绿色箭头),另一部分使用真实值(蓝色箭头)。整个系统的伪代码可在附录部分6中找到。

 

4. 实验

4.1 架构搜索的评估

实验设置:AlphaX在NASBench-101上搜索[1]。附录9提供了实验设置的细节。

4.1.1在NASBench-101上寻找全局最优解

搜索NASNet需要训练数千个网络,因此进行多次试验来公平地评估搜索算法在计算上是不可行的。目前的文献主要以最终测试精度来评价NAS算法,而[32]已经展示了许多最先进的NAS算法,如DARTS[21]、NAO[24]、ENAS[29]等,在相同的设置下甚至无法超越随机搜索。为了真正评估一个搜索算法,并绕过计算挑战,Christ等人收集了NASBench[43]它列举了≤7个节点的所有可能的DAGs,构成(420k+)网络及其最终测试精度。

在我们的实验中,我们将DAG≤6的最大节点限制为重复每个算法200次,其余节点遵循相同的NASBench设置,即使用64521个有效网络的NASBench-101子集。搜索目标是108轮训练中平均测试精度最高的网络(全局最优),可以通过查询数据集提前知道我们的评估指标是在测试中达到最佳性能架构的样本数量。我们选择随机搜索(RS)[32]和正则化进化(RE)[30]作为基线,实验结果如图7所示。我们对每个算法进行了200次独立试验,每个试验都是一个新的搜索,并加入了不同的随机种子。一旦达到目标(全局最优),搜索就终止。图7显示AlphaX的速度分别比RS和RE快2.8倍和3倍。如图1所示,随机搜索缺少一个在线模型。正则化进化只在top-k执行模型上发生突变,而MCTS显式地构建一个搜索树来动态地权衡各个状态下的探索和利用。请注意,图7a中的微小差异实际上反映了图7b所示的速度上的巨大差距。这是由于接近最优的架构和全局最优之间的细微差异(在0.5%以内)造成的。

4.1.2开放域搜索[45]

我们使用10 NVIDIA 1080 TI在CIFAR-10上执行搜索。一个GPU作为服务器工作,其余的作为客户端工作。客户机-服务器通信是通过python套接字进行的。为了在有限的资源范围内对更多的架构进行采样,我们在每个搜索客户端的第70个阶段提前终止了训练。然后,我们根据架构的初步精度对架构进行排名,从而在优秀的候选者上执行额外的530轮训练。为了获得最终的精度,使用尺寸为16×16的随机裁剪应用[23]进行裁剪。在后续的ImageNet训练中,我们根据[45]中的图2,使用搜索到的RCell和NCell构建ImageNet网络。我们使用标准移动配置设置ImageNet训练,输入图像大小为(224×224)[45]。AlphaX采样了1000个网络,我们选取了前20名的网络进行预训练,微调了另外530个epoch。图6展示了经过微调后获得最高精度的体系结构。

 

图6:在搜索中产生最高精度的RCell和NCell

 

最优效果模型SOTA的比较:表2和表3总结了CIFAR-10和ImageNet的SOTA,AlphaX在样本(M)和准确性方面持续超过最新方法。我们的端到端搜索成本,即GPU天数,与SToA方法相当,这得益于早期的终止和转移学习。值得注意的是,AlphaX达到了与AmoebaNet类似的精度,在使用cutout和filters(滤波器) = 32的情况下,样本减少了27倍。如果没有cutout和filters = 32, AlphaX以测试错误中比少0.14%,GPU天数少13.3倍的表现优于NAONet。Proxyless-G使用了不同的搜索空间,并且在将filters增加到64之后,我们的结果与它相当。

4.1.3 AlphaX的定性评价

在图9中可以看到几个有趣的观点。1) MCTS明确地构建了一个搜索树,以便更好地根据以前的发布来为未来的决策提供信息。MCTS中的操作选择是细粒度的,同时利用访问统计数据和各个状态的值;而随机或进化搜索是无状态的,利用搜索方向的粗略估计(例如,突变)。因此,在图7中,MCTS比RS和RE要快得多。2) MCTS更多地投资于有前途的方向(高价值路径),较少投资于其他方向(低价值路径)。与基于贪心的算法(例如爬山)不同,MCTS始终探索搜索空间,因为搜索树类似于图9中的平衡树。所有的这些说明MCTS自动平衡了搜索过程中的探索和利用。3)性能最好的网络不一定位于最有前途的分支上,局部最优分支有很多(深蓝色节点)。MCTS在理论上可以保证在非凸搜索空间中找到全局最优解,而PNAS或DARTs可以很容易地陷入局部最优解。

 

图7:在NASBench-101上寻找全局最优:AlphaX比NASBench-101(节点≤6)上的随机搜索(RS)和正则化进化(RE)快3倍和2.8倍。

 

图8:NASBench中网络的值分布。

 

图9:AlphaX搜索可视化:每个节点代表一个MCTS状态;节点颜色反映了它的值,即准确性,表示搜索分支的前景如何。

4.2. Meta-DNN设计及其影响

评价meta-dnn的指标是预测精度与真实精度之间的相关性我们使用了80%的NASBench进行训练,20%进行测试。由于DNNs在复杂数据建模方面取得了巨大的成功,我们从多层感知器(MLP)和递归神经网络(RNN)着手建立回归模型。具体架构细节见附录10。 图11d和图.11e展示了MLP的性能(corr= 0.784)比RNN(corr= 0.743)好4%,MLP(图11b)比RNN(图11a)表现更好。然而,延时仍然在0.1,0.4,0.6和0.8周围(x轴)对许多网络进行了错误的预测,如图11e所示。这种聚类效果与图8中的架构分布一致,因为有许多网络围绕着这些精度值。为了缓解这个问题,我们提出了一个多阶段模型( mult-stage model),其核心思想是有几个专门的MLP来预测不同的精度范围,例如[0,25%],以及另一个MLP来预测哪一个MLP来预测最终的精度。从图11f可以看出,多级模型较MLP成功地提高了1.2%的相关系数,并大大减少了预测误差。由于多阶段模型已经实现了在训练集上corr =1,我们选择它作为AlphaX的骨干回归模型。图7展示了我们的meta-DNN成功地提高了搜索效率。

4.3. 转移学习

转移学习显著提高了网络评价的速度,图12实证验证了转移学习的有效性。我们随机抽取一个架构作为父网络。在父网络上,我们在左右分支上添加了一个带有两个新的5x5可分离conv层的块作为子网络。我们将父网络训练到70个epoch,并节省了它的重量。在训练子网络时,除了两个新的conv层被随机初始化外,我们使用来自父网络的权值来初始化子网络。图12显示了不同训练阶段转移子网络的准确性进展情况。所转移的子网络保持了与从零开始训练(随机初始化)相同的准确性,但epochs少得多,而epochs不足则丧失了准确性。因此,如果应用迁移学习,我们选择了20个epoch来进行架构的预培训。

4.4. 算法的比较

图13在一个简化的搜索空间中,根据Q-Learning (QL)、爬山算法(HC)和随机搜索(RS)对MCTS进行评估。设置细节和设计域的介绍见附录8。这些算法在NAS中得到了广泛的应用[3,18,7,10]。我们对每个算法进行了10次试验。图13b显示AlphaX比QL和RS快2.3倍。虽然HC是最快的,但图13a显示HC陷入了局部最优。有趣的是,图13b显示QL的四分位范围比RS长,这是因为QL很快收敛到次优,需要花费大量时间来逃逸。这与图13a一致,QL在第50个样本前收敛速度快于RS,但在第50个样本后很容易摆脱局部最优。图13b (MCTS vs AlphaX)。

4.5.改进的应用程序特性

CNN是计算机视觉(CV)模型的常用组件。在这里,我们演示了搜索架构可以改善各种下游计算机视觉(CV)应用。实验设置请参考附录11。

1)目标检测:在SSD[22]目标检测模型中,我们将MobileNet-v1替换为AlphaX-1,在300×300分辨率下,mAP (mini-val)从20.1%增加到23.7%。(Fig.18)

2)神经风格转换:AlphaX-1在捕捉复杂风格图像的丰富细节和纹理方面优于浅层网络(VGG)(图19)。

3)图片字幕:我们将VGG替换为show attend和tell[42]中的AlphaX-1。在2014年的MSCOCO-val数据集上,AlphaX-1分别比VGG高出2.4 (RELU-2)、4.4 (RELU-3)和3.7 (RELU-4)(图20)。

5.结论

我们介绍AlphaX,它是第一个可伸缩的基于MCTS的NAS设计代理。AlphaX在3个不同的搜索领域显示了优于主流算法的搜索效率,强调MCTS是一种非常有前途的NAS搜索算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值