[PRML]马尔可夫随机场

从《有向图》和《条件独立》中,我们已经了解有向图形模型(directed graphical models)指定了一组变量上的联合分布的因式分解为局部条件分布(local conditional distributions)的乘积。它们还定义了一组条件独立属性( conditional independence properties),必须满足根据图进行因式分解的任何分布。

现在我们来看第二类主要的图模型,它们是由无向图(undirected graphs)描述的,并且再次指定了因子分解( factorization)和一组条件独立关系。

马尔可夫随机场(Markov random field),也被称为马尔可夫网络(Markov network)或无向图形模型(undirected graphical model),有一组节点(nodes ),每个节点对应一个或一组变量,以及一组链接(links),每个链接连接一对节点(a pair of nodes)。

这些链接是无向的,也就是说它们没有箭头。 在无向图的情况下,首先讨论条件独立属性是很方便的。

1 条件独立性

在有向图的情况下,我们看到可以通过应用称为d-separation的图形测试来测试特定的条件独立性属性是否成立。

这涉及到测试连接两组节点的路径是否被阻塞。然而,由于存在具有头对头节点的路径,所以阻塞的定义有些微妙。我们可能会问,是否可以为概率分布定义一个可选的图形语义,以便通过简单的图分离来确定条件独立性。这确实是一种情况,并且对应于无方向的图形模型。

通过从图的链接中移除方向性,父节点和子节点之间的不对称被移除,因此与头对头( head-to-head )节点相关的细微差别不再出现。

假设在无向图中,我们确定了三组节点,记为 A A A B B B C C C,我们考虑条件独立性质:

A ⊥  ⁣ ⁣ ⁣ ⊥ B ∣ C   ( 式 37 ) A\perp\!\!\!\perp B|C \ (式37) ABC (37)

测试由图定义的概率分布是否满足条件独立,需要考虑集合 A A A中的节点到集合 B B B中的节点的所有可能路径。 如果所有这些路径通过集合 C C C中的一个或多个节点,那么所有的路径都是被阻塞的(blocked),所以条件独立性属性保持不变。

但是,如果至少有一条这样的路径没有被阻塞,那么属性就不一定存在,或者更准确地说,至少会存在一些与图相对应的分布不满足这个条件独立关系,如下图所示。

注意,这与d-separation准则完全相同,只是没有explaining away现象。因此,在无向图中测试条件独立性要比在有向图中简单。

条件独立测试的另一种方法是想象从图中删除集合 C C C中的所有节点以及连接到这些节点的任何链接。 然后我们询问是否存在连接 A A A中的任意节点到 B B B中的任意节点的路径。如果不存在这样的路径,那么条件独立属性必须保持。

无向图的Markov blanket采用一种特别简单的形式,因为一个节点将有条件地独立于所有其他节点,这些节点仅受相邻节点的约束(neighbouring nodes),如下图所示。对于无向图,节点 x i x_i xi的马尔可夫毯由相邻节点的集合组成。 它的性质是 x i x_i xi的条件分布,以图中所有剩余的变量为条件,只依赖于马尔可夫毯中的变量。

2 因子分解属性

我们现在为无向图寻找一个因式分解规则,它将对应于上面的条件独立测试。同样,这将涉及到将联合分布 p ( x ) p(\mathbf{x}) p(x)表示为定义在图的局部变量集上的函数的乘积。因此,我们需要决定在这种情况下什么是合适的局部性(locality)概念。

如果我们考虑两个没有通过链接连接的节点 x i x_i xi x j x_j xj,那么给定图中的所有其他节点,这些变量必须是条件独立的。这是因为两个节点之间没有直接路径,所有其他路径都通过观察到的节点,因此这些路径被阻塞。这个条件独立属性可以表示为:

p ( x i , x j ∣ x \ { i , j } ) = p ( x i ∣ x \ { i , j } ) p ( x j ∣ x \ { i , j } )   ( 式 38 ) p(x_i,x_j|\mathbf{x}_{\backslash\{i,j\}})=p(x_i|\mathbf{x}_{\backslash\{i,j\}})p(x_j|\mathbf{x}_{\backslash\{i,j\}}) \ (式38) p(xi,xjx\{i,j})=p(xix\{i,j})p(xjx\{i,j}) (38)

