GAN生成式对抗网络

Posted Debroon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GAN生成式对抗网络相关的知识,希望对你有一定的参考价值。

GAN生成式对抗网络

 


GAN:深度学习新思路

一开始我们通过生成模型让计算机自动生成照片。

使用传统的神经网络方法,希望通过模拟人的大脑思考方式来进行图片的生成。

但是生成的图像质量始终不理想,如果继续对现在的模型进行优化,需要非常大量的训练数据集,而且最终的可行性也不得而知。
 


GAN 的结构

如果不是只用一个神经网络,而是同时使用两个神经网络,会不会有更好的效果呢?

生成对抗网络的两方 —— 生成器与判别器。

  • 生成器 G ( Z ) G(Z) G(Z):输入一个向量,噪点数据(prior),输出需要生成固定大小的像素图像(generated data)
  • 判别器 D ( x ) D(x) D(x):用来判别图片是真是假,输入图片(训练的数据或者生成的数据),输出为判别图片的标签

这个过程和鉴别古董类似。

生成器是一个古董赝品制作者,其成长过程是从一个零基础的“小白”慢慢成长为一个“仿制品艺术家”。

而鉴别器担任的则是一个古董鉴别专家的角色,它一开始也许仅仅是一个普通等级的“鉴别师”,在与赝品制作者的博弈中它逐渐成长为一个技术超群的鉴别专家。

生成器生成,鉴别器鉴别,让俩者相互比拼和较劲。

在经历了N次的互相博弈以后,两者在整个训练过程中都变得非常强,其中的仿造者几乎能制作出以假乱真的作品,而鉴别者也早已是“火眼金睛”的鉴别专家了。

最后一次博弈是这样的:赝品制作者已经完全摸透了鉴别师的心理,虽然他还是没有见过真的古董是什么样子,但是对古董应该具备什么样的特性已经十拿九稳,对于可能的鉴别过程也都了然于心。

对于如此以假乱真的赝品,虽然鉴别者拥有“火眼金睛”,但已然是无能为力了,TA可以做的只能是凭运气猜测是真是假,而无法用确定的理由进行判断。

现在我明白了,师傅之前说的话了 —— 以后,就没有古董专家了。

这就是生成对抗网络最终的目的,而我们所需要做的就是培养出这个能够以假乱真的生成器。

以假乱真的功能,让 GAN生成对抗网络在艺术创作、艺术设计、智能作曲、AI换脸各个领域作出了重大突破。

如,由法国艺术创作团队Obvious使用GAN算法生成的画作以43万美元的高价被拍走,价格甚至远超同场拍卖的毕加索作品。

如,在古典音乐方面,有一家叫作Aiva的公司通过深度学习技术吸收了海量的古典音乐作品。

在演奏时,把AI与作曲家各自作的曲子混在一起,事实是观众认为创作的曲子比真的巴赫更像巴赫。

目前大部分GAN应用领域的工作都集中在图像和视频领域,我偏向图像处理,如AI换脸,以及计算机安全,如对抗攻击。

对于对抗攻击的研究目前依然是一个开放的领域,虽然现在还没有一个完美的研究能够找到应对对抗攻击的方法,但是也没有理论能证明对抗攻击是无法防御的。
 


GAN 思想

GAN 思想:从训练库里获取很多训练样本,从而学习这些训练案例,因为这些真实样本的概率分布是固定的,就生成类似的概率分布。

GAN 训练过程步骤:

  • 黑色虚线:真实样本的概率分布
  • 绿色实线:生成样本的概率分布 G ( Z ) G(Z) G(Z)
  • 蓝色虚线:判别器判断的概率分布 D ( x ) D(x) D(x)
  • z 表示噪音,G 表示生成器,G(z) 表示把噪音变成图像,D(G(z)) 表示假图
  • z - x 表示生成器生成的概率分布映射

