[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

时间:2021-09-26 05:33:55

本是neural network的内容,但偏偏有个variational打头,那就聊聊。涉及的内容可能比较杂,但终归会 end with VAE.

各个概念的详细解释请点击推荐的链接,本文只是重在理清它们之间的婆媳关系。

无意中打开了:中国科大iGEM项目报告,感慨颇多,尤其是时光,这其中也包含了写这系列文字的目的。

在技术上不得不走了不少弯路,每当无意间回首,对于那些”没机会“走弯路的同学们,是羡慕的;对于不懂得珍惜机会的同学们,也是充满惋惜。

希望,透过这些文字,能唤醒一些东西,助你找到正确的属于你自身的方向。信息已经很多,找到一条适合你的最佳路径便是目的,也是我对你的祝福。


一段文字,作为前言:

From: Part V  与AutoEncoder的关系

准确来说,AutoEncoder是RBM的简化衍生物。RBM是一个概率生成模型,而AutoEncoder只是一个普通的模型。

神经网络的本质是训练岀能够模拟输入的W,这样,在测试的时候,遇到近似的输入,W能够做出漂亮的响应。

RBM选择概率,是因为有概率论的公式支持。这样优化网络,能够达到上述目标。

只是原始目标不好优化,Hinton才提出对比训练的方法,即绕了个弯子的选择重构。

能量函数使得W朝更大概率方向优化。但是,正如线性回归有最小二乘法和高斯分布两种解释一样。

其实,W的训练大可不必拘泥于概率,AutoEncoder则绕过了这点,直接选择了加权重构,所以cost函数简单。

可以这么说,重构的数学理论基础就是RBM的原始目标函数。而概率重构启发了直接重构。两者近似等价。

从马尔可夫链上看,AutoEncoder可看作是链长为1的特殊形式,即一次重构,而RBM是多次重构。

能使用直接重构的另一个原因是,Hinton在实验中发现,梯度法的一次重构效果出奇好。

所以AutoEncoder中摒弃了麻烦的Gibbs采样过程。

Restricted Boltzmann Machine

Link: 受限玻尔兹曼机(Restricted Boltzmann Machine, RBM) 简介

Link: Introduction to Restricted Boltzmann Machines【一颗永流传】

链接中提出了面临的问题:穷举 2|v|+|h|种组合计算联合概率不太可能

以及解决的方法:Contrastive Divergence算法 (链接中的算法准确的说应该是Quick Contrastive Divergence)

其实,这就是一个根据马尔科夫原理的sampling逼近原分布的技术。

第二个链接有必要一读,作者不错,关键是有例子!

接下来的问题自然是:

  • W的训练为何不必拘泥于概率?
  • 如何绕过了这点而选择加权重构?

AutoEncoder

Link: 花式解释AutoEncoder与VAE

Evidence1: 自编码器的网络结构十分类似于ppca,ppca的特殊情况之一是pca。

Evidence2: 实际上,自编码网络学习出的低维数据表示十分类似于PCA(主成分分析)学习出的主成分。

读罢两条,是否有一点小触动。

pca + gmm算是一个组合,前者找到主要特征,后者对特征进行分类。

现在找特征的角色可以被”能生成自己“的RBM或者是autoencoder来替代。

自然地引出了一种有意思的训练nn的想法:Greedy Layerwise Pretraining

    • An autoencoder with one hidden layer is trained to reconstruct the inputs. The first layer (encoder) of this network becomes the first layer of the deep network.
    • Each subsequent layer is then trained to reconstruct the previous layer.
    • A final classification layer is then added to the resulting deep network, and the whole thing is trained by backpropagation.

扩展一下思维,隐藏层的神经元个数大于input,也就不再是压缩,而是升维,可能会因为一些无足轻重的特征而导致过拟合。为了解决这个问题:

sparse autoencoders 【L1】
autoencoders with dropout at hidden layer(s)
contractive autoencoders 【L2】
denoising autoencoders

Weight decay:【下图】

[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

One popular choice is to penalize the sum of the absolute values of the activations in the hidden layer.

也就是L1的形式,具有局部权值趋于零的特性,故这里使用了sparse这个词。

[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

这是L2的形式,并没有什么新奇的玩意,但名字一变,总是给人以高大上之感。

denoising就是为增加鲁棒性:add noise to the inputs, but train the network to recover the original input。

Variational AutoEncoders

参考花书20.10

以上从压缩的角度聊了下自编码器,现在以Generative Models的角度再瞧上一瞧。

Generative models can be:
◮ explicit (Variational Autoencoders)
◮ implicit (Generative Adversarial Networks)

这里不提GAN,不是篇幅问题,而是当前本人实践经验不够。但有一点要说的是,这个"交叉学科"又引入了Game Theory你懂得。

Ref: https://yq.aliyun.com/articles/68410

简要

概率解释通过假设每个参数的概率分布来降低网络中每个参数的单个值的刚性约束。

例如,如果在经典神经网络中计算权重w_i=0.7,在概率版本中,计算均值大约为u_i = 0.7和方差为v_i = 0.1的高斯分布,即w_i =N(0.7,0.1)。

这个假设将输入,隐藏表示以及神经网络的输出转换为概率随机变量。这类网络被称为贝叶斯神经网络或BNN。

学习的目标是找到上述分布的参数。这种学习被称为“推理”,贝叶斯网络中的推论对应于计算潜在变量相对于数据的条件概率。

这类模型引入了变分逼近推理方法,将该计算问题转换为优化问题,可以使用随机梯度下降法来解决。

【读到这里,你应该明白了本文的内容表象是NN,但其实很”贝叶斯“】

  • 在经典版的神经网络中,可以用均方误差(MSE)简单测量网络输出与期望的目标值之间的误差。
  • 但在处理分布时,MSE不再是一个好的误差度量,因此用KL­散度测量两个分布之间的差异。

事实证明变分近似和真实后验分布之间的距离不是很容易被最小化。它包括两个主要部分。因此,可以最大化较小的项(ELBO)。

从自动编码器的角度来看,ELBO函数可以看作是输入的重建代价与正则化项的和。

在最大化ELBO之后,数据的下限接近数据分布,则距离接近零,间接地最小化了误差距离。

最大化下界的算法与梯度下降的完全相反。沿着梯度的正方向达到最大值,这整个算法被称为“自动编码变分贝叶斯”。

[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

是不是像极了本系列之前已提及的公式:[Bayesian] “我是bayesian我怕谁”系列 - Variational Inference

[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

详谈Ref: Gapeng - vae

  -- 撸猫小组组长,写得挺好

[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

PGM

发现了没,又成了变分推断的问题,那么之前提及的套路就是:

直接优化[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders是不可行的,因此一般转而优化它的下界[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

对应的,优化对数似然函数转化为优化[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders。【这里就是变分i.i.d假设】

其实就是:不优化log-likelihood,而是转为”如何把下界变得更高点儿“。

[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

Figure, training: http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture13.pdf

如果菜鸡仔细看了以上提及过的Quick Contrastive Divergence过程,那么会发现这类训练法都是一个Gibbs samlping的套路。

然后,这东西怎么跟ppca这么像!?如果你这么想,便是”上道“了,恭喜。

你若是跟着本系列统计学习的思维走,生成模型的思维本就是自然而然的路子;

若是走nn的路子,比如231n的思路,讲到这里时能感到课堂上有人思维短路。因为这里突然融入概率,很多菜鸡开始不知所措;但你若本是Bayesian,那么讲到这里时,理解就成了自然而然的过程,也是本系列文字的愿景之一。

当然,VAE便自然而然地引出了GAN,这是常见的”认知套路“,但本系列是统计学习,将带领bayesian菜鸡们逐渐向Gaussian Process靠拢,而GAN将在未来其他系列唠唠。

到此,bayes就这样渐渐地牵扯向了neural network,你感受到了么?