x \ { i , j } \mathbf{x}_{\backslash\{i,j\}} x\{i,j}表示所有变量的集合 x \mathbf{x} x,除了 x i , x j x_i,x_j xi,xj。联合分布的因式分解必须使得 x i x_i xi x j x_j xj不出现在同一个因子中,这样才能使条件独立特性适用于属于图的所有可能的分布。

这导致我们考虑一个称为clique的图形概念,它被定义为图中节点的子集,这样子集中的所有节点对之间就存在一个链接。换句话说,clique中的节点集是完全连接的。此外,集合中的最大clique是不可能包括图的任何其他节点,没有它就不是一个团。下图所示的四个变量的无向图说明了这些概念,绿色表示小团,蓝色表示最大团。

这个图有五个由 { x 1 , x 2 } , { x 2 , x 3 } , { x 3 , x 4 } , { x 4 , x 2 } \{x_1, x_2\},\{x_2, x_3\},\{x_3, x_4\},\{x_4, x_2\} {x1,x2},{x2,x3},{x3,x4},{x4,x2},和 { x 1 , x 3 } \{x_1, x_3\} {x1,x3}给出的两个节点组成的团(cliques),以及 { x 1 , x 2 , x 3 } \{x_1, x_2, x_3\} {x1,x2,x3} { x 2 , x 3 , x 4 } \{x_2, x_3, x_4\} {x2,x3,x4}给出的两个最大团。集合 { x 1 , x 2 , x 3 , x 4 } \{x_1, x_2, x_3, x_4\} {x1,x2,x3,x4}不是一个团,因为从 x 1 x_1 x1 x 4 x_4 x4缺少链接。

因此,可以将联合分布分解中的因子定义为团(clique)中变量的函数。事实上,可以考虑最大团的函数,而不损失一般性,因为其他团必须是最大团的子集。因此,如果 { x 1 , x 2 , x 3 } \{x_1, x_2, x_3\} {x1,x2,x3}是一个极大的团,并且我们在这个团上定义了一个任意的函数,那么包括在这些变量的子集上定义的另一个因子将是多余的。

让我们用 C C C来表示一个团,用 x C \mathbf{x}_C xC来表示这个团中的一组变量。然后联合分布可以写成图的最大团的势函数(potential functions) ψ C ( x C ) \psi_C(\mathbf{x}_C) ψC(xC)的乘积:

p ( x ) = 1 Z ∏ C ψ C ( x C )   ( 式 39 ) p(\mathbf{x})=\frac{1}{Z}\prod_C\psi_C(\mathbf{x}_C) \ (式39) p(x)=Z1CψC(xC) (39)

这里的量 Z Z Z,有时称为配分函数(partition function),是一个归一化常数:

Z = ∑ x ∏ C ψ C ( x C )   ( 式 40 ) Z=\sum_{\mathbf{x}}\prod_C\psi_C(\mathbf{x}_C) \ (式40) Z=xCψC(xC) (40)

这确保了式39的分布 p ( x ) p(\mathbf{x}) p(x)是正确标准化的。通过只考虑满足 ψ C ( x C ) ≥ 0 \psi_C(\mathbf{x}_C)\geq 0 ψC(xC)0的势函数我们确保 p ( x ) ≥ 0 p(\mathbf{x})\geq 0 p(x)0。在式40中,我们假设 x \mathbf{x} x包含离散变量,但是这个框架同样适用于连续变量,或者两者的组合,其中求和被求和与积分的适当组合所取代。

注意,我们并没有将势函数的选择局限于那些具有特定概率解释的边际分布或条件分布。这与有向图形成了对比,在有向图中,每个因子代表相应变量的条件分布,条件分布取决于其父变量的状态。然而,在特殊情况下,例如无向图是由有向图开始构造的,势函数可能确实有这样的解释。

势函数 ψ C ( x C ) \psi_C(\mathbf{x}_C) ψC(xC)的一般性结果之一是他们的乘积一般没有被正确地规范化。因此,必须引入式40给出的显式归一化因子。对于有向图,联合分布是通过因子分解中每个条件分布的归一化而自动归一化的。

这个归一化常数的存在是无向图的主要限制之一。如果我们有一个模型,有 M M M个离散节点,每个节点都有 K K K个状态,那么标准化项的计算涉及到对 K M K^M KM状态求和,因此(在最坏的情况下)模型的大小是指数级的。

