从潜在向量生成大图像 - 第二部分

更多分辨率为1080x1080的MNIST数字

深度残差生成网络

GitHub

之前的文章中,我们研究了一种生成算法,该算法在对一组低分辨率图像进行训练的时候,例如MNIST或CIFAR-10,可以在任意高分辨率下生成数字图像。这篇文章探讨了对先前模型的一些改进,以产生更有趣的结果。

具体来说,我们在变分自编码器中删除了像素重构损失的使用。用于识别伪造图像的判别器网络被分类器网络所取代。之前使用的生成器网络是由4层128个全连接节点组成的相对较大的网络,我们试图用一个更深的96层但每层只有6个节点的网络来代替这个网络。最后,我们探讨了比正常的神经网络权重初始化方法要大得多的权重的初始化,并讨论了网络训练不足的好处。

动机

直到最近,机器学习研究的大部分内容都是针对某些量化指标和基准来测试一个模型。某些机器学习任务中的度量标准非常清晰,例如分类准确度,预测误差或从ATARI游戏中获得的分数。

研究生成算法的研究人员还需要设计一组量化分数来评估算法的执行情况。当一个英语句子被翻译成中文时,通常将生成的句子与测试数据集使用似然损失或者诸如BLEU分数的一些人工指标进行比较。文本数据、音乐或图像的生成也是如此。

虽然我认为衡量标准对于衡量机器学习算法的性能是有用的,但是当我们将它们用于不太可测量的东西时,我们必须更加小心。例如,我相信一旦机器学习算法被用来创造一些被认为是艺术性的东西,我们应该更仔细地考虑如何定义指标来评估我们的算法。当机器正在训练你的艺术创作的模型时,它优化的目标究竟是什么?

你会在客厅挂上哪些东西?

下面是从先前的博客文章的生成网络中抽取的数字图像。从numpy.random生成随机高斯潜在向量,并将其馈入生成网络来获得这些图像。

下面是从我们将在这篇文章中描述的修改过的模型中生成的样本:

我觉得这些新样本比之前的模型生成的样本更加生动活泼,并且表现出更多的特征。

模型描述

我们的生成模型有两个目标要实现。第一个目标是训练我们的生成网络,以产生与28x28像素分辨率下的真正的MNIST数字难以区分的MNIST数字的图像。第二个目标是使用相同的网络以更高的分辨率(即1080x1080或3240x3240)生成数字图像,并且让更大的图像对人类来说看起来是真正有趣的(至少对我来说)。

我们已经看到一个生成网络从完全随机的权重中创建出相当有趣的图像,所以这个思想就是首先训练一个能产生合格的28x28 MNIST图像这样的网络,然后在同一个网络上产生一个能够满足我们的两个目标的分辨率更大的图像。

我们的生成器可以使用随机高斯向量作为输入来生成分辨率更大的随机数字图像。

以前的文章描述了整个模型的工作原理。但不像以前的模型,这次我们将利用MNIST数字的分类标签。一开始,一批训练图像将通过一个分类器网络,这个网络将学习识别每个MNIST图像的真实数字标签(这是学习使用神经网络进行分类的基本课程)。然后,就像之前的模型一样,同一批次的图像进入一个编码器,转换成一组高斯随机变量,称为潜在向量Z,然后馈入生成器网络生成另一组图像。

然而,与之前的模型不同的是,生成的图像不必看起来非常像训练集里的图像。所有的生成器必须做的是创建一组新的图像,这些图像共享图像训练集的相同的分类标签。换句话说,生成器网络的工作就是欺骗分类器网络,使其认为生成的图像与原始的标签具有相同的类别。

除了对数字进行分类学习之外,分类器网络还学习检测早先生成的欺骗性图像,并且必须学会将这些伪造图像放在其它的类别中(所以在0-9标签之后,Softmax中将有第11个类别,伪造图像类别)。

用分类器网络代替判别器

经典的GAN模型使用二分类判别器来判断生成的图像是否来自真实训练图像集合。判别函数是一个相对容易的机器学习任务,而且很容易训练。

我们遇到的问题是,纯粹的GAN模型生成的MNIST数字集合,往往只有一个子集可以很好地通过判别器测试。不能保证所有10个数字都会生成。如果这个网络真的擅长生成数字4和6,那它在生成数字7的图像时将会有困难。这就是为什么我在前面的模型中添加一个VAE组件来让它通过VAE训练过程可以生成整组数字。但是,让网络产生多样化的图像,这不是唯一的方法。

