论文分析:MGAT: Multi-view Graph Attention Networks

论文:MGAT: Multi-view Graph Attention Networks

Abstract

Multi-view graph embedding的目的是学习节点的低维表示,以捕捉Multi-view网络中的各种关系,其中每个view代表节点之间的一种关系。现有的许多图embedding方法都集中在单view网络上,这些方法只能描述对象之间的一种简单的接近关系。然而,现实世界中的大多数复杂系统拥有多种类型的实体之间的关系。

本文提出了一种新的Multi-view网络的图embedding方法,名为Multi-view图注意网络(MGAT),提出了一种基于注意力的架构,用于从每个单一view中学习节点表征,其网络参数受到一个新的正则化项的约束。为了协同整合不同view中的多种类型的关系,提出了一种以view为中心的注意力方法,以汇总view中的节点表征。

1. Introduction

图网络是一种拓扑结构,旨在描述不同对象之间的特定关系。

为了更有效地分析这些复杂的网络,网络嵌入(network embedding)已被深入讨论多年。与原来的邻接矩阵表示是高维和稀疏的不同,网络嵌入试图利用低维密集向量来表示节点。

现有的图嵌入方法主要是为单view网络设计的。然而,现实世界中大量系统是多元网络。

在Multi-view网络中,复杂系统的每个单view是由一种类型的关系构建的,并且所有的view共享同一组对象。
一个Multi-view网络可以由几个单view网络组成,用于描述多种关系。由于每个view代表不同的关系类型,同时共享同一组节点,因此联合地分析这些不同的关系是比较合理的。

提出了一个新的Multi-view图形注意力网络模型,将Multi-view图形网络有效地嵌入到一个密集的矢量空间,探索了一种新的基于注意的聚合方法,将每个单独view的节点表示整合到全局节点表示中。由于每个view共享相同的节点集,并代表不同的图网络关系,发明了一个新的正则化术语,以压缩每对view之间的网络参数,并鼓励它们保持相似。

综上所述,本文的贡献如下:

  • (1) 提出了一个新颖的端到端Multi-view graph embedding框架,用于学习Multi-view网络中的全局节点表示。
  • (2) 探索了一种基于注意力的方法来整合来自多个view的节点信息,并设计了一个正则化项来促进网络的不同view之间的合作。
  • (3)提出的方法在链接预测和节点分类任务上进行了评估,实验结果表明,与目前最先进的算法相比,模型是有效和高效的。

2. Background

2.1. Attention mechanism

注意机制已成功应用于基于序列的任务。

它允许对依赖关系进行建模,而不考虑输入和输出序列之间的距离。注意力机制的优点是,无论输入规模有多大,注意力机制都会持续关注最相关的部分。

2.2. Network embedding

为了更有效地分析图网络,网络嵌入已经被研究了几十年。

网络嵌入努力将复杂的网络编码到一个较低维度的空间,以便进一步分析网络。

早期的网络嵌入方法涉及复杂的计算组件来分析图的规格特征。然而,当图网络很大时,这种方法将是低效的。

图形神经网络(GNN)凭借着端到端训练的优越性,不依靠手工制作的特征,越来越
盛行。GCN、GAT

事实证明,GAT的运行是高效的。一方面,该模型在各节点邻居对之间进行并行处理。另一方面,通过给邻居分配权重,GAT可以应用于不同程度的节点。但与其他大多数图嵌入方法一样,GAT只涉及单view网络表示法的学习。受此启发,本文将这种高效的基于注意力的图嵌入方法从单view网络推广到Multi-view网络。

2.3. Multi-view network embedding

