李宏毅《GAN Lecture》学习笔记1 - GAN

GAN

这一系列的课程学习于李宏毅老师的视频课程,相关的课程介绍,可以参考官网中关于GAN的部分。

本节的课程是介绍GAN的一些入门知识,相关的pdf和video。

GAN的训练过程

训练D的过程:

  • 固定Generator,并使用G随机生成N个样本,标注为0;从真实样本集合中,随机抽样M个样本,标注为1;

  • 训练Discriminator,用于分类上述的数据集。
    李宏毅《GAN Lecture》学习笔记1 - GAN_第1张图片
    训练G的过程:

  • 固定上述训练好的Discriminator,用作分类器;

  • 不断更新Generator,使得生成的样本可以让D识别为真实样本;
    李宏毅《GAN Lecture》学习笔记1 - GAN_第2张图片
    将G与D组成一个大的网络,同时,固定住D的参数,使得输出的scale越大越好。
    这样,反复迭代地训练Discriminator和Generator就可以完成GAN的训练了。

算法细节

李宏毅《GAN Lecture》学习笔记1 - GAN_第3张图片
其中,Learning D和Learning G时,采样的noise sample不必相同。

GAN的原理

下面从概念上,讲一下GAN的原理。GAN可以被视为Structured Learning中的一种,下面是Structured Learning的定义。

Structured Learning

Machine Learning是发现一个函数 f f f,可以根据输入 X X X,得到对应 Y Y Y。回归问题和分类问题,解释如此。如果输出的不是简单的类别或数字,而是一个sequence或matrix等,这种问题就是Structured Learning
李宏毅《GAN Lecture》学习笔记1 - GAN_第4张图片
下面是输出sequence的例子:
李宏毅《GAN Lecture》学习笔记1 - GAN_第5张图片
下面是输出matrix的例子:
李宏毅《GAN Lecture》学习笔记1 - GAN_第6张图片
如果将output视为一个class时,Structured Learning可以视为一类极端的One-shot/Zero-shot Learning因为输出空间非常巨大,很多时候输出是从未见过的类别
李宏毅《GAN Lecture》学习笔记1 - GAN_第7张图片
Structured Learning需要有大局观,需要将生成的各个components有序地组合起来,单看某一个component是没有意义的。
李宏毅《GAN Lecture》学习笔记1 - GAN_第8张图片
传统的Structured Learning有两类方法:bottom-up和top-down,可以将bottom-up视为generator,而将top-down视为discriminator,这样,GAN就可以理解为这两种方法的结合体。
李宏毅《GAN Lecture》学习笔记1 - GAN_第9张图片

遗留的两个问题

Generator能不能自己学?

如果有的数据集,可以使用传统的supervised learning直接训练Generator,这个过程与传统的classifier正好相反。
李宏毅《GAN Lecture》学习笔记1 - GAN_第10张图片
这里的重点是如何获得这些的数据集,之前介绍过的Auto-Encoder就可以完成这样的任务。
李宏毅《GAN Lecture》学习笔记1 - GAN_第11张图片
下面回忆一下Auto-encoder的过程:
李宏毅《GAN Lecture》学习笔记1 - GAN_第12张图片
其中,Decoder的部分其实就是Generator的作用。
李宏毅《GAN Lecture》学习笔记1 - GAN_第13张图片
可以使用Auto-encoder快速地训练出一个2D的encoder,用于生成手写体的数字,如下:
李宏毅《GAN Lecture》学习笔记1 - GAN_第14张图片
也可以看到不同数字在2D图中的位置,如下:
李宏毅《GAN Lecture》学习笔记1 - GAN_第15张图片
但是,Auto-encoder可能会遇到下面这样的问题:
输入向量 a a a和向量 b b b产生的图像都是1,但是, 0.5 × a 0.5\times a 0.5×a + 0.5 × b 0.5 \times b 0.5×b可能就无法生成图像1,很有可能生成的是噪声图像。
李宏毅《GAN Lecture》学习笔记1 - GAN_第16张图片
那么,该如何解决这个问题呢?VAE就是可以解决这类问题的方法。
李宏毅《GAN Lecture》学习笔记1 - GAN_第17张图片
encoder在生成latent code的同时,也生成了一组varience,然后,从正态分布中随机采样一组随机向量和varience相乘,再加上latent code,作为decoder的输入。

那么,使用Auto-encoder的方式训练Generator,会有什么问题呢?
因为Generator并不能完全复制目标图片,在生成图片的过程中,一定会有差异,这时,就会带来一些问题。
李宏毅《GAN Lecture》学习笔记1 - GAN_第18张图片
以下面的例子为例,如果以像素差异作为评判标准,上面两幅图只有一个像素的差异,应该是优于下面两幅6个像素的差异的。但是,从手写体文字的角度来看,则不是这样的。因为上面两幅差异的一个像素,根本就不像手写体发生的错误,反倒是下面两幅图更像是手写体数字。
李宏毅《GAN Lecture》学习笔记1 - GAN_第19张图片
下面的L层是最后的输出层,输出的就是像素值。
从生成合理的手写数字的角度来看,在同一个区域的像素应该是有关联的,生成的像素也是有关联的。但是,使用Auto-encoder的方式生成图像,却难以做到这种关联性。
如果使用同一深度的神经网络,一个是使用Auto-encoder,一个是使用GAN。使用的GAN的生成效果会明显优于Auto-encoder,如果想使用Auto-encoder生成类似的图像,需要更深的DNN。
李宏毅《GAN Lecture》学习笔记1 - GAN_第20张图片
下面这个例子是使用VAE训练一个Generator,用于生成2D样本点。绿色是目标样本点,蓝色是生成的样本点。这个例子说明VAE生成的G在生成样本时遇到的问题。
李宏毅《GAN Lecture》学习笔记1 - GAN_第21张图片

你可能感兴趣的:(GAN学习笔记,GAN,学习笔记)