【强化学习论文精读】Timeliness Guaranteed Traffic Flow Forecasting Based on Federated Online Learning

前言

这是我研一开学后老师给我布置的第一篇论文,让我好好读一读。作为萌新,肯定是不知道怎么读论文的,那怎么办?b站求助李沐老师啊!


如何读一篇论文

论文的一般结构

  1. title
  2. abstract
  3. intro
  4. method
  5. exp
  6. conclusion

花三遍,读一篇论文

第一遍(花时最少,做海选)

第一遍读论文的时候,需要去关注标题和摘要,读完摘要之后,直接跳到结论这边。读完这三个部分,大致就知道这篇论文是在讲什么东西了

第二遍(对相关论文做以进一步精选)

第二遍里面我们就要对整个文章完整过一遍,然后知道每一块到底在干什么东西,我们可以沿着从标题一直往下读到最后,但是这个时候也不需要注意太多的细节,以及一些公式的证明等等。

关注的地方
第二遍阅读的时候,最重要是搞明白那些重要的图和表,都要知道他每一个字在干什么事情
作者提出的方法和别人提出的方法是怎么进行对比的?之间差距有多大?这个时候可能你还没有特别搞懂他在干什么。但是不要紧,你可以将不懂的地方标记下来,留到之后第三遍进行阅读

达到的效果
第二遍阅读完之后,你就对整个论文的各个部分,都有一个大概的了解,中间可以把作者引用的别人的相关文献圈出来,比如作者是在某某某的方法上进行了改进,做了哪些改进之类的。
这里需要注意的是,如果你发现作者引用的这些重要文献是你没有读过的,那么你需要把它圈出来,作为你的稍后阅读清单

对后续的影响
这一遍阅读之后,你需要再继续思考一下这篇论文的质量以及和自己研究方向的契合程度,决定一下自己要不要进行第三遍的完完全全彻底的精读

第三遍(重点研读)

第三遍是最后一遍了,也是最详细的一遍,这里就需要自己知道每一句话在干什么,每一段在说什么。 一边读,可以一边在脑子里面思考一些问题:
比如说,如果要是我来写这篇文章,我会如何组织这个结构?
读实验部分的时候,可以思考一下,作者是如何描述自己的实验的,你可以思考,如果换自己来做的话,能不能比作者做得更好?
这一遍读的时候,一定要明白作者每句话,每个字在说什么,并且最好可以脑补出它整个流程是什么样子的,似乎是自己在做实验,写论文一样。如果有困难的话,可以借助思维导图或者流程图这样的工具,把他的整个流程以可视化的形式展现出来,帮助自己理解。


第一遍

标题

Timeliness Guaranteed Traffic Flow Forecasting Based on Federated Online Learning,中文就是基于联邦在线学习的时效保证交通流预测

摘要

现存的中心化的交通流预测 (TFF) 方法:虽然预测性能优秀,但是需要大量原始数据,所以导致了数据传输量大、隐私泄露的问题
最近使用的基于联邦学习 (FL) 的TFF方法:可以很好地解决以上问题,但是它不能适应交通流的波动以及满足TFF的时效性
在这里插入图片描述

所以我们提出了一种新颖的TFF方法,即时效保证的联邦在线学习 (TG-FOL)
具体而言,我们设计了一种基于流量序列分布差异的数据驱动的客户端参与机制,以避免无意义的模型更新对性能提升的细微影响。
在此基础上,客户端自适应地进行在线预测和模型优化,在获得满意预测性能的同时,减少了局部计算和参数传递的时间消耗。此外,我们提出了一种基于图卷积的模型聚合机制,该机制可以以一种通信轻量级和计算高效的方式评估参与者在空间相关性方面的重要性。在这里插入图片描述

最后,在两个真实数据集上进行了大量实验,以验证TGFOL的优越性。

关键字

联邦学习、在线学习、交通流预测、图卷积,说明这篇文章是通过图卷积的方式去实现交通流预测的

结论

除了说明了模型是通过两个特殊的数据集的训练得出结果的,其他的感觉和摘要一样