上面提到的所有方法对单view图网络是有用的,但它们缺乏对Multi-view网络的考虑。

  • gCGVFL专注于所有view中子图特征的识别和冗余,并为每个view分配适当的权重,代表图分类的重要性。通过迭代更新子图得分和图view权重,该方法将为多图网络嵌入找到最佳的子图表示。

  • Han(2018)将多个特征视为网络view,并最大化不同view之间的相关性来学习节点表征 。

  • C-RSP 采用随机最短路径(RSP)方法,引入了一个常见的Multi-view图embedding。通过最小化一对节点之间通过所有view的随机行走的期望成本,该方法产生了异质性,并在之后将图的局部和全局结构一起编码。

  • PMNE提出了三种分析Multi-view网络的方法,即网络聚合算法、结果聚合算法和层协同分析算法。网络聚合假设每个单独view的所有边都是相等的,并将所有viewembedding到一个单一的网络embedding中。结果聚合假设不同的view有完全不同的边,分别计算出每个view的embedding向量,然后将这些单独的向量合并在一起以描述Multi-view网络。共同分析算法利用不同view之间的相互作用来允许传播并保留每个单层的结构。

  • MNE为每个单独的view提出了一个高维共同embedding和一个低维基于关系的embedding。然后,它联合优化每个节点的多个基于关系的embedding

  • MTNE发明了一个额外的信息共享嵌入,在所有层中传播特征。该方法首先将每个单独的view嵌入到低维空间;然后计算额外的信息共享嵌入向量;最后通过考虑信息共享向量对嵌入进行优化。MTNE发明了两种方法,名为MTNE-C和MTNE-R,用于嵌入信息共享向量。MTNEC 使用 common embedding , MTNE-R 使用consensus embedding.

  • MELL利用整体结构来分析Multi-view网络。为了在embedding中共享所有的层结构,它首先通过强制执行view之间的节点相似性来嵌入每个view,然后计算层向量来区分每个层中的边缘概率。

  • GATNE考虑到结构信息和节点属性,生成整体图表示,并在之后应用异质跳格算法。与其他Multi-view图嵌入方法不同的是,GATNE是在归属的多重异构网络上发明的,其不同的view有不同类型的节点。

3. Methodology

符号表示:

 Notation   Description  G  The input network  V , E  The node/edge set of  G ∣ V ∣ , ∣ E ∣  The number of nodes/edges of graph  A  The adjacency matrix of graph  X  The feature matrix of graph  K  The number of views of graph  F  The dimension of input features in each node  F ′  The dimension of output features in each node  Φ  The number of attention heads in GAT model  v i ( v j )  A node in the graph  e  An edge in the graph  a i j  The weight of edge  e i j x i , x i ′  the node representations of node  v i h i  The global node representations of node  v i d  The embedding dimension  ξ  The weight of the regularization term  \begin{array}{ll} \hline \text { Notation } & \text { Description } \\ \hline G & \text { The input network } \\ V, E & \text { The node/edge set of } G \\ |V|,|E| & \text { The number of nodes/edges of graph } \\ A & \text { The adjacency matrix of graph } \\ X & \text { The feature matrix of graph } \\ K & \text { The number of views of graph } \\ F & \text { The dimension of input features in each node } \\ F^{\prime} & \text { The dimension of output features in each node } \\ \Phi & \text { The number of attention heads in GAT model } \\ v_{i}\left(v_{j}\right) & \text { A node in the graph } \\ e & \text { An edge in the graph } \\ a_{i j} & \text { The weight of edge } e_{i j} \\ x_{i}, x_{i}^{\prime} & \text { the node representations of node } v_{i} \\ h_{i} & \text { The global node representations of node } v_{i} \\ d & \text { The embedding dimension } \\ \xi & \text { The weight of the regularization term } \\ \hline \end{array}  Notation GV,EV,EAXKFFΦvi(vj)eaijxi,xihidξ Description  The input network  The node/edge set of G The number of nodes/edges of graph  The adjacency matrix of graph  The feature matrix of graph  The number of views of graph  The dimension of input features in each node  The dimension of output features in each node  The number of attention heads in GAT model  A node in the graph  An edge in the graph  The weight of edge eij the node representations of node vi The global node representations of node vi The embedding dimension  The weight of the regularization term 

An overview of the framework

Multi-view图注意网络(MGAT)模型,其框架如图1所示。

image-20211223205648675

首先对每个单一view进行embedding,并学习一组特定view的节点表征。由于不同的view之间存在着相互的信息交互观点,本文发明了一个正则化术语来增强不同view网络参数的相似性。

本文设计了一个基于注意力的模型,通过使节点集中于信息量最大的view来学习view的权重。

最后,每个单独view的节点表示通过学习到的权重进一步整合到一个全局节点表示中。全局表示将被用于后续的图分析任务。