参数学习需要的配分函数,因为它将是任何控制势函数 ψ C ( x C ) \psi_C(\mathbf{x}_C) ψC(xC)的参数的函数。但是,对于局部条件分布( local conditional distributions)的求值,不需要配分函数,因为条件是两个边际(marginals)的比值,当求这个比值时,分子和分母之间的配分函数相互抵消。

同样地,对于评估局部边际概率,我们可以使用非标准化联合分布,最后显式地对边际进行标准化。如果边际只涉及到少数变量,则对其归一化系数的评估是可行的。

目前为止已经学习了无向图的条件独立和因子分解属性,但是还没有在条件独立和无向图的因式分解之间建立任何形式的联系。

我们需要注意势函数 ψ C ( x C ) \psi_C(\mathbf{x}_C) ψC(xC)必须严格为正(即对于任何 x C x_C xC都不为零或负)。 有了这个限制,就可以在因式分解和条件独立之间建立一个精确的关系。

为此,再次回到图模型作为过滤器的概念,与上图相对应。考虑在一组固定变量上定义的所有可能分布的集合,这些变量对应于一个特定的无向图的节点。可以将 U I \mathcal{UI} UI定义为这样一组分布,它们与使用图分离从图中读取的条件独立语句集一致。

同样,可以将 U F \mathcal{UF} UF定义为这样的分布的集合,它可以表示为相对于图的最大团的形式(式39)的因子分解Hammersley-Clifford定理指出,集合 U I \mathcal{UI} UI U F \mathcal{UF} UF是相同的。

因为只考虑严格为正的势函数,所以把它们表示成指数很方便:

ψ C ( x C ) = exp ⁡ { − E ( x C ) }   ( 式 41 ) \psi_C(\mathbf{x}_C)=\exp \{-E(\mathbf{x}_C)\} \ (式41) ψC(xC)=exp{E(xC)} (41)

E ( x C ) E(\mathbf{x}_C) E(xC)叫做能量函数(energy function),指数表示称为玻尔兹曼分布(Boltzmann distribution)。

联合分布被定义为势函数的乘积,因此总能量是通过增加每个最大团的能量获得的。

与有向图的联合分布中的因子不同,无向图中的势(potential)没有特定的概率解释。虽然这在选择势函数方面提供了更大的灵活性,因为没有规范化约束,但存在特定应用势函数选择的问题。这可以通过将势函数看作优先于其他变量的局部变量的配置来实现。

具有相对较高概率的全局配置是那些在满足(可能冲突的)团势函数的影响方面找到良好平衡的配置。看一个具体的例子来说明无向图的使用。

3 说明:图像去噪

我们用从二值图像中去除噪声的例子来说明无向图的应用。

设观测到的噪声图像由一个二元像素值数组 y i ∈ { 1 , + 1 } y_i \in \{1,+1\} yi{1,+1}表示,其中索引 i = 1 , … , D i=1,…,D i=1,,D遍历所有像素。假设图像是取一个未知的无噪声图像(用二进制像素值 x i ∈ { 1 , + 1 } x_i \in \{1,+1\} xi{1,+1}描述),然后以较小的概率随机翻转像素符号得到的。

下图显示了一个二进制图像,以及一个通过以10%的概率翻转像素符号得到的噪声损坏图像。对于有噪声的图像,目标是恢复原始的无噪声图像。下图使用马尔科夫随机场对图像去噪:

  • 最上面的一行左边是原始二进制图像和右边是随机改变10%像素后的损坏图像。
  • 最下面一行左边使用迭代条件模型(iterated conditional models ,ICM)和右边使用图割算法(the graph-cut algorithm )得到的恢复图像。 I C M ICM ICM生成的图像中,96%的像素与原始图像一致,而对应的图割是99%。

因为噪声水平很小,所以 x i x_i xi y i y_i yi之间会有很强的相关性。图像中相邻的像素 x i x_i xi x j x_j xj也具有很强的相关性。这个先验知识可以使用马尔科夫随机场模型来获取,其无向图如下图所示。

