理解差分自动编码器 VAE:Variational AutoEncoder

引言

VAE 是一类 encoder-decoder 模型,给定一个高维数据 x ∈ R D \mathbf{x} \in \mathbb{R}^D xRD,encoder 将生成潜在空间对应的表达 z ∈ R d , d ≪ D \mathbf{z} \in \mathbb{R}^d,d \ll D zRd,dD,decoder 利用 z \mathbf{z} z 恢复原始数据 x ′ \mathbf{x}' x,整个模型使用 x \mathbf{x} x x ′ \mathbf{x}' x 之间的差异来训练。当训练好以后,随机从潜在空间中采样一个 z \mathbf{z} z,希望 decoder 能生成对应的数据。


动机

普通 encoder-decoder 用于生成任务时,容易造成严重的过拟合,使学习到的 潜在空间不规则。由于模型仅仅被要求在有限的训练数据上得到尽可能少的恢复损失,且缺少对潜在空间的约束,encoder 和 decoder 可能会学习到一种简单的一一对应关系,使得潜在空间中的一些点在被解码后的内容是无意义的。假设 z ∈ R \mathbf{z} \in \mathbb{R} zR,上述情况如下所示:
在这里插入图片描述
因此,为了使用 decoder 生成数据,必须保证潜在空间是规则的,一个可行的办法是在训练的时候对潜在空间添加正则化,这就是 VAE 的主要动机之一。

VAE 介绍

VAE 在训练的时候添加正则化以避免过拟合,同时使潜在空间更规则。普通的 encoder-decoder 将输入映射为一个数值,而 VAE 的 encoder-decoder 将输入映射为一个分布,在实作中,encoder 的输出分布被假设是高斯分布,encoder 实际预测的是均值和方差,流程如下:
在这里插入图片描述
目标函数为: ∣ ∣ x − x ′ ∣ ∣ 2 + K L [ N ( μ x , σ x ) , N ( 0 , 1 ) ] ||\mathbf{x} - \mathbf{x}'||^2 + KL[\mathcal{N}(\mu_x, \sigma_x), \mathcal{N}(0, 1)] ∣∣xx2+KL[N(μx,σx),N(0,1)]
第一项是恢复损失,第二项是正则项。

正则项的直观理解

规则的潜在空间应该具有两个属性:连续性,完备性,连续性指潜在空间中相邻点的解码内容应该相近,完备性指潜在空间中任意点的解码内容都有意义,如下图(引自[1]):
在这里插入图片描述如果仅要求 encoder 的输出是一个高斯分布,也难以满足连续性和完备性。例如,当学习到的均值差异很大,方差很小时,此时的模型和普通encoder-decoder没有区别,为了避免这种情况,必须同时对方差和均值进行约束。在论文中,作者要求 encoder 的输出服从 N ( 0 , 1 ) \mathcal{N}(0, 1) N(0,1),均值为0使各模式的均值接近,缓解均值差异大的问题,方差为1使各模式分布有一定的“重合”,增强空间连续性,如下图(引自[1]):
在这里插入图片描述

数学理解

这一节从理论角度来分析 VAE。首先定义一些符号,其中 θ \theta θ 代表生成模型参数:

  • 先验 p θ ( z ) p_\theta(\mathbf{z}) pθ(z)
  • 似然 p θ ( x ∣ z ) p_\theta(\mathbf{x}|\mathbf{z}) pθ(xz)
  • 后验 p θ ( z ∣ x ) p_\theta(\mathbf{z}|\mathbf{x}) pθ(zx)

在这里插入图片描述
当我们想要计算 p θ ( z ∣ x ) p_\theta(\mathbf{z}|\mathbf{x}) pθ(zx) 时,利用贝叶斯公式可知:

p θ ( z ∣ x ) = p θ ( x ∣ z ) p θ ( z ) p θ ( x ) p_\theta(\mathbf{z}|\mathbf{x})=\frac{p_\theta(\mathbf{x}|\mathbf{z})p_\theta(\mathbf{z})}{p_\theta(\mathbf{x})} pθ(zx)=pθ(x)pθ(xz)pθ(z)