整个过程:

  • 建立好 GAN 结构:这时候生成器生成的分布和真实分布区别较大,并且判别器判别出样本的概率不稳定,形如左边第一幅图。
  • 训练判别器,能够辨别真假:在真实数据上训练 n epochs 判别器,产生假数据并训练判别器识别为假 ······ 通过多次训练判别器达到第二副图的样本状态,此时判别样本区分得非常显著。
  • 训练生成器,使得生成假样本接近真实样本的分布,达到欺骗效果:经过多次反复训练迭代后,训练生成器达到第三副图的状态,此时生成器分布相比之前,非常逼近真实样本的分布。 最终希望能够达到第四副图状态,生成样本分布拟合于真实样本分布,并且判别器分辨不出样本是生成的,还是真实的。

通过学习大量数据,从而具备能够产生同类型新数据的能力。

那么有哪些方法,可以实现这个功能呢?

  • 自动编码器
     

自动编码器

自动编码器,一开始的功能主要是数据去噪和数据压缩。

后来也用于实现生成模型的功能,一种使用神经网络学习数据值编码的无监督方式。

  • 使用编码器对某类型数据训练后,编码器、解码器分别具备了此类型的编/解码功能
  • 训练后,解码器作为生成模型,输入任意数据,解码器都可以生成对应的数据


数字 2 经过解码器后,输出了一个与原始数据非常接近的输出图像,虽然压缩有所损失,但轮廓是一致的。

实现自动编码器:

  • 搭建一个编码器
  • 搭建一个解码器
  • 设定一个损失函数

过程:

  • 输入数据给编码器,编码成一个 CODE,经过解码器,变成了一个新的 CODE
  • 俩个 CODE 进行损失衡量

 


GAN 的数学原理

图像生成的方式

GAN 可以无中生有,生成任意图片、视频。

比如下图的人物都是 GAN 生成的:

而生成这些人物,在 GAN 中仅靠一个数学公式:

······

图像生成的原理,是通过某种模型来拟合真实图像的分布,当模型拟合了真实图像在高维空间中的分布后就可以通过这个模型来生成图像了。

问题是,如何找到可以拟合高维空间中图像分布的模型?

在 GAN 之前,我们使用的是最大似然估计。

  • 最大似然估计:利用已知的信息,反向推导出最有可能产生这些信息的模型参数的方法。
  • 假设我们已经有一类图像,这些图像都由一个模型产生,我们可以通过已知数据去计算模型参数,反向推导最有可能的模型真实参数

使用最大似然估计方法来生成图像也可以,但强制性约束比较多,比如只能接收正态分布,不能计算其他复杂的分布。

而我们希望可以生成任意分布,这就引入了 GAN。

通过最大似然估计不能计算复杂分布,而神经网络可以拟合任意分布,所以把用神经网络来代替最大似然估计,这个神经网络在 GAN 中叫做 “生成器”。

对于生成器来说,TA 的工作是接收一个噪音的输入,噪音输入可以是任意分布,经过生成器的神经网络编号,输出的数据可以组成某种复杂的分布,直到最小化这个分布与真实数据分布的距离最小。

  • 生成器的目标函数: m i n   G = ( P z , P d a t a ) min~G=(P_z,P_data) min G=(PzPdata)

P.S. P z P_z Pz 是生成器输出的分布, P d a t a P_data Pdata 是真实数据分布。

让 生成器输出的分布 和 真实数据分布 距离最小,可是如何计算分布的距离呢?

这得看 GAN 的判别器怎么算。

  • 判别器的目标函数: m a x   D = ( D ( x ) , D ( G ( z ) ) ) max~D=(D(x),D(G(z))) max D=(D(x)D(G(z)))

  • 判别器的工作是,分辨哪些数据是真实数据,哪些数据是生成数据,给真实数据打高分,给生成数据打低分。

  • 判别器计算距离公式:

这个公式很美,不过很长,我们先了解框架思路,再拆分到每个字符的详细理解。

  • 对于从真实分布 P d a t a P_data Pdata 中抽样的样本 x x x 打高分,即最大化 l o g   D ( x ) log~D(x) log D(x)

  • 对于从生成分布 P z P_z Pz 中抽样的样本 z z z 打低分,即最大化 l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z)))

接下来,我们来拆分,拆分是理解复杂公式的第一步。

 


