Improved Techniques for Training GANs

2023-05-16

Improved Techniques for Training GANs

在这项工作中,我们介绍了几种旨在鼓励GANs游戏收敛的技术。这些技术的动机是对非收敛问题的启发式理解。它们导致了半监督学习效果的提高和样本生成的改进。我们希望其中一些技术可以成为未来工作的基础,为收敛性提供正式的保证。

All code and hyperparameters may be found at: https://github.com/openai/ improved_gan

3 Toward Convergent GAN Training

训练GAN是为了找到一个双人非合作游戏的纳什均衡。每个玩家都希望最小化自己的成本函数, J ( D ) ( θ ( D ) , θ ( D ) ) J^{(D)}(θ^{(D)}, θ^{(D)}) J(D)(θ(D),θ(D))为判别器, J ( G ) ( θ ( D ) , θ ( D ) ) J^{(G)}(θ^{(D)}, θ^{(D)}) J(G)(θ(D),θ(D))为生成器。纳什均衡是一个点 ( θ ( D ) , θ ( G ) ) (θ(D),θ(G)) (θ(D),θ(G)),使得 J ( D ) J^{(D)} J(D)相对于 θ ( D ) θ^{(D)} θ(D)处于最小值,使得 J ( G ) J^{(G)} J(G)相对于 θ ( G ) θ^{(G)} θ(G)处于最小值。不幸的是,寻找纳什均衡是一个非常困难的问题。有专门的算法,但我们不知道有什么算法可以应用于GAN博弈,因为GAN博弈的成本函数是非凸的,参数是连续的,而且参数空间是极高维的。

当每个玩家的成本最小时,纳什均衡就会出现,这一想法似乎直观地促使我们使用传统的基于梯度的最小化技术来同时最小化每个玩家的成本。不幸的是,修改 θ ( D ) θ^{(D)} θ(D)以减少 J ( D ) J^{(D)} J(D)可以增加 J ( G ) J^{(G)} J(G),而修改 θ ( G ) θ^{(G)} θ(G)以减少 J ( G ) J^{(G)} J(G)可以增加 J ( D ) J^{(D)} J(D)

因此,梯度下降在许多游戏中都不能收敛。例如,当一个玩家对x最小化xy,另一个玩家对y最小化-xy时,梯度下降会进入一个稳定的轨道,而不是收敛到x=y=0,即期望的均衡点[15]。因此,以前的GAN训练方法是同时对每个玩家的成本进行梯度下降,尽管不能保证这个过程会收敛。我们引入了以下启发式的技术,以鼓励收敛。

3.1 Feature matching

特征匹配通过为生成器指定一个新的目标来解决GANs的不稳定性,防止它对当前判别器的过度训练。新的目标不是直接最大化判别器的输出,而是要求生成器生成与真实数据的统计量相匹配的数据,在这里我们只用判别器来指定我们认为值得匹配的统计量。具体来说,我们训练生成器来匹配鉴别器中间层上的特征的预期值。这是生成器要匹配的统计数据的自然选择,因为通过训练判别器,我们要求它找到那些对真实数据和当前模型生成的数据最具区分力的特征。

让f(x)表示判别器中间层的激活,我们对生成器的新目标定义为。 ∣ ∣ E x ∼ p d a t a f ( x ) − E z ∼ p z ( z ) f ( G ( z ) ) ∣ ∣ 2 2 ||\mathbb E_{x∼p_{data}} \mathbf f(x) - \mathbb E_{z∼p_z(z)}f(G(z))||^2_2 Expdataf(x)Ezpz(z)f(G(z))22。鉴别器,以及f(x),都是以常规方式训练的。与常规的GAN训练一样,目标有一个固定点,即G与训练数据的分布完全匹配。我们不能保证在实践中达到这个固定点,但我们的经验结果表明,在常规GAN变得不稳定的情况下,特征匹配确实有效。

3.2 Minibatch discrimination

GAN的主要失败模式之一是模式崩溃。当崩溃到单一模式时,鉴别器的梯度可能会指向许多类似点的类似方向。因为鉴别器独立处理每个例子,它的梯度之间没有协调,因此没有机制告诉生成器的输出变得更不相似。

取而代之的是,所有输出都朝着鉴别器当前认为非常真实的一个点竞争。崩溃发生后,鉴别器得知这个single point来自发生器,但梯度下降法无法分离相同的输出。鉴别器的梯度将发生器产生的single point永远推到空间周围,该算法不能收敛到具有正确熵的分布。避免这类失败的一个明显策略是允许鉴别器组合查看多个数据示例,并执行我们称之为minibatch discrimination。

minibatch discrimination的概念是相当普遍的:任何结合而不是孤立地看多个样本的判别器模型都有可能帮助避免生成器的崩溃。事实上,Radford等人[3]在判别器中成功地应用了批量规范化,从这个角度可以很好地解释。不过,到目前为止,我们的实验仅限于那些明确旨在识别特别接近的生成器样本的模型。