图表

通过图表可知,该方法用的是三个通信节点做实验的,且运用了图卷积的方法进行研究,训练的过程是建立在两个特殊的训练集 PEMS-BAYMETR-LA 上的,而且把该方法的表现和其他不同的方法做了比较。


第二遍

介绍 Introduction

第一段
首先说明了交通拥堵会造成巨大损失,所以 TFF 被认为是一个很重要的解决方法。并且由于它的重要性,学界和工业界对这个方法都很感兴趣,他们通过在道路两旁部署大量的交通结点,例如传感器、环路监测器、雷达等去获取大量实时的数据去使得该方法的预测性能得到优化。
这个就是吴恩达老师在机器学习课上说过的解决过拟合的一种方法,但通常这并不是最好的方法,因为这会伴随着数据量传输、数据量计算所需资源急剧增长的问题。在这里插入图片描述

第二段
指出了大部分的方法都是基于深度神经网络的,例如 CNN(卷积神经网络)、 RNN(递归神经网络)、GNN(图神经网络),这些方案虽然可以提升预测性能,但是会出现数据量传输、数据量计算所需资源急剧增长的问题。而且由于上传的是原始数据进行训练,所以很容易导致用户隐私的泄露。
所以联邦学习 (FL) 的出现解决了以上的问题,它是使用这样一种方法:相邻的通信节点(也叫用户)会协作运行训练出一个小的共享的预测模型,再把所得的模型上传,这样就可以避免原始数据的上传而导致的隐私泄露。

第三段 提出了online的概念
由于以上提到的方法都是采用离线的学习方法去提前训练用户的历史数据,所以这些方法是不能实时地去捕抓交通流的变化以及波动的。所以提出了一种全新的方法,在线学习 (OL),可以做到实时更新以及预测。

其实两者的差距就是:
offline: 用历史数据提前训练,并将该预训练的模型作为更新模型
online: 实时地使用traffic node监测到的数据进行模型训练并把该模型作为更新模型上传

第四段
将OL应用到FL中绝非易事。首先,用同时关注TFF中的时间和空间问题。其次,交通流的变化在不同的地方是不一样的,所以对于不同的交通结点要采用不一样的更新速度。所以现存的FL是不适合OL的。因为FL在频繁交流数据的前提下提高了交通结点和中心服务器的空间联系,所以导致了大量的时间用于数据传输。另一方面,FL对待所有结点都是一视同仁的,这样的话对于某些不用更新频繁的结点会浪费时间以及计算机资源。

第五段
为了达到这个目标(指的是把OL应用到FL中),我们提出了一种新颖的方法TGFOL。在这个方法中,每个用户在每一轮的模型训练中都会自己决定是否参与,这是基于交通监测结果的分布分歧的。如果这次分布和上一次分布是相似的,它会在保证精确度的前提下使用上一次的结果,以减少传输时间和模型训练所需训练资源。
否则,它将从中央服务器请求最新的全局模型进行流量预测,进一步进行局部优化,然后将更新后的模型上传到中央服务器进行聚合。之后,一个新颖的基于模型聚合的图卷积策略就被设计用于决定聚合模型聚合的权重了,而不只是简单地将所有模型平均聚合(我的理解是:前文所说的交通结果的预测是具有分布分歧的,所以不能简单地平均化处理)。
在之后就指出了我们的模型的优点:轻量、可以避免无谓的数据传输从而降低总体数据传输的时间,也可以保证精确性、时效性。
之后又列举了这篇文章的主要贡献:

  1. 为了解决FOL和TFF的问题,我们提出了TGFOL,可以在改善预测表现的同时达到时效保证。
  2. 我们基于交通结果的波动程度设计出了数据驱动的用户参与机制,目的是避免无用的模型数据更新所带来的时间损失。在此基础上,使用门控递归单元(GRU)网络对每个客户端进行自适应在线预测和优化过程,以实现本地实时预测。另外,我们还提出了一种基于图卷积的模型聚合机制,可以根据以通信轻量级和计算效率高的方式实现空间相关性。
  3. 通过和最先进的方法进行比较,基于两个真实世界的数据集的大量实验被用于验证TGFOL的优越性,并且还探索了复合参数对于预测性能的影响。

