Advertisement

(十六)从零开始学人工智能-深度学习基础3

阅读量:

文章目录

  • 一、生成对抗网络基础理论
    • 1.1 GAN的概述
      • 简述什么是生成对抗网络?

      • 探讨对抗生成网络的数学机制

        • 再次阐述GAN的工作原理
        • 小结
      • 1.3 GANs应用举例

        • 1.3.1 从生成MNIST开始
        • 1.3.2 垃圾邮件识别
        • 1.3.3 更多实际应用
        • 1.3.4 小结
      • 声明

      • 参考文献

一、生成对抗网络基础

生成对抗网络(Generative Adversarial Networks, GANs)由Ian Goodfellow及其同事在2014年首次提出,在他们的论文《Generative Adversarial Networks》中首次提出这一概念并进行了详细阐述

在这里插入图片描述

基于GAN,可以将人脸粘贴到视频中的目标人物上

1.1 GAN概述

在介绍GAN之前,请先听一个有趣的故事——你知道GAN是如何被发明出来的吗?你是否知道GAN是如何被发明出来的? Ian Goodfellow回忆道:在以前的研究中他曾专注于生成模型领域。或许是一时冲动,在某个夜晚的一天,在酒吧里与朋友讨论生成模型话题后的一个瞬间。Ian Goodfellow突然想到GAN的核心思想—— Ian建议你们应该这样做!我想这肯定行得通!然而他的朋友们并不看好这个建议—— Ian的朋友对此并不看好——于是他决定回到酒店继续进行实验! Ian花了一整夜的时间完成了这篇论文!~

这个故事告诉我们,喝酒,不仅能打醉拳,也能写出顶级论文…

看完故事后,请立即开启(启动)GANS系统吧。由两个核心组件构成:一个是生成器(Generative Component),另一个是鉴别器(Discriminative Component)。其中生成器的主要功能是模拟并产出与真实数据集高度相似的内容;鉴别器的主要任务是对输入的数据进行辨别——它需要判断这些输入是否来自真实的数据集或者是由特定算法产生的合成样本。

在这里插入图片描述

这种情形可被视为一个零和博弈。论文通过类比的方式便于解释:其中生成模型如同一个试图生产并使用假币的团伙。而判别model则如同一位负责检测假币的警察,在这一过程中,在交替优化的过程中进行训练。两者均能取得一定提升;然而我们追求的是能够显著提升效能的高质量 generator —— 即那个生产出产品与真品难以区分的一方。其产出的产品能够轻易辨识真假,这一过程就如上图所示的对抗过程。

在这里插入图片描述

随着学术界和工业界都开始接收并欢迎GAN的到来,GAN的崛起不可避免:

首先, 生成对抗网络(GAN)的主要优势在于其采用无监督学习特性. 由于无需人工标注数据训练即可完成任务, 并因此展现出强大的能力.

其次,GAN具有广泛的应用潜力,在对话系统中占据核心地位。它能够生成高质量的图像,实施图片增强技术,基于文本生成图像的方法,实现跨域图像转换的技术,通过年龄相关技术实现面部外观的变化等应用领域不断扩展中

第三,在对GAN的持续探索中所引发的浓厚兴趣促使它吸引了来自(视觉感知领域之外)的所有行业。

1.2 什么是生成对抗网络?

掌握生成对抗网络的基本概念需要先了解监督式学习与非 supervision 学习。在机器 学习中 基于大量标注训练数据以及测试数据 的流程 被称为 监督 式学 习 如图像分类器 需要成 千上万 张带 标签 的照片 才能进 行学 习 而 相比之下 在无 监督 的情况下 无需 投入大 量资源 它们 能够 自己从 错误 中进 行学 习 并降低 未来 出错 的概率 其主要 缺点 是 需要 投入大 量人 力物力 来标 注数 �据 相比之下 在有 标签 的情况 下识别 准确 率通常 会更 高 GAN 这个 数学 模型 则可 以被 视为 提升 了无 监督 学习 的效 果

生成模型是一个需要深入理解的重要概念。如图所示的是生成图片模型的概念示意 diagram. 这些模型能够基于输入样本推测可能出现的输出结果. 例如,在视频序列中的一帧经过处理后可能会推断出下一帧的状态. 另一个应用实例是搜索引擎系统,在用户实时输入查询时系统已开始分析用户的潜在搜索需求.

在这里插入图片描述

基于上述两个概念, 我们可以构建生成对抗网络(GAN)。相对于传统的神经网络模型而言, 在结构上来说, GAN采用了全新的非监督学习模式(全面展示如上图所示)。由两组独立的神经网络构成, 这两者相互对抗, 共同构成整个系统的基础框架。其中,D是用来鉴别真实数据与虚假数据的存在; 而用于创造看似真实的数据并标记为假的是G这一部分的功能定位更加明确。这种架构的核心在于, GAN通过D和G之间的竞争与合作, 实现了对真实数据分布的有效学习

在这里插入图片描述

D被设计为一种图像分类器用于识别和分类不同种类的动物图像。生成器G旨在生成逼真的伪造图像通过从训练数据潜在空间中提取元素进行组合并在生成过程中加入随机噪声以增强欺骗性。例如在一张猫的照片上附加另一只眼睛即可作为假数据