p θ ( x ) = ∫ p θ ( x ∣ z ) p θ ( z ) d z p_\theta(\mathbf{x})=\int p_\theta(\mathbf{x}|\mathbf{z})p_\theta(\mathbf{z})d\mathbf{z} pθ(x)=pθ(xz)pθ(z)dz

在计算 p θ ( x ) p_\theta(\mathbf{x}) pθ(x) 时,由于无法遍历 z \mathbf{z} z,导致无法直接计算后验,故使用 q ϕ ( z ∣ x ) q_\phi(\mathbf{z}|\mathbf{x}) qϕ(zx) 来近似 p θ ( z ∣ x ) p_\theta(\mathbf{z}|\mathbf{x}) pθ(zx)(这个涉及到概念 variational inference)。

目标函数

很自然的,可以使用 KL 散度来度量两个分布之间的距离:

K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ∣ x ) ) KL(q_\phi(z|x)||p_\theta(z|x)) KL(qϕ(zx)∣∣pθ(zx))

= − ∑ z q ϕ ( z ∣ x ) l o g ( p θ ( z ∣ x ) q ϕ ( z ∣ x ) ) =-\sum_z q_\phi(z|x)log(\frac{p_\theta(z|x)}{q_\phi(z|x)}) =zqϕ(zx)log(qϕ(zx)pθ(zx))

= − ∑ z q ϕ ( z ∣ x ) l o g ( p θ ( x , z ) q ϕ ( z ∣ x ) p θ ( x ) ) =-\sum_z q_\phi(z|x)log(\frac{p_\theta (x,z)}{q_\phi(z|x)p_\theta(x)}) =zqϕ(zx)log(qϕ(zx)pθ(x)pθ(x,z))

= − ∑ z q ϕ ( z ∣ x ) [ l o g ( p θ ( x , z ) q ϕ ( z ∣ x ) ) − l o g ( p θ ( x ) ) ] =-\sum_z q_\phi(z|x)[log(\frac{p_\theta(x,z)}{q_\phi(z|x)})-log(p_\theta(x))] =zqϕ(zx)[log(qϕ(zx)pθ(x,z))log(pθ(x))]

= l o g ( p θ ( x ) ) − ∑ z q ϕ ( z ∣ x ) l o g ( p θ ( x , z ) q ϕ ( z ∣ x ) ) =log(p_\theta(x))-\sum_z q_\phi(z|x)log(\frac{p_\theta(x,z)}{q_\phi(z|x)}) =log(pθ(x))zqϕ(zx)log(qϕ(zx)pθ(x,z))

左右交换可以得到:

l o g ( p θ ( x ) ) = K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ∣ x ) ) + ∑ z q ϕ ( z ∣ x ) l o g ( p θ ( x , z ) q ϕ ( z ∣ x ) ) log(p_\theta(x))=KL(q_\phi(z|x)||p_\theta(z|x))+\sum_z q_\phi(z|x)log(\frac{p_\theta(x,z)}{q_\phi(z|x)}) log(pθ(x))=KL(qϕ(zx)∣∣pθ(zx))+zqϕ(zx)log(qϕ(zx)pθ(x,z))

可以知道, l o g ( p θ ( x ) ) log(p_\theta(x)) log(pθ(x)) 是一个常数,且 KL 散度是非负的,于是最小化 KL 散度等价于最大化等式右边第二项,将这一项缩写为 L ( θ , ϕ ; x ) L(\theta, \phi; x) L(θ,ϕ;x),论文中被称为 variational lower bound,继续对这一项进行变换:

L ( θ , ϕ ; x ) L(\theta, \phi; x) L(θ,ϕ;x)

= ∑ z q ϕ ( z ∣ x ) l o g ( p θ ( x ∣ z ) p θ ( z ) q ϕ ( z ∣ x ) ) =\sum_z q_\phi(z|x)log(\frac{p_\theta (x|z)p_\theta(z)}{q_\phi(z|x)}) =zqϕ(zx)log(qϕ(zx)pθ(xz)pθ(z)) (1)