第六段
介绍了剩余部分组织结构:第二节给出了关于TFF、FL和OL的文献。在第三节中,我们在FOL的例子中阐述了TFF问题,并介绍了FOL的初步知识。第四节详细阐述了TGFOL,包括数据驱动的用户参与机制、自适应在线优化和基于图卷积的模型聚合。之后,我们从第五部分的实验结果中分析了TGFOL的表现。最后,我们在第六部分总结了这篇文章。

相关工作 Related work

在本节中,我们介绍了交通流预测、联合学习和在线学习的相关文献。

  • A、交通流预测
    尽管性能有所提高,但这些方法都是基于集中训练模式,这导致了相当大的通信开销,并对隐私保护造成了威胁。
  • B、联邦学习
    忽略了组织间的交通节点,最终必然会影响预测的准确性。
    增加了通信负担,延长了模型更新占用的时间。
    因此,该方法很难满足TFF的实时性要求。
  • C、在线学习
    虽然这些方法在处理TFF问题上取得了令人满意的效果,但这些方法都是基于集中训练模式的。

问题描述和初步知识 Problem Formulation and Preliminary Knowledge

在这里插入图片描述

问题描述 Problem Formulation

第一段
假设有一个中央服务器作为聚合器,N个流量节点作为客户端。
之后用nodeSet = {r_n | 1 <= n <= N}表示流量结点的集合,r_n表示第n个流量结点,这些流量结点组成了一个有向图G = (nodeSet, edge)
其中边集edge = {e_m,n | 1 <= m, n <= N},并且如果两条边相邻则e_m,n = 1,否则为0
在该场景中,多个流量节点在中心服务器的协助下协同训练共享预测模型,如图1所示。
在这里插入图片描述

第二段
跨用户FL设置下TFF的整个训练过程可分为T轮。在第t轮,r_n检测并计算重叠路段内车辆的平均速度,记为s_t,n。
每个交通节点r_n根据当前和历史交通速度预测未来的交通速度,rn对应的预测问题可以描述为

这个感觉可以理解为假设函数
在这里插入图片描述

式中,w_t,n表示目前使用的rn在第t轮的预测模型
f(·)表示由wt,n决定的非线性函数(前面提到的神经网络?)
设H、F分别表示学习视界和预测步长,我的理解是H应该是history的首字母的大写,表示的是基于第t轮的前H轮的监测到的速度,文章中没有详细的说到底是前几轮;F是future的首字母大写,表示的是基于第t轮,所预测出来的后F轮的速度
式子中,括号内的S为输入,括号外的为输出在这里插入图片描述

第三段
我们将rgtn定义为r_n的预测后悔度,它是通过评估实际预测模型w_t,n和最优预测模型w_* n在所有T轮上的预测损失差值得到的。rgtn与* w * n的计算表达式为

其实就是代价函数吧
在这里插入图片描述

其中S_Ft,n = (st+1,n, st+2,n,…, st+F,n)表示ˆS_Ft,n,的真实值 ,L表示损失函数,用于评估预测值与真实值之间的差异,* w∗n表示rn / T轮的最优模型。
损失函数在这里我的理解是类似于g(h(theta))这种函数中g的功能吧在这里插入图片描述

第四段
在FOL框架下,TFF的目标是获得对所有N个交通节点的预测后悔度最小的最优模型w *

换句话说,就是把前面的代价函数利用算法找出最优解,但目前还没提到用什么算法
在这里插入图片描述

使用在线学习方式对联邦学习有初步了解 Preliminary Knowledge

又是这个联邦平均算法
在这里插入图片描述