在训练中,D接收真实样本与生成器输出的虚假样本,其功能是判别图片是否来自真实样本或生成器输出.针对模型最终输出的结果,可同时优化生成器与判别器的参数.若D能正确鉴别,则需相应调整生成器参数以增强其产出逼真的虚假样本;若鉴别的结果出现误判,则需相应调整判别器参数设置,以防止同类误判现象再次发生.整个训练过程将持续进行直至双方达到一种动态平衡状态

训练后的产物经过训练后成为性能优异的自动生成器以及判断能力较强的分类器。其中自动生成器能够用于机器生成(如自动画出"猫" "狗"),而分类器则用于机器识别(如自动判断"猫" "狗")。

小结:GAN 算法流程简述

算法流程简述

  • 初始化generator和discriminator。
  • 每一次的迭代过程中:
    • 固定generator, 只更新discriminator的参数。从你准备的数据集中随机选择一些,再从generator的output中选择一些,现在等于discriminator有两种input。接下来, discriminator的学习目标是, 如果输入是来自于真实数据集,则给高分;如果是generator产生的数据,则给低分,可以把它当做一个回归问题。
    • 接下来,固定住discriminator的参数, 更新generator。将一个向量输入generator, 得到一个output, 将output扔进discriminator, 然后会得到一个分数,这一阶段discriminator的参数已经固定住了,generator需要调整自己的参数使得这个output的分数越大越好。

按照这个过程来看的话,在实际操作中generator与discriminator属于同一个网络架构;其中某一层隐藏层的输出结果对应于一张图片(或语音),这取决于所采用的数据集类型。在训练过程中通常会固定一部分隐藏层来完成特定的任务,并对剩余的隐藏层进行优化。

1.2.1 对抗生成网络背后的数学原理

这段内容确实让人感到乏味至极。它只是单纯为了保证文章的完整性而存在……即使不想继续阅读也不会影响整体的理解呢!哈哈~

------------------------------------------------------------高能开始分割线------------------------------------------------------------------------------

值得深入探讨的是GAN究竟生成的是什么内容呢?举个例子来说吧,在我们希望生成一些看起来像人脸的图像时,请问这些图片是从哪里来的?实际上我们需要确定一个数据分布。从该分布中采样得到的一系列图像能够呈现出类似真实的人脸特征;而那些不属于这一类别的样本则无法被正确识别或模拟出来。因此GAN的核心任务就是识别并定义这样一个能够有效捕捉人类面部特征的数据分布。

在这里插入图片描述

在GAN出生之前,我们怎么做这个事情呢?

之前采用的是最大似然估计法来实现生成目标。我们首先回顾了概率分布与参数估计的基础知识,并依次介绍了最大可能性评估(MLE)、Kullback-Leibler (KL) 散度和Jensen-Shannon (JS) 散度等核心概念。随后深入探讨了GAN模型的数学机制及其原理。

无论是在黑白图像还是彩色图像中, 每个像素都被定义为一个介于0到255之间的数值. 在图像处理过程中, 我们通常会通过对每个像素值进行归一化操作(即将每个像素值除以255), 将其范围缩放到0到1之间. 这种归一化过程不仅能够标准化图像数据, 而且还具有可逆性. 当需要恢复原始数据时, 则只需将该概率分布在适当的位置乘以255即可.

就认为GAN图片生成任务本质上就是一种基于概率分布的操作. 这为我们深入研究GAN生成对抗网络提供了重要的理论基础和实践指导.

回顾概率分布及参数估计

先来看一个例子:

假想一个抽奖箱里装有45个小球……每个号码对应的小球数量为:

编号 1 2 3 4 5 6 7 8 9
数量 2 4 6 8 9 7 5 3 1
占比 0.044 0.088 0.133 0.178 0.200 0.156 0.111 0.066 0.022

比例是指各编号的频数除以其总数,在数理统计领域中通常被称作概率或频率

使用向量q表示上述的概率分布:

\begin{aligned}q &=(1,4,6,8,9,7,5,3,1)/45 \\ &=(0.044,0.088,0.133,0.178,0.200,0.156,0.111,0.066,0.022) \end{aligned}

将上述分布使用图像绘制如下:

在这里插入图片描述

我们现在希望构造一个关于变量x和参数θ的函数p(x;θ)。将x视为输入数据中的索引变量,并计算其对应概率值。其中θ是用于定义该函数的关键参数。一旦确定就不会更改

假设上述概率分布服从二次抛物线函数:

\begin{aligned}p &=p(x;\theta) \\ &=\theta_1(x+\theta_2)^2+\theta_3 \\ \end{aligned}

x=(1,2,3,4,5,6,7,8,9)

使用L_2误差作为评价拟合效果的损失函数,总误差值为error(标量e)

e=\Sigma_{i=1}^9(p_i-q_i)^2

我们希望求得一个\theta^*,使得e的值越小越好,数学上表达为:

\theta^*=\mathop {argmin}_{\theta}(e)

argmin是argument minimum的缩写。

本文关注的重点并非\theta^*的求解过程本身,而是生成对抗网络这一技术范畴所涉及的核心内容。为了便于理解这一概念的具体实现方式,在后续讨论中将采用一个具体的数值实例来进行演示分析:

\theta^*=(\theta_1,\theta_2,\theta_3)=(-0.01,-5.0,0.2)

