① 生成式对抗网络GAN(一)
上面这张图很好的很好的阐述了生成式对抗网络的结构~~ 博弈论
此图给出了生成性对抗网络的概述。目前最重要的是要理解GAN是使两个网络协同工作的一种方式 - 而Generator和Discriminator都有自己的架构。为了更好地理解这个想法的来源,我们需要回忆一些基本的代数并问自己 - 我们怎么能欺骗一个比大多数人更好地分类图像的神经网络?
在我们详细描述GAN之前,让我们看一下类似的主题。给定一个训练有素的分类器,我们可以生成一个欺骗网络的样本吗?如果我们这样做,它会是什么样子?
事实证明,我们可以。
甚至更多 - 对于几乎任何给定的图像分类器,可以将图像变换为另一个图像,这将被高度置信地错误分类,同时在视觉上与原始图像无法区分!这种过程称为对抗性攻击,生成方法的简单性解释了很多关于GAN的内容。
精心计算的示例中的对抗性示例,其目的是错误分类。以下是此过程的说明。左边的熊猫与右边的熊猫无法区分 - 但它被归类为长臂猿。
图像分类器本质上是高维空间中的复杂决策边界。当然,在对图像进行分类时,我们无法绘制这个边界。但我们可以安全地假设,当训练结束时,网络并不是针对所有图像进行推广的 - 仅针对我们在训练集中的那些图像。这种概括可能不是现实生活的良好近似。换句话说,它适用于我们的数据 - 我们将利用它。
让我们开始为图像添加随机噪声并使其非常接近零。我们可以通过控制噪声的L2范数来实现这一点。数学符号不应该让您担心 - 出于所有实际目的,您可以将L2范数视为向量的长度。这里的诀窍是你在图像中拥有的像素越多 - 它的平均L2范数就越大。因此,如果噪声的范数足够低,您可以预期它在视觉上难以察觉,而损坏的图像将远离矢量空间中的原始图像。
为什么?
好吧,如果HxW图像是矢量,那么我们添加到它的HxW噪声也是矢量。原始图像具有相当密集的各种颜色 - 这增加了L2规范。另一方面,噪声是一组视觉上混乱的相当苍白的像素 - 一个小范数的矢量。最后,我们将它们添加到一起,为损坏的图像获取新的矢量,这与原始图像相对接近 - 但却错误分类!
现在,如果原始类 Dog 的决策边界不是那么远(就L2范数而言),这种加性噪声将新图像置于决策边界之外。
您不需要成为世界级拓扑学家来理解某些类别的流形或决策边界。由于每个图像只是高维空间中的矢量,因此在其上训练的分类器将“所有猴子”定义为“由隐藏参数描述的该高维斑点中的所有图像矢量”。我们将该blob称为该类的决策边界。
好的,所以,你说我们可以通过添加随机噪声轻松欺骗网络。它与生成新图像有什么关系?
现在我们假设有两个结构模型,相当于两个神经网络:
这是关于判别网络D和生成网络G的价值函数(Value Function),训练网络D使得最大概率地分对训练样本的标签(最大化log D(x)),训练网络G最小化log(1 – D(G(z))),即最大化D的损失。训练过程中固定一方,更新另一个网络的参数,交替迭代,使得对方的错误最大化,最终,G 能估测出样本数据的分布。生成模型G隐式地定义了一个概率分布Pg,我们希望Pg 收敛到数据真实分布Pdata。论文证明了这个极小化极大博弈当且仅当Pg = Pdata时存在最优解,即达到纳什均衡,此时生成模型G恢复了训练数据的分布,判别模型D的准确率等于50%。
接着上面最后一个问题:怎么才能生成我指定的图像呢?
指定标签去训练
顾名思义就是把标签也带进公式,得到有条件的公式:
具体怎么让CGAN更好的优化,这里不解释,就是平常的优化网络了。
参考文章:
本文大部分翻译此外文
通俗易懂
小博客的总结
唐宇迪大神
② GAN生成对抗网络(一)
GAN(Generative Adversarial Networks)是两个网络的的组合, 一个网络生成模拟数据, 另一个网络判断生成的数据是真实的还是模拟的。生成模拟数据的网络要不断优化自己让判别的网络判断不出来, 判别的网络也要优化自己让自己判断得更准确。 二者关系形成对抗博弈,因此叫 对抗神经网络 (生成对抗网络)。实验证明, 利用这种网络间的对抗关系所形成的网络, 在无监督及半监督领域取得了很好的效果, 可以算是用网络来监督网络的一个自学习过程。在GAN发明之前,变分自编码器被认为是理论完美、实现简单,使用神经网络训练起来很稳定, 生成的图片逼近度也较高, 但是人类还是可以很轻易地分辨出真实图片与机器生成的图片。
生成对抗网络包含了 2 个子网络: 生成网络(Generator, G)和判别网络(Discriminator,D), 其中生成网络负责学习样本的真实分布,判别网络负责将生成网络采样的样本与真实样本区分开来。
生成网络 G(𝐳) 生成网络 G 和自编码器的 Decoder 功能类似, 从先验分布 中采样隐藏变量 ,通过生成网络 G 参数化的 分布, 获得生成样本 ,如下图所示。 其中隐藏变量𝒛的先验分布 可以假设属于某中已知的分布,比如多元均匀分布 。
可以用深度神经网络来参数化, 如下图所示, 从均匀分布 中采样出隐藏变量𝒛, 经过多层转置卷积层网络参数化的 分布中采样出样本 。
判别网络 D(𝒙) 判别网络和普通的二分类网络功能类似,它接受输入样本𝒙,包含了采样自真实数据分布 的样本 ,也包含了采样自生成网络的假样本 , 和 共同组成了判别网络的训练数据集。判别网络输出为𝒙属于真实样本的概率 ,我们把所有真实样本 的标签标注为1,所有生成网络产生的样本 标注为0, 通过最小化判别网络预测值与标签之间的误差来优化判别网络参数。
我们的目标很明确, 既要不断提升判断器辨别真假图像样本的能力, 又要不断提升生成器生成更加逼真的图像,使判别器越来越难判别。
对于判别网络 D ,它的目标是能够很好地分辨出真样本 与假样本 。即最小化图片的预测值和真实值之间的交叉熵损失函数:
其中 代表真实样本 在判别网络 的输出, 为判别网络的参数集, 为生成样本 在判别网络的输出, 为 的标签,由于真实样本标注为真,故 , 为生成样本的 的标签,由于生成样本标注为假,故 。 根据二分类问题的交叉熵损失函数定义:
因此判别网络的优化目标是:
去掉 中的负号,把 问题转换为 问题,并写为期望形式:
对于生成网络G(𝒛) ,我们希望 能够很好地骗过判别网络 , 假样本 在判别网络的输出越接近真实的标签越好。也就是说,在训练生成网络时, 希望判别网络的输出 越逼近 1 越好,此时的交叉熵损失函数:
把 问题转换为 问题,并写为期望形式:
再等价转化为:
GAN的优化过程不像通常的求损失函数的最小值, 而是保持生成与判别两股力量的动态平衡。 因此, 其训练过程要比一般神经网络难很多。
把判别网络的目标和生成网络的目标合并,写成min-max形式:
原GAN论文中:
这里为了好理解,把各个符号梳理的更清晰了,注意符号和网络参数的对应。
理想情况下 , 会有更精确的鉴别真伪数据的能力,经过大量次数的迭代训练会使 尽可能模拟出以假乱真的样本, 最终整个GAN会达到所谓的纳什均衡, 即 对于生成样本和真实样本鉴别结果为正确率和错误率各占50%。下面具体从理论层面来推导。
现在从理论层面进行分析, 通过博弈学习的训练方式,生成器 G 和判别器 D 分别会达到什么状态。 具体地,来看以下 2 个问题:
首先我们通过 一维正态分布的例子给出一个直观的解释,如下图所示,黑色虚线曲线代表了真实数据的分布 , 为某正态分布 , 绿色实线代表了生成网络学习到的分布 , 蓝色虚线代表了判别器的决策边界曲线, 图中(a)(b)(c)(d)分别代表了生成网络的学习轨迹。在初始状态,如图 (a)所示, 分布与 差异较大,判别器可以很轻松地学习到决策边界,即图(a)中的蓝色虚线,将来自 的采样点判定为 0, 中的采样点判定为 1。 随着生成网络的分布 越来越逼近真实分布 ,判别器越来越困难将真假样本区分开,如图 (b)(c)所示。 最后,生成网络性能达到最佳,学习到的分布 ,此时从生成网络中采样的样本非常逼真, 判别器无法区分,即判定为真假样本的概率均等,如图(d)所示。
固定生成器G的参数 ,判别器D最佳能达到的状态:
证明: 对于给定的生成器G,要让判别器D达到最优,我们的目标是最大化损失函数,其积分形式为:
对于给定的 ,真实分布始终是固定的,所以 和 都是定值,于是对于判别器D,要找出
的最大值,其中 是判别器网络参数,对于函数 ,不难得到 在 处取得极大值且是最大值。因此可得 的极值点也为
故判别器 能达到的最佳状态为定理中给出的式子。
现在考虑第二个问题。
JS 散度(Jensen–Shannon divergence)
对于KL散度, ,是不对称的。但JS散度是对称的。
当 达到 时,考虑此时 和 的 散度:
考虑到判别网络到达 时,此时的损失函数为:
于是我们可以得到:
对于生成网络 而言,目标是最小化损失函数,由于 ,因此 取得最小值仅在 时(此时 ), 取得最小值:
此时生成网络达到 状态是:
即 的学到的分布 与真实分布 一致,网络达到纳什均衡点,此时:
即对于生成器生成的图像有0.5的概率被判定为真,也有0.5的概率被判定为假。
③ 鐢熸垚瀵规姉缃戠粶钬斺擥AN铡熺悊涓庝唬镰
鎻绀虹敓鎴愬规姉缃戠粶镄勫ゥ绉桡细GAN铡熺悊涓庡疄鎴树唬镰佽В鏋
鍦2014骞寸殑绉戠爷鐣岋纴Ian Goodfellow镄勬澃浣溾斺旂敓鎴愬规姉缃戠粶锛圙AN锛夋í绌哄嚭涓栵纴闱╂柊浜嗗浘镀忕敓鎴愮瓑棰嗗烟镄勬妧链杈圭晫銆侴AN镄勬牳蹇冨湪浜庢瀯寤轰竴涓鍙岄泟瀵瑰纸镄勬嗘灦锛岀敱镞犵洃镌g殑鐢熸垚鍣℅鍜岀洃镌g殑鍒ゅ埆鍣―镵旀坠锛岀洰镙囨槸阃氲繃瀵规姉镐х殑瀛︿範鎻愬崌鐢熸垚鏁版嵁镄勯肩湡搴︺傚叾宸у欑殑鎹熷け鍑芥暟璁捐℃棬鍦ㄨ╁垽鍒鍣―绮惧嗳鍖哄垎鐪熶吉锛岃岀敓鎴愬櫒G鍒椤姫锷涗娇镊韬鐢熸垚镄勬暟鎹鍒嗗竷阃艰繎鐪熷疄涓栫晫銆
娣卞害鍓栨瀽GAN镄勫唴蹇冧笘鐣岋细
GAN镄勮缁冭繃绋嬬姽濡备竴鍦虹瓥鐣ユ父鎴忥纴阃氲繃涓ゆヨ蛋绛栫暐浼桦寲銆傞栧厛锛屼缭鎸佺敓鎴愬櫒G涓嶅彉锛屾渶澶у寲鍒ゅ埆鍣―镄勬ц兘锛岄氲繃璁$畻鐪熷疄镙锋湰涓庣敓鎴愭牱链镄勪氦鍙夌喌宸鍊兼潵琛¢噺D镄勫尯鍒嗗姏銆傛帴镌锛屽浐瀹氩垽鍒鍣―锛岃╃敓鎴愬櫒G璋冩暣鍙傛暟锛屼互链熺敓鎴愮殑鏁版嵁鑳介獥杩喽锛屽嵆璁〥瀵笹鐢熸垚镄勬牱链鍒ゆ柇涓虹湡銆傝繖涓杩囩▼涓镄勭敓鎴愬櫒鎹熷けV锛屽疄璐ㄤ笂鏄阍埚笵璇鍒や负锅囩殑鐢熸垚镙锋湰镄勪氦鍙夌喌銆
鍦≒yTorch镄勭ず渚嬩腑锛孧NIST鏁版嵁闆嗕负璁缁冩彁渚涗简鑸炲彴锛孏enerator鍜娈iscriminator妯″瀷閲囩敤LeakyReLU銆丩inear鍜孴anh绛夋妧链锛屽阀濡椤湴澶勭悊256缁磋緭鍏ワ纴浠ヤ究浜庡湪GPU绛夐珮镐ц兘璁惧囦笂杩愯屻
浼桦寲绛栫暐涓庢妧链缁呜妭锛
鍏抽敭鍦ㄤ簬阃夋嫨Adam浼桦寲鍣ㄥ拰BCELoss浣滀负鎹熷け鍑芥暟锛岃缁冭繃绋嫔垎涓轰袱涓姝ラわ细鍏埚浐瀹欴锛屾洿鏂癎锛岀劧钖庡弽杩囨潵銆傛疮杞杩浠d腑锛屽厛璇勪及D瀵圭湡瀹炴暟鎹鍜岀敓鎴愭暟鎹镄勫垽鏂锛屽啀渚濇′紭鍖朌鍜孏锛岀‘淇濅俊鎭镄勬祦鐣呬紶阃掋
铹惰岋纴GAN骞堕潪涓甯嗛庨‘銆侸S鏁e害镄勮$畻闂棰桡纴鐗瑰埆鏄鍦ㄨ缁冨埯链燂纴鐢变簬闅忔満镐у彲鑳藉艰嚧鏁版嵁宸璺濊繃澶э纴JS鏁e害鍊兼亽涓簂og2锛岃繖鍦ㄥ弽钖戜紶鎾涓浼氩艰嚧姊搴︽秷澶憋纴阒荤岖敓鎴愬櫒鍙傛暟镄勬湁鏁堟洿鏂般
闱㈠规写鎴树笌鍒涙柊瑙e喅鏂规堬细
涓鸿В鍐宠繖涓闂棰桡纴GAN镄勫彉绉嶅侺SGAN鍜学GAN搴旇繍钥岀敓銆侺SGAN阃氲繃璋冩暣鎹熷け鍑芥暟镄勫舰寮忥纴鍑忓皯瀵归吨鍙犲垎甯幂殑渚濊禆锛屽噺杞讳简姊搴︽秷澶辩殑褰卞搷銆傝学GAN鍒椤紩鍏ヤ简涓嶅悓镄勮窛绂诲害閲忥纴濡俉asserstein璺濈伙纴浠ュ疄鐜版洿绋冲畾涓旈珮鏁堢殑璁缁冭繃绋嬨
镐荤殑𨱒ヨ达纴GAN镄勪笘鐣屽厖婊′简鎸戞垬涓庡垱鏂帮纴姣忎竴涓缁呜妭閮藉叧涔庣敓鎴愭暟鎹镄勭湡瀹炴у拰妯″瀷镄勭ǔ瀹氭с傛繁鍏ョ悊瑙e苟鎺屾彙杩欎簺铡熺悊鍜屾妧宸э纴镞犵枒灏嗘帹锷ㄦ垜浠鍦ㄨ繖鍦虹敓鎴愯压链镄勭珵璧涗腑涓嶆柇鍓嶈屻
④ LSGAN:最小二乘生成对抗网络
解决问题: 解决传统 GAN 生成图片质量不高,训练不稳定的问题。
做法: 将传统 GAN 的 交叉熵损失函数 换成 最小二乘损失函数
本篇主要通过GAN对比来学习LSGAN
通过例子介绍:
使用 位于决策边界正确侧 但仍然 远离真实数据的假样本 更新生成器时,交叉熵损失函数将导致梯度消失的问题。
如图 (b)所示,当我们使用 假样本 (品红色)通过使鉴别器相信它们来自真实数据来更新生成器时,它 几乎不会引起错误 ,因为它们在正确的一侧,既决策边界的真实数据面。
然而,这些样本 仍然离真实数据很远 ,我们想把它们拉得接近真实数据。
问题总结:在交叉熵损失函数情况下,判别器判定真实面的假数据距离真实数据较远,效果不足。
基于这一观察,我们提出了最小二乘生成对抗网络,它采用 最小二乘损失函数作为鉴别器 。
最小二乘损失函数能够 将伪样本移向决策边界 ,
因为最小二乘损失函数会 惩罚位于决策边界正确一侧很远的样本 。
如图 (c)所示,最小二乘损失函数将惩罚假样本(品红色),并 将它们拉向决策边界 ,使它们被正确分类。
基于这一特性,最小二乘能够生成更接近真实数据的样本
总结概括
最小二乘: 最小二乘损失与交叉熵损失相比,优势在于生成样本在欺骗判别器的前提下同时让生成器把 距离决策边界比较远 的生成图片拉向 决策边界 ,这样保证了生成高质量的样本。
交叉熵: 以交叉熵作为损失,会使得生成器 不会再优化那些被判别器识别为真实图片的生成图片 ,即使这些生成图片距离判别器的决策边界仍然很远,也就是距离真实数据比较远,因为此时的交叉熵损失已经很小,生成器完成了为它设计的目标。
LSGAN的缺陷: 在于它并 没有解决当判别器足够优秀时生成器发生梯度弥散的问题
梯度弥散: 使用反向传播算法传播梯度的时候,随着传播深度的增加, 梯度的幅度会急剧减小,会导致浅层神经元的权重更新非常缓慢 ,不能有效学习。
这样一来,深层模型也就变成了前几层相对固定,只能改变最后几层的浅层模型。
GANs 的损失函数:
LSGANs的损失函数:
最小二乘
公式注释:
鉴别器 D
生成器 G
G 的目标是学习数据 x 上的分布 pg。
G 服从均匀或高斯分布 pz(z)对输入变量 z 进行采样开始,然后将输入变量 z 映射到数据空间 G(z; θg)。
D 是分类器 D(x; θd),其目的是识别图像是来自训练数据还是来自g。
z 为噪音,它可以服从归一化或者高斯分布,为真实数据 x 服从的概率分布,为 z 服从的概率分布。为期望值,同为期望值。
假设我们对鉴别器使用 a-b 编码方案 ,其中a 和b 分别是假数据和真实数据的标签。
c 表示 G 预测的D 相信的假数据的值。
最小二乘法的具体优点:
1.决策边界固定(鉴别器参数固定),生成样本靠近决策边界,更接近真实数据。
2.惩罚远离决策边界的样本时,可以在更新生成器时生成更多的梯度,这反过来缓解了梯度消失的问题(梯度消失:前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降)
GAN中:最小化等式 1 产生最小化詹森-香农散度:
LSGAN:探讨LSGAN与f散度的关系
公式解释:(下文关于a-b编码证明a,b,c条件)
将
加入到
并不会改变最佳值,因为并没有引入含有G的参数
从而我们可以推出G固定情况下的最佳鉴别器:
使用 pd 来表示 pdata,来重新表示4式
此处不详细证明
化简为:
如果: b-c = 1, b-a = 2,则
是皮尔逊散度,总之可证,当 a,b,c满足b-c = 1 和 b-a = 2的条件,则最小化等式 4 会使 pd + pg 和 2pg 之间的皮尔逊 χ2 散度最小化。
采用 a-b编码方案:
由上述证明可设a = 1, b = 1, c = 0
采用 0-1二进制编码方案 :
两式接近,但此处,论文作者采用a-b编码方式,来实现实验:
带上其中一个实验:
参考论文:Mao X D, Li Q, Xie H R, et al. Least squares generative
adversarial networks[C]//Proceedings of the 2017 IEEE
International Conference on Computer Vision, Venice, Oct
22- 29, 2017. Washington: IEEE Computer Society, 2017:
2813-2821.