= ∑ z q ϕ ( z ∣ x ) [ l o g ( p θ ( x ∣ z ) ) + l o g ( p θ ( z ) q ϕ ( z ∣ x ) ) ] =\sum_z q_\phi(z|x)[log(p_\theta(x|z))+log(\frac{p_\theta(z)}{q_\phi(z|x)})] =zqϕ(zx)[log(pθ(xz))+log(qϕ(zx)pθ(z))] (2)

= E q ϕ ( z ∣ x ) [ l o g ( p θ ( x ∣ z ) ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ) ) =E_{q_\phi(z|x)}[log(p_\theta(x|z))]-KL(q_\phi(z|x)||p_\theta(z)) =Eqϕ(zx)[log(pθ(xz))]KL(qϕ(zx)∣∣pθ(z)) (3)

其中第一项是重建损失,第二项是正则化项,整体是需要优化的目标函数,只需要求出其相对 ϕ \phi ϕ 的梯度,就可以用梯度下降法更新参数 ϕ \phi ϕ 了。

重参数化技巧

对于这种形式,一种典型的方法是 Monte Carlo 梯度估计法。记公式(2)中括号里的部分为 f ( z ) f(z) f(z)(虽然 f ( z ) f(z) f(z) ϕ \phi ϕ 有关,但这里先暂时忽略),这里仅展示结论性的推导结果:

▽ ϕ E q ϕ ( z ) [ f ( z ) ] \triangledown \phi \mathbb{E}_{q_\phi(z)}[f(z)] ϕEqϕ(z)[f(z)]

= E q ϕ ( z ) [ f ( z ) ▽ ϕ l o g ( q ϕ ( z ) ) ] =\mathbb{E}_{q\phi(z)}[f(z)\triangledown_{\phi}log(q_\phi(z))] =E(z)[f(z)ϕlog(qϕ(z))]

≃ 1 L ∑ l = 1 L f ( z ) ▽ ϕ l o g ( q ϕ ( z l ) ) , z l ∼ q ϕ ( z ∣ x ) \simeq \frac{1}{L}\sum^L_{l=1}f(z)\triangledown_{\phi}log(q_\phi(z^l)),\quad z^l\sim q_\phi(z|x) L1l=1Lf(z)ϕlog(qϕ(zl)),zlqϕ(zx)

如果使用该方法,会产生很大的 variance,使训练不稳定。对此,VAE 提出了 Generic Stochastic Gradient Variational Bayes (SGVB) 梯度估计,包含重参数化技巧(reparameterization trick),这里涉及一个很重要的讨论,为什么需要重参数化技巧?,在 Monte Carlo 梯度估计法中,我们假设 f ( z ) f(z) f(z) 和参数 ϕ \phi ϕ 无关,但根据公式(1)明显是有关的,在有关情况下再次考虑梯度:

▽ ϕ E q ϕ ( z ∣ x ) [ f ϕ ( z ) ] \triangledown_\phi \mathbb{E}_{q_\phi(z|x)}[f_\phi(z)] ϕEqϕ(zx)[fϕ(z)]

= ▽ ϕ [ ∑ z q ϕ ( z ∣ x ) f ϕ ( z ) d z ] =\triangledown_\phi[\sum_z q_\phi(z|x)f_\phi(z)dz] =ϕ[zqϕ(zx)fϕ(z)dz]

= ∑ z ▽ ϕ [ q ϕ ( z ∣ x ) f ϕ ( z ) ] d z =\sum_z \triangledown_\phi [q_\phi(z|x)f_\phi(z)]dz =zϕ[qϕ(zx)fϕ(z)]dz

= ∑ z f ϕ ( z ) ▽ ϕ q ϕ ( z ∣ x ) d z + ∑ z q ϕ ( z ∣ x ) ▽ ϕ f ϕ ( z ) d z =\sum_z f_\phi(z) \triangledown_\phi q_\phi(z|x)dz + \sum_z q_\phi(z|x) \triangledown_\phi f_\phi(z)dz =zfϕ(z)ϕqϕ(zx)dz+zqϕ(zx)ϕfϕ(z)dz