一个成功的例子是对mini-batch中的样本之间的接近性进行建模。让 f ( x i ) ∈ R A \mathbf f(x_i)∈\mathbb R^A f(xi)RA表示输入 x i x_i xi的特征向量,由判别器的某个中间层产生。然后我们将向量 f ( x i ) f(x_i) f(xi)乘以张量 T ∈ R A × B × C T∈\mathbb R^{ A×B×C} TRA×B×C,得出矩阵$M_i∈\mathbb R^{B×C} $。

在这里插入图片描述

图1:图中简述了minibatch discrimination的工作方式。来自样本xi的特征f(xi)通过张量T相乘,并计算出cross-sample的距离。

We then compute the L1-distance between the rows of the resulting matrix Mi across samples$ i ∈ {1, 2, . . . , n}$ and apply a negative exponential (Fig. 1): c b ( x i , x j ) = e x p ( − ∣ ∣ M i , b − M j , b ∣ ∣ L 1 ) ∈ R c_b(x_i, x_j ) = exp(-||M_{i,b} - M_{j,b}||_{L_1}) ∈ \mathbb R cb(xi,xj)=exp(Mi,bMj,bL1)R。 然后,这个minibatch层对一个样本xi的输出 o ( x i ) o(x_i) o(xi)被定义为对所有其他样本的 c b ( x i , x j ) c_b(x_i, x_j ) cb(xi,xj)之和。

在这里插入图片描述

接下来,我们将minibatch layer的输出o(xi)与作为其输入的中间特征f(xi)相连接,并将结果送入判别器下一层中。我们对来自生成器和训练数据的样本分别计算这些迷你批的特征。和以前一样,判别器仍然需要为每个例子输出一个数字,表明它来自训练数据的可能性。因此,鉴别器的任务实际上仍然是将单个例子分类为真实数据或生成的数据,但它现在能够使用迷你批中的其他例子作为侧面信息。Minibatch判别器使我们能够非常迅速地生成具有视觉吸引力的样本,在这方面,它优于特征匹配(第6节)。然而,有趣的是,如果目标是使用第5节中描述的半监督学习方法获得一个强大的分类器,那么特征匹配被发现效果更好。

3.3 Historical averaging

当应用这种技术时,我们修改每个玩家的成本,以包括一个项 ∣ ∣ θ − 1 t Σ i = 1 t θ [ i ] ∣ ∣ 2 ||θ-\frac{1}{t}\Sigma^t_{i=1} θ[i]||^2 θt1Σi=1tθ[i]2,其中θ[i]是过去时间i的参数值。参数的历史平均值可以以在线方式更新,因此这种学习规则可以很好地扩展到长时间序列。

3.4 One-sided label smoothing

标签平滑技术是20世纪80年代的一项技术,最近由Szegedy等人[17]独立地重新发现,用平滑的值(如.9或.1)取代分类器的0和1目标,最近被证明可以减少神经网络对对抗性例子的脆弱性[18]。

在这里插入图片描述

3.5 Virtual batch normalization

1855700807)]

3.5 Virtual batch normalization

批量规范化极大地改善了神经网络的优化,并被证明对DCGANs非常有效[3]。然而,它导致神经网络对一个输入样本x的输出高度依赖于同一minibatch中其他几个输入 x ′ x' x。为了避免这个问题,我们引入了虚拟批次规范化(VBN),在这个过程中,每个例子x都是根据在训练开始时选择一次并固定的参考批次的例子和x本身的统计数据进行规范化。参考批次仅使用其自身的统计数据进行规范化。VBN的计算成本很高,因为它需要在两个小批的数据上运行前向传播,所以我们只在生成器网络中使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Improved Techniques for Training GANs 的相关文章

随机推荐

  • ceres-solver和g2o性能比较

    前言 ceres solver 和 g2o 是slam领域常见的优化器 xff0c 其中ceres solver被vins mono使用 xff0c 而g2o被orb slam3使用 xff0c 因此到底哪个优化器更适合于在slam算法开发
  • FreeRTOS的vTaskDelete使用说明

    FreeRTOS的vTaskDelete使用说明 函数说明 参数 xff1a xTaskToDelete 要删除的任务的任务句柄 返回值 无 说明 删除一个用函数xTaskCreate 或者xTaskCreateStatic 创建的任务 x
  • 机器学习——随机森林(Random Forest)

    1 随机森林 xff08 random forest xff09 简介 随机森林是一种集成算法 xff08 Ensemble Learning xff09 xff0c 它属于Bagging类型 xff0c 通过组合多个弱分类器 xff0c
  • 《基础知识——C和C++的主要区别》

    C和C 43 43 的主要区别 设计思想上 xff1a C 43 43 是面向对象的语言 xff0c 而C是面向过程的结构化编程语言 语法上 xff1a C 43 43 具有封装 继承和多态三种特性 C 43 43 相比C xff0c 增加
  • 数据库原理及应用(十三)E-R图、关系模式

    数据库设计的过程 数据分析 gt 数据建模 gt 关系数据库模式 gt 关系数据库管理 用户需求 gt 概念模型 E R Model gt 逻辑模型 xff08 三层结构 xff09 现实世界 gt 信息世界 gt 机器世界 概念设计工具E
  • Ubuntu数据备份与恢复工具(一)

    在我们日常工作中 xff0c 个人文件 业务数据及应用信息的备份与恢复策略是一个重要的环节 意外删除 硬件故障 操作失误 网络攻击 xff0c 甚至是自然灾害 xff0c 都可以直接或间接导不可估价的数据损失 为了避免损失 xff0c 缩少
  • 百度移动端面试回忆

    百度一面 xff1a 1 自我介绍 2 悲观锁和乐观锁 乐观锁 xff1a 总是认为不会产生并发问题 xff0c 每次去取数据的时候总认为不会有其他线程对数据进行修改 xff0c 因此不会上锁 xff0c 但是在更新时会判断其他线程在这之前
  • Quagga编译安装

    Quagga源码编译安装 1 Quagga下载 1 官网下载quagga 1 2 4 tar gz并拖入虚拟机桌面 2 解压到 opt目录下 sudo tar zxvf Desktop quagga 1 2 4 tar gz C opt 2
  • VINS-FUSION 源码 双目 单线程 按执行顺序阅读

    VINS FUSION 源码 双目 单线程 按执行顺序阅读 Keywords xff1a VINS FUSION vins 源码解读 源码梳理 vins数据结构 vinsfusion vins双目 双目vins 双目vinsfusion 双
  • 【C语言】__attribute__使用

    一 介绍 GNU C 的一大特色就是 attribute 机制attribute 可以设置函数属性 xff08 Function Attribute xff09 变量属性 xff08 Variable Attribute xff09 和类型
  • Ubuntu20.04下CUDA、cuDNN的详细安装与配置过程(图文)

    Ubuntu20 04下CUDA cuDNN的详细安装与配置过程 xff0c 亲测试可用 xff08 图文 xff09 一 NVIDIA xff08 英伟达 xff09 显卡驱动安装1 1 关闭系统自带驱动nouveau2 2 NVIDIA
  • 使用动量(Momentum)的SGD、使用Nesterov动量的SGD

    使用动量 Momentum 的SGD 使用Nesterov动量的SGD 参考 xff1a 使用动量 Momentum 的SGD 使用Nesterov动量的SGD 一 使用动量 Momentum 的随机梯度下降 虽然随机梯度下降是非常受欢迎的
  • Data Uncertainty Learning in Face Recognition

    Data Uncertainty Learning in Face Recognition 建模数据的不确定性对含噪音图像非常重要 xff0c 但对于人脸识别的研究却很少 先驱者的工作 35 通过将每个人脸图像嵌入建模为高斯分布来考虑不确定
  • ENAS代码解读

    ENAS代码解读 参考代码 xff1a https github com TDeVries enas pytorch 数据集 xff1a cifar10 main函数 xff1a span class token keyword def s
  • PC-DARTS Partial Channel Connections for Memory-Efficient Differentiable Architecture Search

    PC DARTS Partial Channel Connections for Memory Efficient Differentiable Architecture Search Abstract 可微体系结构搜索 xff08 DAR
  • deepsort代码解析

    DeepSort代码解析 项目地址 xff1a deepsort span class token keyword if span name span class token operator 61 61 span span class t
  • CBAM

    CBAM 我们提出了卷积块注意力模块 xff08 CBAM xff09 xff0c 这是一个简单而有效的前馈卷积神经网络的注意力模块 给定一个中间特征图 xff0c 我们的模块沿着通道和空间两个独立的维度依次推导注意力图 xff0c 然后将
  • onos2.0编译安装(npm install和 build问题解决)

    onos编译安装 Ubuntu16 04 1 前置下载安装 1 1 前置包安装 sudo apt get install git sudo apt get install python Oracle JDK8 sudo apt get in
  • iDLG Improved Deep Leakage from Gradients

    iDLG Improved Deep Leakage from Gradients 人们普遍认为 xff0c 在分布式学习系统中 xff0c 如协作学习和联合学习等 xff0c 共享梯度不会泄露私人训练数据 最近 xff0c Zhu等人 1
  • Improved Techniques for Training GANs

    Improved Techniques for Training GANs 在这项工作中 xff0c 我们介绍了几种旨在鼓励GANs游戏收敛的技术 这些技术的动机是对非收敛问题的启发式理解 它们导致了半监督学习效果的提高和样本生成的改进 我