p=p(x;\theta)=-0.01(x-5.0)^2+0.2

绘制函数图像如下:

在这里插入图片描述

在生成对抗网络中,该估计器p(x;\theta)等价于一个生成器(generator),而损失函数则对应于一个鉴别器(discriminator)。

从最大似然估计讲起

其核心思想在于:假设我们观察到的数据集服从某个未知的概率分布P_{data}(x);为了建模这一规律性,我们引入了一个参数化的概率分布P_G(x;\theta);通过训练过程(如优化算法),我们可以确定参数向量\theta使其能够尽可能准确地捕捉到数据的统计特征;当生成器采用高斯混合模型结构时(即假设生成器是一个由多个高斯分量组成的复杂系统),其中参数\theta即包含了各组分均值和方差的信息

具体怎么操作呢

  1. P_{data}(x)中采样出{x^1,x^2,x^3,\dots,x^m}
  2. 对每一个采样出来的x,我们都可以计算出它的似然函数,也就是可以得到一组参数\theta,进而就能知道P_G(x;\theta)长什么样,然后就可以进一步计算出这个分布里面采样出的某一个x的几率;
  3. 把在某个分布可以产生x_i的参数似然函数乘起来,可以得到总的似然函数:

L=\prod_{i=1}^mP_G(x^i;\theta)

​ 我们要找到一组\theta^*,可以最大化L

在上述实例中, 我们有幸掌握了所有可能的概率分布, 并从而使得求解最优概率分布估计函数p(x\theta)成为可能

假设在上一案例中所涉及的抽奖盒(样本)中共有45个球是由一个更大的抽奖池(总体)中的抽取所得,并且该总体的具体数量及各球的编号信息未知。那么,在只知道现有45个抽出的号码的情况下,请问如何推断出该总体的概率分布?不过,在此之前,请允许我们简要说明一种更为直接的方法:利用上一案例中所计算出的样本频率作为总体概率模型。但接下来会介绍一种更为常用的估计方法, 即本节开篇提到的最大似然估

给定概率分布函数p(x)=p(x;\theta)表示总体的情况,则编号x=(x_1, x_{2}, x_{3}, \cdots, x_{n})发生的几率即为其对应的概率。

p=p(x_1),p(x_2),p(x_3),\cdots,p(x_n)

在本例中,n=9,即共9个编号。

定义d=(d_1, d_2, d_3, \dots, d_m)为所有抽样的索引,在本例中m=45表示样本总数为45个。假设所有样本和抽样均为相互独立,则该概率值即为此处所求

\rho=p(d_1)\times p(d_2)\times p(d_3)\times \cdots \times p(d_m)=\prod_{i=1}^m(p(d_i))

基于经验选择的p(x)=p(x;\theta)模型中,默认采用一阶到高阶多项式的组合形式作为默认假设,并且这种假设在选定后将保持不变。在此框架下需确定最优参数集合\Theta^*以实现对目标变量的最佳预测能力。具体而言,在此框架下需确定最优参数集合\Theta^*以使预测误差最小化并使目标指标ρ达到最大值。

\theta^*=\mathop {argmax}_\theta(\rho)=\mathop {argmax}_\theta\prod_{i=1}^mp(d_i;\theta)

argmax是argument maximum的缩写。

简单来说,在已经发生的情况下(即样本为真实存在的数据),当模型结构已经固定下来时(即函数形式已经被确定),我们希望通过优化参数来提升样本的理论估计概率尽可能大。

在这种情况下,默认的前提是选定的函数结构必须能够准确判断样本分布的情况。相反地,在试图用线性模型匹配正态分布理论时(normal distribution),无论怎样调整参数都无法达到预期效果。

乘积操作较为不便,可以用求和操作来替代。基于log函数的单调性可知,其对应的表达式等价于。

The optimal θ*, denoted as the argument of maximum with respect to θ, is equal to the value that maximizes the logarithm of the product from i equals 1 to m of p(d_i;θ). This is equivalent to maximizing the sum from i equals 1 to m of the logarithms of p(d_i;θ).

设给定样本的概率密度函数为Q(x), 基于给定的一组样本数据, 其概率密度函数可以被准确确定, 通过随机抽样方法进行估计, 将其表示为期望形式即为:

\theta^* equals the argument of maximum for the sum from i=1 to m of the logarithm of the probability density p(d_i; \theta) and is also equal to the argument of maximum for the weighted sum from i=1 to n of q(x_i)\cdot \log p(x_i; \theta)$.

观察上式中的两个Σ符号,在其中m被转换为n的情形下,在大多数情况下编号的数量会少于采样数。将此转化为期望形式可大幅降低计算复杂度。

在一些教程中,上式写法为:

θ*等于θ使得E_{x−q(x)} log p(x;θ)的最大化值,并且同时等于θ使得∫ q(x) log p(x;θ) dx的最大化值。

E_{x-q(x)}表示遵循q(x)的概率分布对x计算期望值。在上述情况下(即按照概率分布进行计算),由于积分表达式更为简洁且书写更为便捷,在下文中将主要采用积分表达式作为主要工具。

这一节主要介绍最大似然估计(Maximum Likelihood Estimation, MLE)的基本原理及求解方法。与之前介绍的参数估计方法不同的是,在MLE中不需要预先设定损失函数来描述数据分布特性。相反地,在这种框架下模型能够自动学习数据的统计规律性,并在此基础上实现对未知参数的有效估计。此外,在保证估计精度的前提下,MLE能够显著降低模型的设计复杂度,并具有较为广泛的适用性

