阅读论文3

这篇论文不是最新的,是一篇很经典的论文,是transformer模型的生成,想通过这篇论文学习transformer,并希望能跑起来这个模型,因为到现在还不会跑代码。


前言

在看这篇论文之前,可以先学一些基本概念,一些大佬梳理好的知识

例如:https://blog.csdn.net/csdn_xmj/article/details/138724399 在一篇 “基于Pytorch框架,从零实现Transformer模型实战”


提示:以下是本篇文章正文内容

一、Transformer模型的由来,Attention is All You Need

在这里插入图片描述
transformer的核心是基于注意力机制,完全免除递归和卷积。

摘要

主要的序列转导模型基于包括编码器和解码器的复杂递归或卷积神经网络。性能最好的模型还通过一种注意机制连接编码器和解码器。我们提出了一个新的简单的网络结构,变压器,完全基于注意力机制,完全免除递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优,同时更具并行性,并且需要的训练时间明显更少。我们的模型在WMT 2014英德翻译任务上取得了28.4 BLEU,比现有的最好结果(包括系综)提高了超过2 BLEU。在WMT 2014英语到法语的翻译任务中,我们的模型在8个GPU上训练3.5天后,建立了一个新的单模型最先进的BLEU分数41.8,只是文献中最佳模型训练成本的一小部分。我们通过将该转换器成功地应用于具有大量和有限训练数据的英语选区分析,表明该转换器可以很好地推广到其他任务。

这个模型的效果是通过翻译任务中增加翻译的准确性来展示的。

引言

递归神经网络,特别是长短期记忆[13]和门控递归[7]神经网络,已经被牢固地确立为序列建模和转导问题(如语言建模和机器翻译)中的最新方法[35,2,5]。自那以后,无数的努力继续推进递归语言模型和编码器-解码器架构的边界[38,24,15]。

递归模型通常沿着输入和输出序列的符号位置来分解计算。将位置与计算时间中的步骤对齐,它们生成一系列隐藏状态ht,作为前一个隐藏状态ht1和位置t的输入的函数。这种固有的顺序性质排除了训练示例中的并行化,这在序列长度较长时变得至关重要,因为内存约束限制了示例之间的批处理。最近的工作通过因式分解技巧[21]和条件计算[32]实现了计算效率的显著提高,同时也提高了后者的模型性能。然而,顺序计算的基本限制仍然存在。

注意机制已成为各种任务中引人注目的序列建模和转导模型的一个组成部分,允许对依赖性进行建模,而不考虑它们在输入或输出序列中的距离[2,19]。然而,在几乎所有的情况下[27],这种注意机制都是和一个循环网络一起使用的

在这项工作中,我们提出了Transformer,这是一种避免递归的模型架构,它完全依赖于一种注意机制来绘制输入和输出之间的全局依赖关系

Transformer支持更高的并行度,在八个P100 GPU上训练了短短12个小时后,翻译质量就达到了新的水平。

背景

减少顺序计算的目标也形成了扩展神经GPU [16]、ByteNet [18]和ConvS2S [9]的基础,所有这些都使用卷积神经网络作为基本构建模块,为所有输入和输出位置并行计算隐藏表示。在这些模型中,关联两个任意输入或输出位置的信号所需的运算次数随着位置之间的距离增加而增加,ConvS2S为线性,ByteNet为对数。这使得学习遥远位置之间的依赖性变得更加困难[12]。在Transformer中,这被减少到恒定数量的操作,尽管代价是由于平均注意力加权位置而降低了有效分辨率,我们用3.2节中描述的多头注意力抵消了这种效应。

自我注意,有时被称为内部注意,是一种与单个序列的不同位置相关的注意机制,以便计算该序列的表示。自我注意已经成功地用于各种任务,包括阅读理解、抽象概括、文本推理和学习任务独立的句子表征[4,27,28,22]。

端到端的记忆网络是基于一种循环注意机制,而不是顺序排列的循环,并已被证明在简单语言问答和语言建模任务中表现良好[34]。

然而,据我们所知,Transformer是第一个完全依赖自我关注来计算其输入和输出表示而不使用序列对齐RNNs或卷积的转导模型。在接下来的章节中,我们将描述变压器,激发自我关注,并讨论其相对于[17,18]和[9]等模型的优势。


模型架构

大多数竞争性神经序列转导模型都有一个编码器-解码器结构[5,2,35]。这里,编码器将符号表示的输入序列(x1,…,xn)转换为连续表示序列z = (z1,…,zn)。给定z,解码器然后生成输出序列(y1,…ym),一次一个元素。在每一步,模型都是自回归的[10],在生成下一步时,消耗先前生成的符号作为附加输入。

编码器和解码器堆栈

编码器:编码器由N = 6个相同层的堆栈组成。每层有两个子层。第一种是多头自关注机制,第二种是简单的、按位置完全连接的前馈网络。我们在两个子层中的每一个周围使用残差连接[11],然后进行层归一化[1]。即每个子层的输出是LayerNorm(x + Sublayer(x)),其中Sublayer(x)是子层本身实现的函数。为了促进这些剩余连接,模型中的所有子层以及嵌入层产生维度dmodel = 512的输出。