在这个模型中,为了使网络产生全部十位数,判别器网络被转换成分类器网络。Softmax用于根据分类器的输出来对给定图像属于某个数字类别分配概率。生成器的工作就是尝试对给定的属于某一类数字的潜在变量,生成一个图像,即,使分类器的softmax的输出为该类的概率最大化。它不仅需要生成一个真实的MNIST数字,还必须生成一个看起来像某个类的图像。除了学习将训练集中的图像分类成0-> 9个标签,分类器还必须学习检测伪造的图像,并把它们放在第11个类别。通过增加这个条件,我们的GAN模型将别无选择,只能生成全部十个数字,因为这是被不断地测试的。将额外的信息标签结合到网络要生成的图像中,这和Style GANs是一个类似的概念。

判别器网络的目标是使以下两个条件最大化:

P(Classifier Output = Training Label | Training Image)

P(Classifier Output = Class 11 | Generated Image)

生成器网络的目标是最大化:

P(Classifier Output = Training Label | Generated Image)

同时尽量减少潜在误差。

变分自编码器损失函数

原本VAE有两个用途:将来自MNIST数据集的样本图像编码成近似单位高斯变量(在我们的模型中,一个潜在矢量由32个数值组成)的小的实数矢量,并且生成与训练图像看起来很像的图像。

潜在矢量的 高斯性 相对真的高斯性的向量的差别称为 潜在损失KL散度 误差。这个误差可以很容易地通过反向传播来进行端对端计算。

VAE计算的相似性度量是基于生成的与原始的图像之间的像素上的差异。为了计算这个像素重构损失,可以使用L2损失或logistic回归损失,并且通过端到端的反向传播训练也可以使这个误差最小化。VAE的总损失是重构损失和潜在损失两者的总和。

我不崇拜像素重构损失这个概念,因为这不是人类看待世界的方式。当我们看到一张狗的照片时,我们并不是和我们大脑中的记忆进行逐像素地比较,以确定照片是否确实是我们的宠物狗的照片,而是比较抽象的高阶特征和从照片中提取的概念。

如果之前描述的用于将图像分类为正确数字标签的卷积网络分类器也正在学习从图像中提取更高阶的概念和特征,那么使用这个卷积网络而不是像素重构损失来告诉我们的图像有多 应该也很有趣。所以在这个模型中,我们将用前面章节中使用的分类器的损失函数代替像素重构损失,来最小化softmax的误差。

而且,我们可以用一步同时训练生成模型和VAE潜在误差!不需要像以前的模型那样在两个步骤中完成。我发现这个过程简化了生成模型的训练,并且同时给判别分类器更多的工作去做。除了判别真伪,判别器还有额外的任务,就是学习分类数字。让GAN训练好是一个很大的问题,因为我们总是需要放慢判别器的训练,给生成器一个机会。难度差距也缩小了一点,使GAN系统更容易训练。

生成器网络描述

先前模型中使用的生成器使用4个大型的128个全连接节点层。这使得网络匹配各种训练数据相对容易,但我发现较大的网络不一定会生成更有趣的图像。

更薄更深的网络

我发现与较大的浅层网络相比,具有更深结构的较小网络(如果权重设置恰当)看起来更有趣。或许这与深层网络相对于浅层网络来说具有更强的计算能力有关。但是深度网络更难以训练。最近有一些发现,如残差网络,它使得训练非常深的网络变得容易些。

残差部分

我选择使用残差网络结构来训练一个非常深的但是很薄的生成网络。网络的残差属性使得对于梯度在多个网络层上反向传递误差变得更加容易。在生成网络中使用这种结构的思想是受到了DRAW模型的启发,DRAW模型经常使用相同的网络块十几次循环地生成图像。我想我可能会尝试使用残差网络,并让每个块的权重有不同的灵活性。

生成器网络的结构:

单个残差块结构:

最后,我使用了24个残差网络块,每个块包含5层(4层 relu和1层 tanh),如上图所示。较粗的线条表示初始权重会比较大,而细线则相反。初始化这些块,以便它们可以生成有趣的图像。

较大权重的初始化

通常在神经网络训练中,一个常用的经验是选择一组小的权重,与节点数量的平方根成反比,以避免过度拟合数据。开始的时候,权重被初始化为趋近于零,优化器将用正则项来惩罚大权重。我认为对于训练分类或回归类型问题的网络,这是一个明智的方法。

图像生成了8层64个节点。权重随机初始化如下:

但是,对于图像的生成,并不是越小越好。在上图中我们可以看到,即使在标准差为0.30的情况下,这可能远大于典型的神经网络训练所使用的初始权重,所得到的图像看起来并不太有趣。用一组大的随机权重生成的图像比小的权重看起来更有趣,而且我发现如果权重开始的时候接近零,它们只会大到足以解决手头的任务,但不会超过这个。我决定初始化每个子块内relu层的权重,使其比通常的要大得多(即标准差为1.0),这样这些块将分别产生更多有趣的子图像。然而,残差网络每个块最后的tanh层,权重将被初始化为非常接近零。因为tanh(0)是0,所以残差网络的每一块的信息都会像恒等函数一样通过。优化器将增加每个子块tanh层的权重,逐渐地让它能够访问24个随机初始化块中的每一个有趣的随机属性。