价值函数 V ( D ,   G ) V(D,~G) V(D, G)

V ( D ,   G ) V(D,~G) V(D, G) 是价值函数 Value Function 的简写。

价值函数,是强化学习里面的内容。

有监督学习、无监督学习、强化学习的区别:

  • 有监督的学习就如同凡事你都学习你的上级之前的做事方法,但是水平也不会高出他们太多。

  • 无监督的学习就是没人管,自己做,到年底上级根据你的表现给你奖金,奖金就是你做事的目标函数。

  • 强化学习就是没人管你怎么做,如果做得好,上级及时给你反馈;如果做坏了,对你进行批评。

强化学习不是通过数据采集,事先没有各种标注好的数据,而是通过行动后的反馈来调整。

比如小的时候喜欢摸灶台,我并不知道灶台上的东西是什么,但摸到的反馈会改变了我的动作:

  • 如果我摸到特别烫的,烫到我了,反馈就是 -100,我再也不敢摸了
  • 如果我摸到特别好吃的,反馈就是 +100,我会继续摸下去
  • 当然,我也可以什么都不做,此时反馈就是 0

目标是让,价值函数最大!

那么,什么是价值函数最大?

  • 学会选择 即时奖励 最大的动作,比如上例中 +100 > 0 > -100

学习过程:

  • 通过观测环境得到自己所处的状态(state),接下来根据 策略(policay)决策,做出一个动作

  • 这个动作会使得环境中转移到一个新状态(state),并且在转移时会获得一个 即时奖励(reward)

  • 又可以在新状态(state)继续选择,这样累积很多即时奖励(reward)

  • 目标是,在到达终点时累积的即时奖励 (reward)最大

这个过程具体就是,一个数学公式:


翻译一下:

  • 把所有即时奖励 (reward)累积起来: r 1 + r 2 + ⋅ ⋅ ⋅ + r t r_1+r_2+···+r_t r1+r2++rt

  • 但并不是每个即时奖励 (reward)都很重要,越是开始,因为随机性大,就越没那么重要: 0.1 r 1 + 0.2 r 2 + ⋅ ⋅ ⋅ + 0.7 r t 0.1r_1+0.2r_2+···+0.7r_t 0.1r1+0.2r2++0.7rt

 


m i n   m a x   V ( D ,   G ) min~max~V(D,~G) min max V(D, G)

价值函数的最终状态是,生成器G 最小,判别器D 最大。

我们希望预测正确,输入一张图给判别器D,是真图就输出1,是假图就输出0,输出范围:0-1。

  • 真图:D(x) = 1
  • 假图:D(G(z)) = 0

判别器要鉴别得特别精确,哪怕生成器造了几乎完全相同的图片,判别器也要检查出极其微小的区别。
 


l o g D ( x )   a n d   l o g ( 1 − D ( G ( z ) ) ) logD(x)~and~log(1-D(G(z))) logD(x) and log(1D(G(z)))


既然 D ( x ) = 1 、 D ( G ( z ) ) = 0 D(x) = 1、D(G(z)) = 0 D(x)=1D(G(z))=0,那么 公 式   l o g D ( x ) 、 l o g ( 1 − D ( G ( z ) ) ) 公式 ~logD(x)、log(1-D(G(z)))  logD(x)log(1D(G(z))) 也知道了!

  • 公式 4: D ( x ) = 1 , l o g D ( x ) = l o g   1 = 0 D(x) =1,logD(x) = log~1=0 D(x)=1logD(x)=log 1=0
  • 公式 5: D ( G ( z ) ) = 0 , l o g ( 1 − D ( G ( z ) ) ) = l o g   1 = 0 D(G(z))=0,log(1-D(G(z))) = log~1=0 D(G(z))=0log(1D(G(z)))=log 1=0

对数图像长什么样子呢?


因为 判别器D(x) 返回结果是 0 到 1 之间,所以真正有用的只是红色部分:

红色部分最大的数值是多少呢?能取得最大值是 1,这就导致 公 式   4 、 5 公式~ 4、5  45 都是 0。