在本例中,估计器p(x;\theta)等价于生成对抗网络的生成器;样本分布q(x)等价于训练集。

另一种解释-KL散度

参考前文中的例子,在样本数据明确的情况下,则假设q(x)是一个已知且确定的概率分布,则积分\int q(x)\ln q(x)dx作为一个常数值不会影响参数\theta^*的估计结果;因此可以考虑在目标函数中添加一项以改进模型性能

\begin{aligned}\theta^* &=\mathop {最大化}_\theta\left(\int q(x)\cdot \ln p(x;\theta)\,dx - \int q(x)\cdot \ln q(x)\,dx\right) \\ &=\mathop {最大化}_\theta \int q(x)\cdot [\ln p(x;\theta)-\ln q(x)]\,dx \\ &=\mathop {最大化}_\theta \int q(x)\cdot \ln\left(\frac{p(x;\theta)}{q(x)}\right)\,dx \end{aligned}

也可以写成这样:

\begin{aligned}\theta^* &=\mathop {argmin}_\theta(-\\int q(x)\log p(x;\theta)\,dx + \\int q(x)\log q(x)\,dx ) \\ &=\mathop {argmin}_\theta\\int q(x)\cdot [\log q(x)-\\log p(x;\theta)]\,dx \\ &= argmin_\theta D_{KL}(q||p(\cdot;\theta)) \\ &等于使关于q(\cdot)/p(\cdot;\theta)的相对熵最小化的参数集合。\end{aligned}

Kullback-Leibler散度是一种衡量两个概率分布之间匹配程度的关键指标。当两个概率分布之间的差异增加时,Kullback-Leibler散度也随之增大。此外,在信息论领域中还有其他名称与之相关联。

其定义如下:

D_{KL}(q\mid\mid p)=\int q(x)log\frac{q(x)}{p(x)}dx

p(x)=q(x)时,取最小值D_{KL}(q\mid\mid p)=0

我们可以将上面的公式简化为:

\theta^*=\mathop {argmin}_\theta D_{KL}(q\mid\mid p(x;\theta))

KL散度的补充-JS散度

Kullback-Leibler散度具有不对称性, 即对于任意两个概率分布qp, D_{KL}(q||p)D_{KL}(p||q)通常不相等. 为了应对这一挑战, 引入了Jensen-Shannon散度. Jensen-Shannon散度(Jensen-Shannon divergence)的具体定义如下:

m=\frac{1}{2}(p+q)

D_{JS}=\frac{1}{2}D_{KL}(p\mid\mid m)+\frac{1}{2}D_{KL}(q\mid\mid m)

JS的值域是对称的,有界的,范围是[0,1]

如果p,\,q完全相同,则JS=0,如果完全不相同,则JS=1

注意,KL散度和JS散度作为差异度量的时候,有一个问题:

如果两个分配 p,q差异极大且完全不相交的时候,则此时KL散度不再具有意义;相反地,在这种情况下JS散度则会保持一个稳定的数值。这对学习算法的影响是极为负面的,并且会导致该点处的学习过程陷入停滞;进而出现梯度消失的情况。

参考上述例子,对JS进行反推:

\begin{aligned} D_{JS}(q\mid\mid p) &= \frac{1}{2} D_{KL}(q\mid\mid m) + \frac{1}{2}D_{KL}(p\mid\mid m) \\ &= \text{分别计算以下两个Kullback-Leibler散度后再取其平均值:} \\ &\quad \frac{1}{2}\int q(x)\log\frac{2q(x)}{q(x)+p(x;\theta)}dx + \frac{1}{2}\int p(x;\theta)\log\frac{2p(x;\theta)}{p(x;\theta)+q(x)}dx \end{aligned}

由于:

\begin{aligned} \int q(x)\log\frac{2q(x)}{q(x)+p(x;\theta)}dx &= \int q(x)\left(\log\frac{q(x)}{q(x)+p(x;\theta)} + \log 2\right)dx \\ &= \int q(x)\log\frac{q(x)}{q(x)+p(x;\theta)}dx + \int q(x)\log 2 dx \\ &= \int q(x)\log\frac{q(x)}{q(x)+p(p;\theta)}dx + \log 2 \end{aligned}

同理可得:

\begin{aligned} D_{JS}(q \parallel p) & 等价于 \ &\quad \frac{1}{2}\int q(x)\log\left(\frac{q(x)}{q(x)+p(x;θ)}\right)dx \ &+ \frac{1}{2}\int p(x;θ)\log\left(\frac{p(x;θ)}{(p(x;θ)+q)/2}\right)dx \ &+ log 2 \end{aligned}

令:

d(x;\theta)=\frac{q(x)}{q(x)+p(x;\theta)}

则:

1-d(x;\theta)=\frac{p(x;\theta)}{q(x)+p(x;\theta)}

即:

D_{JS}(q||p)=\frac{1}{2}\int q(x)\cdot \ln d(x;\theta)\,dx+\frac{1}{2}\int p(x;\theta)\cdot \ln(1-d(x;\theta))\,dx+\ln 2

令:

V(x;\theta)=\int q(x)log\,d(x;\theta)dx+\int p(x;\theta)log(1-d(x;\theta))dx

则:

D_{JS}(q\mid\mid p)=\frac{1}{2}V(x;\theta)+log2

即:

\theta^*=\mathop {argmin}_\theta D_{JS}(q\mid\mid p)=\mathop{argmin}_\theta V(x;\theta)

在当前情况下,在使p(x;\theta)q(x)之间的差异最小化的同时,在使用V(x;\theta)时也能最大化两者之间的差异

JS散度参数求解的两步走迭代方法

从上面的讨论知道,我们需要一个参数\theta^*,使得

\theta^*=\mathop {argmin}_\theta D_{JS}(q\mid\mid p)=\mathop {argmin}_\theta V(x;theta)

然而,因为涉及多重嵌套和积分,使用起来并不方便。

首先,我们假设p(x;\theta)=p_g(x)为已知条件,同时令D=d(x;\theta),考虑这个式子:

W(x;\theta)=q(x)log\,d(x;\theta)dx+p(x;\theta)log(1-d(x;\theta))

W(x;D)=q(x)log\,D+p_g(x)log(1-D)

V(x;\theta)=V(x;D)=\int W(x;D)dx

x已知的情况下,我们关注D

W'=\frac{dW}{dD}=q(x)\frac{1}{D}-p_g(x)\frac{1}{1-D}

W''=\frac{dW'}{dD}=-q(x)\frac{1}{D^2}-p_g(x)\frac{1}{(1-D)^2}

因为W''\lt0,当W'=0时,W取得极大值:

W'=q(x)\frac{1}{D}-p_g(x)\frac{1}{1-D}=0

D=\frac{q(x)}{q(x)+p_g(x)}

因为:

D\lt\frac{q(x)}{q(x)+p_g(x)},\, W'\gt0

D\gt\frac{q(x)}{q(x)+p_g(x)},\,W'\lt0

这表明,当D的函数按W'=0取值时,Wx的每个取样点均获得最大值,积分后的面积获得最大值,即:

D^*=\frac{q(x)}{q(x)+p_g(x)}=\mathop {argmax}_D\int W(x;D)dx=\mathop {argmax}_DV(x;D)

\mathop {max}_DV(x;D)=\int q(x)log\,D^*(x)dx+\int p_g(x)log(1-D^*(x))dx

基于推导所得出的V(x;D)的最大值表达式后,在固定D^*的基础上,在约束条件p(x;\theta)=p_g(x)下对该最大值进行最小方向优化

V(x;\theta;D^*)=\int q(x)log\,D^*(x)dx+\int p(x;\theta)log(1-D^*(x))dx

\theta^*=\mathop {argmin}_\theta V(x;\theta^*;D^*)

在此基础上分阶段实施'两步走'策略,在经过逐步优化计算过程后(通过反复迭代求解变量组D与θ),最终使得生成模型能够逼近真实数据分布。

生成对抗网络

基于前面的讨论可以看出, 我们由此可得一个与q(x)极为接近的分布函数p(x;\theta). 该分布函数的建立, 其目的在于探索已知样本数据中所蕴含的本质规律.

通常情况下,我们对生成的数据分布q(x)并不直接关注。为了达到这一目的,我们倾向于随机生成一批数据x'以便使生成模型p(x';\theta)能够逐步逼近目标分布q(x)

