e2efold论文记录

        在这篇文章中提出了一种用于 RNA 二级结构预测的端到端深度学习模型,称为 E2Efold,它可以有效地考虑问题中的固有约束。 E2Efold的关键思想是直接预测RNA碱基配对矩阵,并使用约束编程的展开算法作为深层架构的模板来强制执行约束。通过对基准数据集的全面实验,展示了 E2Efold 的卓越性能:与之前的 SOTA 相比,它可以预测明显更好的结构(特别是对于伪结结构),同时在推理时间方面与最快的算法一样高效。

 1.介绍

        核糖核酸 (RNA) 是一种在许多细胞过程和调节基因表达中发挥重要作用的分子。它由有序的核苷酸序列组成,每个核苷酸包含四种碱基之一:腺嘌呤 (A)、鸟嘌呤 (G)、胞嘧啶 (C) 和尿嘧啶 (U)。该碱基序列可以表示为:

x := (x_{1}, . . . , x_{L}) where x_{i} ∈ {A, G, C, U },

        这被称为RNA的一级结构。碱基可以彼此键合形成一组碱基对,从而定义二级结构。二级结构可以用二元矩阵 A* 表示,其中如果 i,j 个碱基配对,则 A_{ij}^{*}= 1(图 1)。发现 RNA 的二级结构对于理解 RNA 的功能非常重要,因为该结构本质上影响 RNA 与其他细胞成分之间的相互作用和反应。尽管二级结构可以通过实验测定(例如 X 射线衍射)来确定,但其速度慢、成本高且技术上具有挑战性。因此,RNA二级结构的计算预测成为RNA研究中的一项重要任务,并且在药物设计等许多应用中很有用。

        根据一级结构知识计算预测 RNA 二级结构的研究已经进行了数十年。大多数现有方法假设二级结构是能量最小化的结果,即 A* = \arg min_{A}E_{x}(A)。能量函数要么通过基于物理的热力学实验估计,要么从数据中学习。 这些方法面临着一个共同的问题,即所有有效二级结构的搜索空间相对于序列的长度 L 呈指数级大。为了使最小化易于处理,通常假设碱基配对具有嵌套结构(图 2 左),并且能量函数成对分解。有了这个假设,基于动态规划 (DP) 的算法可以迭代地找到子序列的最佳结构,从而在时间 \mathcal{O}(L^{3}) 内考虑大量结构。

        尽管基于DP的算法主导了RNA结构预测,但值得注意的是,它们将搜索空间限制为嵌套结构,但它排除了一些包含有效且在生物学上重要的RNA二级结构“假结”,即具有至少两个非嵌套的元素碱基对(图2右)。假结约占碱基对的 1.4% ,并且在功能重要的区域中比例过高。此外,大约 40% 的 RNA 中存在假结。它们还有助于折叠成 3D 结构,因此不应被忽视。为了预测带有假结的 RNA 结构,基于能量的方法需要运行计算量更大的算法来解码结构。

        总之,在存在更复杂的结构化输出(即伪结)的情况下,基于能量的方法在高效的同时考虑复杂的约束是一项挑战。在本文中,采用不同的观点,假设二级结构是前馈函数的输出,即A^* = \mathcal{F}_{\theta}(x),并提出以端到端的方式从数据中学习 θ 。它避免了基于能量函数的方法中所需的第二个最小化步骤,并且不需要嵌套输出结构。此外,可以通过直接优化感兴趣的损失来拟合前馈模型。

        尽管使用前馈模型具有上述优点,但架构设计仍具有挑战性。更具体地说,在RNA情况下,F_{\theta }很难设计,原因如下:

        (i) RNA 二级结构需要遵守某些硬约束(详见第 3 节),这意味着某些类型的配对根本不能发生。理想情况下,Fθ 的输出需要满足这些约束。

        (ii) RNA 数据点的数量是有限的,因此我们不能指望一个朴素的全连接网络可以直接从数据中学习预测信息和约束。因此,归纳偏差需要被编码到网络架构中。

        (iii) 人们可以采取两步方法,其中当F_{\theta }预测无效结构时,可以执行后处理步骤来强制执行约束。然而,在这种设计中,第一阶段训练的深度网络不知道后处理阶段,从而不太有效地利用约束中编码的潜在先验知识。

        在本文中,提出了一种集成这两个阶段的端到端深度学习解决方案。该架构的第一部分是一个基于Transformer的深度模型,称为Deep Score Network,它表示对结构预测有用的序列信息。第二部分是一个称为Post-Processing Network的多层网络,它逐渐加强约束并限制输出空间。它是基于用于求解约束优化的展开算法而设计的。这两个网络耦合在一起并以端到端的方式共同学习。因此,我们将我们的模型称为 E2Efold。

        通过使用展开算法作为归纳偏置来设计后处理网络,E2Efold的输出空间受到约束(如图3所示),这使得在数据有限的情况下更容易学习到好的模型,也减少了过拟合问题。然而,E2Efold 中编码的约束足够灵活,因此不排除伪结。总之,E2Efold 在学习模型偏差和有效 RNA 结构的表达能力之间取得了很好的平衡。

         在多个 RNA 基准数据集上进行了大量实验,将 E2Efold 与最先进的 (SOTA) 方法进行比较,显示了 E2Efold 的卓越性能,包括:

        • 能够预测有效的RNA二级结构,包括假结;

         • 就推理时间而言,运行效率与最快算法一样;

         • 生成视觉上接近真实结构的结构;

         • 在F1 分数、精确度和召回率方面优于之前的SOTA。

        尽管在本文中重点关注 RNA 二级结构预测,这提出了一个重要而具体的问题,其中 E2Efold 带来了显着的改进,但我们的方法是通用的,可以应用于需要强制执行约束或提供先验知识的其他问题。我们想象,我们学习展开算法以强制约束的设计思想也可以转移到蛋白质折叠和自然语言理解问题(例如,在文档中不同部分之间建立对应结构)等问题。

