前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生成对抗网络(GAN)的应用与发展

生成对抗网络(GAN)的应用与发展

作者头像
灯塔大数据
发布2020-12-14 16:24:18
3.5K0
发布2020-12-14 16:24:18
举报
文章被收录于专栏:灯塔大数据灯塔大数据

前言

近年来,生成对抗网络(GAN)得到广泛的研究,已经在一些特定应用上与其它机器学习算法相结合,针对有监督学习、半监督学习、无监督学习任务都有许多新型算法涌现出来。同时,由于 GAN 无需显式建模任何数据分布就可生成Real-like的样本,因此已经广泛应用到了诸如计算机视觉、自然语言处理等领域中。

一、GAN与不同任务

1.1 GAN与有监督学习

机器学习中的监督式学习,是通过有标签数据集训练模型的一种机器学习方式,训练后的模型可以对未标签数据进行分类或回归分析。将有监督学习与GAN结合,目标在于期望根据网络输入的标签生成对应的输出。针对带标签数据的生成问题,一些研究者基于GAN的结构提出了条件式生成对抗网络的变体,其中典型的变体有 CGAN 和LAPGAN。

如图1所示,条件式生成对抗网络(CGAN),在原始GAN的判别器和生成器的输入部分x与z,都加上一个额外的辅助信息y,一般是类别标签c。即生成器同时输入随机噪声z和类别标签c,判别器则将生成样本、真实样本与类别标签作为输入,以此学习标签和图片之间的关联性。

1.2 GAN与半监督学习

对于许多实际场景中,有标注数据其实只占少数,而大量无标签数据更容易获取。因此,衍生出半监督学习,以同时利用少量标签数据与大量无标签数据进行协同训练,从而实现对未标签数据的分类问题。而对于生成对抗网络训练中的真实数据集,可以被看作有标签数据,而由生成器随机生成的数据则可以被看作是无标签数据,基于此思路衍生的变体中比较典型的有SGAN与ACGAN。

如图2所示,半监督式GAN(SGAN),相比于原始 GAN,主要区别在于判别器输出一个类别数+1 维度的信息。因此对于判别器,其损失包括两部分,一部分是判断样本真假的损失,另一部分是判断样本类别的损失。而生成器则只需要尽量生成逼真的样本即可。

提出SGAN的目标是希望能够做到同时训练生成器与半监督式分类器,最终得到一个更优的半监督式分类器,以及一个样本生成质量更高的生成模型。其训练完成后,判别器就可以作为一个分类模型去分类。但是,上述SGAN的结构中,训练判别器进行半监督学习过程中存在一个问题,其既要区分真假样本,也要学习预测分类,二者目标不一致,容易导致二者都达不到最优。一个直观的想法就是把预测标签和区分真假样本分开。

1.3 GAN与无监督学习

相对于有监督学习方法,无监督学习不使用任何标签信息。因此,无监督学习方法需要对隐空间进行分解得到有意义的特征表示,类似于自动编码器,生成对抗网络通过输入隐向量,来模拟真实数据空间的低维表征,然后来生成对应的高维数据。但是,此时生成的数据表征并非可解释型特征,对后续分类等任务帮助有限。于是,有研究者提出InfoGAN,对传统GAN结构进行了一系列修改,从而使得生成模型可以产生有意义且可解释的特征。

如图4所示,InfoGAN将输入噪声分解为隐变量 z 和条件变量 c,期望在两个维度上都生成可解释型特征。区别于传统GAN仅输入随机噪声z,InfoGAN的生成器同时输入z和c,以生成概率PG(x|c)得到G(z, c)分布的样本。为了约束c与生成样本之间的关系,在训练过程中需要对隐含编码c和生成分布G(z, c)求互信息I(c; G(z, c)),并通过最大化此互信息,以实现变量解耦。具体来说,互信息表示c里面关于G(z, c)的信息有多少,如果最大化互信息I(c; G(z, c)),即最大化生成样本与条件变量c的关联性。

二、GAN的应用

2.1 图像

目前GAN在图像处理和计算机视觉方面应用最为广泛,例如图像翻译、图像生成、图像超分辨率、目标检测、视频生成等领域的应用。