解码器:解码器也由N = 6个相同层的堆叠组成。除了每个编码器层中的两个子层之外,解码器还插入了第三个子层,该子层对编码器堆栈的输出执行多头关注。与编码器类似,我们在每个子层周围使用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的自关注子层,以防止位置关注后续位置。这种屏蔽与输出嵌入偏移一个位置的事实相结合,确保了位置I的预测只能依赖于小于I的位置处的已知输出。

Attention

注意功能可以描述为将查询和一组键-值对映射到输出,其中查询、键、值和输出都是向量。 输出被计算为值的加权和,其中分配给每个值的权重由查询与相应键的兼容性函数来计算。

Scaled Dot-Product Attention 标度点积注意力

我们称我们的特殊注意力为“成比例的点积注意力”(图2)。输入由维度dk的查询和键以及维度dv的值组成。我们计算查询中所有键的点积,将每个键除以√dk,并应用softmax函数来获得值的权重。

在实践中,我们同时计算一组查询的关注函数,一起打包到矩阵q中。关键字和值也一起打包到矩阵K和V中。我们计算输出矩阵为:
在这里插入图片描述
两种最常用的注意力功能是加法注意力[2]和点积(乘法)注意力。点积注意力与我们的算法相同,除了比例因子为1√dk。附加注意使用具有单个隐藏层的前馈网络来计算兼容性函数。虽然这两者在理论上的复杂性相似,但是点积注意力在实践中要快得多并且更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。

虽然对于较小的dk值,这两种机制的表现相似,但对于较大的dk值,相加注意优于点积注意,而没有缩放[3]。我们推测,对于较大的dk值,点积的幅度会变大,从而将softmax函数推到梯度极小的区域4。为了抵消这种影响,我们将点积缩放1√dk

多头注意力

我们发现将查询、键和值分别线性投影h次到dk、dk和dv维度是有益的,而不是用d模型维度的键、值和查询来执行单个注意函数。然后,在查询、键和值的每个投影版本上,我们并行执行注意功能,产生dv维输出值。这些被连接起来并再次投影,产生最终的值,如图2所示。
在这里插入图片描述
多头注意力允许模型在不同位置共同注意来自不同表征子空间的信息。用单一的注意力头,平均化抑制了这一点。
其中投影是参数矩阵W Q i ∈ Rdmodel×dk,W Ki ∈ Rdmodel×dk,W Vi ∈ Rdmodel×dv和W O ∈ Rhdv×dmodel。

在这项工作中,我们采用h = 8平行注意层,或头部。对于其中的每一个,我们使用dk = dv = dmodel/h = 64。由于每个头部的维数降低,总计算成本类似于全维数的单头注意。

注意力的应用

在我们的模型中,转换器以三种不同的方式使用多头注意力:在“编码器-解码器注意力”层中,查询来自前一个解码器层,存储器键和值来自编码器的输出。这允许解码器中的每一个位置关注输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制,例如[38,2,9]。

编码器包含自我关注层。在自关注层中,所有的键、值和查询都来自同一个地方,在这种情况下,是编码器中前一层的输出。编码器中的每个位置可以关注编码器的前一层中的所有位置。

