CNN笔记(CS231N)——生成模型(Generative Models)

总览

之前我们讲的网络模型都是监督学习,这一讲我们要讲的是无监督学习。以下是本讲的总览

CNN笔记(CS231N)——生成模型(Generative Models)_第1张图片

无监督学习与监督学习最大的不同就是我们只有数据,没有任何多余的标注,我们要做的就是学习数据中隐藏的某些结构。而生成模型就属于无监督学习的一种

CNN笔记(CS231N)——生成模型(Generative Models)_第2张图片

生成模型

生成模型的目标是给定训练数据,希望能获得与训练数据相同的新数据样本。我们的目标是找到训练数据的分布函数

CNN笔记(CS231N)——生成模型(Generative Models)_第3张图片

生成模型在很多场景有非常好的应用

CNN笔记(CS231N)——生成模型(Generative Models)_第4张图片

我们可以对生成模型进行分类,在本讲中我们主要讲下面圈起来的三种方法

CNN笔记(CS231N)——生成模型(Generative Models)_第5张图片

PixelCNN/RNN

PixelCNN属于显式密度模型,它主要运用链式法则来将求出与训练数据相同的分布

CNN笔记(CS231N)——生成模型(Generative Models)_第6张图片

一般是从图像的一个角开始,利用RNN逐步生成新的图像

CNN笔记(CS231N)——生成模型(Generative Models)_第7张图片

为了加快训练速度,在PixelRNN上进行改进可以得到PixelCNN,但缺点是生成速度慢,像素也需要逐一生成

CNN笔记(CS231N)——生成模型(Generative Models)_第8张图片

以下是二者的对比

CNN笔记(CS231N)——生成模型(Generative Models)_第9张图片

变分编码器

变分编码器主要是引入了一个隐藏向量z的概念,把z作为条件,利用条件概率的公式计算相似性

CNN笔记(CS231N)——生成模型(Generative Models)_第10张图片

在讲变分编码器之前先让我们看看自编码的概念,自编码主要是先对数据进行降维来保留数据中重要的特征

CNN笔记(CS231N)——生成模型(Generative Models)_第11张图片

然后用解码器对特征向量z进行解码,希望得到重构的数据

CNN笔记(CS231N)——生成模型(Generative Models)_第12张图片

我们对这个网络进行训练,损失函数就是重构数据与原数据像素的差

CNN笔记(CS231N)——生成模型(Generative Models)_第13张图片

当我们训练完成以后我们就可以认为我们的编码器学习到了提取重要特征的方法,能够很好的用隐藏特征z表示原图。这个时候我们就能抛开解码器,用编码器做一些其他的事情,例如初始化一些监督模型,达到数据降维的效果,这个时候当我们数据集比较小的时候也能对这个模型进行训练

CNN笔记(CS231N)——生成模型(Generative Models)_第14张图片

那么我们是否能用编码器来生成新的数据?这就是变分编码器的作用。我们希望能用隐藏特征z去生成数据x

CNN笔记(CS231N)——生成模型(Generative Models)_第15张图片

这其中存在采样的过程,特征z与最终样本x都是对他们真实分布的一个采样结果

CNN笔记(CS231N)——生成模型(Generative Models)_第16张图片

对于这个网络我们不能用传统的神经网络训练方法对它进行训练,因为这其中存在积分,所以它是intractable的。我们不可能计算出每个z对应的p(x|z),因此最后的p(x)是无法计算的

CNN笔记(CS231N)——生成模型(Generative Models)_第17张图片

为了解决这个问题,有人提出了定义另外的一个编码网络来对解码网络进行近似

CNN笔记(CS231N)——生成模型(Generative Models)_第18张图片

这其中存在的假设就是隐藏特征z与最终样本x都是满足高斯分布的,因此我们用神经网络训练得到z与x的均值与方差,即可构建出他们的分布函数,再从中进行采样就可以得到最终的结果

CNN笔记(CS231N)——生成模型(Generative Models)_第19张图片

在引入了这个概念以后我们就能对最终的相似函数做如下推导

CNN笔记(CS231N)——生成模型(Generative Models)_第20张图片

最终我们发现相似函数的一部分是tracable的,这部分是相似函数的下界,因此当我们无法最大化我们相似函数的时候我们只能选择最大化相似函数的下界

CNN笔记(CS231N)——生成模型(Generative Models)_第21张图片

我们将公式结合我们的训练过程我们就能发现我们下界中前一部分是在最大化与原图的相似性,后一部分是在求出与先验信息最相思的后验分布

CNN笔记(CS231N)——生成模型(Generative Models)_第22张图片

以下是利用变分编码器生成图像的结果

CNN笔记(CS231N)——生成模型(Generative Models)_第23张图片

CNN笔记(CS231N)——生成模型(Generative Models)_第24张图片

下面是对变分编码器的总结

CNN笔记(CS231N)——生成模型(Generative Models)_第25张图片

GAN

我们之前讲的方法都是我们想求出显式的模型概率分布,现在我们可以抛弃这种方法,利用博弈论的思想来生成训练集的分布,这也就是GAN(Generative Adversarial Networks)。而生成这种复杂分布的方法就是通过神经网络

CNN笔记(CS231N)——生成模型(Generative Models)_第26张图片

GAN网络中的博弈双方分别是生成网络与鉴别网络。生成网络的工作就是尽可能生成逼近真实的图像,鉴别网络的工作就是从真实的图像中分辨出人工合成的图像

CNN笔记(CS231N)——生成模型(Generative Models)_第27张图片

如果把上面讲的思想用公式来表达就是以下式子

CNN笔记(CS231N)——生成模型(Generative Models)_第28张图片

但如果采用这种目标函数会出现问题,由于目标函数中需要优化两个参数,一个需要用梯度上升,一个需要用梯度下降,因此二者结合起来效果并不是特别好。我们可以从右下角看出随着生成器效果越好,损失函数下降越快,这意味着当我们刚开始训练的时候梯度下降缓慢,而随着效果越来越好,损失函数下降越来越快,这显然不是我们想要的结果

CNN笔记(CS231N)——生成模型(Generative Models)_第29张图片

为了保证在刚开始训练的时候能大大减小损失函数,我们可以更改目标函数,使得两个参数都用梯度上升的方法进行优化

CNN笔记(CS231N)——生成模型(Generative Models)_第30张图片

以下是GAN的伪代码

CNN笔记(CS231N)——生成模型(Generative Models)_第31张图片

当循环一定次数以后,我们就可以用生成器来生成非常类似真实的图像了

CNN笔记(CS231N)——生成模型(Generative Models)_第32张图片

利用生成器生成图像的时候网络跟解码器结构类似,也是利用一个特征向量来生成图片,而不同的是我们一般选择随机向量作为这个向量,而不是一副图像经过编码器后生成的特殊向量

CNN笔记(CS231N)——生成模型(Generative Models)_第33张图片

下面是网络实现的一些细节

CNN笔记(CS231N)——生成模型(Generative Models)_第34张图片

GAN网络取得的效果非常好,也是最近研究的热点

CNN笔记(CS231N)——生成模型(Generative Models)_第35张图片

一些优缺点被列举在下方

CNN笔记(CS231N)——生成模型(Generative Models)_第36张图片

下面是本讲的总结

CNN笔记(CS231N)——生成模型(Generative Models)_第37张图片

 

 

你可能感兴趣的:(CNN,PixelRNN,/CNN,自编码,变分编码器,GAN,生成模型)