具体来说,在第t轮,中心服务器首先随机选择可用客户端的子集N_t参加这一轮的训练。通过在线梯度下降(OGD) (Line 9-11)对每个选定的客户端利用新到达的交通数据进行E轮的迭代优化更新,从而对本地拥有的预测模型进行并发优化。
这种更新方式不同于传统的离线学习机制,预测模型是根据预先获得的历史交通数据进行预训练的。完成本地模型训练后,被选中的客户端将更新后的本地模型上传到中央服务器。然后,中央服务器执行模型聚合,并根据平均机制生成新的全局模型(第6行)。

方法论 METHODOLOGY

在本节中,我们提出了一种新颖的时效性保证的联邦在线学习(TGFOL)方法,用于精确预测交通流。
首先,我们设计了一个数据驱动的客户端参与机制,允许每个客户端决定是请求全局模型还是重用本地保存的模型,以避免无用的模型传输,节约通信开销。
然后,引入自适应在线优化策略,以适应新到达的交通数据为原则,及时更新客户端模型。
进一步,我们开发了一种基于图卷积的模型聚合机制,巧妙地利用两层图卷积来量化
是指通过尝试不同的模型参数theta吗 交通节点之间复杂的空间相关性,进而确定聚合权值,获得更新后的全局模型。
最后,对TGFOL算法进行了总结。在这里插入图片描述

数据驱动的客户端参与机制 Data-driven Client Participation Mechanism

第一段
由于数据波动,每个客户端在不同的轮对更新需求是完全不同的。如图2所示,交通流量有时波动较大,不同客户端检测到的交通数据存在明显的差异。
受到这些观察的启发,我们认为每一轮的参与者客户应该根据他们的数据波动来决定是否更新模型,而不是简单的随机选择。主要原因是在没有显著数据变化的情况下,以往的局部模型往往能取得令人满意的性能。
因此不需要对模型进行更新,以模型传输和训练产生的相当大的通信和计算开销为代价略微提高精度
在这里插入图片描述

第二段

感觉就是把第一段总结一下,弄出来一个结论

为此,我们设计了一种数据驱动的客户端参与机制,合理确定每轮的参与客户端,该机制根据之前和当前流量序列的分布差异来判断之前保存的本地模型在客户端是否可用。

第三段及以后
接下来其实就开始介绍一种算法去计算模型的波动性,以决定是否需要更新模型。
在这里插入图片描述
这些数学公式都不算复杂,而且这些参数的含义也和前面所用的一样。
在计算出结果后,作者还定义了一个阈值Q用于衡量应该使用检测到的全新的数据还是应该使用历史模型。

if(calculation < Q)
	using historial model;
else
	use up-to-date golbal model and retraining

在这里插入图片描述

自适应在线优化 Adaptive Online Optimization

通过以下两个案例描述了面向客户的在线预测和优化过程。
如果r_n不参与本轮,那么就是用以前的结果;否则就是用联邦平均算法进行优化,之后把得到的结果上传到中央服务器进行聚合。
这里需要一些GRU和LSTM的基础才能看懂文章
LSTM
GRU

基于图卷积的模型聚合 Graph Convolution-based Model Aggregation

第一段
主要说了传统的FL算法(例如联邦平均算法)是平均对待的,但事实上这是不行的。要考虑相邻节点之间的相关性影响,即空间相关性对于聚集权值的影响。

第二段
在这里插入图片描述

主要说的是之前的方法不行,不能满足实时性,我们的方法更好。