同样,解码器中的自我关注层允许解码器中的每个位置关注解码器中的所有位置,直到并包括该位置。我们需要防止解码器中的向左信息流,以保持自回归特性。我们通过屏蔽(设置为softmax输入中与非法连接相对应的所有值,在比例点积注意中实现这一点。参见图2。

位置式前馈网络

除了注意子层之外,我们的编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络被单独且相同地应用于每个位置。这由两个线性转换组成,中间有一个ReLU激活。
在这里插入图片描述
虽然不同位置的线性变换是相同的,但是它们在层与层之间使用不同的参数。另一种描述方式是两个内核大小为1的卷积。

输入和输出的维数为dmodel = 512,内层的维数为df f = 2048。

Embedding和Softmax

类似于其他序列转导模型,我们使用学习的嵌入来将输入表征和输出表征转换为维度dmodel的向量。我们还使用通常学习的线性变换和softmax函数将解码器输出转换为预测的下一个令牌概率。在我们的模型中,我们在两个嵌入层和预softmax线性变换之间共享相同的权重矩阵,类似于[30]。在嵌入层中,我们将这些权重乘以√dmodel。

位置编码

由于我们的模型不包含递归和卷积**(递归和卷积可以让输入的序列有顺序,记录他们的相对位置和绝对位置)**,为了让模型利用序列的顺序,我们必须注入一些关于序列中记号的相对或绝对位置的信息。为此,我们将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中。位置编码与嵌入具有相同的维度dmodel,因此两者可以相加。有许多位置编码的选择,学习的和固定的[9]。

在这项工作中,我们使用不同频率的正弦和余弦函数:
在这里插入图片描述

其中pos为位置,I为维度。也就是说,位置编码的每个维度对应于一个正弦曲线。波长形成从2π到10000 2π的几何级数。我们选择这个函数,因为我们假设它将允许模型容易地学习通过相对位置来参与,因为对于任何固定的偏移k,P Epos+k可以表示为P Epos的线性函数。

我们还尝试使用习得的位置嵌入[9],并发现两个版本产生几乎相同的结果(见表3行(E))。我们选择正弦版本,因为它可以允许模型外推至比训练期间遇到的序列长度更长的序列长度。

Why Self-Attention

在本节中,我们将自关注层的各个方面与通常用于映射一个可变长度符号表示序列(x1,…xn)转换成另一个相等长度的序列(z1,…,zn),具有xi,zi ∈ Rd,例如典型序列转导编码器或解码器中的隐藏层。为了激发我们对自我关注的使用,我们认为有三个必要条件。

一个是每层的总计算复杂度。另一个是可以并行化的计算量,通过所需的最少顺序操作数来衡量。

第三是网络中长程依赖之间的路径长度。学习长程相关性是许多序列转导任务中的一个关键挑战。影响学习这种依赖性的能力的一个关键因素是前向和后向信号在网络中必须经过的路径的长度。输入和输出序列中任何位置组合之间的路径越短,就越容易了解长程相关性[12]。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。
如表1所示,自我关注层用恒定数量的顺序执行的操作连接所有位置,而循环层需要O(n)个顺序操作。就计算复杂性而言,当序列长度n小于表示维度d时,自我注意层比递归层更快,这是机器翻译中最新模型使用的句子表示最常见的情况,例如单词片段[38]和字节对[31]表示。为了提高涉及很长序列的任务的计算性能,自我注意可以被限制为仅考虑以相应输出位置为中心的输入序列中大小为r的邻域。这将把最大路径长度增加到O(n/r)。我们计划在未来的工作中进一步研究这种方法。

核宽度k < n的单个卷积层不连接所有的输入和输出位置对。在连续核的情况下,这样做需要O(n/k)个卷积层的堆栈,或者在扩张卷积的情况下需要O(logk(n))个卷积层[18],增加了网络中任意两个位置之间的最长路径的长度。卷积层通常比递归层贵k倍。然而,可分卷积[6]将复杂度大大降低到O(k n d + n d2)。然而,即使k = n,可分离卷积的复杂度也等于自关注层和逐点前馈层的组合,这是我们在模型中采用的方法。

作为附带的好处,自我关注可以产生更多可解释的模型。我们从我们的模型中检查注意力分布,并在附录中展示和讨论示例。不仅单个的注意头清楚地学习执行不同的任务,许多似乎表现出与句子的句法和语义结构相关的行为。

训练

训练数据和批处理

我们在标准的WMT 2014英德语数据集上进行训练,该数据集由大约450万句对组成。句子使用字节对编码[3]进行编码,该编码具有大约37000个标记的共享源-目标词汇表。对于英语-法语,我们使用了更大的WMT 2014英语-法语数据集,该数据集由36M个句子组成,并将token拆分为32000个词片词汇[38]。句子对按近似序列长度进行批处理。每个训练批包含一组句子对,其中包含大约25000个源标记和25000个目标标记。

Hardware and Schedule

我们在一台带有8个NVIDIA P100 gpu的机器上训练我们的模型。对于使用本文中描述的超参数的基本模型,每个训练步骤大约需要0.4秒。我们对基本模型进行了总共10万步或12小时的训练。对于我们的大型模型(如表3所示),步长为1.0秒。大模型训练了30万步(3.5天)。

优化器

我们使用Adam优化器[20],β1 = 0.9, β2 = 0.98, λ = 10−9。在训练过程中,我们根据以下公式改变了学习率:
在这里插入图片描述

这对应于在第一个warmup_steps训练步骤中线性增加学习率,然后按步数的倒数平方根成比例地降低学习率。我们使用了warmup_steps = 4000。

Regularization

平滑的丢弃

我们将dropout[33]应用于每个子层的输出,然后将其添加到子层输入并归一化。此外,我们将dropout应用于编码器和解码器堆栈中的嵌入和位置编码之和。对于基本模型,我们使用Pdrop = 0.1的速率。

标签平滑

在训练时,我们使用值ϵls = 0.1的标签平滑[36]。这损害了困惑,因为模型学会了更不确定,但提高了准确性和BLEU分数。

总结

在这项工作中,我们提出了Transformer,这是第一个完全基于注意力的序列转导模型,用多头自我注意力取代了编码器-解码器架构中最常用的递归层。

对于翻译任务,转换器的训练速度比基于递归层或卷积层的架构快得多。在WMT 2014英语到德语和WMT 2014英语到法语的翻译任务中,我们都达到了一个新的艺术境界。在前一个任务中,我们的最佳模型甚至优于所有以前报告的集合。

我们对基于注意力的模型的未来感到兴奋,并计划将它们应用于其他任务。我们计划将转换器扩展到涉及文本以外的输入和输出形式的问题,并研究局部的、受限的注意力机制,以有效地处理大量的输入和输出,如图像、音频和视频。我们的另一个研究目标是让世代变得不那么连续。

我们用于训练和评估模型的代码可在https://github.com/ tensor flow/tensor 2 tensor获得。

总结

这篇文章的代码在github上,https://github.com/tensorflow/tensor2tensor。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值