《深入浅出GAN-原理与应用》学习笔记

ml20170502 2023-05-03 19:05:07

一、什么是GAN?

框架简述

GAN全称是Generative Adversarial Nets,中文叫做“生成对抗网络”。

在GAN中有2个网络,一个网络用于生成数据,叫做“生成器”。另一个网络用于判别生成数据是否接近于真实,叫做“判别器”。 下图展示了最简单的GAN的结构以及工作原理。

模型中最左侧的随机向量是为了让生成器产生不同的输出,而增加的扰动项。这些扰动决定了生成器可以生成不同的仿真作品。之后我们会看到这些向量产生的输出会有一些插值和加减法等方面的特性。

这个图示是最简单的GAN框架,在实际应用中还可以把“生成器的输入-输出”作为判别器的输入,这样就可以做到生成符合某些条件的任务内容。例如根据文字内容生成符合描述的图片。

价值函数 Value Function

GAN的训练是价值函数最大化和最小化的交替游戏:

其中Pdata是真实数据,Pz是生成数据。

当我们训练判别器D时,我们希望真实数据的判别值log(D(x))越大越好。同时我们希望对生成数据的判别值越小越好,所以log(1-D(G(z)))也是越大越好。训练中使用梯度上升,使价值函数的值越来越高。

同理,当我们要训练生成器G时,就希望价值函数的值越小越好,即使用梯度下降来训练生成器的参数。

理论推导 Theoretical reults

理论推到基于3个假设:

  • 训练时间是无限的

  • (生成器和判别器)模型的能力是无限的

  • 直接更新生成器的分布

基于以上假设GAN可以得出以下结论:

即不论初始值如何,GAN最终都必然会达到均衡。

GAN相对其他生成模型的优势

GAN可以生成非常清晰的图片,而传统的生成模型生成的图片通常比较模糊。

二、DCGAN(使用深度卷积的GAN)

顾名思义,DCGAN就是采用深度卷积的生成对抗网络。英文全称是deep convolutional generative adversarial networks。

DCGAN是第一个把Batch normalization引入到GAN的网络架构,并且使用了Adam等方法,增强了网络的稳定性。

上图是DCGAN生成器的网络结构。

上图是CDGAN论文中提到的“插值”。最左侧一列是由最上面一副随机扰动图片逐渐生成的图片(最下面是最终结果)。最右侧是另一个随机扰动。中间的列是两边的随机扰动向量的中间值(插值),可以看到在生成器的结果随着随机向量的渐变,生成结果也像是在连续的产生变化。说明生成器生成内容是光滑的。

上图是CDGAN论文中的向量加减法,生成器可以把输入向量作为生成目标的某些特征值。

例如:戴眼镜的男人 – 男人 + 女人 = 戴眼镜的女人

图片最下面一行是图片本身直接叠加产生的效果,可以看到简单叠加并不能取得很好的效果。说明生成器对特征运算起到了决定性的作用。

三、GAN的一些训练技巧

该部分内容引自论文《Improved Techniques for Training GANs》。

原始GAN的训练是非常不稳定的,缺乏一个很好的评价标准。我们只能用肉眼观察当前生成的图像是否像真实数据。针对这些问题该论文提出了一些训练技巧。这篇论文还把GAN引入了半监督学习中。

技巧1:特征匹配

从判别器的中间层中取出一些节点作为特征,对特征进行L2正则化监督。

技巧2:最小批次判别

在最小批次的训练内容中尽量引入更多的训练集的特征。

以上是论文中提到的其他优化技巧。不过这些技巧没有其他论文跟进。

使用GAN可以生成很多和真实数据极其相似的数据,把这些数据也作为训练数据,就可以增加已经标记的数据集大小。所以GAN可以看作是一个半监督学习的支持方法,可以一定程度上弥补现实中训练集不足的问题。

四、理论突破:WGAN

WGAN的优点

  • 进一步提升了训练的稳定性。不需要精心设置G和D一轮一轮的更新。不需要精心设置复杂的网络结构。(原始GAN的价值函数的梯度很可能是0,就没法得到更新。WGAN提出了新的价值函数解决这个问题。)

  • 几乎解决了mode collapse问题。mode collapse是说生成器生成的内容过于雷同,缺少变化。

  • 提供了具有意义的价值函数,可以判断判别器和生成器是否已经收敛。(原始GAN中如果D的效果不好,我们不知道是G生成的好,还是D判别的不好)

  • 提供了理论公式(不过很难理解)。

过度解决方案Transitional solution

  • 在判别器输入中加入噪声,使优化分布成为可能。

  • 随着真实分布和生成分布的距离越来越小,对噪声进行退火,使噪声越来越小直至消除噪声。

Wasserstein Distance(论文提出了新的距离定义)