2.相关工作

         经典的 RNA 折叠方法通过 DP 识别 RNA 序列能量最小化的候选结构,并依赖于数千个实验测量的热力学参数。一些广泛使用的方法,如 RNAstruct (Bellaousov et al., 2013)、Vienna RNAfold (Lorenz et al., 2011) 和 UNAFold (Markham & Zuker, 2008) 采用了这种方法。这些方法通常在时间上扩展为,在存储上扩展为 O(L_{2})(Mathews,2006),这使得它们对于长序列来说速度很慢。最近一项名为 LinearFold(Huang 等人,2019)的进展通过应用波束搜索实现了线性运行时间 O(L),但它无法处理 RNA 结构中的假结。具有假结的最低自由能结构的预测是 NP 完全的(Lyngsø & Pedersen,2000),因此大多数算法中不考虑假结。 HotKnots (Andronescu et al., 2010) 和 Probknots (Bellaousov & Mathews, 2010) 等启发式算法已被用来预测伪结结构,但预测精度和效率仍需提高。

        由于已知 RNA 结构的可用性不断增加,基于学习的 RNA 折叠方法,例如 ContraFold (Do et al., 2006) 和 ContextFold (Zakov et al., 2011) 已被提出用于能量参数估计,从而获得更高的预测精度。但这些方法仍然依赖于上述基于DP的算法来实现能量最小化。最近的深度学习模型CDPfold(Zhang et al., 2019)应用卷积神经网络来预测碱基配对,但它采用点括号表示RNA二级结构,不能表示假结结构。此外,它需要基于 DP 的后处理步骤,其计算复杂性对于长度超过数百的序列来说是令人望而却步的。

        使用可微分算法学习是一个有用的想法,激发了一系列工作(Hershey et al., 2014; Belanger et al., 2017; Ingraham et al., 2018; Chen et al., 2018; Shrivastava et al., 2019) ,它具有类似的想法,即使用可微分展开算法作为神经架构中的构建块。一些模型也应用于结构化预测问题(Hershey et al., 2014; Pillutla et al., 2018; Ingraham et al., 2018),但他们没有考虑具有挑战性的RNA二级结构问题或讨论如何正确合并约束进入架构。 OptNet (Amos & Kolter, 2017) 通过区分 KKT 条件来整合约束,但它在变量和约束的数量上具有三次复杂性,这对于 RNA 情况来说是令人望而却步的。

        NLP 中的依存解析是一个与 RNA 折叠不同但相关的问题。它预测句子中单词之间的依赖关系。与嵌套/非嵌套结构类似,NLP 中对应的术语是投影/非投影解析,其中大多数工作集中于前者,并且通常使用基于 DP 的推理算法(McDonald 等,2005)。深度学习模型(Dozat & Manning,2016;Kiperwasser & Goldberg,2016)被提出来对单词之间的依赖关系进行评分,这与我们工作中的深度评分网络具有相似的风格。