MGAT模型包括两个主要部分:

  • 单个view的图嵌入
  • Multi-view部分的基于注意力的聚合

更具体地说,图嵌入组件对节点的proximities进行挖掘。受限的GAT模型被用来对每个单独的view进行有效编码。

基于注意力的聚合组件整合了不同的view,以获得更全面的节点表示。

Multi-view graph attention networks

在本节中,作者首先简要介绍作为上游模型的单view图注意层,然后介绍基于注意的聚合方法,以学习不同view的权重,从而获得全局节点表征。

对于模型的输入,需要输入特征矩阵X,其大小为|V|×F,以及每个view的邻接矩阵A,其大小为|V|×|V|,其中F定义为每个节点中输入特征的维度。为了简洁起见,我们简单地将节点表示定义为x={x1, x2, . . ., x|V|},xi∈RF。

图注意层产生一组新的节点表征x′ = {x′ 1, x′ 2, . . .,x′|V|},x′i∈RF ′作为其输出,其中F′被定义为输出的特征维度。为了将输入特征转化为高层次的输出特征,一个共享的线性转化,由可学习的权重矩阵W∈RF ′×F作为参数,应用于每个节点,注意力机制b由一个可学习的权重向量a∈R2F ′作为参数。然后,由注意力机制计算的系数可以表示为:

image-20220302163746250

image-20211224152415981

concat的节点表示被定义为:

image-20211224153522961

其中∥代表concat,αφ ij是由第φ个注意机制(bφ)计算的归一化注意参数,Wφ是线性权重矩阵。而平均的节点表征可以定义为:

image-20211224154157568

由于每个view都有其独立的模型和独立的网络参数,作者提出了一个新的正则化项来进行约束。
由于每个view都包含相同的节点集,因此广泛改变网络参数是不可取的。为了鼓励参数的相似性,作者引入了一个新的正则化项。对于一般的Multi-view网络,每个view代表一种节点之间的关系,通常是稀疏的和有偏见的,利用其他view的信息会更全面。我们的方法应用每个view的网络参数之间的l2准则,并将它们加在一起来约束成对view的网络参数。正则化项可以定义为:

image-20211224155546896

其中Wi和Wj是viewi和viewj的GAT权重矩阵。

在学习了每个单独view的节点表征后,设计了一种基于注意力的聚合方法,用于学习不同view的权重,并将Multi-view图网络嵌入到全局节点表征中。

由于不同观点的重要性对每个节点来说差异很大,尝试为它们分配不同的权重。首先将节点表征x′ ik并列为ci,其中i = 1, 2, . . .其中i = 1, 2, …,V|,k = 1, 2, …,K。K表示view的数量,ci表示节点vi的所有特定view表示的串联。我们扩展了最近的基于注意力的模型,并通过采用一个softmax函数来定义节点vi中viewk的权重:

image-20211224160628024

其中tk∈RF ′是视图k的可学习权重向量,-T代表转置。对于每个节点vi来说,如果视图k起着比较重要的作用,那么学到的权重向量tk和协整表示的乘法结果就会很大。而如果对节点vi的一对视图具有相似的节点嵌入表示,那么这些视图的βik的结果将具有数字上的相似性。

该属性允许每个视图的每个节点自主地学习更合理的权重,这将促进协作并约束每个单独视图的偏差。

然后全局节点表征,对每个单视图使用约束的GAT,对多视图使用注意力聚合法,最后可以被定义为:

image-20211224161053927

其中x′ik表示节点vi的view k的学习节点表征。有了权重βik作为参数,特定视图的节点表征可以被加权并结合起来产生全局表征。

然后,全局节点表示可以应用于不同的预测任务,如链接预测和节点分类。我们将可学习的参数简要概括为θ={Wk, ak, tk}, k=1, 2, …在后向传递过程中,我们通过最小化我们方法的目标函数来估计θ,可以总结为:

image-20211224162558169

其中,S是训练数据集,L是一个特定的损失函数,ξ是用于加权正则化项Ω的超参数。我们在链接预测和节点分类任务上研究我们的多视图图嵌入方法。对于链接预测任务,我们将标记的数据表示为训练节点之间的链接集合。损失函数可以定义为:

image-20211224162659032