其中,图像翻译是指从一副(源域)图像到另一副(目标域)图像的转换,类似于机器翻译,从一种语言转换为另一种语言的过程,这个翻译过程中会保持源域图像内容不变,但是风格或者一些其他属性变成目标域。该任务根据有无成对训练数据分为成对图像翻译、无成对图像翻译两类。对于成对图像翻译,典型的变体就是pix2pix,其使用成对数据训练了一个条件GAN,损失包括原始GAN 的判别损失以及逐像素差损失。另外一种变体 PAN 则使用特征图上的逐像素差替代图片上的逐像素差作为损失,以生成人眼感知上更加接近源域的图像。

图像生成是GAN另一个最经典的应用,比如目前最为常见的人脸生成,旨在将视频或图片中的人脸进行互换。其中一种经典的变体faceswap-GAN,在训练阶段通过算法将人脸A数据进行扭曲,变得与人脸A不同,再通过自动编码器在重建的人脸上生成遮罩,最终通过遮罩信息与之前输入的信息还原人脸A数据。然后,在测试阶段,网络输入人脸B数据,视为训练集中扭曲过的训练集人脸,并采取同样的步骤将其还原为人脸A 的状态,实现换脸。

而在图像超分辨方面,一种经典变体SRGAN,通过结合传统GAN和感知损失生成细节丰富的图像。其中,感知损失重点关注中间特征层的误差,而不是输出结果的逐像素误差,从而避免了生成的高分辨图像缺乏纹理细节信息的问题。同时,正是得益于GAN 在图像超分辨中的应用,针对目标检测问题,就可以首先利用GAN生成目标的高分辨率图像,再进行检测,从而提高目标检测精度。

另外,对于视频生成任务,通常来说,视频由相对静止的背景和运动的前景组成,因此,VideoGAN使用一个两阶段的生成器,由3D CNN生成器生成运动前景,由2D CNN生成器生成静止的背景。而Pose GAN则使用VAE和GAN生成视频,首先VAE结合当前帧和前几帧的姿态特征预测下一帧的运动信息,然后用3D CNN基于运动信息生成后续视频帧。MoCoGAN则提出将隐空间按运动部分和内容部分进行分离,对于运动部分使用 RNN 建模。

2.2 序列

近几年,GAN也逐渐被应用于序列数据上,比如自然语言、音乐、语音、音频等序列数据。不过,相比于其在图像领域的应用,这方面的应用要少很多。主要原因有两个:1)优化GAN需要使用 BP 算法,而对于文本、语音这类离散数据,GAN没法直接映射到目标值,只能根据梯度一步步靠近;2)对于序列生成问题,比如文本生成任务,每生成一个单词就需要判断这个序列是否合理,可是GAN里面的判别器是没法做到的,除非GAN针对每一步都设置一个判别器,但这显然不合理。于是,针对上述问题,研究者引入强化学习中的策略梯度下降来解决序列生成问题。

比如音乐生成任务,一种经典变体RNN-GAN使用 LSTM 作为生成器和判别器,直接生成整个音频序列。然而,音乐需要生成的歌词和曲都是离散数据,正如上述问题,此时直接使用GAN会导致生成的数据缺乏局部一致性。相比之下,另一种变体SeqGAN把生成器的输出作为一个智能体的策略,而判别器的输出作为奖励,使用策略梯度下降来训练模型。

另外,对于语言和语音方面的数据,研究者提出一种VAW-GAN的结构,通过结合VAE和WGAN实现了一个语音转换系统。具体来说,其由编码器编码语音信号的内容,由解码器重建音色。但是由于VAE容易导致生成结果过于平滑,所以此处一般使用WGAN来生成更加清晰的语音信号。

结语

如今,虽然GAN已经衍生出许多的变体,商业应用场景变得非常广泛。但GAN本身仍然存在许多开放性研究问题需要继续深入探索,比如GAN的评估优化,由于其训练过程实质是一个无监督学习过程,导致有许多指标在训练过程中虽然高,但是生成效果却未必好,所以目前还很难找到一个比较客观且可量化的评估指标。再比如GAN的模型崩溃问题,尽管已经有很多相关研究,但是对于高维数据,这个问题依然还没完全解决。

[1]Hong Y, Hwang U, Yoo J, et al. How Generative Adversarial Networks and Their Variants Work[J]. ACM Computing Surveys (CSUR), 2019.

[2]Gui Jie, Sun Zhenan, Wen Yonggang, et al. A Review on Generative Adversarial Networks:Algorithms, Theory, and Applications[J]. 2020.

[3]万字综述之生成对抗网络, https://www.jiqizhixin.com/articles/2019-03-19-12, last accessed 2019/3/19.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 融智未来 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档