= ∑ z f ϕ ( z ) ▽ ϕ q ϕ ( z ∣ x ) d z + E q ϕ ( z ∣ x ) [ ▽ ϕ f ϕ ( z ) ] =\sum_z f_\phi(z) \triangledown_\phi q_\phi(z|x)dz + \mathbb{E}_{q_\phi(z|x)}[\triangledown_\phi f_\phi(z)] =zfϕ(z)ϕqϕ(zx)dz+Eqϕ(zx)[ϕfϕ(z)]

由于第一项不能写成期望的形式,无法用求平均来近似,且无法遍历 z 进行积分,因此是不可解的,对此才提出重参数技巧。重参数化令 z = g ϕ ( ϵ , x ) , ϵ ∼ p ( ϵ ) z=g_\phi(\epsilon, x), \epsilon \sim p(\epsilon) z=gϕ(ϵ,x),ϵp(ϵ),从而使用 g ϕ ( ϵ , x ) g_\phi(\epsilon, x) gϕ(ϵ,x) 的分布来替代 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx),该替换原理基于 variational inference:

▽ ϕ E q ϕ ( z ∣ x ) [ f ( z i ) ] \triangledown_\phi \mathbb{E}{q\phi(z|x)}[f(z^i)] ϕE(zx)[f(zi)]

= ▽ ϕ E p ( ϵ ) [ f ( g ϕ ( ϵ , x i ) ) ] =\triangledown_\phi \mathbb{E}{p(\epsilon)}[f(g\phi(\epsilon,x^i))] =ϕEp(ϵ)[f(gϕ(ϵ,xi))]

= E p ( ϵ ) [ ▽ ϕ f ( g ϕ ( ϵ , x i ) ) ] =\mathbb{E}{p(\epsilon)}[\triangledown\phi f(g_\phi(\epsilon,x^i))] =Ep(ϵ)[ϕf(gϕ(ϵ,xi))]

≈ 1 L ∑ l = 1 L ▽ ϕ f ( g ϕ ( ϵ l , x i ) ) \approx \frac{1}{L} \sum^L_{l=1} \triangledown_\phi f(g_\phi(\epsilon^l,x^i)) L1l=1Lϕf(gϕ(ϵl,xi))

此时就可以计算梯度了。对于为什么要使用重采样技巧,还有一种很受欢迎的解释是,从 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx) 中采样的过程不可导,因此将抽样通过辅助随机变量 ϵ \epsilon ϵ 剥离出来,梯度就可以通过 g ϕ ( ϵ , x ) g_\phi(\epsilon, x) gϕ(ϵ,x) 进行反向传播,如下图(引自[3]):
在这里插入图片描述

SGVB

根据公式(1),将 z = g ϕ ( ϵ , x ) z=g_\phi(\epsilon,x) z=gϕ(ϵ,x) 代入 L ( θ , ϕ ; x ) L(\theta, \phi; x) L(θ,ϕ;x) 可以得到 SGVB 估计结果 L ~ A ( θ , ϕ ; x i ) ≃ L ( θ , ϕ ; x i ) \widetilde{L}^A(\theta,\phi;x^i) \simeq L(\theta,\phi;x^i) L A(θ,ϕ;xi)L(θ,ϕ;xi)

L ( θ , ϕ ; x ) L(\theta, \phi; x) L(θ,ϕ;x)

= E q ϕ ( z ∣ x ) [ − l o g   q ϕ ( z ∣ x ) + l o g   p θ ( x , z ) ] =\mathbb{E}_{q_\phi(z|x)}[-log\ q_\phi(z|x)+log\ p_\theta(x,z)] =Eqϕ(zx)[log qϕ(zx)+log pθ(x,z)]

L ~ A ( θ , ϕ ; x i ) \widetilde{L}^A(\theta,\phi;x^i) L A(θ,ϕ;xi)

