你也是物理学家?

内容不完善。暑假期间可能会把没整理的东西,包括 GAN、NF、SBM、Meta-Learning 等东西搬上去,先别急。

\[\newcommand{\eps}{\epsilon} \newcommand{\b}{\boldsymbol} \newcommand{\c}{\mathcal} \newcommand{\cur}[1]{\left\{#1\right\}} \newcommand{\d}{\mathrm d} \newcommand{\t}{\text} \]

一个 生成式模型 (generative model) 可以是一个支持采样的概率分布 \(P(X)\),其中 \(X\) 是生成内容;或者,它也可以额外有一个输入 \(y\),然后支持从 \(P(X\mid y)\) 中采样。

I. 基于能量的模型

I. Hopfield 网络

Hopfield 网络是一个生成式模型。其依赖于全连接网络可以储存某些信息的特征。

对于一个 \(n\) 个节点的网络 \(y\)\(y_i\) 被限制为 \(\pm1\) 两种取值。

对于某个 \(i\),定义感受野 \(z_i=\sum_{j\neq i}w_{ji}y_j+b_i\),其中 \(w,b\) 都是网络的参数,且 \(w\) 是对称矩阵。定义 hard threshold \(\Theta(z)=\begin{cases}1&(z\geq0)\\-1&(z<0)\end{cases}\)

然后,在每一时刻,都令某个 \(y_i\gets\Theta(z_i)\)。另一种说法是,\(y_i\) 被翻转,如果 \(y_iz_i<0\)

不断执行操作,直到系统恒定。

这必然停止吗?是的,因为关于系统可以定义熵。

令熵 \(D=\sum_{i<j}y_iw_{ij}y_j+\sum_iy_ib_i\),则每次翻转会将熵增加 \(-2y_iz_i>0\)

因为熵有上界、初始熵有下界、每次翻转必然增加熵,所以必然收敛。

定义能量 \(E=-D\)。则在 Hopfield 网络上 evolve 的过程中能量是递减的,且 evolve 最终会落入局部最小值中,此时该局部最小值周围的某个邻域中的 evolution 都会回归该极值,就可以看做该极值被网络记忆了。

如何训练一个 Hopfield 网络,让其可以记忆我们需要的图像?

Hebbian Learning:对于要记忆的 \(\cur{y_i^*}\),令 \(w_{ij}=y_i^*y_j^*\)(假设没有 \(b\)),则此时 \(\cur{y_i^*}\) 是最低点。

问题:只能记一张图;虽然 \(y^*\) 是最值但是 \(-y^*\) 同样也是最值、被记忆了。

记多张图可以通过令 \(w=\dfrac1n\sum y^i(y^i)^T\) 解决。但是叠合起来会产生一些虚假的信息,且原本要记的某些东西可能会被叠加成非最值,不牛。

引:\(N\) 个神经元总是可以记住 \(K\leq N\) 个图样;事实上,最多可以记 \(\dfrac N4\log N\) 个图样。但是仍然会出现虚假的极小值。

因此考虑一些数值方法,比如说训练。我们有期望的 pattern \(P=\cur{y^p}\),和能量函数 \(E(y)=-\dfrac12y^TWy\)。目标是:对全体 \(y^p\) 最小化 \(E\),且对不想要的 pattern 最大化 \(E\)

因此,我们希望有

\[W=\arg\min_W\cur{\sum_{y\in P}E(y)-\sum_{y\notin P}E(y)} \]

\(\cur{}\) 中的东西作为 loss 进行 GD,有

\[W\gets W-\eta\left({\color{lightblue}\sum_{y\in P}yy^T}-{\color{pink}\sum_{y'\notin P}y'y'^T}\right) \]

蓝色的部分的效果是为 \(P\) 中的点使用 Hebbian Learning 下拉,而红色则正相反,将其上抬。

问题是我们无法枚举全体 \(y'\notin P\)

  • 方案一:只抬升谷底。

\[W\gets W-\eta\left(\sum_{y\in P}yy^T-\sum_{y'\notin P{\color{red}\land y'\in\text{valley}}}y'y'^T\right) \]

如何找到谷底?随机值开始 evolve。

因此该模式的训练方法即为:每个 epoch,用需要的 \(y\) 作为正样本、自随机的初值开始 evolve 直到收敛的 \(y'\) 作为负样本,算梯度并更新。

  • 方案一的缺点:谷底的重要程度不一致。我们只需要保证被需要的东西在谷底,因此无法从任何被需要的初值 evolve 得到的谷底可以忽略。

  • 方案二:只从需要的图样出发 evolve。

  • 方案二的缺点:谷底可能已经有需要的初值了。

  • 方案三:只抬升图样的某个邻居。

训练方法:

每个 epoch,用需要的 \(y\) 作为正样本、自随机的被需要的初值开始 evolve 数步(\(2\sim4\) 步)的 \(y'\) 作为负样本,算梯度并更新。

大功告成!

II. Boltzmann 机

Boltzmann 机是概率化的 Hopfield 网络,较之有更泛化、更优秀的能力。

对于一切含能量的模型,都可以通过定义 \(P(X)=\dfrac1Z\exp(-E(X))\) 来将其概率化。这样,低能的态就有高概率被取到。

因此,将 Hopfield 网络概率化后,就有 \(P(y)=\dfrac1Z\exp\left(\sum_{i<j}w_{ij}y_iy_j+\sum_iy_ib_i\right)\)

翻转操作被概率化后,就是以 \(P(y_i=1\mid y_{j\neq i})\) 的概率将 \(y_i\) 设为 \(1\)。考虑仅在第 \(i\) 位不同的 \(y_i=1\)\(y_i'=-1\),则有

\[\log\dfrac{P(y)}{P(y')}=-\sum_jw_{ij}y_j-2b_i \\P(y_i=1\mid y_{j\neq i})=\dfrac{P(y)}{P(y)+P(y')}=\dfrac1{1+\exp(-\sum_jw_{ij}y_j-2b_i)} \]

因此,定义 \(z_i=\sum_jw_{ij}y_j+2b_i\),则有简洁的 \(P(y_i=1\mid y_{j\neq i})=\sigma(z_i)\),其中 \(\sigma\) 是 sigmoid 函数。

因此,可以以如下方式刻画 Boltzmann 机上的概率分布:

  • 将分布初始化为均匀随机分布。
  • 循环枚举 \(i\),然后以 \(\sigma(z_i)\) 地概率翻转,以此更新随机分布。
  • 不断更新,其最后会收敛到一个唯一的随机分布。
  • 此乃 Gibbs 采样。

显然维护分布是不可能的。作为替代,我们可以用采样代替分布:随机初始化 \(y(0)\),然后令 \(y_i(t+1)\sim\text{Bernoulli}(\sigma(z_i(t)))\)。迭代足够多步后,取结尾的 \(M\)\(y(t)\),然后可以选择求平均作为单个输出,或者使用频率来估算概率。实际应用时取 \(M=1\) 即可。

也可以加一个关于时间的退火,即 \(y_i(\alpha T)\sim\text{Bernoulli}(\sigma(\dfrac1Tz_i(T)))\)

因此,对 Boltzmann 机形式化描述:

  • 状态集合是 \(\cur{-1,1}^n\)
  • 有能量 \(E(y)=-\dfrac12y^TWy\)
  • 有一个概率分布 \(P(y)=\dfrac1Z\exp(-E(y)/T)\)。在实际应用中,有将 \(T\) 始终设为 \(1\) 的,也有 decrease 的(退火)。
  • 有参数 \(W\)(舍去了偏置 \(b\))。

会采样了,怎么训练?

某个 pattern \(y\) 的概率是

\[P(y)=\dfrac{\exp(\dfrac12y^TWy)}{\sum_{y'}\exp(\dfrac12y'^TWy')} \]

我们的目标设为最大化 \(\sum_{y\in P}P(y)\) 即可:不需要如 Hopfield 网络一样遏制不需要态(因为此处使用的是概率密度)。使用 MLE 策略得到

\[L(W)={\color{lightblue}\dfrac1{|P|}\sum_{y\in P}\dfrac12y^TWy}-{\color{pink}\log\sum_{y'}\exp(\dfrac12y'^TWy')} \]

因为是最大化,做梯度抬升 (Gradient Ascent) 即可。

蓝色的部分直接求就行。红色的部分呢?对其求导并使用期望形式描述即得

\[\nabla_WL=\dfrac1{|P|}\sum_{y\in P}\dfrac12yy^T-\t E_{y'}[y'y'^T] \\\approx\dfrac1{|P|}\sum_{y\in P}\dfrac12yy^T-\dfrac1{|S|}\sum_{y'\in S}y'y'^T \]

其中 \(S\) 是随机集合。使用采样估测期望的方法乃是 Monte-Carlo 估计。

至于如何采样 \(y'\)?请出我们的 Gibbs 采样。

III. 隐神经元 Boltzmann 机

目前我们的神经元数目为待记忆图样的像素数目。如果我们想记忆更多的图样呢?势必要增加神经元。这些新神经元并不对应着任何可见像素,即为隐神经元 (hidden neurons)。Boltzmann 机中的隐神经元应该如何赋值呢?

状态 \(y=(v,h)\),其中 \(v\) 是可见态、\(h\) 是隐藏态。我们只在意可见态的概率分布 \(P(v)=\sum_h P(v,h)\),即关于 \(h\) 的边缘分布。目标是最大化需要态的概率分布。

\[L(W)=\dfrac1{|P|}\sum_{v\in P}\log{\color{red}\sum_h\exp(-\dfrac12y^TWy)}-\log\sum_{y'}\exp(-\dfrac12y'^TWy') \]

其它部分都好说。红色的部分没见过,咋办?其实也类似。

\[\nabla_wL=\dfrac1{|P|}\sum_{v\in P}\t E_h[yy^T]-\t E_{y'}[y'y'^T] \]

\(\t E_{y'}\) 直接自由 Gibbs 采样。\(\t E_h\) 则固定 \(v\),且在 Gibbs 采样的过程中也只对 \(h\) 循环增广,而保持 \(v\) 恒不变。

总结而言,流程为:

  • 初始化 \(W\)
  • 对于每个 \(v\in P\),固定 \(v\) 然后做 \(K\) 个 条件 Gibbs。
  • 再全随机做 \(M\) 个 Gibbs 采样。
  • \(\nabla=\dfrac1{N_PK}\sum_{y\in S_c}yy^T-\dfrac1M\sum_{y'\in S}y'y'^T\)
  • 梯度抬升。

IV. 受限 Boltzmann 机

Boltzmann 机的一个问题是 Gibbs 采样太慢了。因此有 受限 Boltzman 机 (Restricted Boltmann Machine, RBM)。

受限元素来源于模型不再是像朴素 BM 一样是全连接的,而是二分图式的:隐藏神经元仅与可见神经元连接,反之亦然。具体而言:

  • 对于隐藏的 \(h_i\),有 \(z^h_i=\sum w_{ij}v_j\)\(P(h_i=1\mid v)=\sigma(z_i^h)\)
  • 对于可见的 \(v_j\),有 \(z^v_j=\sum w_{ij}h_i\)\(P(v_j=1\mid h)=\sigma(z_j^v)\)

这种模式的第一个优势就是增广的时候可以关于 \(h,v\) 交替进行,而单次增广时更是可以并行,比只能慢吞吞循环增广每一位的 BM 快多了。

第二个优势在于由 \(v\) 条件 Gibbs 的时候,因为 \(v\) 不变,则更是只需要增广一次即可!

尝试形式化描述这一过程。增广是一个 \(v_0\to h_0\to v_1\to h_1\to\dots\) 的过程;而有

\[\nabla_wL=\dfrac1{N_PK}\sum_{v_0\in P}v_0h_0^T-\dfrac1M\sum_{v_0\text{ is random}}v_{\infty}h_\infty^T \]

这时,回忆起 Hopfield 网络训练的场合:借鉴“抬升邻居”的思想,我们完全可以使用

\[\nabla_wL=\dfrac1{N_P}\sum_{v_0\in P}v_0h_0^T-v_1h_1^T \]

的近似!

V. 采样方法一览

基于能量的模型 (energy-based model) 拥有如下的优势:

  • 从物理方法而来,因此可以借鉴物理知识。
  • 在大方差时也有效。
  • 拥有指数函数的优良性状。
  • 高度泛用,可以对一切含能量模型定义。

但是有一个最突出的缺点,那就是:

  • 需要 配分函数 (partition function) \(Z\) 进行归一化:而其常常是难以计算的。

这就引发问题:如何从概率分布 \(p(x)\) 中采样?

I. 分类分布

分类分布 (Categorical Distribution) 的类别是离散的。可以轻易通过 CDF (Cumulative Density Function) 求出与 \(U(0,1)\) 配合得出。

II. Gauss 分布

可以使用中心极限定理,但是效率很低。

更常见的方法是使用 Box-Muller 定理 + 极角变换(虽然两者都没有讲解)。

如何使用 \(\c N(\b0,I)\) 生成 \(\c N(\b\mu,\Sigma)\)?生成 \(\b z\gets\c N(\b 0,I)\) 然后 \(\b x=\Sigma\b z+\b\mu\)

III. 重要性采样

一类通用的采样方式是,对于 \(p(x)\) 构建 提议分布 (proposal distribution) \(q(x)\) 然后则有

\[\t E_{x\sim p}f(x)=\t E_{x\sim q}\dfrac{p(x)}{q(x)}f(x) \]

方差最小的 \(q(x)\propto p(x)|f(x)|\)。这被称作 重要性采样 (Importance Sampling)。

IV. MCMC

对于遍历性的 Markov 链,可以使用充分条件

\[\pi(s)T(s\to s')=\pi(s')T(s'\to s) \]

来保证 \(\pi\)\(T\) 的 stationary distribution。于是就有 Metropolis Hastings 算法确保上述条件:

  • 使用提议分布 \(q(s'\mid s)\)\(s\) 生成下一步提案 \(s'\)
  • \(\min(1,\dfrac{p(s')q(s'\to s)}{p(s)q(s\to s')})\) 的概率 接受 (accept) 这次转移并切换至态 \(s'\),反之 拒绝 (reject) 并停在原地。

有更简单的 Gibbs 采样摒弃了接受率的概念。Gibbs 采样仅适用于 \(n\) 元组的采样,每次增广仅更改元组的某一维,且 \(q(s_i\to s_i')=p(s_i'\mid s_{j\neq i})\)。Boltzmann 机的采样正是应用了这一招。

VI. 总结

Boltzmann 可以生成图像,也可以复原受污染的图像(从污染图像出发 evolve),更可以补全被切割的图像(条件 Gibbs)。

同时,它甚至可以胜任分类工作:将 label 的 one-hot 向量也看做状态的一部分,即 \(y=(v,h,c)\)。则分类相当于求后验概率 \(P(c\mid v)\);进一步地,甚至可以做条件生成,即 \(P(v\mid c)\)!二者都可以通过条件 Gibbs 达到。

II. 基于隐变量的模型

如何构建易于采样、易于计算可能性的模型?

I. 隐变量模型

一种可能的方式是所谓的“隐变量模型 (latent variable model)”:有隐变量 \(z\) 和显变量 \(x\),则 \(p(x,z)=p(z)p(x\mid z)\)

  • \(p(z)\):隐变量的先验分布 (prior distribution)
  • \(p(x\mid z)\):条件分布 (conditional distribution)
  • \(p(z\mid x)\):后验分布 (posterior distribution)
  • \(p(x)=\int_zp(x\mid z)p(z)\):边缘分布 (marginal distribution)

如果 \(p(z)\)\(p(x\mid z)\) 都是易于采样的,则边缘分布 \(p(x)\) 同样易采样;但是,使用这种手法可以描述比较复杂的分布。也即,可以让先验、条件易采样易计算分布,则边缘易采样难计算分布、后验难采样难计算分布。

例如,Gaussian 混合模型 (Gaussian Mixture Model, GMM) 就是一个较简单的隐变量模型。

有多个 Gaussian 分布。\(z\sim\t{Categorical}(w_1,\dots,w_k)\) 决定 \(x\) 自哪个分布中采样,有了 \(z\) 后即有 \(x\sim\c N(\b\mu_z,\Sigma_z)\)

模型的参数是类别权重 \(w_k\),以及 Gaussian 参数 \(\b\mu_k,\Sigma_k\)。其训练的过程被称作 聚类 (clustering)。

如何训练一个隐变量模型?对于数据集 \(D=\cur{x^i}\),使用 MLE,则有

\[L(\theta)=\log\prod_{x\in D}p(x;\theta)=\sum_{x\in D}\log{\color{red}\sum_zp(x,z;\theta)} \]

其中,红色部分的边缘分布是计算的难点。

尝试使用 Importance Sampling。

尝试 propose 一个 \(q(z)\),然后有

\[p(x;\theta)=\sum_zp(x,z;\theta)=\sum_zq(z)\dfrac{p(x,z;\theta)}{q(z)} \\L(x;\theta)=\log\sum_zq(z)\dfrac{p(x,z;\theta)}{q(z)} \]

此时,因为 \(\log\) 的凹性,所以可以应用 Jensen 不等式

\[\log(\sum_i\alpha_ix_i)\geq\sum_i\alpha_i\log x_i \]

于是有

\[L(x;\theta)=\log\sum_zq(z)\dfrac{p(x,z;\theta)}{q(z)}\geq\sum_zq(z)\log\dfrac{p(x,z;\theta)}{q(z)} \\=\t E_{z\sim q}\log\dfrac{p(x,z;\theta)}{q(z)} \]

此乃 Evidence Lower Bound (ELBO),是可以被计算、优化的期望形式。

但是,对 ELBO 的优化并不意味着对原始指标 \(L(\theta)\) 的优化。

要想两者尽量贴合,就需要满足

\[q(z)=p(z\mid x;\theta) \]

此时就直接有

\[\sum_zq(z)\log\dfrac{p(x,z;\theta)}{q(z)}=\sum q(z)\log p(x;\theta)=\log p(x;\theta) \]

即与下界贴合。

因此,可以提出如下的模式:

  • 对于当前的 \(p(x,z;\theta^k)\),令 \(q(z;\theta^k)\gets p(z\mid x;\theta^k)\)。(Estimate Step)
  • 对于固定的 \(q(z;\theta^k)\),使用其优化 \(p(x,z;\theta^{k+1})\)。(Maximize Step)
  • 不断迭代。

此乃 EM 算法。M-Step 是容易的,但是 E-Step,求后验概率,似乎并非容易。

首先将 \(q(z)\) 参数化为 \(q(z;\phi)\)。然后使用 reverse KL 散度 \(\t{KL}(q\|p)\) 来衡量分布差异。

\[\t{KL}(q\| p)=\sum_zq(z)\log\dfrac{q(z)}{p(z)} \\\phi=\min_\phi\t{KL}(q(z;\phi)\|p(z\mid x;\theta)) \]

这种方法被称作变分推断 (Variational Inference),因为其理论根底来源于变分法。

因为 KL 是不对称的,所以上式要保证 \(q\) 在前面(reverse KL)。\(p\) 在前面的 forward KL 也有其应用场合。

对其推导。

\[L(\phi)=\t{KL}(q(z;\phi)\| p(z\mid x))=\sum_zq(z;\phi)\log\dfrac{q(z;\phi)p(x)}{p(z,x)} \\=\sum_zq(z;\phi)\log p(x)+\sum_zq(z;\phi)\log\dfrac{q(z;\phi)}{p(z,x)} \\={\color{lightblue}\log p(x)}-{\color{pink}\sum_zq(z;\phi)\log\dfrac{p(z,x)}{q(z;\phi)}} \]

其中,蓝色的部分是与 \(q\) 无关的常数,而红色的部分与 ELBO 完全相同,也被称作变分下界 (Variational Lower Bound)。

把式子移一下,又有

\[\log p(x)=&{\color{lightblue}\t{KL}(q(z;\phi)\| p(z\mid x))}&+&{\color{pink}\sum_zq(z;\phi)\log\dfrac{p(z,x)}{q(z;\phi)}}& \\&{\color{lightblue}\text{Approximation Error}}&&{\color{pink}\text{ELBO}}& \]

这个式子中出现 ELBO 不是什么巧合,而是因为其就是一种绕开 Jensen 不等式对前述的

\[L(x;\theta)=\log p(x)\geq{\color{pink}\text{ELBO}} \]

的重证明;KL 项总是非负的。

现在,对于单个 \(x\),可以通过训练 \(q(z;\phi)\) 来拟合 \(p(z\mid x;\theta)\),也可以通过提议的 \(q(z;\phi)\) 来优化 \(p(x;\theta)\)。但是,这里的 \(q(z;\phi)\) 尚还需要针对每个 \(x\) 分开训练。可以进一步地将 \(q\) 用一个神经网络替换,使其可以接受 \(x\) 作为输入,变成 \(q(z\mid x;\phi)\) 的完全体。这样,误差式子就直接写成一个联合误差

\[L(\phi;\theta)=\sum_zq(z\mid x;\phi)\log\dfrac{p(z,x;\theta)}{q(z\mid x;\phi)} \]

训练目标是

\[J(\phi,\theta;x)=\sum_zq(z\mid x;\phi)\log\dfrac{p(z,x;\theta)}{q(z\mid x;\phi)} \\=\sum_zq(z\mid x;\phi)(\log p(z,x;\theta)-\log q(z\mid x;\phi)) \\=\sum_zq(z\mid x;\phi)(\log p(x\mid z;\theta)-\log q(z\mid x;\phi)+\log p(z;\theta)) \]

最终得到

\[\\=&{\color{pink}\t E_{z\sim q(z\mid x;\phi)}\log p(x\mid z;\theta)}&-&{\color{lightblue}\t{KL}(q(z\mid x;\phi)\|p(z;\theta))}& \\&{\color{pink}\text{Reconstruction Likelihood}}&&{\color{lightblue}\text{KL Divergence}}& \]

其中,红色部分衡量由 \(q\) 提案的 \(z\) 生成的 \(x'\) 有多贴近原始的 \(x\),所谓“Reconstruction Likelihood”;蓝色部分即为 KL 散度。

框架有了,具体模型呢?

II. Variational Autoencoder

最简单的方式。直接令

  • \(p(z)\sim\c N(\b0,I)\)
  • \(p(x_{ij}\mid z;\theta)\sim\c N({\color{red}f_{ij}(z;\theta)},1)\)
  • \(q(z\mid x;\phi)\sim\c N\Big({\color{red}\b\mu(x;\phi)},\text{diag}({\color{red}\sigma(x;\phi)}^2)\Big)\)
  • 其中,红色的部分全是神经网络。

训练 时的具体实现为:

  • encoder:对输入 \(x\) 过两个神经网络分别生成 \(\b\mu,\sigma\),然后用它们采样 \(z\)
  • decoder:用 \(z\) 生成 \(f\),然后用其生成 \(x\)

这其中,encoder 只在训练时有用。训练的目标是联合优化

\[J(\phi,\theta;x)={\color{pink}\t E_{z\sim q(z\mid x;\phi)}\log p(x\mid z;\theta)}-{\color{lightblue}\t{KL}(q(z\mid x;\phi)\|p(z;\theta))} \]

其中,KL 散度的部分,对于 \(k\) 维分布 \(\c N_0(\b\mu_0,\Sigma_0),\c N_1(\b\mu_1,\Sigma_1)\),有

\[\t{KL}(\c N_0\|\c N_1)=\dfrac12\left(\text{tr}(\Sigma_1^{-1}\Sigma_0)+(\b\mu_1-\b\mu_0)^T\Sigma_1^{-1}(\b\mu_1-\b\mu_0)-k+\ln\dfrac{|\Sigma_1|}{|\Sigma_0|}\right) \]

而 ELBO 的部分,可以作 Monte-Carlo 估测。

\(\theta\) 在期望外面,所以是好计算误差的:因为有 \(p(x_{ij}\mid z;\theta)\sim\c N(f_{ij}(z;\theta),1)\),所以

\[L(\theta)=\t E_{z\sim q(z\mid x;\phi)}\log p(x\mid z;\theta)\propto \t E_{z\sim q(z\mid x;\phi)}\|f(z;\theta)-x\|^2 \]

但是,\(\phi\) 在期望下面,我们得想办法把它移上去,才能通过 MC 估测。

当有 \(z\sim\c N(\mu,\sigma^2)\) 时,可以看做 \(z=\mu+\sigma\cdot\eps\),其中 \(\eps\sim\c N(0,1)\)。因此有

\[L(\phi)\propto\t E_{z\sim q(z\mid x;\phi)}\|f(z)-x\|^2 \\=\t E_{\eps\sim\c N(0,1)}\|f(\mu(x;\phi)+\sigma(x;\phi)\cdot\eps)-x\|^2 \]

此时便从期望下面移走了。此乃 重参数化技巧 (Reparameterization Trick)。

实际应用时,均只 sample 一次即可。

III. Standard Autoencoder

何为 Autoencoder (AE)?是一种端到端无监督学习的技巧,试图通过 encoder 将高维的信息 \(\b x\) 压缩成低维的特征 \(\b z\),然后再通过 decoder 将其还原。VAE 较 AE 的区别是为 \(\b z\) 引入了不确定性。

IV. VAE 扩展

如果原图随机被 mask 了怎么办?我们期许被 mask 的图仍然可以被补全为原图,因此在训练时需要有意识地将输入给 \(q\)\(x\) mask,但是希望其 decode 出未被 mask 的图。

如果图像还有其对应的 label \(y\) 怎么办?无非是 encoder 和 decoder 都多一个额外参数,encoder 是 \(q(z\mid x,y)\),decoder 是 \(p(x\mid y,z)\) 即可。

如果既有有监督数据又有无监督数据,即 半监督训练 (semi-supervised training) 咋办?

Decoder 使用 \(p(x\mid y,z)\),Encoder 使用 \(q(z\mid x,y)\)。可以假设 \(q(z,y\mid x;\phi)=q(z\mid x;\phi)\cdot q(y\mid x;\phi)\)

在有监督训练时,encoder 可以正常进行,而 decoder 对 \(z\mid x\) 使用常规 VAE、对 \(y\mid x\) 使用交叉熵处理。

在无监督训练时呢?KL 散度是 \(\t{KL}(q(z)\|p(z))+\t{KL}(q(y)\|p(y))\),其中 \(p(z)\)\(\c N(0,I)\)\(p(y)\) 是 uniform,这两个是容易的;但是 Reconstruction Loss 呢?

\[L=\t E_{z,y\sim q(z,y)}\log p(x\mid z,y;\theta) \]

这个对于 \(\theta\) 可以 Monte-Carlo。但是对于 \(\phi\),reparameterization 的技巧无法对 \(y\) 适用。因此,只能适用最朴素的手法,即枚举 \(y\)

\[L=\t E_{\eps\sim\c N(0,I)}\sum_c q(y=c)\cdot\log p(x\mid\mu(x)+\sigma(x)\cdot\eps,y;\theta) \]

V. VAE 总结

好处:结构灵活、训练稳定、收敛快。

坏处:KL 散度的内生问题。\(\t{KL}(q\| p)\) 被称作 reverse 或 exclusive KL,因为其倾向于 cover 最显著的一个特征而忽略其它特征;\(\t{KL}(p\|q)\) 则被称作 forward 或 inclusive KL,因为其倾向于 cover 整体,取一个贴近平均值的效果。同时,使用 MLE 作为 loss,使用 Gaussian 作为 \(p,q\) 假设的分布,只做一步 sample,这些操作都会使得图像模糊。

VI. VAE 变体

\[J(\phi,\theta;x)={\color{pink}\t E_{z\sim q(z\mid x;\phi)}\log p(x\mid z;\theta)}-{\color{lightblue}\t{KL}(q(z\mid x;\phi)\|p(z;\theta))} \]

\(\beta\)-VAE 对其加上了一个微小但非常有用的修改

\[J(\phi,\theta;x)={\color{pink}\t E_{z\sim q(z\mid x;\phi)}\log p(x\mid z;\theta)}-{\color{green}\beta}{\color{lightblue}\t{KL}(q(z\mid x;\phi)\|p(z;\theta))} \]

绿色部分的 \(\beta\) 的效果是:

  • \(\beta=0\) 是常规 AE。
  • \(\beta=1\) 时是常规 VAE。
  • \(\beta>1\) 时会让特征 \(\b z\) 的各维度之间倾向于解耦,相对独立地操纵生成物的每一维。
posted @ 2025-06-10 16:00  Troverld  阅读(50)  评论(0)    收藏  举报