3.RNA二级结构预测问题

        RNA二级结构预测问题中,输入是碱基的有序序列x = (x_{1},...,x_{L}),输出是由矩阵A^{*} \in [0,1]^{L \times L}表示的RNA二级结构。 RNA 二级结构形成的严格限制决定了某些类型的配对根本不可能发生 (Steeg, 1993)。形式上,这些约束是:

(i) 只有三种类型的核苷酸组合 B := {AU, U A}∪ {GC, CG} ∪ {GU, U G} 可以形成碱基对。∀i, j,若x_{i}x_{j} \notin B,则 A_{ij} = 0。
(ii) 不允许有尖环。\forall\left | i - j \right | < 4, A_{ij} = 0
(iii) 配对没有重叠,即是匹配的。\forall i, \sum _{j = 1}^{L} A_{ij} \leq 1

(i) 和 (ii) 根据某些碱基对的类型和相对位置防止其配对。合并这两个约束可以帮助模型排除大量非法对。 (iii) 是 A* 条目之间的全局约束。

所有有效二级结构的空间包含满足上述三个约束的所有对称矩阵 A \in [0,1]^{L \times L}。这个空间比所有二元矩阵\left \{ 0,1 \right \}^{L\times L}的空间小得多。因此,如果我们能够将这些约束纳入我们的深度模型中,减少的输出空间可以帮助我们用更少的训练数据训练更好的预测模型。我们通过使用展开算法作为归纳偏差来设计深层架构来实现这一点。

4 E2EFOLD:基于展开算法的深度学习模型

        在用于结构化预测的前馈网络的文献中,大多数模型都是使用传统的深度学习架构设计的。然而,对于 RNA 二级结构预测,由于 RNA 数据点数量有限以及形成 RNA 二级结构的严格限制,直接使用这些架构效果不佳。这些挑战激发了我们 E2Efold 深度模型的设计,该模型将深度评分网络与基于展开算法的后处理网络相结合,用于解决约束优化问题。

4.1深度评分网络

        E2Efold 的第一部分是一个深度评分网络 U_{\theta }(x),其输出是一个 L × L 对称矩阵。该矩阵的每个条目,即U_{\theta }(x)_{ij},表示配对的核苷酸 x_{i}x_{j} 的分数。这里网络的x输入是L×4维的one-hot embedding。 U_{\theta }的具体架构如图4所示,主要包括

  • 位置嵌入矩阵P,通过精确位置和相对位置来区分\left \{ x_{i} \right \}_{i = 1}^{L}

        P_{i} = MLP(\psi _{1}(i)), ...,\psi _{\iota }(i)),\psi _{\iota+1}(i/L)),...,\psi _{n}(i/L))),其中\left \{ \psi _{j} \right \}是一组n个特征图,例如sin(.),poly(.),sigmoid(.)等,MLP(.)表示多层感知机。这种位置嵌入的想法已经被用往自然语言建模,例如BERT,但是我们适应了RNA序列表示;

  • 一堆Transformer编码器,用于编码序列信息和核苷酸之间的全局依赖性;
  • 2D卷积层用于输出成对分数

       借助神经网络的表示能力,希望能够学习信息丰富的U_{\theta }, 使得U_{\theta}(x)中得分较高的条目可以很好的应对RNA结构中的实际配对碱基。一旦计算出得分矩阵U_{\theta}(x),使用他的一个简单方法是选择一个偏移项s \in \mathbb{R}(例如s = 0),如果U_{\theta }(x)_{ij} > s, 则让A_{ij} = 1。然而这种A_{ij}逐项独立预测可能会导致A违反有效的RNA二级结构的约束。因此,需要后处理步骤来确保预测的A是有效的。这一步可以再学习到U_{\theta}之后单独进行。但是,碱基对的评分和后处理的这种解耦可能会导致次优结果,其中这两个阶段的错误不能一起考虑并一起调整。相反,我们将引入一个后处理网络,他可以与U_{\theta}一起进行端到端的训练以强制执行约束。