在这个损失函数中,(vi,vj)是一对节点,yij代表链接e(vi,vj)的真实存在,其中如果vi和vj之间存在链接,则数值设为1,否则为0。ˆyij是vi的和vj的全局节点表示的余弦相似度。其实就是一个二分类的损失函数。

而对于节点分类任务,我们最小化交叉熵损失,可以定义为:

image-20211224163033651

其中,yi代表节点vi的真实标签,ˆyi代表节点vi的预测softmax概率。目标函数可以通过梯度下降法和反向传播法有效更新。首先,我们在每次迭代中使用受约束的GAT学习特定视图的节点表示。然后,我们通过基于注意力的方法更新不同视图的权重。最后,基于学习到的权重,每个特定视图的节点表示将被联合计算为全局节点表示。当损失函数Lglobal不收敛时,我们计算部分导数∂Lglobal /∂θ并通过反向传播算法优化参数θ。

整个MGAT算法总结如下:
 Algorithm  1  The MGAT Algorithm   Require: network  G = { V , E 1 , E 2 , … E K }  with the adjacency matrix  A  and the feature matrix  X ,  dimension of network embedding  d ,   hyper-parameter  ξ .  Ensure: global embedding representation matrix  H .  1: Initialize the parameter  θ = { W k , a k , t k } , k = 1 , 2 , … , K .  2: while the loss function  L g l o b a l  not converge do   3:   Calculate the single-view node representations according to Eq. (2) or (3).   4:   Obtain the attention coefficients  β i k  of different views according to Eq. (5).   5:   Compute the global node representation  h i  of each node according to Eq. (6).   6:   Calculate the partial derivative  ∂ L g l o b a l ∂ θ  and optimize the parameter  θ  by the back-propagation algorithm.   7: end while  \begin{aligned} &\text { Algorithm } 1 \text { The MGAT Algorithm } \\ &\text { Require: network } G=\left\{V, E_{1}, E_{2}, \ldots E_{K}\right\} \text { with the adjacency matrix } A \text { and the feature matrix } X, \text { dimension of network embedding } d \text {, } \\ &\text { hyper-parameter } \xi . \\ &\text { Ensure: global embedding representation matrix } H . \\ &\text { 1: Initialize the parameter } \theta=\left\{W_{k}, a_{k}, t_{k}\right\}, k=1,2, \ldots, K . \\ &\text { 2: while the loss function } L_{g l o b a l} \text { not converge do } \\ &\text { 3: } \quad \text { Calculate the single-view node representations according to Eq. (2) or (3). } \\ &\text { 4: } \quad \text { Obtain the attention coefficients } \beta_{i k} \text { of different views according to Eq. (5). } \\ &\text { 5: } \quad \text { Compute the global node representation } h_{i} \text { of each node according to Eq. (6). } \\ &\text { 6: } \quad \text { Calculate the partial derivative } \frac{\partial L_{g l o b a l}}{\partial \theta} \text { and optimize the parameter } \theta \text { by the back-propagation algorithm. } \\ &\text { 7: end while } \end{aligned}  Algorithm 1 The MGAT Algorithm  Require: network G={V,E1,E2,EK} with the adjacency matrix A and the feature matrix X, dimension of network embedding d hyper-parameter ξ. Ensure: global embedding representation matrix H. 1: Initialize the parameter θ={Wk,ak,tk},k=1,2,,K. 2: while the loss function Lglobal not converge do  3:  Calculate the single-view node representations according to Eq. (2) or (3).  4:  Obtain the attention coefficients βik of different views according to Eq. (5).  5:  Compute the global node representation hi of each node according to Eq. (6).  6:  Calculate the partial derivative θLglobal and optimize the parameter θ by the back-propagation algorithm.  7: end while 

4. Experiments

数据集

作者提出的方法和基线方法在六个真实世界的Multi-view网络上进行了评估。CKM、LAZEGA、CiteSeer、CoRA、DBLP和Twitter,其中前两个来自ManlioDe Domenico项目1。以及CiteSeer和CoRA数据集可以在2找到。DBLP数据集可在3找到。

1 http://deim.urv.cat/manlio.dedomenico/data.php.

2 https://linqs.soe.ucsc.edu/data.