这个图有两种类型的团,每一种都包含两个变量。 { x i , y i } \{x_i, y_i\} {xi,yi}形式的团有一个相关的能量函数来表示这些变量之间的相关性。对这些团的选择一个简单的能量函数,形式为 − η x i y i -\eta x_i y_i ηxiyi,其中 η \eta η是正的常数。当 x i x_i xi y i y_i yi有相同的符号时,会给出一个较低的能量(从而鼓励更高的概率),当 x i x_i xi y i y_i yi有相反的符号时,会给出一个较高的能量。

上图是无向图模型,表示图像去噪的马尔可夫随机场,其中 x i x_i xi表示未知无噪声图像中像素 i i i状态的二元变量, y i y_i yi为观察到的有噪声图像中像素 i i i的对应值。

剩余的团由变量对 { x i , x j } \{x_i, x_j\} {xi,xj}组成,其中 i i i j j j是相邻像素的索引。我们希望像素有相同符号时的能量低于相反符号的,所以选择能量为 − β x i x j -\beta x_i x_j βxixj β \beta β是一个正的常数。

因为势函数是一个最大团上的任意非负函数,我们可以将它乘以团的子集的任何非负函数,或者把相应的能量相加。

在本例中,这允许我们为无噪声图像中的每个像素 i i i添加额外的项 h x i hx_i hxi。这样一个术语的作用是使模型偏向于具有一个特定符号而不是另一个符号的像素值。

模型的完整能量函数:

E ( x , y ) = h ∑ i x i − β ∑ { i , j } x i x j − η ∑ i x i y i   ( 式 42 ) E(\mathbf{x},\mathbf{y})=h\sum_ix_i-\beta\sum_{\{i,j\}}x_ix_j-\eta\sum_ix_iy_i \ (式42) E(x,y)=hixiβ{i,j}xixjηixiyi (42)

它定义了 x \mathbf{x} x y \mathbf{y} y的联合分布:

E ( x , y ) = 1 Z exp ⁡ { − E ( x , y ) }   ( 式 43 ) E(\mathbf{x},\mathbf{y})=\frac{1}{Z}\exp\{-E(\mathbf{x},\mathbf{y})\} \ (式43) E(x,y)=Z1exp{E(x,y)} (43)

现在,将 y \mathbf{y} y的元素固定到由噪声图像的像素所给出的观察值,这隐式地定义了无噪声图像上的条件分布 p ( x ∣ y ) p(\mathbf{x}|\mathbf{y}) p(xy)。这是统计物理中被广泛研究的Ising model的一个例子。

出于图像恢复的目的,希望找到一个具有高概率(理想情况下是最大概率)的图像 x \mathbf{x} x。要做到这一点,将使用一种简单的迭代技术,称为迭代条件模式(iterated conditional modesICM) ,是一种简单的协调梯度上升的应用:

  • 先初始化变量 { x i } \{x_i\} {xi},可以简单的设置对于所有 i i i x i = y i x_i=y_i xi=yi
  • 然后每次取一个节点 x j x_j xj并计算两种可能状态 x j = + 1 x_j=+1 xj=+1 x j = − 1 x_j=-1 xj=1的总能量,保持所有其他节点变量不变,并将 x j x_j xj设置为能量较低的状态。如果 x j x_j xj不变,要么保持概率不变,要么增加。因为只有一个变量改变,这是一个简单的本地计算,可以有效地执行。
  • 然后,对另一个站点重复更新,以此类推,直到满足某个适当的停止条件。节点可以以一种系统的方式进行更新,例如通过重复的光栅扫描图像,或者通过随机选择节点。

如果我们有一个更新序列,其中每个站点至少被访问一次,并且没有对变量做任何更改,那么根据定义,算法会收敛到概率的局部最大值。但是,这并不需要与全局最大值相对应。

为了简化说明,我们固定参数 β = 1.0 , η = 2.1 , h = 0 \beta=1.0,\eta=2.1,h=0 β=1.0,η=2.1,h=0

  • h = 0 h=0 h=0意味着 x i x_i xi的两个状态的先验概率是相等的。从观察到的噪声图像作为初始配置开始,我们运行ICM直到收敛,得到上面第5个图所示的去噪图像。
  • β = 0 β=0 β=0,有效地消除了相邻象素之间的联系,那么全局最可能的解决方案是由 x i = y i , ∀ i x_i=y_i,\forall i xi=yi,i给出,对应于观测噪声图像。

