2017.12.3 更新 VAE loss function
————————————————————————————————
深度学习给机器学习带来的变革,不仅是supervised learning监督学习,最近两年将烽火指向无监督学习unsupervised learning,本讲会介绍三个主流算法。
特点:
Generative Model生成模型是无监督学习中有趣的一部分:给你训练数据,生成和训练数据相同分布的新数据。 这里引入重要概念:distribution,density distribution. 这是数据的重要特征。有两种分类:explicit显式分布,即求出 pmodel(x) ,implicit隐式分布。
Taxonomy:生成模型的分类学,主要分为explicit & implicit density,本讲介绍3个热门的模型。
概率问题。我需要理解…
这是机器学习的基本问题,比较数学的眼光,但很重要。
知乎问题:机器学习“判定模型”和“生成模型‘有什么区别?
首先,生成模型分为train和generate两部分(没有test)。
其次,监督学习(判别模型)最大化 p(y|x) ,条件概率,即给你输入x,你输出正确的label y的概率越大越好?而生成模型最大化 p(x) ,得到x的分布与原始分布越接近越好?
PixelRNN/CNN基于显式概率分布,极大似然估计 p(x) ,用链式法则展开成条件概率累积。那么从第一个像素(随机初始化),条件概率到第二个像素,这里的路径是右下,形成RNN的序列模型。CNN则是邻近区域… 真的没看懂…
因为generating time太慢,好像不太好。但因为显式表达概率
首先介绍Autoencoder自动编码器?输入x,经过encoder CNN,得出feature,再经过decoder upCNN(反卷积),得到输出的x’。这种先降后升的神经网络,像FCN语义分割。然后loss显然是x-x’的距离。
花式解释AutoEncoder与VAE
这篇专栏讲的还挺清楚的。其实就是FCN,先编码,得到中间的码code,然后反卷积解码,得到生成图像。(套路:想输出什么,就学习什么标签,输出维度任意,反正有各种卷积反卷积操作)
但是auto encoder致命的弱点是无法自动生成的新的图像,它一定要有输入的图片,才能得到隐含code,我们不能自己随便写个code就能生成合理的图像。
需要挺多的概率知识,啊我概统学的太差了…Stanford课程看不懂qvq。
啊啊啊啊数学!
只知道GAN你就OUT了——VAE背后的哲学思想及数学原理
这是一篇比较官方的文章。
【Learning Notes】变分自编码器(Variational Auto-Encoder,VAE)
这篇文章挺有意思的,如开头:
近年,随着有监督学习的低枝果实被采摘的所剩无几,无监督学习成为了研究热点。VAE(Variational Auto-Encoder,变分自编码器)和 GAN(Generative Adversarial Networks) 等模型,受到越来越多的关注。
笔者最近也在学习 VAE 的知识(从深度学习角度)。首先,作为工程师,我想要正确的实现 VAE 算法,以及了解 VAE 能够帮助我们解决什么实际问题;作为人工智能从业者,我同时希望在一定程度上了解背后的原理。
作为学习笔记,本文按照由简到繁的顺序,首先介绍 VAE 的具体算法实现;然后,再从直观上解释 VAE 的原理;最后,对 VAE 的数学原理进行回顾。我们会在适当的地方,对变分、自编码、无监督、生成模型等概念进行介绍。
我们会看到,同许多机器算法一样,VAE 背后的数学比较复杂,然而,工程实现上却非常简单。
我就简单介绍VAE的框架,具体数学推导以后看论文再说,以及代码实现也能帮助理解。
如图,输入n维图片,进入encoder,和autoencoder一样。我们的隐含变量z是m维的,为了得到随机化(满足高斯分布)的z,即 N(δ,σ) ,我们需要输出两个m维的向量z_mean和z_log_var,通过采样 ϵ from N(0,1) ,乘以标准差再加上均值,满足了任意的高斯分布。将m维z输入decoder,得到n维 x̂ 。
loss function是x与 x̂ 的cross entropy或mean square 加上 z_mean和z_log_var的KL divergence. 随后SGD学习。
(事实上cross entropy 和 kl divergence 的定义就差个常数)
其实原理特别简单,只需要在编码过程给它增加一些限制,迫使其生成的隐含向量能够粗略的遵循一个标准正态分布,这就是其与一般的自动编码器最大的不同。
感觉当时没真正搞懂,VAE区别于AE的,是高斯分布。两者的Loss function都有原始图片与生成图片的差异,但VAE希望生成图片有随机性,而且是有正态分布的随机性,而不是AE那种死的(fixed)输出。生成图片的正态分布,要求我们encoder输出的latent variable(mean&var)满足标准正态分布(这里我们用了reparameter的技巧),故转为希望 mean−>0,var−>1 . 这就是latent loss= −0.5∗(1+logσ2−δ2−σ2) . 显然在 σ=1,δ=0 时取最小值0.
最终的loss是两个loss之和,trade-off.
至于为啥要求正态分布,我也不是很明白…
这样我们生成一张新图片就很简单了,我们只需要给它一个标准正态分布的随机隐含向量,这样通过解码器就能够生成我们想要的图片,而不需要给它一张原始图片先编码。
引入随机性,才能多样性。生成时就不需要图片了,直接运行decoder即可。因为VAE的特点就是把生成模型的概率分布参数都学习出来了,生成时只需加常规的noise,故称为显式的表达概率分布。同时,这也有局限,即和输入数据比较吻合,创新泛化能力一般。
用Stanford课件的话说
GANs don’t work with any explicit density function. Instead, take game-theoretic approach: learn to generate from training distribution through 2-player game.
用Yann LeCun的话说
生成对抗网络(GAN)是”过去十年机器学习界最有趣的idea”
用知乎问题的描述的话说
Ian Goodfellow在GAN开创论文中也提到,GAN相比传统方法,生成器(G)的参数更新不是直接来自数据样本,而是来自鉴别器(D)的反向传播,训练不需要马尔科夫链.也有论文提出它可以提高泛化精度,可是,它也有很多缺点,比如生成模型的分布没有显示的表达,比较难训练.
大体框架:
GAN是隐式的表达概率分布,采用二人博弈的场景。Generator生成器的输入是random noise,负责生成fake images,G的目的就是以假乱真,让Discriminator判别器无法辨别fake or real images,real images 是训练集。而D的目的显然就是辨别正确率越高越好。很明显,G和D的目的是冲突的。
用数学表达:
博弈论minimax问题。min(max()). 规定1为real,0为fake。D希望自己的参数能使正确的期望越高越好,即real data期望大,1-fake data期望大。G希望在D基础上自己的参数使期望越低越好。
实际训练时:先对D梯度上升,更新D的参数,再对G梯度上升(这里变化了下),更新G的参数。这算完成一次参数更新。
GAN目前是state-of-the-art,最佳的,比VAE好,但难以解释。
知乎上铺天盖地的GAN报道,基本是GAN的应用,很少是学术性的。这里有个好问题:生成对抗网络(GAN)相比传统训练方法有什么优势?
优点
模型只用到了反向传播,而不需要马尔科夫链
训练时不需要对隐变量做推断
理论上,只要是可微函数都可以用于构建D和G,因为能够与深度神经网络结合做深度生成式模型
G的参数更新不是直接来自数据样本,而是使用来自D的反向传播(这也是与传统方法相比差别最大的一条吧) (注意先更新D再更新G)
相比于变分自编码器,,GANs没有引入任何决定性偏置( deterministic bias),变分方法引入决定性偏置,因为他们优化对数似然的下界,而不是似然度本身,这看起来导致了VAEs生成的实例比GANs更模糊.
缺点
可解释性差,生成模型的分布 Pg(G)没有显式的表达
比较难训练,D与G之间需要很好的同步,例如D更新k次而G更新一次
它很难去学习生成离散的数据,就像文本(不可微)
作者:元峰
链接:https://www.zhihu.com/question/56171002/answer/148593584
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
总之,加油GAN !