= 1 L ∑ l = 1 L l o g   p θ ( x i , z i , l ) − l o g   q ϕ ( z i , l ∣ x i )   , =\frac{1}{L} \sum^L_{l=1} log\ p_\theta(x^i,z^{i,l})-log\ q_\phi(z^{i,l}|x^i)\ , =L1l=1Llog pθ(xi,zi,l)log qϕ(zi,lxi) ,

w h e r e z i , l = g ϕ ( ϵ i , l , x i ) a n d ϵ l ∼ p ( ϵ ) where \quad z^{i,l}=g_\phi(\epsilon^{i,l},x^i) \quad and \quad \epsilon^l \sim p(\epsilon) wherezi,l=gϕ(ϵi,l,xi)andϵlp(ϵ)

除此之外,论文还发现,由于我们假设 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx) p θ ( z ) p_\theta(z) pθ(z) 都服从高斯分布,且 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx) 的协方差矩阵为对角矩阵,在计算公式(3)中 KL 散度时可以利用高斯分布的性质来简化计算:

∫ q ϕ ( z ∣ x ) l o g   p ( z ) d z \int q_\phi(z|x)log\ p(z)dz qϕ(zx)log p(z)dz

= ∫ N ( z ; μ , σ 2 ) l o g   N ( z ; 0 , I )   d z =\int \mathcal{N}(z;\mu,\sigma^2)log\ \mathcal{N}(z;0,I)\ dz =N(z;μ,σ2)log N(z;0,I) dz

= ∫ N ( z ; μ , σ 2 ) ( − 1 2 z 2 − 1 2 l o g ( 2 π ) )   d z =\int \mathcal{N}(z;\mu,\sigma^2)(-\frac{1}{2}z^2-\frac{1}{2}log(2\pi))\ dz =N(z;μ,σ2)(21z221log(2π)) dz

= − 1 2 ∫ N ( z ; μ , σ 2 ) z 2 d z − J 2 l o g ( 2 π ) =-\frac{1}{2}\int \mathcal{N}(z;\mu,\sigma^2)z^2dz-\frac{J}{2}log(2\pi) =21N(z;μ,σ2)z2dz2Jlog(2π)

= − J 2 l o g ( 2 π ) − 1 2 E z ∼ E ( z ; μ , σ 2 ) ( z 2 ) =-\frac{J}{2}log(2\pi)-\frac{1}{2}\mathbb{E}_{z \sim \mathbb{E}(z;\mu,\sigma^2)}(z^2) =2Jlog(2π)21EzE(z;μ,σ2)(z2)

= − J 2 l o g ( 2 π ) − 1 2 ( E z ∼ N ( z ; μ , σ 2 ) 2 ( z ) + V a r ( z ) ) =-\frac{J}{2}log(2\pi)-\frac{1}{2}(\mathbb{E}^2_{z \sim \mathcal{N}(z;\mu,\sigma^2)}(z)+Var(z)) =2Jlog(2π)21(EzN(z;μ,σ2)2(z)+Var(z))

= − J 2 l o g ( 2 π ) − 1 2 ∑ j = 1 J ( μ j 2 + σ j 2 ) =-\frac{J}{2}log(2\pi)-\frac{1}{2}\sum^J_{j=1}(\mu^2_j+\sigma^2_j) =2Jlog(2π)21j=1J(μj2+σj2)

其中 J 是 z 向量的维数,同理还可以得到:

∫ q ϕ ( z ∣ x ) l o g   q ϕ ( z ∣ x ) d z \int q_\phi(z|x)log\ q_\phi(z|x)dz qϕ(zx)log qϕ(zx)dz

= − J 2 l o g ( 2 π ) − 1 2 ∑ j = 1 J ( 1 + l o g ( σ j 2 ) ) =-\frac{J}{2}log(2\pi)-\frac{1}{2}\sum^J_{j=1}(1+log(\sigma^2_j)) =2Jlog(2π)21j=1J(1+log(σj2))

最终,KL 散度的计算可以简化为:

− K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ) ) -KL(q_\phi(z|x)||p_\theta(z)) KL(qϕ(zx)∣∣pθ(z))