有少数研究[13]通过在交通预测中增加一个评估参与者之间空间相关性的额外程序来评估参与者的重要性。在这些方法中,参与者需要向中心服务器传输大量的隐藏状态进行参数更新,这就要求传输频繁,不仅通信开销大,而且耗费大量时间,难以满足TFF的及时性。鉴于此,我们设计了一种新的基于图卷积的模型聚合机制,如图3所示。它利用图卷积以一种通信轻量级和计算高效的方式在线量化参与者之间的空间相关性。整个过程如下所述:
图卷积这部分读不懂,但是老师说刚开始读不懂很正常,你最起码要弄懂这个模型的输入是什么、输出是什么、是用来干什么的,其实感觉把这些弄懂了,中间的处理过程也能开始慢慢理解了,可能这就是老师对于我的一种循循诱导的方式吧

  1. Graph Construction 图构造
    在这里插入图片描述
    在第t轮,假设N_t客户端参与这一轮。这些参与者下载用于交通预测的全局模型,然后将更新后的本地模型上传到中央服务器,以聚合生成新的全局模型。它们相互关联,组成一个有向图,记为G_t = (N_t, E_t)。
    所以说,这个图中的虚拟结点应该表示的是用户在本地训练得出来的用于上传更新的本地模型,而图中第二部分的蓝色结点表示的是上传的局部模型,红色结点表示的是聚合生成的新的全局模型。

  2. Graph Convolution 图卷积
    在这里插入图片描述
    根据文章的原话,W and W’ represent the set of raw and updated local models respectively,可以知道模型的输入是原始的数据集,输出是更新后的数据集,也就是权重(从图中来看)

  3. Model Aggregation 模型聚合
    在这里插入图片描述
    输入的是用于聚合的模型和权重,输出的是全局模型

TGFOL执行过程 Execution Process of TGFOL

本小节在算法2中详细阐述了TGFOL的整个过程。每轮开始时,每个客户端首先使用KLD评估当前和前几轮流量数据的分布差异,然后与阈值Q(行11-16)进行比较,决定是下载全新的全局模型还是重用本地保存的模型进行在线预测。如果有客户参与这一轮,它将在流量预测后进行在线模型训练,并将更新后的本地模型传输到中心服务器进行全局聚合(第17-24行)。否则,客户端将根据本地保存的模型直接预测未来的流量数据(行25-27)。中心服务器接收到所有参与者的更新模型后,通过两层图卷积计算参与者的聚合权值,然后进行模型聚合,生成新的全局模型(行5-7)。
在这里插入图片描述
在这里插入图片描述


实验 EXPERIMENTS

在本节中,通过综合实验验证了所提出的TGFOL的高效率。首先,我们简要介绍了系统配置,包括数据集、指标、实验设置和基线。然后对TGFOL与基线的性能进行了比较。最后,进一步探讨了TGFOL参数设置对预测性能的影响。

系统配置 System Configuration

  1. 数据和指标 Datasets and Metrics
    PEMS-BAY和METRLA
    在回归任务中广泛使用的度量标准,均方根误差(RMSE)被用来评估预测精度。

  2. 实验设置 Experiment Setting
    使用PyTorch实现TGFOL,其中使用一个2层的GRU网络作为预测模型,每层有128个隐藏单元。散度阈值Q设置为0.02。

  3. 基线的方法 Baseline Methods
    我们将TGFOL与CNFGNN以外采用相同预测模型的其他5个基线进行了比较。下面简要地描述了这些基线的执行过程。

  • CenOff:中央服务器在离线学习模组中训练预测模型
  • CenOn:与CenOff不同的是,中心服务器在OL模式下进行预测和优化预测模型。
  • FedAvg:客户端在FL框架下离线训练一个共享的预测模型,每一轮选择所有客户端,中心服务器根据平均策略进行模型聚合。
  • FedAvg+Online:客户端在线训练一个共享的预测模型,并根据提出的数据驱动客户端参与机制进行选择。中央服务器通过平均机制聚合局部模型。
  • CNFGNN:每轮选择所有客户端进行离线学习模式的本地更新。中心服务器使用GNN评估空间相关性,并通过平均策略进行聚合。

预测性能比较 Prediction Performance Comparison

说明了两个问题,OL模式比Off模式好,TGFOL模式最好
在这里插入图片描述

Q对预测性能的影响 Influence of Q on Prediction Performance

第一段
在每一轮开始时,客户端基于KLD评估分布差异,并与Q进行比较,以确定是下载全局模型还是重用本地保存的模型,这将影响预测性能。因此,在本节中,我们将探讨Q对预测性能的影响。PEMS-BA Y和metro - la数据集的结果如图4所示。