4 与有向图的关系

已经介绍了两种表示概率分布的图形框架,分别对应于有向图和无向图,现在讨论它们之间的关系。

首先考虑使用有向图指定模型并试图将其转换为无向图的问题。在某些情况下,这很简单,如下图 ( a ) (a) (a)所示。有向图的联合分布由条件的乘积给出:

p ( x ) = p ( x 1 ) p ( x 2 ∣ x 1 ) p ( x 3 ∣ x 2 ) ⋯ p ( x N ∣ x N − 1 )   ( 式 44 ) p(\mathbf{x})=p(x_1)p(x_2|x_1)p(x_3|x_2)\cdots p(x_N|x_{N-1}) \ (式44) p(x)=p(x1)p(x2x1)p(x3x2)p(xNxN1) (44)

现在将其转换为无向图表示,如上图 ( b ) (b) (b)所示。在无向图中,最大团只是相邻节点的对,因此根据式39将联合分布写成这种形式:

p ( x ) = 1 Z ψ 1 , 2 ( x 1 , x 2 ) ψ 2 , ( x 2 , x 3 ) ⋯ ψ N − 1 , N ( x N − 1 , x N )   ( 式 45 ) p(\mathbf{x})=\frac{1}{Z}\psi_{1,2}(x_1,x_2)\psi_{2,}(x_2,x_3)\cdots \psi_{N-1,N}(x_{N-1},x_N) \ (式45) p(x)=Z1ψ1,2(x1,x2)ψ2,(x2,x3)ψN1,N(xN1,xN) (45)

这很容易实现:

ψ 1 , 2 ( x 1 , x 2 ) = p ( x 1 ) p ( x 2 ∣ x 1 ) ψ 2 , 3 ( x 2 , x 3 ) = p ( x 3 ∣ x 2 ) ⋅ ⋅ ⋅ ψ N − 1 , N ( x N − 1 , x N ) = p ( x N ∣ x N − 1 ) \begin{aligned} \psi_{1,2}(x_1,x_2)&=p(x_1)p(x_2|x_1)\\ \psi_{2,3}(x_2,x_3)&=p(x_3|x_2)\\ &\cdot\\ &\cdot\\ &\cdot\\ \psi_{N-1,N}(x_{N-1},x_N)&=p(x_N|x_{N-1}) \end{aligned} ψ1,2(x1,x2)ψ2,3(x2,x3)ψN1,N(xN1,xN)=p(x1)p(x2x1)=p(x3x2)=p(xNxN1)

第一个节点把边际 p ( x 1 ) p(x_1) p(x1)吸收到第一个势函数中。在这种情况下,配分函数 Z = 1 Z=1 Z=1

考虑一下如何推广这种构造,这样就可以将有向图上通过因子分解指定的任何分布转换为通过无向图上的因子分解指定的分布。如果无向图的团的势函数是由有向图的条件分布给出的,就可以实现这一点。

为了使其有效,我们必须确保出现在每个条件分布中的变量集至少是无向图的一个团的成员。

对于只有一个父节点的有向图节点,只需用无向链接替换有向链接即可。但是,对于有向图中具有多个父节点的节点,这是不够的。这些节点具有我们在条件独立性讨论中遇到的头对头路径。考虑下图所示的4个节点上的简单有向图。有向图的联合分布采用这种形式:

p ( x ) = p ( x 1 ) p ( x 2 ) p ( x 3 ) p ( x 4 ∣ x 1 , x 2 , x 3 )   ( 式 46 ) p(\mathbf{x})=p(x_1)p(x_2)p(x_3)p(x_4|x_1,x_2,x_3) \ (式46) p(x)=p(x1)p(x2)p(x3)p(x4x1,x2,x3) (46)

可以看到因子 p ( x 4 ∣ x 1 , x 2 , x 3 ) p(x_4|x_1, x_2, x_3) p(x4x1,x2,x3)包含四个变量 x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3 x 4 x_4 x4,所以如果这个条件分布要被吸收到一个团的势函数中,这些必须都属于一个团。

为了确保这一点,我们在节点 x 4 x_4 x4的所有父节点对之间添加了额外的链接。与父母结婚的这个过程被称为道德教化,而由此产生的无向图,在去掉箭头之后,被称为道德图。值得注意的是,与原始有向图相比,这个例子中的道德图是完全连通的,因此没有条件独立性。

