DCGAN学习笔记

DCGAN学习笔记

Chandery Lv1

前言

image-20240913194016060

学习生成方向一定绕不开的一定是在这个领域的开山之作GAN,于是跟着b站李沐老师一起读了这篇论文,醍醐灌顶。为了加深对其中数学原理的理解和加深记忆,特此记录。

这里挂上论文原文和李沐老师的视频链接

论文链接 视频链接

一个关于GAN起名的有趣的背景故事

当年一作Ian在选择名字的时候,有若干个名字可以选,GAN是其中一个,有一个人告诉他说GAN在中文里面叫做干,和英文里F开头的那个词有点像,但是意义上丰富多了,然后Ian说“这个好!就它了”,因此就有了GAN这个名字。

当然这个故事也是道听途说,大家不必当真。不过GAN这个名字也很形象的描述了这个网络的特点,让我们中国人更容易理解其特点,算是一个很有趣的巧合。

接下来先用通俗的语言解释GAN网络在做的事,稍后进行理论的阐述和数学原理,然后再对DCGAN进行学习记录,和代码复现。

有监督学习和无监督学习

训练模型有两种常用的模式:有监督学习和无监督学习

有监督学习就是我们用与训练模型的数据是打好标签的。

例如分类任务中,猫图片对应的标签是”猫”,狗图片对应的标签是“狗”,然后在训练的过程中让数据通过模型后的到的预测结果与事先打好的标签做比较,反馈给模型。

Supervised Learning: Algorithms, Examples, and How It Works - DatabaseTown

这个过程相当于人工监督模型的学习。

无监督学习的数据是不需要打标签的。

无监督学习的时候没有明确的目标,也因此难以量化其效果。

What is Unsupervised Learning? - Artificial Intelligence

这里举一个常见的例子:

“聚类”算法

我们把数据扔给模型,模型会自动根据数据的分布把数据分为几个类别,收敛到一定程度之后会呈现几个类别,这时候作为人类并不知道这几个类别具体代表了什么,然后再去研究这些类别的特征。

最典型的聚类算法是K均值聚类算法。

GAN属于无监督学习,因为我们在训练模型的时候并不需要给数据打标签,我们也无法打标签,因为是生成,生成的效果是很难量化表示的,目标是很难明确的。

GAN在做什么?

GAN的全称叫做生成对抗网络(Generative Adversarial Nets)。生成很好理解,这个网络的目的是实现生成;对抗,也是这个网络的精髓所在,也是为什么说“干”很能体现其精髓。

这里对其原理进行一个通俗的阐述:

首先我们需要提供的是随机噪音z和样例图片集Real images

为了达到生成的目的,我们需要一个生成器(Generator),这个模块负责完成生成。给定生成器一个随机噪声z,生成器会根据它生成一个分布,我们称其为Fake images

为了让这个生成器更加优秀,我们需要一个判别器(Discriminator),这个模块相当于分类任务中的分类器,是一个二分类的分类器。这个分类器的任务是区分开Real images和Fake images

image-20240913220910178

所以训练过程可以看作生成器和判别器之间的对抗

  • 判别器的目的是尽可能的区分生成器生成的fake image和给定的real image之间的区别。
  • 生成器的目的是尽可能的混淆判别器,让它无法区分自己生成的图片和真实图片

就好比生成器是造假钞的团伙,判别器是查假钞的警察。警察的目的是尽可能地区分假钞和真钞;假钞团伙的目的是尽可能地造出更接近真钞的假钞混淆警察。

训练的过程就是两个模型螺旋上升的过程。

初始,判别器判别的能力很差,生成器生成的能力很差。

首先我们用生成器生成一张图片,然后对判别器进行若干轮的训练,些微提升它的判别能力

然后对生成器进行训练,逐渐让判别器分类的结果趋近于0.5(即无法区分)

然后循环往复,若干轮以后生成器生成的图片就会逼真。

对抗网络的数学表达

我们的目的是根据数据学习一生成器生成结果的分布,我们需要一个前置的噪声,然后定义一个映射空间为,其中这个G就是我们的生成器,可以理解为一个参数为的多层感知机(mlp)。然后定义一个输出为一个标量的mlp——,其中表示来自真实数据而不是分布的概率。

  • 我们训练的目的是最大限度提高G中的训练样本和真实样本被区分出来的概率。也就是希望是真实数据的时候越接近1;是G给出的输出的时候,越接近0。

  • 训练G的目的是让尽可能小,也就是希望尽可能接近1,也就是G生成的数据尽可能使判别器混淆。

因此可以定义价值函数函数

这个对抗网络的目的就是

image-20240918233554335

通过上述解释,这个式子是较好理解的,其中前项表示服从真实数据分布的时候尽可能接近1。后项表示,对于固定的G,D尽可能让接近0;而对于固定的D,G则让尽可能接近1。

DCGAN

DCGAN是继GAN之后比较好的改进,其主要的改进主要是再网络结构上,到目前为止,DCGAN的网络结构还是被广泛的使用,DCGAN极大地提升了GAN训练的稳定性以及生成结果质量。

它首先由Radford等人在论文《UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS》中提出

论文链接

几个重要的概念

在理解DCGAN之前需要理解几个重要的概念

上采样(subsampled)

下采样实际上就是缩小图像,主要目的是为了使得图像符合显示区域的大小,生成对应图像的缩略图。比如说在CNN中得池化层或卷积层就是下采样。不过卷积过程导致的图像变小是为了提取特征,而池化下采样是为了降低特征的维度。

下采样(upsampling)

有下采样也就必然有上采样,上采样实际上就是放大图像,指的是任何可以让图像变成更高分辨率的技术,这个时候我们也就能理解为什么在GG网络中能够由噪声生成一张图片了。

它有反卷积(Deconvolution)、上池化(UnPooling)方法。这里我们只介绍反卷积,因为这是是我们需要用到的。

反卷积(Deconvolusion)

反卷积(Deconvolution)也称为分数步长的卷积和转置卷积(transposed convolution)。在下图中,左边的为卷积,右边的为反卷积。convolution过程是将4×4的图像映射为2×2的图像,而反卷积过程则是将2×2的图像映射为4×4的图像,两者的kernel size均为3。不过显而易见,反卷积只能恢复图片的尺寸大小,而不能准确的恢复图片的像素值。

img

反卷积和卷积一样,搭配不同的步长、填充,会有不同的效果

img

批量归一化(Batch Normalization)

  • Title: DCGAN学习笔记
  • Author: Chandery
  • Created at : 2024-09-13 19:31:28
  • Updated at : 2024-09-18 23:36:10
  • Link: https://chandery.chat/2024/09/13/DCGAN学习笔记/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments