关于自然语言处理:深度学习进阶篇8对抗神经网络GAN基本概念简介纳什均衡生成器判别器解码编码器详解以及GAN应用场景

42次阅读

共计 4945 个字符,预计需要花费 13 分钟才能阅读完成。

深度学习进阶篇[8]:反抗神经网络 GAN 基本概念简介、纳什平衡、生成器判断器、解码编码器详解以及 GAN 利用场景

反抗神经网络 GAN 基本概念简介:generative adversarial network

1. 博弈论

博弈论能够被认为是两个或多个 感性 的代理人或玩家之间相互作用的模型。

感性 这个关键字,因为它是博弈论的根底。咱们能够简略地把感性称为一种了解,即每个行为人都晓得所有其余行为人都和他 / 她一样感性,领有雷同的了解和常识程度。同时,感性指的是,思考到其余行为人的行为,行为人总是偏向于更高的报酬 / 回报。

既然咱们曾经晓得了感性意味着什么,让咱们来看看与博弈论相干的其余一些关键词:

  • 游戏: 一般来说,游戏是由一组玩家,口头 / 策略和最终收益组成。例如: 拍卖、象棋、政治等。
  • 玩家: 玩家是参加任何游戏的感性实体。例如: 在拍卖会的投标人、石头剪刀布的玩家、加入选举的政治家等。
  • 收益: 收益是所有玩家在取得特定后果时所取得的处分。它能够是正的,也能够是负的。正如咱们之前所探讨的,每个代理都是自私的,并且想要最大化他们的收益。

2. 纳什平衡

纳什平衡(或者纳什均衡),Nash equilibrium,又称为非单干博弈平衡,是人工智能博弈论办法的“基石”。

所谓纳什平衡,指的是参与者的一种策略组合,在该策略上,任何参加人独自扭转策略都不会失去益处,即 每个人的策略都是对其他人的策略的最优反馈。换句话说,如果在一个策略组合上,当所有其他人都不扭转策略时,没有人会扭转本人的策略,则该策略组合就是一个纳什平衡。

经典的例子就是 囚徒窘境

背景:一个案子的两个嫌疑犯 A 和 B 被警官离开审判,所以 A 和 B 没有机会进行串供的;

奖惩:警官别离通知 A 和 B,如果都不招供,则各判 3 年;如果两人均招供,均判 5 年;如果你招供、而对方不招供,则你判 1 年,对方 10 年。

后果: A 和 B 都抉择招供,各判 5 年,这个便是此时的纳什平衡。

从奖惩阐明看都不招供才是最优解,判刑起码。其实并不是这样,A 和 B 无奈沟通,于是从各自的利益角度登程:

嫌疑犯 A 想法:

  • 如果 B 招供,如果我招供只判 5 年,不招供的话就判 10 年;
  • 如果 B 不招供,如果我招供只判 1 年,不招供的话就判 3 年;

所以无论 B 是否招供,A 只有招供了,对 A 而言是最优的策略。

同上,嫌疑犯 B 想法也是雷同的,都根据各自的感性而抉择招供,这种状况就被称为纳什均衡点。

3.GAN 生成器的输出为什么是噪声

GAN 生成器 Generator 的输出是随机噪声,目标是每次生成不同的图片。但如果齐全随机,就不晓得生成的图像有什么特色,后果就会不可控,因而通常从一个先验的随机散布产生噪声。罕用的随机散布:

  • 高斯分布:连续变量中最宽泛应用的概率分布;
  • 均匀分布:连续变量 x 的一种简略散布。

引入随机噪声使得生成的图片具备多样性,比方下图不同的噪声 z 能够产生不同的数字:

4. 生成器 Generator

生成器 G 是一个生成图片的网络,能够采纳多层感知机、卷积网络、自编码器等。它接管一个随机的噪声 z,通过这个噪声生成图片,记做 G(z)。通过下图模型构造解说生成器如何一步步将噪声生成一张图片:

1)输出:100 维的向量;

2)通过两个全连贯层 Fc1 和 Fc2、一个 Resize,将噪声向量放大,失去 128 个 7 * 7 大小的特色图;

3)进行上采样,以扩充特色图,失去 128 个 14*14 大小的特色图;

4)通过第一个卷积 Conv1,失去 64 个 14*14 的特色图;

5)进行上采样,以扩充特色图,失去 64 个 28*28 大小的特色图;

6)通过第二个卷积 Conv2,将输出的噪声 Z 逐步转化为 1 2828 的单通道图片输入,失去生成的手写数字。

Tips:全连贯层作用:维度变换,变为高维,不便将噪声向量放大。因为全连贯层计算量稍大,后序改良的 GAN 移除全连贯层。

Tips:最初一层激活函数通常应用 tanh():既起到激活作用,又起到归一作用,将生成器的输入归一化至[-1,1],作为判断器的输出。也使 GAN 的训练更稳固,收敛速度更快,生成品质的确更高。

5. 判断器 Discriminator

判断器 D 的输出为实在图像和生成器生成的图像,其目标是将生成的图像从实在图像中尽可能的分辨进去。属于二分类问题,通过下图模型构造解说判断器如何辨别虚实图片:

  • 输出:单通道图像,尺寸为 28*28 像素(非固定值,依据理论状况批改即可)。
  • 输入:二分类,样本是真或假。

1)输出:2828 1 像素的图像;

2)通过第一个卷积 conv1,失去 64 个 2626 的特色图,而后进行最大池化 pool1,失去 64 个 1313 的特色图;

3)通过第二个卷积 conv2,失去 128 个 1111 的特色图,而后进行最大池化 pool2,失去 128 个 5 5 的特色图;

4)通过 Resize 将多维输出一维化;

5)再通过两个全连贯层 fc1 和 fc2,失去原始图像的向量表白;

6)最初通过 Sigmoid 激活函数,输入判断概率,即图片是真是假的二分类后果。

6.GAN 损失函数

在训练过程中,生成器 G(Generator)的指标就是尽量生成实在的图片去坑骗判断器 D(Discriminator)。而 D 的指标就是尽量把 G 生成的图片和实在的图片辨别开。这样,G 和 D 形成了一个动静的“博弈过程”。

最初博弈的后果是什么?在最现实的状态下,G 能够生成足以“以假乱真”的图片 G(z)。对于 D 来说,它难以断定 G 生成的图片到底是不是实在的,因而 D(G(z)) = 0.5。

用公式示意如下:

$$\begin{equation} \mathop{min}\limits_{G}\mathop{max}\limits_{D}V(D,G) = Ε_{x\sim p_{data}(x)} \left[\log D\left(x\right)\right]+Ε_{z\sim p_{z}(z)}\left[\log \left(1 – D\left(G\left(z\right)\right)\right)\right]\end{equation} \tag{1}$$

公式右边 V(D,G)示意生成图像和实在图像的差别度,采纳二分类 (真、假两个类别) 的穿插熵损失函数。蕴含 minG 和 maxD 两局部:

$\mathop{max}\limits_{D}V(D,G)$ 示意固定生成器 G 训练判断器 D,通过最大化穿插熵损失 V(D,G)来更新判断器 D 的参数。D 的训练指标是正确区分实在图片 x 和生成图片 G(z),D 的鉴别能力越强,D(x)应该越大,左边第一项更大,D(G(x))应该越小,左边第二项更大。这时 V(D,G)会变大,因而式子对于 D 来说是求最大(maxD)。

$\mathop{min}\limits_{G}\mathop{max}\limits_{D}V(D,G)$ 示意固定判断器 D 训练生成器 G,生成器要在判断器最大化真、假图片穿插熵损失 V(D,G)的状况下,最小化这个穿插熵损失。此时左边只有第二项有用,G 心愿本人生成的图片“越靠近实在越好”,可能坑骗判断器,即 D(G(z))尽可能得大,这时 V(D, G)会变小。因而式子对于 G 来说是求最小(min_G)。

  • $$x\sim p_{data}(x)$$:示意实在图像;
  • $z\sim p_{z}(z)$:示意高斯分布的样本,即噪声;
  • D(x)代表 x 为实在图片的概率,如果为 1,就代表 100% 是实在的图片,而输入为 0,就代表不可能是实在的图片。

等式的左边其实就是将等式右边的穿插商损失公式开展,并写成概率分布的冀望模式。具体的推导请参见原论文 Generative Adversarial Nets。

7. 模型训练

GAN 蕴含生成器 G 和判断器 D 两个网络,那么咱们如何训练两个网络?

训练时先训练鉴别器 D 将实在图片打上真标签 1 和生成器 G 生成的假图片打上假标签 0,一起组成 batch 送入判断器 D,对判断器进行训练。计算 loss 时使判断器对实在图像输出的判断趋近于真,对生成的假图片的判断趋近于假。此过程中只更新判断器的参数,不更新生成器的参数。

而后再训练生成器 G 将高斯分布的噪声 z 送入生成器 G,将生成的假图片打上真标签 1 送入判断器 D。计算 loss 时使判断器对生成的假图片的判断趋近于真。此过程中只更新生成器的参数,不更新判断器的参数。

留神:训练初期,当 G 的生成成果很差时,D 会以高置信度来回绝生成样本,因为它们与训练数据显著不同。因而,log(1−D(G(z)))饱和(即为常数,梯度为 0)。因而咱们抉择最大化 logD(G(z))而不是最小化 log(1−D(G(z)))来训练 G,和公示 (1) 左边第二项比拟。

8 模型训练不稳固

GAN 训练不稳固的 起因 如下:

  • 不收敛:很难使两个模型 G 和 D 同时收敛;
  • 模式解体:生成器 G 生成单个或无限模式;
  • 慢速训练:生成器 G 的梯度隐没。

训练 GAN 的时候,能够采取以下 训练技巧:

1)生成器最初一层的激活函数用 tanh(),输入归一化至[-1, 1];

2)实在图像也归一化到 [-1,1] 之间;

3)学习率不要设置太大,初始 1e- 4 能够参考,另外能够随着训练进行一直放大学习率;

4)优化器尽量抉择 Adam,因为 SGD 解决的是一个寻找最小值的问题,GAN 是一个博弈问题,应用 SGD 容易震荡;

5)防止应用 ReLU 和 MaxPool,缩小稠密梯度的可能性,能够应用 Leak Re LU 激活函数,下采样能够用 Average Pooling 或者 Convolution + stride 代替。上采样能够用 PixelShuffle, ConvTranspose2d + stride;

6)加噪声:在实在图像和生成图像中增加噪声,减少鉴别器训练难度,有利于晋升稳定性;

7)如果有标签数据,尽量应用标签信息来训练;

8)标签平滑:如果实在图像的标签设置为 1,咱们将它更改为一个较低的值,比方 0.9,防止鉴别器对其分类过于自信。

9. 编码器 Encoder

Encoder 指标是将输出序列编码成低维的向量示意或 embedding,映射函数如下:

$$\begin{equation}V\to R^{d}\end{equation} \tag{1}$$

行将输出 V 映射成 embedding $z_i\in R^{d}$,如下图所示:

Encoder 个别是卷积神经网络,次要由卷积层,池化层和 BatchNormalization 层组成。卷积层负责获取图像局域特色,池化层对图像进行下采样并且将尺度不变特色传送到下一层,而 BN 次要对训练图像的散布归一化,减速学习。(Encoder 网络结构不局限于卷积神经网络)

以人脸编码为例,Encoder 将人脸图像压缩到短向量,这样短向量就蕴含了人脸图像的次要信息,例如该向量的元素可能示意人脸肤色、眉毛地位、眼睛大小等等。编码器学习不同人脸,那么它就能学习到人脸的共性:

10. 解码器 Decoder

Decoder 指标是利用 Encoder 输入的 embedding,来解码对于图的构造信息。

输出是 Node Pair 的 embeddings,输入是一个实数,掂量了这两个 Node 在中的相似性,映射关系如下:

$$\begin{equation}R^{d} * R^{d}\to R^{+}\end{equation}. \tag{1}$$

Decoder 对放大后的特色图像向量进行上采样,而后对上采样后的图像进行卷积解决,目标是欠缺物体的几何形态,补救 Encoder 当中池化层将物体放大造成的细节损失。

以人脸编码、解码为例,Encoder 对人脸进行编码之后,再用解码器 Decoder 学习人脸的个性,即由短向量复原到人脸图像,如下图所示:

11.GAN 利用

一起来看看 GAN 有哪些乏味的利用:

  • 图像生成

    图像生成是生成模型的根本问题,GAN 绝对先前的生成模型可能生成更高图像品质的图像。如生成真切的人脸图像

  • 超分辨率

    将图像放大时,图片会变得含糊。应用 GAN 将 32*32 的图像扩大为 64*64 的实在图像,放大图像的同时晋升图片的分辨率。

  • 图像修复

    将完好的图像补全、也能够用于去除纹身、电视 logo、水印等。

  • 图像到图像的转换

    依据一幅图像生成生成另一幅格调不同图像,比方马变成斑马图、航拍地图变成地图

  • 风光动漫化

    将风景图转化为动漫成果

  • 漫画脸

    将人脸图生成卡通格调

  • 图像上色

    黑白影像上色

  • 文本转图像

    依据文字描述生成对应图像

GAN 的利用罕用十分宽泛,远远不止上述几种。

正文完
 0