我们设计了一个生成器G(z;\beta)来输出变量x';该生成器从随机概率分布中获取输入变量z;其输出变量x'的概率密度函数被定义为p_g(x')

第一步,我们固定p_g(x'),求D^*

V(x,x';D)=\int q(x)log\,D(x)dx+\int p_g(x')log(1-D(x'))dx

D^*=\mathop {argmax}_DV(x;D)

第二步,我们固定D*,求p_g(x';\theta^*)

V(x,x',D^*;\theta)=\int q(x)log\,D^*(x)dx+\int p_g(x';\theta)log(1-D^*(x'))dx

\theta^*=\mathop {argmin}_\theta V(x,D^*;\theta^*)

然后进行多次循环迭代,使得p_g(x';\theta^*)趋近于q(x)

通过细致观察可知,在此情境下所进行的求解过程与上一案例完全相同;仅因输入的数据不同而有所差异。

在实际任务中,我们并不关心p_g(x';\theta),仅关注生成器x'=G(z;\beta)的优化。

因此,我们把算法改编如下:

第一步,我们固定x'=G(z;\beta),求D^*

V(x,z;D)=\int q(x)log\,D(x)dx+\int q(z)log(1-D(G(z)))dz

D^*=\mathop {argmax}_DV(x,z;D)

第二步,我们固定D*,求G(z;\beta^*)

V(x,z,D^*;\beta)=\int q(x)log\,D^*(x)dx+\int q(z)log(1-D^*(G(z;\beta)))dz

\beta^*=\mathop {argmin}_\beta V(x,z,D^*;\beta^*)

注意,本例的两个算法都没有给出严格的收敛证明。

鉴于在上例中所采用的求解形式高度一致,在本研究中我们有理由相信该算法具有应用价值,并可直接推广至类似场景。为了简化讨论,在后续分析中将此方法简记为:

V(G,D)=\int q(x)log\,D(x)dx+\int q(z)log(1-D(G(z)))dz

G^*=\mathop {argmin}_G(max_D V(G,D))

这就是GAN生成对抗网络相关文献中常见的求解表达方式。

在 Ian J. Goodfellow 的论文 Generative Adversarial Networks 中, 作者先给出了V(G,D)的表达式, 然后再通过JS散度的理论来证明其收敛性. 有兴趣的读者可以参考阅读。

本文认为, 如果先介绍JS散度, 再进行反推, 可以更容易的理解GAN概念, 理解GAN为什么要用这么复杂的损失函数.

生成对抗网络的工程实践

在工程应用中,在常见情况下的离散数据问题中,在大多数场景下都可以考虑运用随机采样的手段来估计其期望值。

首先基于生成模型p_z(z)产生的随机噪声分布z=(z_1,z_2,z_3,\cdots,z_m), 其次通过从真实数据集p(x)中获取m个典型样本集p=\{x_1,x_2,x_3,\cdots,x_m\}

由于我们采用随机抽取的方式获取数据集中的样本点,并且具有较高的概率被选中。所抽取的样本能够反映出预期的情况。因此我们可以将上式的期望值替换为平均数计算以达到相同的效果

\begin{aligned} V(G,D) &= \int q(x)\ln D(x)dx + \int q(z)\ln(1 - D(G(z)))dz \\ &= \frac{1}{m}\sum_{i=1}^m \ln D(x_i) + \frac{1}{m}\sum_{i=1}^m \ln(1 - D(G(z_i))) \end{aligned}

我们可以直接用上式训练鉴别器D(x)

在训练生成器时,因为前半部分和z无关,我们可以只使用后半部分。

最后,我们用一张图来结束(总结这一部分),从数学的角度看GANs的训练过程:

在这里插入图片描述

------------------------------------------------------------高能结束分割线------------------------------------------------------------------------------

1.2.2 重说GAN原理

说实话,在编写过程中面对那些理论知识时我确实感到很乏味。在编写过程中常常产生放弃的心理状态即使是在疫情当下我的状态也是一样的。

在这里插入图片描述

你或许会考虑找点事情做呢?于是乎,就有了上面那一段,无论怎样,不要老记着刚说过的事情了,让我们重新开始思考吧~

在这里插入图片描述

大白话GANs原理

知乎上有一个很好的解释:

假使一个城市的治安状况非常混乱,则很快就会出现大量小偷出现在该城市内。其中有些人可能具备高超的盗窃技艺,在此情况下则可能只是一般市民而已。假若该市开始着手整顿自己的治安状况,并 sudden 展开了打击犯罪行动,则警察们重启了城市的巡逻机制。于是有一批技艺不精的小偷被当场抓获并送至警局接受审查。这些被抓获的小偷大多技不如人——这与警察们的能力有关;而在这一波抓捕行动后虽然尚不明朗的城市治安水平尚不明朗……但总体上说,则是小偷们的平均水平显著提升。

在这里插入图片描述

警察们开始加强破案技能培训以提升执法效能。
在这些罪犯被 apprehended后
他们能迅速识别出可疑分子
从而展开搜查并最终抓获犯罪嫌疑人。
若要想继续保持隐秘则迟早会暴露行踪而受捕。

在这里插入图片描述

为了避免被捕, 小偷们尽力避免表现出明显的"可疑"特质. 而魔高一尺. 道高一丈. 警察也在不断提升自己的专业能力. 通过不断学习与实践. 努力将普通人群体与犯罪分子区分开来. 随着警力与犯罪分子之间的不断互动与交流. 犯罪分子逐渐认识到自己在社会中的存在感. 并努力模仿普通民众的行为模式. 同时警方也发展出了更为精准的侦查手段. 只要发现任何可疑迹象. 就能够迅速锁定目标并采取行动——最终的结果是取得了一支最具战斗力的犯罪团伙以及一支训练有素的专业警队

在这里插入图片描述

大白话GANs训练过程

类比上面的过程,生成对抗网络(GANs)由2个重要的部分构成:

  1. Generator: 由机器生成的数据(其中大多数是图像)旨在使其难以被判别器识别出来。
  2. Discriminator: 识别给定图片是否为真实拍摄或由机器生成。其目的则是发现由该生成器产生的‘虚假图像’。
在这里插入图片描述

下面详细介绍一下过程:

第一阶段:固定「判别器D」,训练「生成器G」

我们采用了一个具有有效性的判别器OK(D),通过使生成器G持续生成模拟数据,并将这些数据供判别器D进行鉴别。

一开始,「生成器G」还很弱,所以很容易被揪出来。

但是随着不断的训练,「生成器G」技能不断提升,最终骗过了「判别器D」。

当处于这一阶段时

在这里插入图片描述

第二阶段:固定「生成器G」,训练「判别器D」

当第一阶段完成后,后续对生成器G的进一步训练是没有意义的。到了这个时候之后,我们就固定生成器G,并开始对判别器D进行训练

判别器D

到了这个时候,「生成器G」已经无法骗过「判别器D」。

在这里插入图片描述

循环阶段一和阶段二

通过不断的循环,「生成器G」和「判别器D」的能力都越来越强。

最终我们实现了高度优化后的「生成器G」的效果,并且能够利用该生成器G来进行图像生成。

下面的实际应用部分会展示很多“惊艳”的案例。

在这里插入图片描述

1.2.3 小结

从这个过程来看,GANs有什么优缺点呢?

三个优势:

  • 能够更加精准地建模数据分布,并且呈现更为清晰和锐利的效果。
  • 理论上能够训练任意类型的生成器网络,在此基础之上相比而言,在其他框架中要求生成器网络具有特定的形式。
  • 既不需要通过马尔科夫链进行反复采样也不必在学习阶段进行推导运算以获得结果。

两个缺陷:

  • 难以进行有效训练且具有不稳定性特征。在实际应用中, 生成器与判别器之间必须维持良好的同步关系, 然而, 在实践中常常出现判别器迅速收敛而生成器表现不佳的情况, 这种情况下, D/G 的协同训练效果会受到显著影响。
  • 模式缺失(Mode Collapse)问题会导致GANs在学习过程中容易陷入模式坍塌现象, 这使得生成网络逐渐退化并陷入同一类型的样本空间。
  • 该现象会导致模型无法持续进化并有效捕捉数据分布特征。

1.3 GANs应用举例

1.3.1 从生成MNIST开始

为了更好地深入探讨一个具体的实例,请问您能否详细阐述前述流程?Mnist数据如图所示。

在这里插入图片描述

我们从如下结构网络生成手写数字:

在这里插入图片描述

GAN步骤:

  • 开始时期生成器在初期阶段获取随机数并输出图像;
    • 在训练过程中, 生成器将生成的图像数据与实际训练数据集进行结合, 并传递给判别器网络;
    • 鉴别器通过分析输入的假彩色图象和真实彩色图象来判断其归属概率;

GAN过程中,开始时期从随机数开始,例如:

在这里插入图片描述

注:也许刚开始生成的图像质量不高, 但通过鉴別器过滤后, 在经过反复迭代优化的过程中, 最终产出的结果相当不错.

1.3.2 垃圾邮件识别

下面分享一个知乎上(@陈琛)的例子:垃圾邮件分类

不知道大家是否还记得吗?在最初的课程中也有所介绍。

假设存在一位名为Gary的营销人员旨在欺骗David的垃圾邮件分类系统以发布虚假信息。 Gary追求发送尽可能多的有效垃圾信息 ,而 David 则致力于阻止这些信息被误认为是合法内容。 在理论最优情况下 ,各方的行为将达成一种平衡状态——即纳什均衡——尽管这种状况下所有人均希望减少不必要的通信干扰。

想了解纳什均衡 ,可以参考这篇文章对这一概念进行详细阐述。

在这里插入图片描述

在接到邮件时,David可以评估spam过滤器的效果,并通过减少'误报'和'漏报'的数量来优化 spam 过滤器的参数设置。

在这里插入图片描述

为了验证Gary能否正确识别垃圾邮件中的正常邮件(即那些会被判定为正常邮件),Gary与David便可以通过混淆矩阵(confusion matrix)这一工具来评估两人在这一任务上的表现情况。

在这里插入图片描述

下面是Gary和David得到的混淆矩阵:

在这里插入图片描述

经此之后, Gary与David得知问题所在后从中吸取了教训.Gary会根据以往的成功经验尝试不同的方法以生成更优质的垃圾邮件.David则会仔细检查spam filter的故障并优化其过滤机制.

在这里插入图片描述

然后反复进行这一过程直至达到某个纳什均衡状态(当然,在这种情况下也可能导致系统崩溃的可能性存在——因为某一方可能成功地找到了完美伪装方法或者有效地识别出垃圾邮件的方法)

下面来详细看一下混淆矩阵的四个象限:

在机器学习中真确识别(True Positive)的情况是指系统将实际存在的异常行为正确分类为异常事件的情形;这些情况中的每一封电子邮件都是由Gary生成的,并且系统将其成功归类为垃圾邮件;这种准确识别有助于提高整体系统的效能和可靠性

在机器学习中真确识别(True Positive)的情况是指系统将实际存在的异常行为正确分类为异常事件的情形;这些情况中的每一封电子邮件都是由Gary生成的,并且系统将其成功归类为垃圾邮件;这种准确识别有助于提高整体系统的效能和可靠性

在机器学习中真确识别(True Positive)的情况是指系统将实际存在的异常行为正确分类为异常事件的情形;这些情况中的每一封电子邮件都是由Gary生成的,并且系统将其成功归类为垃圾邮件;这种准确识别有助于提高整体系统的效能和可靠性

在机器学习中真确识别(True Positive)的情况是指系统将实际存在的异常行为正确分类为异常事件的情形;这些情况中的每一封电子邮件都是由Gary生成的,并且系统将其成功归类为垃圾邮件;这种准确识别有助于提高整体系统的效能和可靠性

在机器学习中真确识别(True Positive)的情况是指系统将实际存在的异常行为正确分类为异常事件的情形;这些情况中的每一封电子邮件都是由Gary生成的,并且系统将其成功归类为垃圾邮件;这种准确识别有助于提高整体系统的效能和可靠性

在机器学习中真确识别(True Positive)的情况是指系统将实际存在的异常行为正确分类为异常事件的情形;这些情况中的每一封电子邮件都是由Gary生成的,并且系统将其成功归类为垃圾邮件;这种准确识别有助于提高整体系统的效能和可靠性

在这里插入图片描述
  1. False Negative是指邮件确实不是垃圾邮件却被David将其分类为垃圾邮件。
  2. generator方面目前无需介入生成器的工作流程。
  3. discriminator的工作表现尚有提升空间。
在这里插入图片描述
  1. False Positive:该邮件被归类为垃圾邮件(False Positive),但实际属于普通邮件。
    generator:目前无需对生成器进行任何干预或操作。
    discriminator:判别器的工作效率和效果尚有提升空间。
在这里插入图片描述
  1. True Non-German spam(或True Ham):邮件不属于垃圾邮件类别,并且David系统也确认其为正常邮件类别。
    generator:目前无需对生成器进行任何操作或调整。
    discriminator:目前判别器无需进行任何优化或调整。
在这里插入图片描述

基于上面讨论,图示Network如何训练的:

在这里插入图片描述

训练的步骤包括:

取batch的训练集x,和随机生成noise z;

计算loss;

使用back propagation更新generator和discriminator;

已完成对True Positive, False Negative, False Positive情况的全面分析,在这些情况下应采取相应的更新措施。

在生成器生成虚假数据时被捕获的情况被视为真阳性,在这种情况下为了提高性能需对该生成器进行优化。具体来说,在固定判别器参数的情况下计算损失值,并通过更新其权重参数来提升性能。需要注意的是,在每次训练过程中仅能对两个网络中的一个进行参数调整以防止模型过拟合问题的发生

在这里插入图片描述

Type II Error

在这里插入图片描述

False Positive: The fake data generated by the generator is classified as real by the discriminator during training. Only the discriminator is updated.

在这里插入图片描述

如何结合上前一节介绍的数学原理?

现在让我们用更数学的角度来解释一下:

我们有一个已知的真实分布,在经过generator的作用后生成了一个假分布。由于这两个分布并不完全相同,在这种情况下它们之间必然存在KL散度这一指标,并且其对应的损失函数也不等于零。

在这里插入图片描述

判别器同时观察到了real数据集和假数据集的概率分布。
若判别器能够分辨出由生成器产生的数据与真实数据之间的差异,则计算损失函数并进行反向传播以更新生成器模型参数的过程。

在这里插入图片描述

generator更新完成后,生成的fake数据更符合real的分布。

在这里插入图片描述

如果生成的数据集仍然与真实数据分布不够接近,则表明discriminator能够识别出来;这促使我们进一步优化了生成器的参数设置。

在这里插入图片描述

最终这次discriminator被成功欺骗了;它误以为generator生成的数据与real分布一致。这对应False Positive的情况,需要对其进行更新。

在这里插入图片描述

Loss反向传播来更新discriminator的权重。

在这里插入图片描述

持续执行这个过程, 直到generator生成的输出结果与real数据无法区分开来时, 网络达到了纳什均衡.

在这里插入图片描述

1.3.3 更多实际应用

(Conditional) Synthesis—条件生成

有趣的是Text2Image和Image2Text这两种方法都相当有意思哦!它们能够从一段文字中生成一张图片呢?比如这个Multi-Condition GAN(MA-GAN)的应用就是一个很好的例子。

在这里插入图片描述

Data Augmentation—数据增强

GAN通过分析训练集样本的分布特征,并通过采样生成新的样本数据后, 从而可以利用这些新样本进一步提升训练集的质量。
通常的做法是通过旋转和扭曲原始图片来进行数据增强, 而这里GAN提供了一种全新的数据增强方法.

Style Transfer和Manipulation-风格转换

将一张图片的风格转移到另一张图像上,则与神经风格转移非常相似。神经风格转移其本质是将Style Image所具有的风格融入到Content Image之中。然而由于仅提供了一张Style Image的原因,在这种情况下网络所学到的东西难以完全囊括所有Style特征(因为一位艺术家的独特风格难以仅凭一件作品来全面展现)。基于生成对抗网络(GAN)则能够有效地从多个作品中学习捕捉艺术家的真实风格特征。

第2/3列为neural style transfer的效果,第5列为cycleGAN:

在这里插入图片描述

可以看出对背景特别有效,比如对云的转换等:

在这里插入图片描述

GAN在动物和水果上的效果:

在这里插入图片描述

四季变换:

在这里插入图片描述

改变照片的景深:

在这里插入图片描述

对线稿填充变成真实的物体:

在这里插入图片描述

可以利用风格转换来渲染图像,变成游戏GTA风格的:

在这里插入图片描述

将白天变夜晚:

在这里插入图片描述

style transfer可以具体见这个survey

Image Super-Resolution

即将图像从低分辨率LR恢复到高分辨率HR:

在这里插入图片描述

1.3.4 小结

更多应用,请参考这篇文章。

最后部分如需进一步了解生成对抗网络(GAN)的发展历程及其当前流行的模型案例,请参考这篇综述文章:生成对抗网络(GAN)的发展史

声明

本博客所有内容仅供学习,不为商用,如有侵权,请联系博主谢谢。

参考文献

[1] GANs数学原理:https://zhuanlan.zhihu.com/p/54096381

[2] GANs数学原理:

[3] GANs原理:https://www.jianshu.com/p/bc781ac06c62

[4] 邮件识别:https://www.zhihu.com/question/63493495

更多应用场景:https://machine learning mastery.com/generative adversarial networks 的应用场景

全部评论 (0)

还没有任何评论哟~