美文网首页
李毅宏 【GAN 课程笔记 1】

李毅宏 【GAN 课程笔记 1】

作者: winddy_akoky | 来源:发表于2019-06-05 11:10 被阅读0次

    本系列是自己看完李毅宏老师的GAN系列教程后整理的笔记,有错误的地方请指正。

    生成(Generation)

    什么是生成?就是模型通过学习一些数据,然后生成类似的数据。简单地说,喂给模型哪种类型的数据,然后让模型产生这种类型的数据。

    GAN的原理

    [... ...]

    为什么generator不能自己学习?

    为什么generator要听从discriminator的指导,自己不能自主学习生成数据呢?为了弄清这个问题,首先先了解一下generator是怎么回事。

    实际上,G的学习可以简单的用如下表示:

    1. 输入:一个向量
    2. 输出:图片(当然也可以是结构化是数据,这里以图片为例子)


      image.png

    只要给定相应的数据,上面这个模型当然可以进行训练。但是正常情况下我们只有一些图片数据,如下图所示:


    image.png

    因此,现在需要对每一张图片赋值一个向量,以达到监督学习的目的。假设对每一张图片赋予的向量如下:


    image.png

    如果我们能获得这样的数据集,显然generator就能自己做训练了。
    但是,目前的问题是如何来产生每一个图片所对应的向量呢?

    • 随机生成。(×)
      随机生成的向量之间没有联系,然而数据集中的图片正常情况下是有一定联系的。比如下面两张图片。我们希望向量在某种程度上表示这图片的特征,譬如向量中第一个维度表示图片是哪些数子,第二个维度表示图片中的数字是向右倾斜还是向左倾斜。显然这个关系是无法用随机生成的。


      image.png
    • 学习出向量与图片之间的关系。
      现在想知道一张图片对应的向量该如何表示,即实际上我们想找到这么一个函数:f: image \rightarrow vector

      image.png

    上图所示的结构恰好能帮我们来寻找图片和对应的向量之间的关系。中间部分把它叫做Encoder,即表示把一个结构化数据经过编码器后,得到一个低维的、能表示原来数据的向量。

    但是要如何训练呢?每一张图片对应的code还是不知道。这就要引出一个经典的模型:Auto-encoder

    image.png

    实际上,上图结构中后面三个部分就是一个Generator,上图模型训练结束后,就可以把后面三个部分抽出来。然后就可以根据任意一个向量,输出到Decoder里面去,得到一张图片。

    然而,这么做还是一些问题存在。

    image.png

    假如向量a输出一个向左倾斜的数子1,向量b输出一个向右倾斜的数字1,那么0.5a+0.5b是不是应该输出一个接近垂直的数字1?显然答案并不是。因为Decoder中的神经网络是一个非线性函数,输入的线性加成并不能导致结果的线性加成。

    于是,便有人提出了一个改进:Variational Auto-encoder (VAE)。 VAE的想法是在训练模型时,增加一点噪声干扰,但仍希望模型能产生出正确的图片。正是在训练时加入了噪声,会使得训练出来的模型更具稳定性。

    那么,讲到这里,是不是就可以得出结论:Generator可以自己学习,模型就是VAE。没错,Generator是可以自己学习,但是现存的VAE模型也有比较严重的缺点。

    image.png

    左边是gt,右边是模型输出结果,其中,右上角的图片的误差显然比右下角的图片的误差要高,然而从结果上看,右上角的图片我们是可以接受的,而右下角的图片是不能接受的。因此,实际上VAE方法只能学习单个像素,它能指导某一个像素是不是要高亮,但不关心该像素周围的其他像素。然而实际上我们最终想得到的数据是一个结构化的数据,输出的数据里的每一个组件跟其他组件是有联系的。这也就是用GAN不用单独generator的原因了。

    相关文章

      网友评论

          本文标题:李毅宏 【GAN 课程笔记 1】

          本文链接:https://www.haomeiwen.com/subject/ppkatctx.html