如果我想生成有趣的图像,结果是非常重要的。通过阅读很早之前的神经网络的相关研究,例如回波状态网络,储层计算和evolino LSTM训练方法,我想到了这个思想。该理论认为,自那时以来,大型神经网络难以训练,我们可以做的是定义一个非常大的神经网络(可以是前向反馈,亦或甚至是rnn/lstm),并且具有完全随机的权重(或者从神经进化中产生的权重)。事实证明,具有完全随机权重的神经网络仍然可以具有有趣而强大的计算能力。一个薄的网络层被附加到神经网络的激活部分以完成一些任务(例如预测一个复杂的信号),并且只有这个最后的薄层被反向传播训练。这种随机加训练层的混合对于许多任务来说都相当管用。

通过我们的图像的生成,可以训练每个tanh层(初始权重非常小)以允许来自有着大权重的relu层的信息通过,从而允许初始权重设置中的一些随机属性出现在最终的图像中。

结果

以下是由先前使用VAE中重构损失的模型生成的数字:

这里是在带有残差生成网络的新的GAN模型中经过6个训练阶段后的数字。如果您单击单个图像,与以前的模型相比会发现在细节上有明显的差异。

我也使用每层只有4个节点的生成网络进行了实验。当它试图生成全部10个数字时,我们可以看到一些限制和挣扎:

我还训练了比6个阶段更长的模型,并且我发现在24个训练阶段之后,网络在生成更好的MNIST数字方面做得更好,但是这样做是以图像看起来有趣的程度为代价来提高的分辨率。也许一些大的初始权重随着时间的推移而降低,以满足模型的第一个目标,而牺牲第二个的目标(产生一些看起来更有趣的东西) - 我想这是一个不容易量化的东西。

先前的模型: 视频地址

当前模型 - 6个阶段: 视频地址

当前模型 - 24个阶段: 视频地址

你最喜欢哪一个?

本文的版权归 t9UhoI 所有,如需转载请联系作者。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

如何在 Scratch 中用 Python 构建神经网络

动机:为了更加深入的理解深度学习,我们将使用 python 语言从头搭建一个神经网络,而不是使用像 Tensorflow 那样的封装好的框架。我认为理解神经网络...

1431
来自专栏Bingo的深度学习杂货店

《统计学习方法》读书笔记

【第1章】 统计学习方法概论 【第2章】 感知机 【第3章】 k 近邻法 【第4章】 朴素贝叶斯法 【第5章】 决策树 【第6章】 逻辑斯谛回归与最大...

4551
来自专栏量子位

深度学习入门者必看:25个你一定要知道的概念

王瀚森 编译自 Analytics Vidhya 量子位 出品 | 公众号 QbitAI 人工智能,深度学习,机器学习……不管你在从事什么工作,都需要了解这些概...

4398
来自专栏SIGAI学习与实践平台

基于内容的图像检索技术综述-CNN方法

传统方法在图像检索技术上一直表现平平。比如传统方法常用的SIFT特征,它对一定程度内的缩放、平移、旋转、视角改变、亮度调整等畸变,都具有不变性,是当时最重要的图...

2365
来自专栏计算机视觉战队

每日一学——线性分类笔记(下)

Softmax分类器 SVM是最常用的两个分类器之一,而另一个就是Softmax分类器,它的损失函数与SVM的损失函数不同。对于学习过二元逻辑回归分类器的读者来...

4227
来自专栏机器之心

学界 | 神经网络碰上高斯过程,DeepMind连发两篇论文开启深度学习新方向

函数近似是机器学习众多问题的核心,而过去深度神经网络凭借其「万能近似」的属性在函数近似方面无与伦比。在高级层面,神经网络可以构成黑箱函数近似器,它会学习如何根据...

1492
来自专栏小樱的经验随笔

回归与梯度下降法及实现原理

回归与梯度下降 回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归,回...

3926
来自专栏AI星球

逻辑回归(LR)个人学习总结篇

逻辑回归(LR,Logistic Regression)是传统机器学习中的一种分类模型,由于LR算法具有简单、高效、易于并行且在线学习(动态扩展)的特点,在工业...

8804
来自专栏TensorFlow从0到N

TensorFlow从0到1 - 10 - NN基本功:反向传播的推导

上一篇 9 “驱魔”之反向传播大法引出了反向传播算法——神经网络的引擎,并在最后窥探了它的全貌。本篇将详细的讨论反向传播各方面的细节。尽管它被TensorFl...

4066
来自专栏机器学习入门

PRML系列:1.3 Model Selection

PRML系列:1.3 Model Selection 模型选择 模型选择一般采用交叉验证,本节提到了S-fold cross-validation,原理如下,把...

2138

扫码关注云+社区

领取腾讯云代金券