4.2后处理网络

        E2Efold 的第二部分是后处理网络 PP_{\phi },它是一种用于解决约束优化问题的展开和参数化算法。我们首先介绍如何将后处理步骤表述为约束优化问题以及解决该问题的算法。之后,我们展示了如何使用该算法作为模板来设计深层架构 PP_{\phi }

4.2.1 约束优化后处理

        约束优化的制定。给定预测的分数U_{\theta}(x),将总分数\frac{1}{2}\sum _{i,j}(U_{\theta}(x)_{ij} - s)A_{ij}定义为最大化目标,其中s是偏移项。显然,在没有结构约束的情况下,当U_{\theta}(x)_{ij} > s时, 最优解是取A_{ij} = 1.直观上,目标衡量评分矩阵和A矩阵中的条目之间的协变。在有约束的情况下,精确的最大化变得很难。为了使其易于处理,我们通过允许A_{i,j} \in [0,1]将这种离散优化凸松弛为连续优化。因此,我们考虑优化的解空间是\mathcal{A}(x) := \{ A \in [0,1]^{L \times L} \mid A 是对称的且满足第3节中的约束(i)-(iii)}

         为了进一步简化搜索空间,定义在\mathbb{\mathbb{R}}^{L\times L}上的非线性变换\tau为:

          其中 \circ 表示逐元素乘法。矩阵M定义为:如果x_{i}x_{j} \in \ss\ss\Re 并且 \left | i - j \right |\geqslant 4 定义矩阵M(x)_{ij} := 1 否则为0.从这个定义可以看到M(x)编码了约束(i)-(ii)。通过变换\tau,得到的矩阵是非负的、对称的,并且满足约束(i)和(ii)。因此,通过定义A := \tau \left ( \hat{A} \right ), 解空间被简化为A(x) = \left \{ A = \tau(\hat{A}) | \hat{A} \in \mathbb{R}^{L\times L},A1\leq 1\right \}

        最终引入一个惩罚项\mathbf{l}_1使A稀疏,并将后处理步骤表述为(<·,·> 表示矩阵内积,即逐项乘法的和)

         这个公式的优点是变量 \hat{A}_{ij}\mathbb{R} 中的自由变量,并且只有 L 个不等式约束 A1 ≤ 1。这个线性不等式系统可以用一组非线性等式 relu(A1 − 1) = 0 代替,因此通过引入拉格朗日乘子 λ ∈\mathbb{R}_{+}^{L},可以很容易地将约束问题转化为无约束问题:

 4.2.2通过展开算法进行后处理网络

         基于上述算法,设计了一个后处理网络,记为PPφ。定义后,我们可以将其与深度评分网络 Uθ 连接并以端到端的方式联合训练它们,以便 Uθ(x) 的训练阶段了解后处理步骤。

        PPφ的具体计算图在算法1中给出,其主要组成部分是一个循环单元,我们称之为PPcellφ。计算图几乎与等式(1)的迭代更新相同。 3 至方程式6、除几处修改外:

  •  (可学习的超参数)步长α、β、衰减率γα、γβ、稀疏系数ρ和偏移项s等超参数被视为φ中的可学习参数,这样就不需要手动调整超参数而是自动学习相反,它们来自数据。
  •  (固定 # 次迭代)不是运行迭代更新直到收敛,而是递归地应用 PPcellφ T 次迭代,其中 T 是手动固定的数字。这就是为什么图 3 中 E2Efold 的输出空间略大于真实解空间。
  •  (平滑符号函数)由 relu(·) 的梯度得出,即方程中的更新步骤。 4 包含一个符号(·) 函数。然而,为了通过 PPφ 推动梯度,我们需要一个可微的更新步骤。因此,我们使用定义为 softsign(c) := 1/(1 + exp(−kc)) 的平滑符号函数,其中 k 是温度。
  • (clip ˆ A) 包含一个附加步骤 ˆ A ← min( ˆ A, 1),以使每次迭代的输出 At 保持在 [0, 1]L×L 范围内。这对于计算中间结果 {At}tT=1 的损失很有用,我们将在第 5 节中对此进行更多解释。

        通过这些修改,后处理网络 PPφ 成为一种免调整且可微分的展开算法,具有有意义的中间输出。与深度评分网络相结合,最终的深度模型为 

 

 5.端到端训练算法

         给定包含输入输出对 (x, A*) 示例的数据集 D,E2Efold 的训练过程类似于标准的基于梯度的监督学习。然而,对于RNA二级结构预测问题,评估预测性能的常用指标是F1分数、精度和召回率,它们是不可微分的。

        可微 F1 损失。为了直接优化这些指标,我们通过在 [0, 1]L×L 上定义连续函数来模拟真阳性 (TP)、假阳性 (FP)、真阴性 (TN) 和假阴性 (FN):

        TP = <A, A*>, FP = <A, 1 − A*>, FN = <1 − A, A*>, TN = <1 − A, 1 − A*>。

由于 F1 = 2TP/(2TP + FP + FN),我们定义一个损失函数来模拟 F1 分数的负值:

        假设\sum _{ij}A_{ij}^{*} \neq 0,该损失是明确定义的并且可在 [0, 1]L×L 上微分。精确率和召回率损失可以用类似的方式定义,但我们在本文中优化了 F1 分数。

        值得注意的是,这种 F1 损失比其他可微损失(包括 l2 和交叉熵损失)具有优势,因为负样本(即 Aij = 0)比正样本(即 Aij = 1)多得多。使用 l2 或交叉熵损失时需要手动调整权重来平衡它们,但 F1 损失会自动处理这个问题,这对于许多问题很有用

        总体损失函数。如前所述,E2Efold 在每次迭代中输出一个矩阵 At ∈ [0, 1]L×L。这使我们能够添加辅助损失来规范中间结果,引导其学习可以生成平滑解轨迹的参数。更具体地说,我们使用一个取决于整个优化轨迹的目标:

        其中\left \{ A_{t} \right \}_{t = 1}^{T} = PP_{\phi }(U_{\theta}(x),M{x})\gamma≤ 1 是折扣因子。根据经验,我们发现使用逻辑回归损失预训练 Uθ 非常有用。此外,将这个额外损失添加到等式中也是有帮助的。 9 作为正则化。 

6.实验

        我们在两个基准数据集上将 E2Efold 与 SOTA 以及 RNA 二级结构预测领域最常用的方法进行比较。实验结果表明,E2Efold 在 RNAstralign 数据集上的 F1 分数提高了 29.7%,并且推断 RNA 二级结构的速度与现有算法中最高效的算法(LinearFold)一样快。还进行了消融研究,以表明通过后处理步骤推动梯度的必要性。重现实验结果的代码已发布。

        数据集。我们使用两个基准数据集:(i) ArchiveII (Sloma & Mathews, 2016),包含来自 10 个 RNA 类型的 3975 个 RNA 结构,是经典 RNA 折叠方法广泛使用的基准数据集。 (ii) RNAStralign (Tan et al., 2017),由 8 个 RNA 类型的 37149 个结构组成,是市场上最全面的 RNA 结构集合之一。去除冗余序列和结构后,剩下30451个结构。有关这两个数据集的统计信息请参见表 1。

        

         RNAStralign 实验。我们通过分层抽样将RNAStralign数据集分为训练集、测试集和验证集(详细信息参见表7和图6),以便每个集包含所有RNA类型。

我们将 E2Efold 与六种方法的性能进行比较,包括 CDPfold、LinearFold、Mfold、RNAstruct (ProbKnot)、RNAfold 和 CONTRAfold。 E2Efold 和 CDPfold 都是从相同的训练/验证集学习的。对于其他方法,我们直接使用提供的包或网络服务器来生成预测结构。我们评估测试集中每个序列的 F1 分数、精确度和召回率。表 2 中报告了平均值。根据 Mathews (2019) 的建议,对于碱基对 (i, j),以下预测也被认为是正确的:(i + 1, j)、(i − 1, j) , (i, j + 1), (i, j − 1),因此我们还报告了允许一位移动时的指标。

        如表2所示,传统方法可以获得0.433到0.624的F1分数,这与原始论文报告的性能一致。 CONTRAfold 和 CDPfold 这两种基于学习的方法在某些标准上可以以合理的幅度优于经典方法。另一方面,E2Efold 在所有标准上都显着优于以前的所有方法,至少提高了 20%。请注意,对于几乎所有其他方法,召回率通常高于精度,而对于 E2Efold,精度高于召回率。这可能是神经网络训练期间纳入约束的结果。图 5 显示了每种方法的 F1 分数分布。这表明 E2Efold 始终具有良好的性能。

        为了估计 E2Efold 在长序列上的性能,我们还计算了按序列长度加权的 F1 分数,这样结果更受较长序列的支配。详细结果见附录 D.3。

        在 ArchiveII 上进行测试,无需重新训练。为了模拟现实世界的场景,即用户想要预测新发现的 RNA 结构(其分布可能与训练数据集不同),我们直接测试从 ArchiveII 数据集上的 RNAStralign 训练集学习到的模型,而无需重新训练模型。为了公平比较,我们排除了与 RNAStralign 数据集重叠的序列。然后,我们在 ArchiveII 中与 RNAStralign 数据集具有重叠 RNA 类型(5SrRNA、16SrRNA 等)的序列上测试模型。结果如表3所示。可以理解的是,不基于学习的经典方法的性能与RNAStralign的性能一致。 E2Efold 的性能虽然不如 RNAStralign,但在不同的评估标准下仍然优于所有其他方法。此外,由于原始ArchiveII数据集包含域序列(子序列),因此我们删除域并在附录D.4中报告结果,这与表3中的结果类似。 

        推理时间比较。我们记录了在 RNAStralign 测试集上预测 RNA 二级结构的所有算法的运行时间,总结如表 4 所示。LinearFold 是基线中最高效的,因为它使用了波束剪枝启发式来加速 DP。CDPfold 的 F1 分数高于其他基线,但由于它的 DP 后处理步骤,速度非常慢。由于我们使用的是基于梯度的算法,设计后处理网络很简单,因此 E2Efold 速度很快。在 GPU 上,E2Efold 的推理时间与 LinearFold 相似。 

        假结预测。尽管E2Efold不排除假结,但不确定它是否真的生成假结结构。因此,我们选择包含伪结的所有序列并仅计算该集合上的平均 F1 分数。此外,我们还计算了预测为假结的假结序列的数量,并将该计数报告为真阳性(TP)。同样,我们在表 5 中报告了 TN、FP 和 FN 以及 F1 分数。大多数工具都排除假结,而 RNAstruct 是最著名的可以预测假结的工具,因此我们选择它进行比较。

         可视化。我们将正文中三个 RNA 序列的预测结构可视化。附录中提供了更多示例(图 8 至 14)。在这些图中,紫色线表示假结元件的边缘。尽管 CDPfold 的 F1 分数高于其他基线,但其预测在视觉上与真实情况相差甚远。相反,RNAstruct 和 CONTRAfold 在所有基线中产生相对更合理的可视化,因此我们与它们进行比较。这两种方法可以捕捉到结构的粗略草图,但还不够好。在大多数情况下,E2Efold 生成与真实情况最相似的结构。此外,对于一些很长且很难预测的 RNA 序列,它的效果出人意料地好。

        消融研究。为了检查通过后处理推动梯度来整合这两个阶段对于 E2Efold 的性能是否是必要的,我们进行了一项消融研究(表 6)。我们测试后处理步骤与深度评分网络 Uθ 的训练脱节时的性能。我们在学习 Uθ 后应用后处理步骤(即求解增广拉格朗日函数)(因此表 6 中的符号“Uθ + PP”)。尽管“Uθ + PP”表现不错,但在训练中加入了约束条件,E2Efold 仍然比它有显着的优势。

        讨论。为了更好地估计 E2Efold 对不同 RNA 类型的性能,我们在附录 D.5 中包含了每个家族的 F1 分数。 E2Efold 在 16S rRNA、tRNA、5S RNA、tmRNA 和端粒酶方面的表现明显优于其他方法。这些结果来自单一模型。未来,我们可以将其视为多任务学习,并通过学习不同RNA家族的多个模型并学习额外的分类器来预测输入序列使用哪个模型来进一步提高性能。 

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值