[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders
本是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:【下图】


One popular choice is to penalize the sum of the absolute values of the activations in the hidden layer.
也就是L1的形式,具有局部权值趋于零的特性,故这里使用了sparse这个词。

这是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 Inference

详谈Ref: Gapeng - vae
-- 撸猫小组组长,写得挺好

PGM
发现了没,又成了变分推断的问题,那么之前提及的套路就是:
直接优化是不可行的,因此一般转而优化它的下界
。
对应的,优化对数似然函数转化为优化。【这里就是变分i.i.d假设】
其实就是:不优化log-likelihood,而是转为”如何把下界变得更高点儿“。


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,你感受到了么?
[Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders的更多相关文章
- [Bayesian] “我是bayesian我怕谁”系列 - Gaussian Process
		
科班出身,贝叶斯护体,正本清源,故拿”九阳神功“自比,而非邪气十足的”九阴真经“: 现在看来,此前的八层功力都为这第九层作基础: 本系列第九篇,助/祝你早日hold住神功第九重,加入血统纯正的人工智能 ...
 - [Bayesian] “我是bayesian我怕谁”系列 - Variational Inference
		
涉及的领域可能有些生僻,骗不了大家点赞.但毕竟是人工智能的主流技术,在园子却成了非主流. 不可否认的是:乃值钱的技术,提高身价的技术,改变世界观的技术. 关于变分,通常的课本思路是: GMM --&g ...
 - [Bayesian] “我是bayesian我怕谁”系列 - Exact Inferences
		
要整理这部分内容,一开始我是拒绝的.欣赏贝叶斯的人本就不多,这部分过后恐怕就要成为“从入门到放弃”系列. 但,这部分是基础,不管是Professor Daphne Koller,还是统计学习经典,都有 ...
 - [Bayesian] “我是bayesian我怕谁”系列 - Exact Inference
		
要整理这部分内容,一开始我是拒绝的.欣赏贝叶斯的人本就不多,这部分过后恐怕就要成为“从入门到放弃”系列. 但,这部分是基础,不管是Professor Daphne Koller,还是统计学习经典,都有 ...
 - [Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes+prior
		
先明确一些潜规则: 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性. 机器学习大概分为三个领域: ...
 - [Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes with Prior
		
先明确一些潜规则: 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性. 机器学习大概分为三个领域: ...
 - [Bayesian] “我是bayesian我怕谁”系列 - Continuous Latent Variables
		
打开prml and mlapp发现这部分目录编排有点小不同,但神奇的是章节序号竟然都为“十二”. prml:pca --> ppca --> fa mlapp:fa --> pca ...
 - [Bayesian] “我是bayesian我怕谁”系列 - Markov and Hidden Markov Models
		
循序渐进的学习步骤是: Markov Chain --> Hidden Markov Chain --> Kalman Filter --> Particle Filter Mark ...
 - [Bayesian] “我是bayesian我怕谁”系列 - Boltzmann Distribution
		
使用Boltzmann distribution还是Gibbs distribution作为题目纠结了一阵子,选择前者可能只是因为听起来“高大上”一些.本章将会聊一些关于信息.能量这方面的东西,体会“ ...
 
随机推荐
- MySQL+Keepalived配置高可用
			
服务器环境: 主mysql:192.168.1.163 从mysql:192.168.1.126 VIP:192.168.1.50 一.mysql配置主从同步 1.配置主mysql服务器 vim /e ...
 - 【JVM】Java中的JavaCore/HeapDump文件及其分析方法
			
产生时间 Java程序运行时,有时会产生JavaCore及HeapDump文件,它一般发生于Java程序遇到致命问题的情况下. 有时致命问题发生后,Java应用不会死掉,还能继续运行: 但有时致命问题 ...
 - 使用http -server 搭建本地简易文件服务器
			
安装 npm install http-server -g 使用 1. cd project . 2. hs [pwd] -o, 默认是当前路径 ./ 3. 其他选项 -p Port to use ( ...
 - leetCode没那么难啦 in Java (二)
			
介绍 本篇介绍的是标记元素的使用,很多需要找到正确元素都可以将正确元素应该插入的位置单独放置一个标记来记录,这样可以达到原地排序的效果. Start 27.RemoveElement 删除指定元 ...
 - Longge's problem  poj2480  欧拉函数,gcd
			
Longge's problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6918 Accepted: 2234 ...
 - NOIP2017SummerTraining0720
			
这套题,看到第一题就想到了以前做过的运动鞋那道题,然后就往DP这个方向去思考,想来想去每什么思路,然后就去看第二题,第二题一看就是一道最短路的问题,但是它的建图十分困难, 怎么打都不知到该怎么建图,然 ...
 - java数据库编程之DAO模式
			
第八章:DAO模式 8.1:JDBC封装 为了提高代码的维护性和扩展性,我们使用JDBC进行封装数据, 先定义统一的API,将操作数据的代码抽象到接口中,业务逻辑代码只需要调用这些接口的实现类的对象, ...
 - VB.net DateTimePicker 初始化为空,选择后显示日期
			
目的:当某记录的日期数据为空的时候,DateTimePicker 不以默认当前时间显示. 优点:避免不规则的时间格式输入:符合平时遇到的时间输入习惯 缺点:设置要代码,没有textbox控件那么方便设 ...
 - python中strip函数的用法
			
python中往往使用剥除函数strip()来对用户的输入进行清理.strip函数的最一般形式为: str.strip('序列') 其中,序列是一段字符串,该函数表示从头或者从尾部开始进行扫描,如果扫 ...
 - 三大开源运维监控工具zabbix、nagios、open-falcon优缺点比较
			
借鉴一下别人的,自己做个记录,我觉得推荐还是使用open-falcon,最重要的一点是有完善的中文帮助文档. 帮助文档地址:https://book.open-falcon.org/zh/index. ...