与父母结婚的这个过程被称为道德教化(moralization),而由此产生的无向图,在去掉箭头之后,被称为道德图(moral graph)。值得注意的是,与原始有向图相比,这个例子中的道德图是完全连通的(fully connected),因此没有条件独立性。

因此,通常情况下,要将有向图转换为无向图:

  • 首先在图中每个节点的所有父节点对之间添加额外的无向链接,然后在原始链接上放下箭头以给出道德图。
  • 接着将道德图的所有团的势函数都初始化为1。
  • 然后将原始有向图中的每个条件分布因子乘以团中的一个势函数。总会存在至少一个最大的团,该团包含因子中作为道德化步骤的结果的所有变量。注意,在所有情况下,配分函数都是由 Z = 1 Z=1 Z=1给出的。

在联合树算法(junction tree algorithm)等精确推理技术中,有向图转换为无向图的过程起着重要作用。从无向表示法转换为有向表示法要少见得多,而且由于规范化约束,通常会出现问题。

在从有向表示到无向表示的过程中,我们必须放弃图中的一些条件独立属性。我们总是可以很简单地将有向图上的任何分布转换成无向图上的分布,只需使用一个完全连通的无向图。然而,这将抛弃所有的条件独立属性,因此将是空洞的(vacuous)。道德化的过程增加了最少的额外链接,因此保留了最大数量的独立属性。

有向图和无向图确定条件独立属性的过程是不同的。结果表明,这两种图可以表示不同的条件独立属性。为了做到这一点,将特定(有向或无向)的图作为一个过滤器,以便在给定变量上的所有可能分布的集合可以减少到一个子集,以尊重图中隐含的条件独立性。

如果分布所满足的每个条件独立性语句都反映在图中,则图被称为分布的D映射(D map,用于依赖关系映射for dependency map)。因此,对于任何分布,完全断开的图(没有链接)都是普通的D映射。

或者,可以考虑一个特定的分布,并询问哪些图具有适当的条件独立性属性。如果一个图所隐含的每个条件独立语句都满足于一个特定的分布,那么这个图就是这个分布的一个 I I I映射(I map,用于独立映射for independence map)。显然,对于任何分布,完全连通图都是普通的 I I I映射。

如果分布的每个条件独立属性都反映在图中,反之亦然,那么这个图就是这个分布的一个完美的映射(perfect map)。因此,一个完美的映射既是一个 I I I映射,也是一个 D D D映射。

考虑这样一组分布,对于每个分布存在一个完美映射的有向图。这个集合与对于每个分布都存在一个完美映射的无向图的分布的集合是不同的。此外,有向图和无向图都不能提供完美的映射。下面的维恩图(Venn diagram)对此进行了说明。

维恩图说明了在给定的一组变量上的所有分布 P P P的集合,以及可以用有向图表示为完美映射的 D D D分布的集合,以及可以用无向图表示为完美映射的集合 U U U

下图是一个有向图的例子,它是满足条件独立属性 A ⊥  ⁣ ⁣ ⁣ ⊥ B ∣ ∅ A\perp\!\!\!\perp B|\varnothing AB A ⊥̸  ⁣ ⁣ ⁣ ⊥ B ∣ C A\not\perp\!\!\!\perp B|C ABC的分布的一个完美映射。在相同的三个变量上没有对应的无向图,这是一个完美映射。

反过来,考虑下图中所示的四个变量的无向图。这个图展示了 A ⊥̸  ⁣ ⁣ ⁣ ⊥ B ∣ ∅ A\not\perp\!\!\!\perp B|\varnothing AB C ⊥  ⁣ ⁣ ⁣ ⊥ D ∣ A ∪ B C\perp\!\!\!\perp D|A\cup B CDAB的性质。在四个变量上没有一个有向图包含相同的条件独立性质。

图形框架可以以一致的方式扩展到包含有向和无向链接的图形。这些被称为链图(chain graphs),并包含有向图和无向图考虑到目前为止的特殊情况。尽管这样的图可以表示比单独有向或无向分布更广泛的一类分布,但仍然存在这样的分布,即使是链图也不能提供完美的映射。

Python数据分析与挖掘

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值