3 https://aminer.org/AMinerNetwork

  • **CKM:**该数据集是通过询问伊利诺伊州四个城镇)的医生来收集的。通过问三个问题,产生了三种关系网络。总共有246个节点,标记为1到246之间的整数ID,以及1551个连接。该网络是有向的、无权的。

  • **LAZEGA:**这个多视角的社会网络包含了伙伴和同事之间的三种关系(共同工作、友谊和建议)。总共有71个节点,用1到71之间的整数ID标记,有2223个连接。

  • **CiteSeer:**该数据集是一个由3312篇论文组成的引文网,分为6个不同的研究类别。作者构建了两个层:一个是引文层,它代表了从论文引文记录中获得的论文之间的引文关系;另一个是论文相似性层,它是通过计算每对论文之间的余弦相似度来构建。作者通过将每篇论文与它的10篇最相似的论文连接起来,从相似性矩阵中构建出K-近邻图。

  • **CoRA:**该数据集由2708篇机器学习论文组成,属于7个不同的研究类别。作者使用与CiteSeer数据集相同的方法来构建引文和相似度层。

  • **DBLP :**该数据集是一个作者网络,包含3种观点:共同作者关系、作者-引用和文本-相似性。作者选择了8个研究领域作为节点分类任务的标签,它们是。机器学习、“数据挖掘”、"
    数据库"、“计算语言学”、“编程语言”、“系统技术”、"硬件 "和 “理论”。

  • **Twitter:**该数据集是一个由希格斯推特数据集构成的用户网络。它记录了一周内所有与 "希格斯玻色子发现 "相关的推文。作者选择了两个网络:"关注 "和 "转发 "作为多网络的不同views。由于’‘Twitter’'数据集没有标签属性,作者只对链接预测任务进行研究。

表2中总结了节点、边、标签和view的详细统计。

image-20211223214707466

Baseline methods

  • DeepWalk(Perozzi等人,2014)是网络嵌入方面的一项经典工作。它将截断的随机行走视为一个句子,并使用受神经语言建模启发的跳格模型生成节点表示。
  • LINE(Tang等人,2015)是另一种流行的网络嵌入方法,它在大规模的网络中学习节点表征。通过明确优化两个目标函数,而不是利用随机漫步,保留一阶和二阶接近性的网络。
  • node2vec(Grover & Leskovec, 2016)利用一对参数来控制随机行走过程,并使其在探索邻接节点时可行。
  • NetMF(Qiu et al. , 2018)将上述具有负采样的模型,如DeepWalk和LINE统一到矩阵分解框架中。通过采用统一的矩阵分解框架,它可以理解并在理论上改进DeepWalk和LINE。
  • R-GCNs(Schlichtkrull等人,2018)对GCNs做了进一步的探索,专门为高度多关系数据集和基于知识的现实数据集开发。
  • MELL(Matsuno&Murata,2018)通过引入所有的网络结构,同时学习节点的嵌入向量和每个indi- vidualview的层嵌入。
  • MNE(Zhang et al. , 2018)为每个view的每个节点发明了一个独特的嵌入和几个基于关系的嵌入,这些嵌入通过一个可学习的全局变换矩阵来对齐,这些参数由一个统一的网络嵌入模型来共同学习。

链接预测

链接预测是网络仿真的一个基本应用。当一个给定的网络中的一些链接被移除时,链接预测的目的是预测缺失的链接。为了进行模拟,在图中随机选择一部分链接作为缺失的链接。作者在剩余的链接上训练模型,以提供对缺失指数的预测,并通过与基础事实的邻接矩阵进行比较来评估其性能。按照其他嵌入方法中常用的评价标准,作者在实验中使用AUC作为评价指标。AUC的值越高,意味着性能越好,如果该值接近于1,则说明该模型质量高。如表3所示,不同模型的AUC值在以下方面进行了评估。

image-20211223221207772

对于所有的数据集,50%的链接被随机选为训练样本,10%的节点被选为验证样本,40%用于测试。对于每一对节点,引入余弦相似度来计算嵌入表征的相似性 。意味着如果相似度很高,节点之间可能存在联系。

由于Multi-view网络有多种关系类型,作者为每种关系计算AUC,并取其平均值作为结果。对于这些为单view网络发明的模型,作者为每个单独的view分别训练嵌入,这表明不同的view之间不共享信息。

