Brief 概述

上一个章节提到的模型训练方法是输入一个向量值,经由神经网络的运算与传递后,产生一个数据类型的结果,如上节举例则是二次元人物图像,而第二节课提到的情况生成器则是以文字转图片的模式展开。换言之,这个举例是一个典型的监督学习方法。步骤如下:

  1. 设定好一个神经网络,输入为文字输出为图片
  2. 准备好一个数据库,充满着文字对应图片的结果
  3. 训练这个神经网络,让输出的图片越接近数据库的图片越好

但是随着训练的时间拉长,神经网络学习到一件事情: 一个标签名称其背后的图片意义可以是多种多样的形态,横看成领侧成峰的感觉一传达给了神经网络后,下一次出现的照片就会是所有角度的总和,急于表现自己所有的理解于一时的结局就是该结果什么都不是,模糊的一次呈现了所有图片的特征。

 

Conditional Generation 条件生成器

遇到了会让生成的图片模糊的问题后,我们需要使用生成对抗网络的方法来解决问题,原先只使用一个简单的向量作为输入是不够的,需要另一个条件式,把将要对应图片的文字一同考虑进去,如下图:
生成对抗网络 GAN 02:条件生成 Conditional Generation

而修正不仅限于生成器本身,分辨器也要一起被调整,因为如果单纯评判生成的图片结果是否与数据库的图片一样真实,那么机器直接让图片产生出非常清晰与锐利就可以得到很高的分数,甚至无需考虑是否产生的内容与关键的文字有关联。为此这个分辨器需要辛苦一点,同时考虑生成器的文字输入部分和图像输出部分,然后才给出一个评分,如下图:
生成对抗网络 GAN 02:条件生成 Conditional Generation
唯有文字和图片正确的被匹配在一起的时候,才会产生一个高分的输出,如果文不对题,或者文对上了一个很丑的图片,那么输出的分数都应该要非常低。

The Mechanism of The Algorithm 演算法的机制

上面提及到的内容如果落实到数学公式,乃至代码的话,则步骤如下:

  1. 每一笔示例都是一对元素,包含了一串正确的文字与图片
  2. 穷举 m 比随机分布的数值作为生成器的另一个输入单元
  3. 利用上面两个条件,生成出 m 比数据
  4. 用这些数据作为新的输入放到分辨器里面寻找最大值
  5. 固定找到的分辨器的最大值后,从数据库中穷举 m 比条件式
  6. 利用这些条件式和固定好的分辨器的参数,找到最终生成器和分辨器组成的大神经网络输出为最大值
  7. 做完步骤二至六后算是迭代完一轮,不断迭代直到产生出优异结果

 

Another Mechanism 另一种架构

但是另外一中演算法机制也同样值得我们参考,其流程图如下:
生成对抗网络 GAN 02:条件生成 Conditional Generation
由于我们分别有下面几种条件对应到不同评分标准:

  • 文字符合美丽的图片,则高分
  • 文字符合不美离得图片,则低分
  • 文字不符合美丽的图片,则低分
  • 文字不符合不美丽的图片,则低分

在这个机制之前,我们都是一股脑儿的把数值放入神经网络中,让它自己学习什么情况是什么原因,然而这个新的方法,可以在更加精巧的设计中回传情况,到底是图画得不好还是文不对题的问题。其机制流程如下:

  1. 第一个神经网络接收了一个向量后,输出了一个判断的结果,初步筛选是否足够真实
  2. 并把判断结果连同条件式一起传入第二个神经网络中,二度筛选结果是否足够完美匹配

这样的方法下,可以让电脑更清楚的判断出其自身问题为何,更有效率的去修改问题,朝向好的方向走。

 

Higher Level: Stack GAN

这是一个挑脱初阶生成对抗网络的方法,生成图像的方式并不是像上面介绍的方法一般一步到位,而是先产生小张的图,之后再产生大张的图,这样就可以解决像素大小带来的硬件计算限制,如下图:
生成对抗网络 GAN 02:条件生成 Conditional Generation

概念上的逻辑步骤如下陈列:

  1. 上半部分先输入一段文字进来,搭配上随机的向量值后,输出一个比较小的图片结果
  2. 使用这个缩小版的图片重新作为输入,放到上半部的分辨器中得出一个评分
  3. 如果该图片输入合适,则就继续以该图片搭配上原来的那段文字重新作为一个输入,放到二阶段的生成器中,产生一个更大的图像
  4. 最后再以该图像作为新的输入,放到分辨器中看最后的结果是否同样的令人满意

 

Image to Image and More

同样的道理可以被应用在:输入一张图片产生一张图片中,如果不用生成对抗网络的话,整个输出的结果很容易就变成一个模糊的样子,如果加上了生成器与分辨器的机制之后,其结果就会好很多,但是有些时候会自动被添加一些神经网络异想天开的装饰,如下图:
生成对抗网络 GAN 02:条件生成 Conditional Generation
解决方式就是在限制条件的代码部分,让输出的图像跟数据库内的目标图片越相似越好,那么就会最终产生一个符合我们预期的图像数据。

Patch GAN

下面附上相关技术的 [论文链接],其中使用的分辨器机制也是经过改良的方法,原本一次输入一整张图片到神经网络的方法现在被分割成多个小的部分,一方面提高计算效率,另一方面预防整个神经网络过拟合造成的功亏一篑。从多个小块图片分辨好坏的过程,来确定整张图片的良率。

而小块区域的图片需要多小,它的结果才是比较好的,则需要自行尝试。

 

Other Applications

  • Speech Enhancement 声音信号增强
  • Video Generation

 

Speech Enhancement

生成对抗网络还可以使用在剔除声音杂讯的问题上,如下面的图片,把声音信号与杂讯用图像化的方式表现:
生成对抗网络 GAN 02:条件生成 Conditional Generation
训练神经网络解决此问题的方法则是找来一堆的声音信号,把这些声音信号套上随机的杂讯作为输入,目标的输出则是生成一个没有杂讯的声音讯号,使其与标准的数据库差距越小越好,最后就可以让神经网络独立运作去解一个充满杂讯的随机数据。

但是过程中还是需要输入一串加上杂讯的声音信号,和生成器输出的信号到一个分辨器里面,然后给与一个评分作为输出用来评判生成器的好坏。

 

Video Generation

同理上面的声音案例,此技术也可以用在视频预测的应用中,我们可以让生成器看一段视频并预测接下来发生的事情,而用来评判生成器预测结果好坏的分辨器则以生成器的输出结果与前面的视频片段作为自己的输入,经过神经网络的计算得出一个评判分数,促使生成器产生出来的预测结果越来越“合理”。