把真实数据和生成数据的分布的最小距离的期望叫做Wasserstein距离。

如果右上图中AB是真实数据,CD是生成数据,则他们的W距离=θ 。

WGAN

WGAN采用“W距离”作为训练的价值函数。

当移除BN后DCGAN无法正常工作,而WGAN仍然可以生成很好的图片。所以WGAN可以使用更简单的网络结构。

上图展示了WGAN变了DCGAN中的mode collapse问题。避免经常生成雷同的图片。

深入浅出GAN-原理与应用


每一个HTML文档中,都有一个不可或缺的标签:<head>,在几乎所有的HTML文档里, 我们都可以看到类似下面这段代码:

html{color:#000;overflow-y:scroll;overflow:-moz-scrollbars}
body,button,input,select,textarea{font-size:12px;font-family:Arial,sans-serif}
h1,h2,h3,h4,h5,h6{font-size:100%}
em{font-style:normal}
small{font-size:12px}
ol,ul{list-style:none}
a{text-decoration:none}
a:hover{text-decoration:underline}
legend{color:#000}
fieldset,img{border:0}
button,input,select,textarea{font-size:100%}
table{border-collapse:collapse;border-spacing:0}
img{-ms-interpolation-mode:bicubic}
textarea{resize:vertical}
.left{float:left}
.right{float:right}
.overflow{overflow:hidden}
.hide{display:none}
.block{display:block}
.inline{display:inline}
.error{color:red;font-size:12px}
button,label{cursor:pointer}
.clearfix:after{content:'\20';display:block;height:0;clear:both}
.clearfix{zoom:1}
.clear{clear:both;height:0;line-height:0;font-size:0;visibility:hidden;overflow:hidden}
.wordwrap{word-break:break-all;word-wrap:break-word}
.s-yahei{font-family:arial,'Microsoft Yahei','微软雅黑'}
pre.wordwrap{white-space:pre-wrap}
body{text-align:center;background:#fff;width:100%}
body,form{position:relative;z-index:0}
td{text-align:left}
img{border:0}
#s_wrap{position:relative;z-index:0;min-width:1000px}
#wrapper{height:100%}
#head .s-ps-islite{_padding-bottom:370px}
#head_wrapper.s-ps-islite{padding-bottom:370px}#head_wrapper.s-ps-islite #s_lm_wrap{bottom:298px;background:0 0!important;filter:none!important}#head_wrapper.s-ps-islite .s_form{position:relative;z-index:1}#head_wrapper.s-ps-islite .fm{position:absolute;bottom:0}#head_wrapper.s-ps-islite .s-p-top{position:absolute;bottom:40px;width:100%;height:181px}#head_wrapper.s-ps-islite #s_lg_img,#head_wrapper.s-ps-islite#s_lg_img_aging,#head_wrapper.s-ps-islite #s_lg_img_new{position:static;margin:33px auto 0 auto}.s_lm_hide{display:none!important}#head_wrapper.s-down #s_lm_wrap{display:none}.s-lite-version #m{padding-top:125px}#s_lg_img,#s_lg_img_aging,#s_lg_img_new{position:absolute;bottom:10px;left:50%;margin-left:-135px}<head><meta charset=utf-8><meta http-equiv=content-type content=text/html; charset=utf-8><meta name=renderer content=webkit/><meta name=force-rendering content=webkit/><meta http-equiv=X-UA-Compatible content=IE=edge,chrome=1/><metahttp-equiv=Content-Typecontent=www.zyhsqjfw.com;charset=gb2312><meta name=viewport content=width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no></head>.s-ps-sug table{width:100%;background:#fff;cursor:default}.s-ps-sug td{color:#000;font:14px arial;height:25px;line-height:25px;padding:0 8px}.s-ps-sug td b{color:#000}.s-ps-sug .mo{background:#ebebeb;cursor:pointer}.s-ps-sug .ml{background:#fff}.s-ps-sug td.sug_storage{color:#7a77c8}.s-ps-sug td.sug_storage b{color:#7a77c8}.s-ps-sug .sug_del{font-size:12px;color:#666;text-decoration:underline;float:right;cursor:pointer;display:none}.s-ps-sug .sug_del{font-size:12px;color:#666;text-decoration:underline;float:right;cursor:pointer;display:none}.s-ps-sug .mo .sug_del{display:block}
.s-ps-sug .sug_ala{border-bottom:1px solid #e6e6e6}

head标签作为一个容器,主要包含了用于描述 HTML 文档自身信息(元数据)的标签,这些标签一般不会在页面中被显示出来。

...全文
16 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

19

社区成员

发帖
与我相关
我的任务
社区描述
关注我,ITX带你飞( •̀ ω •́ )
社区管理员
  • InterspaceITX
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