第二段
Q =−1表示每轮所有客户端下载全局模型。随着Q的增加,KLD超越Q的可能性降低,下载全球模型进行预测的客户也越来越少。因此,每个客户的参与轮数减少,如图4(b)所示。全局模型每一轮都根据提出的包含空间相关性评价的基于图卷积的模型聚合进行更新。因此,全局模型优于本地保存的模型。当Q增加时,更多的客户重用本地保存的模型进行预测,因此RMSE增加,如图4(a)所示。

第三段
阈值提高参与比例下降,很正常
在特定的Q设置下,我们计算所有客户参与轮数之和,然后根据Q =−1的结果将结果归一化,得到参与比例。随着Q的增加,参与比例先快速下降后缓慢下降。值得注意的是,当Q = 0.02时,参与比例下降了40%。

第四段
Q是动态调整的
此外,Q可以在不同情况下进行调整。例如,当网络连接不稳定,可以接受低于标准(但仍优于离线方法)的预测性能时,我们可以提高Q值来保证时效性。在网络连接稳定、计算资源充足的情况下,可以降低Q,获得更准确的预测结果。

数据驱动的客户端参与机制的效率 Efficiency of Data-driven Client Participation Mechanism

第一段
数据驱动的客户端参与机制使客户端自主决定是否下载全局模型进行在线预测,进一步减少了模型优化和传输占用的时间。在本节中,我们探索在Q = 0.02的设置下,该机制对交通数据波动的反映效率。

第二段
看不懂,感觉就是在举例子列数据

第三段
因此,我们认为所提出的数据驱动的客户端参与机制能够有效地反映交通流量的波动,从而减少了模型优化和传输的时间消耗,从而保证了TFF的时效性。

图卷积层对预测性能的影响 Influence of Graph Convolution Layers on Prediction Performance

图卷积层直接决定了聚集局部模型时评估空间相关性的效率。
0层图卷积表示中心服务器基于平均机制进行聚合,平均机制无法关注重要参与者。它可以在简单的PEMS-BA Y数据集上工作,预测损失比1层图卷积低。
一层图卷积不能广泛地获得参与者之间的空间相关性,因此在两个数据集上的预测性能都很差。
在两个数据集上,两层图卷积的RMSE性能最好。这是因为两层图卷积能够捕捉到参与者之间的空间相关性。
因此,我们认为,本文提出的融合两层卷积的空间相关性评估聚合机制以一种计算效率高、通信轻量级的方式提高了预测性能。


结论 Conclusion

本文针对交通流预测问题,提出了一种新的方法TGFOL,旨在提高预测性能的同时保证TFF的时效性。
为了避免不必要的模型更新,我们设计了一个数据驱动的客户端参与机制,允许客户端根据流量序列之间的分布差异自主决定是否参与每一轮。
此外,为了避免性能下降,引入了一种自适应在线优化策略,大大减少了模型更新和参数传递占用的时间。
此外,我们提出了一种基于图卷积的模型聚合机制,通过评估空间相关性来获得客户端对应的聚合权值,具有计算量轻、通信效率高的特点。
最后,在PEMS-BAY和metro - la数据集上进行了综合实验,验证了TGFOL较基线具有更高的预测性能,并探讨了超参数对预测性能的影响。


第三遍

已经把一些第三次的见解也一起写在第二遍中了,不重复了。因为这篇文章老师问了我两次。第一次汇报的时候实在是太差,老师让我回来再看一遍,下周再汇报一次。之后又就着老师提出来的问题再看了一遍,感觉的确比以前理解多了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化以下代码: FileMatrixVo fileMatrixVo = new FileMatrixVo(); fileMatrixVo.setId(tableName + "-" + columnName); fileMatrixVo.setCoherenceFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.ENUMERATION_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setEffectiveFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.REGEXP_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setCompleteFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.NULL_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setUniquenessFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.UNIQUENESS_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setMultiTableConsistency(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.MULTI_TABLE_ACCURACY.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setFieldLengthFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.FIELD_LENGTH_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setTimelinessFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.TIMELINESS_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList()));
06-07

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值