从表3的结果来看,作者有以下主要观察:

  • 通过比较所有的基线方法,作者发现,对于链接预测任务,为Multi-view网络设计的嵌入方法产生了有竞争力的结果,而基于结构的方法比为单view网络设计的方法表现更好。这
    是合理的,因为单view图网络的关系信息过于简单,在不同的view中可能成为彼此的补充。
  • 对于几乎所有的Multi-view网络数据集,协同考虑不同的关系类型是有益的。对于CKM数据集,作者的方法取得了最好的AUC改进,比表现最好的基线提高了5.1%。而且,无论网络
    的稀疏程度是密集还是稀疏,作者的方法都被证明具有竞争力。
  • 综上所述,作者的模型在链接预测任务上的表现一直优于几乎所有的基线方法。 主要原因是通过约束神经网络参数和协同学习不同观点的各种权重,作者可以提高网络嵌入的泛化能力,这对链接预测具有重要意义。

节点分类

在现实世界的网络中,节点的标签意味着它们的相互关系或同源关系,但在大多数情况下,只有少数节点被标记,其余的节点仍有待指示。通过监测节点分类任务的表现,可以直接揭示网络嵌入算法的有效性。对于为单view网络设计的DeepWalk、LINE、node2vec和NetMF,作者分别为每个单view训练一个嵌入,并将它们平均在一起。作者在每个基准数据集上进行了5次每种方法,并报告了平均的Micro-F1得分。对于所有的数据集,随机选择10%的节点作为训练样本,选择10%的节点作为验证样本,80%的节点用于测试。对于CKM数据集,所有研究人员的原始公司被视为节点标签,而对于LAZEGA数据集,法学院被视为节点标签。节点分类结果如表4所示。

image-20211223221730102

作者有以下主要观察结果。

作者的模型在大多数数据集上都能取得令人信服的结果。对于有数千个节点的CoRA和CiteSeer,MGAT在所有基于嵌入的方法中是最好的,而对于包括数百个节点的CKM和LAZEGA,作者的方法比最先进的方法略好。 对于包含最多节点的DBLP,作者的MGAT在统计学上比其 他基线有明 显的改进。 对于 DeepWalk、 LINE、node2vec和NetMF这些只在每个单一view中探索节点近似度的方法,其性能并不理想。对于R-GCNs,由于该模型也可以被引入多图网络数据集,其结果具有竞争力。由于R-GCNs将邻接矩阵和节点矩阵编码为在只提供邻接矩阵的CKM、LAZEGA和DBLP数据集上,R-GCNs的实验结果可以达到最先进的基线。但是对于CoRA和CiteSeer数据集,即同时考虑到邻接矩阵和特征矩阵,其他多图嵌入方法被证明是更好的。

此外,作者在嵌入前先将Multi-view网络的不同view串联成一个单一view,然后用GAT算法训练模型,命名为MGAT-conte。遗憾的是,实验结果不如作者的方法,因为MGAT-conte可能会丢失不同view中相同节点连接的信息,也没有考虑到不同view的影响。对于MGAT-noattn,它对每个单独的view使用GAT模型并简单地进行平均,而没有使用注意力方法,基于注意力的机制最多可以提高3.6%的性能。这表明对不同view进行加权的注意力方法在节点分类任务中起着重要的作用。最重要的是,作者的MGAT能够有效地将Multi-view图网络的判别信息编码到学习的节点表征中,而不考虑网络稀疏程度的不同。

5. Conclusions

在本文中,作者提出了一种新的Multi-view图嵌入方法,名为MGAT。具体来说,探索了一种新的基于注意力的机制来学习权重和促进不同view的协作,以及一种新的正则化来增强各个view的网络参数的相似性。

MGAT可以对Multi-view网络进行编码,由于考虑到每个view的不同属性,并且节点之间的处理是由不同view中的丰富信息决定的,因此更加有效。

在六个数据集上进行了广泛的实验,实证结果表明,MGAT在链接预测和节点分类任务上优于现有的方法。

在未来,作者打算将该模型推广到更复杂的图网络。

GAT

对GAT还不熟悉的同学可以参考这个视频来学习:
GAT

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuetianw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值