= ∫ q ϕ ( z ∣ x ) ( l o g   p θ ( z ) − l o g   q ϕ ( z ∣ x ) ) d z =\int q_\phi(z|x)(log\ p_\theta(z)-log\ q_\phi(z|x))dz =qϕ(zx)(log pθ(z)log qϕ(zx))dz

= 1 2 ∑ j = 1 J ( 1 + l o g   σ j 2 − μ j 2 − σ j 2 ) =\frac{1}{2}\sum^J_{j=1}(1+log\ \sigma^2_j-\mu^2_j-\sigma^2_j) =21j=1J(1+log σj2μj2σj2)

而为了优化公式(3)中的第一项,使用 MSE 损失即可,因此最终的计算过程可以总结为下图(引自[4]):
在这里插入图片描述

参考

[1] Understanding Variational Autoencoders (VAEs)
[2] [论文简析]VAE: Auto-encoding Variational Bayes[1312.6114]
[3] From Autoencoder to Beta-VAE
[4] The Reparameterization Trick


补充自2022年10月18日

关于 evidence:p(x)
在很多任务里,需要计算数据的分布 p ( x ) p(x) p(x),根据贝叶斯公式,可以知道:

p ( x ) = ∫ z p θ ( x ∣ z ) p ( z ) p(x)=\int_z p_\theta(x|z)p(z) p(x)=zpθ(xz)p(z)

上面讨论过这个是 intractable 的,并引入了 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx) 进行近似计算,因此可以进一步写成:

p ( x ) = ∫ q ϕ ( z ∣ x ) p θ ( x ∣ z ) p ( z ) q ϕ ( z ∣ x ) p(x) = \int q_\phi(z|x) \frac{p_\theta(x|z)p(z)}{q_\phi(z|x)} p(x)=qϕ(zx)qϕ(zx)pθ(xz)p(z)

l o g   p ( x ) = l o g   E z ∼ q ϕ ( z ∣ x ) [ p θ ( x ∣ z ) p ( z ) q ϕ ( z ∣ x ) ] log\ p(x) = log\ \mathbb{E}_{z \sim q_\phi(z|x)}[\frac{p_\theta(x|z)p(z)}{q_\phi(z|x)}] log p(x)=log Ezqϕ(zx)[qϕ(zx)pθ(xz)p(z)]

根据 Jenson 不等式,可以得到:

l o g   p ( x ) ≥ E z ∼ q ϕ ( z ∣ x ) l o g   [ p θ ( x ∣ z ) p ( z ) q ϕ ( z ∣ x ) ] log\ p(x) \ge \mathbb{E}_{z \sim q_\phi(z|x)}log\ [\frac{p_\theta(x|z)p(z)}{q_\phi(z|x)}] log p(x)Ezqϕ(zx)log [qϕ(zx)pθ(xz)p(z)]

不等式右边的项也就是 evidence lower bound(ELBO),VAE 的目标是尽可能最大化 ELBO,这样 p ( x ) p(x) p(x) 也就会更大。这里就和前面联系起来了,为了计算 ELBO:

E L B O ELBO ELBO

= E q ϕ ( z ∣ x ) [ l o g ( p θ ( x ∣ z ) ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ) ) =E_{q_\phi(z|x)}[log(p_\theta(x|z))]-KL(q_\phi(z|x)||p_\theta(z)) =Eqϕ(zx)[log(pθ(xz))]KL(qϕ(zx)∣∣pθ(z))

第一项用 MSE 处理,为了计算第二项 KL 散度,作者假设 p θ ( z ) ∼ N ( 0 , I ) ,   q ϕ ( z ∣ x ) ∼ N ( μ , σ 2 ) p_\theta(z) \sim \mathcal{N}(0, I),\ q_\phi(z|x) \sim \mathcal{N}(\mu,\sigma^2) pθ(z)N(0,I), qϕ(zx)N(μ,σ2),为了在反向传播中使梯度能够通过不可导的 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx) 采样这一步,引入了重参数化技巧,此时 ϵ \epsilon ϵ 仅仅作为网络的输入,不参与梯度传播,梯度通过相关系数 μ , σ \mu,\sigma μ,σ 进行传播。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值