LARGE SCALE GAN TRAINING FORHIGH FIDELITY NATURAL IMAGE SYNTHESIS

ABSTRACT

尽管最近在生成图像建模方面取得了进展,但成功地从复杂的数据集(如ImageNet)生成高分辨率、多样化的样本仍然是一个难以实现的目标。为此,我们在迄今为止尝试的最大规模上训练生成对抗网络,并研究这种规模特有的不稳定性。我们发现,将正交正则化应用于生成器使其适用于简单的“截断技巧”,通过减少生成器输入的方差,可以对样本保真度和多样性之间的权衡进行精细控制。我们的修改导致模型设置了新的状态,在类条件图像合成的艺术。当在128×128分辨率的ImageNet上训练时,我们的模型(BigGANs)实现了166.5的Inception Score (IS)和7.4的Fr´ecet Inception Distance (FID),比之前最好的IS(52.52)和FID(18.65)有所提高。

1 INTRODUCTION

近年来,生成图像建模的状态有了显着的发展,生成对抗网络(gan, Goodfellow等人(2014))在使用直接从数据中学习的模型生成高保真、多样化图像的努力中处于领先地位。GAN训练是动态的,并且对其设置的几乎每个方面都很敏感(从优化参数到模型架构),但是大量的研究已经产生了经验和理论见解,可以在各种设置中实现稳定的训练。尽管取得了这一进展,但条件ImageNet建模(Zhang等人,2018)的当前技术水平达到了52.5分的盗梦分数(Salimans等人,2016),而真实数据为233分。

在这项工作中,我们着手缩小gan生成的图像与来自ImageNet数据集的真实图像之间在保真度和多样性方面的差距。为此,我们作出以下三点贡献:

•我们证明了gan从缩放中受益匪浅,并且与现有技术相比,gan的参数数量增加了2到4倍,批大小增加了8倍。我们引入了两个简单的、通用的架构更改,以提高可伸缩性,并修改了一个正则化方案以改进条件反射,从而明显提高了性能。

•作为我们修改的副作用,我们的模型变得适合“截断技巧”,这是一种简单的采样技术,允许对样本多样性和保真度之间的权衡进行显式的,细粒度的控制。

•我们发现了大规模gan特有的不稳定性,并对其进行了经验表征。利用从这个分析中得到的见解,我们证明了新技术和现有技术的结合可以减少这些不稳定性,但是完整的训练稳定性只能以巨大的性能成本来实现。

我们的修改实质上改进了类条件gan。当在128×128分辨率的ImageNet上训练时,我们的模型(BigGANs)将最先进的Inception Score (IS)和Fr´echet Inception Distance (FID)分别从52.52和18.65提高到166.5和7.4。我们还在256×256和512×512分辨率的ImageNet上成功训练了biggan,并在256×256上实现了232.5和8.1的IS和FID,在512×512上实现了241.5和11.5的IS和FID。最后,我们在更大的数据集JFT-300M上训练我们的模型,并证明我们的设计选择可以很好地从ImageNet迁移。我们预训练生成器的代码和权重是公开的。

2 BACKGROUND

生成对抗网络(GAN)包括生成器(G)和鉴别器(D)网络,它们的目的分别是将随机噪声映射到样本并区分真实样本和生成样本。正式地说,GAN目标的原始形式(Goodfellow et al., 2014)涉及找到以下两个参与者最小-最大问题的纳什均衡:

其中,z∈Rdz是从分布p(z)中提取的潜变量,如N(0, I)或U[- 1,1]。当应用于图像时,G和D通常是卷积神经网络(Radford et al., 2016)。如果没有辅助的稳定技术,这个训练过程是出了名的脆弱,需要精细调整的超参数和架构选择才能工作

因此,最近的许多研究都集中在对普通 GAN 程序进行修改以赋予稳定性,借鉴了越来越多的经验和理论见解(Nowozin 等人,2016 年;Sønderby 等人,2017 年;Fedus 等人,2018 年)。 其中一项工作重点是改变目标函数(Arjovsky et al., 2017; Mao et al., 2016; Lim & Ye, 2017; Bellemare et al., 2017; Salimans et al., 2018)以鼓励收敛。 另一条路线侧重于通过梯度惩罚(Gulrajani et al., 2017; Kodali et al., 2017; Mescheder et al., 2018)或归一化(Miyato et al., 2018)来约束 D,两者都是为了抵消使用无界损失函数并确保 D 为 G 提供无处不在的梯度。

与我们的工作特别相关的是谱归一化(Miyato et al., 2018),它通过运行其第一个奇异值的估计来归一化其参数,从而引入自适应正则化顶部奇异方向的向后动态,从而强制 D 上的 Lipschitz 连续性。 相关 Odena 等人(2018) 分析了 G 的雅可比行列式的条件数,发现性能取决于 G 的条件。 张等人(2018) 发现在 G 中采用谱归一化可以提高稳定性,从而减少每次迭代的 D 步骤。 我们对这些分析进行了扩展,以进一步了解 GAN 训练的病理学。

其他工作侧重于架构的选择,例如 SA-GAN (Zhang et al., 2018),它添加了 (Wang et al., 2018) 中的自注意力块,以提高 G 和 D 建模全局的能力结构。 ProGAN(Karras 等人,2018)通过在一系列分辨率递增的序列中训练单个模型,在单类设置中训练高分辨率 GAN。

在条件 GAN 中(Mirza & Osindero,2014),类别信息可以通过多种方式输入到模型中。 在(Odena et al., 2017)中,它通过将 1-hot 类向量连接到噪声向量来提供给 G,并且修改目标以鼓励条件样本最大化辅助分类器预测的相应类概率。 德弗里斯等人(2017) 和 Dumoulin 等人 (2017) 通过在 BatchNorm (Ioffe & Szegedy, 2015) 层中为其提供类条件增益和偏差,修改类条件传递给 G 的方式。 在 Miyato & Koyama (2018) 中,D 的条件是使用其特征与一组学习类嵌入之间的余弦相似性作为区分真实样本和生成样本的附加证据,有效地鼓励生成特征与学习类原型相匹配的样本。

客观评估隐式生成模型很困难(Theis et al., 2015)。 各种工作提出了启发式方法来测量模型的样本质量,而无需处理可能性(Salimans et al., 2016; Heusel et al., 2017; Bi´nkowski et al., 2018; Wu et al., 2017)。 其中,初始分数(IS,Salimans 等人(2016))和 Fr´echet 初始距离(FID,Heusel 等人(2017))尽管存在明显缺陷,但仍然很受欢迎(Barratt 和 Sharma,2018)。 我们使用它们作为样本质量的近似度量,并能够与以前的工作进行比较。

3 SCALING UP GANS

在本节中,我们将探索扩大 GAN 训练规模的方法,以获得更大模型和更大批次的性能优势。 作为基线,我们采用了Zhang等人的SA-GAN架构(2018),它使用铰链损失 (Lim & Ye, 2017; Tran et al., 2017) GAN 目标。 我们通过类条件 BatchNorm 向 G 提供类信息(Dumoulin et al., 2017;de Vries et al., 2017),并通过投影向 D 提供类信息(Miyato & Koyama, 2018)。 优化设置遵循Zhang et al. (2018)(特别是在 G 中采用谱范数),并进行了修改,我们将学习率减半,并且每个 G 步采取两个 D 步。 为了进行评估,我们按照 Karras 等人的方法采用 G 权重的移动平均值。 (2018); 梅舍德等人2018); 亚兹克等人(2018),衰减为 0.9999。 我们使用正交初始化 (Saxe et al., 2014),而之前的工作使用 N(0, 0.02I) (Radford et al., 2016) 或 Xavier 初始化 (Glorot & Bengio, 2010)。 每个模型都在 Google TPUv3 Pod(Google,2018)的 128 至 512 个核心上进行训练,并在所有设备上计算 BatchNorm 统计数据,而不是像通常那样按设备计算 BatchNorm 统计数据。 我们发现即使对于我们的 512×512 模型,渐进式增长(Karras et al., 2018)也是不必要的。 其他详细信息请参见附录 C。

我们首先增加基线模型的批量大小,并立即发现这样做的巨大好处。 表 1 的第 1-4 行显示,只需将批量大小增加 8 倍,即可将最先进的 IS 提高 46%。 我们推测这是每个批次覆盖更多模式的结果,为两个网络提供了更好的梯度。 这种扩展的一个显着副作用是我们的模型在更少的迭代中达到更好的最终性能,但变得不稳定并经历完全的训练崩溃。 我们将在第 4 节中讨论其原因和后果。对于这些实验,我们报告崩溃前保存的检查点的分数。

然后,我们将每层的宽度(通道数)增加 50%,大约使两个模型中的参数数量增加一倍。 这导致 IS 进一步提高了 21%,我们认为这是由于模型容量相对于数据集复杂性的增加所致。 深度加倍最初并没有带来改进——我们后来在 BigGAN-deep 模型中解决了这个问题,该模型使用了不同的残差块结构。

我们注意到,用于 G 中条件 BatchNorm 层的类嵌入 c 包含大量权重。 我们没有为每个嵌入使用单独的层(Miyato et al., 2018;Zhang et al., 2018),而是选择使用共享嵌入,该嵌入线性投影到每个层的增益和偏差(Perez et al., 2018) )。 这减少了计算和内存成本,并将训练速度(达到给定性能所需的迭代次数)提高了 37%。 接下来,我们将噪声向量 z 的直接跳过连接(skip-z)添加到 G 的多个层,而不仅仅是初始层。 这种设计背后的直觉是让 G 使用潜在空间直接影响不同分辨率和层次结构级别的特征。 在 BigGAN 中,这是通过将 z 分成每个分辨率的一个块,并将每个块连接到条件向量 c 来实现的,条件向量 c 被投影到 BatchNorm 增益和偏差。 在 BigGAN-deep 中,我们使用更简单的设计,将整个 z 与条件向量连接起来,而不将其分割成块。 之前的工作(Goodfellow 等人,2014 年;Denton 等人,2015 年)已经考虑了这个概念的变体; 我们的实现是对此设计的微小修改。 Skip-z 提供约 4% 的适度性能提升,并将训练速度进一步提高 18%。

3.1 TRADING OFF VARIETY AND FIDELITY WITH THE TRUNCATION TRICK

与需要通过潜伏进行反向传播的模型不同,GAN 可以采用任意先验 p(z),但之前的绝大多数工作都选择从 N(0, I) 或 U[−1, 1] 中提取 z。 我们质疑这种选择的最优性,并在附录 E 中探索替代方案。值得注意的是,我们的最佳结果来自于使用与训练中使用的不同的潜在分布进行采样。 采用 z ∼ N(0, I) 训练的模型并从截断的法线中采样 z(其中超出范围的值被重新采样以落在该范围内)立即提供了 IS 和 FID 的提升。 我们称之为截断技巧:通过对高于所选阈值的值进行重新采样来截断 z 向量,从而提高单个样本的质量,但代价是总体样本多样性的减少。 图 2(a) 证明了这一点:随着阈值减小,z 的元素被截断为零(潜在分布的众数),各个样本接近 G 的输出分布的众数。 关于这种权衡的相关观察见(Marchesi,2016;Pieters & Wiiering,2014)。 该技术允许对给定 G 的样本质量和多样性之间的权衡进行细粒度的事后选择。值得注意的是,我们可以计算一系列阈值的 FID 和 IS,获得让人想起精度的多样性保真度曲线 -回忆曲线(图17)。 由于 IS 不会惩罚类条件模型中缺乏多样性,因此降低截断阈值会导致 IS 的直接增加(类似于精度)。 FID 会惩罚缺乏多样性(类似于召回),但也会奖励精确度,因此我们最初看到 FID 略有改善,但随着截断接近零且多样性减少,FID 急剧下降。 对于许多模型来说,由于使用与训练中不同的潜值进行采样而导致的分布变化是有问题的。 我们的一些较大模型不适合截断,在输入截断噪声时会产生饱和伪影(图 2(b))。 为了解决这个问题,我们寻求通过将 G 调节为平滑来强制截断,以便 z 的整个空间将映射到良好的输出样本。 为此,我们求助于正交正则化(Brock et al., 2017),它直接强制执行正交性条件:

其中 W 是权重矩阵,β 是超参数。 众所周知,这种正则化通常限制太多(Miyato 等人,2018),因此我们探索了几种旨在放松约束的变体,同时仍然为我们的模型提供所需的平滑度。 我们发现最有效的版本从正则化中删除了对角项,旨在最小化滤波器之间的成对余弦相似度,但不限制它们的范数:

其中 1 表示所有元素设置为 1 的矩阵。我们扫描 β 值并选择 10^-4,发现这个小的附加惩罚足以提高我们的模型适合截断的可能性。 在表 1 中的运行中,我们观察到,在没有正交正则化的情况下,只有 16% 的模型适合截断,而使用正交正则化训练时,这一比例为 60%

3.2 SUMMARY

我们发现当前的 GAN 技术足以扩展到大型模型和分布式、大批量训练。 我们发现我们可以显着提高最先进的水平并训练高达 512×512 分辨率的模型,而不需要像 Karras 等人(2018)那样的显式多尺度方法。尽管有这些改进,我们的模型还是经历了训练崩溃,需要在实践中提前停止。 在接下来的两节中,我们将研究为什么在之前的作品中稳定的设置在大规模应用时会变得不稳定。

4 ANALYSIS

谱归一化前 G (a) 和 D (b) 层中第一个奇异值 σ0 的典型图。 G 中的大多数层都具有表现良好的光谱,但在没有限制的情况下,一小部分子集会在整个训练过程中增长并在崩溃时爆炸。 D 的光谱噪声更大,但在其他方面表现更好。 从红色到紫色的颜色表示深度增加。

4.1 CHARACTERIZING INSTABILITY: THE GENERATOR

之前的许多工作已经从各种分析角度和玩具问题上研究了 GAN 的稳定性,但我们观察到的不稳定性发生在小规模稳定的设置中,需要大规模的直接分析。 我们在训练期间监控一系列权重、梯度和损失统计数据,寻找可能预示训练崩溃开始的指标,类似于(Odena 等人,2018)。 我们发现每个权重矩阵的前三个奇异值 σ0、σ1、σ2 提供的信息最多。 可以使用 Alrnoldi 迭代方法(Golub & der Vorst,2000)有效地计算它们,该方法扩展了 Miyato 等人使用的幂迭代方法。 (2018),估计额外的奇异向量和值。 出现了一个清晰的模式,如图 3(a) 和附录 F 所示:大多数 G 层具有表现良好的谱范数,但某些层(通常是 G 中的第一层,它是过完备的且不是卷积的) 行为不端,其光谱规范在训练过程中不断增长,并在崩溃时爆炸。

为了确定这种病理学是崩溃的原因还是仅仅是一种症状,我们研究了对 G 施加额外条件以明确抵消光谱爆炸的效果。 首先,我们直接将每个权重的顶部奇异值 σ0 正则化,要么朝向固定值 σreg,要么朝向第二个奇异值 r·sg(σ1) 的某个比率 r(使用 sg 停止梯度操作来防止正则化 增加 σ1)。 或者,我们采用部分奇异值分解来限制 σ0。 给定一个权重 W、它的第一个奇异向量 u0 和 v0,以及 σclamp 将 σ0 钳制到的值,我们的权重变为:

其中 σclamp 设置为 σreg 或 r·sg(σ1)。 我们观察到,无论有没有频谱归一化,这些技术都具有防止 σ0 或 σ0/σ1 逐渐增加和爆炸的效果,但即使在某些情况下它们稍微提高了性能,但没有任何组合可以防止训练崩溃。 这一证据表明,虽然调节 G 可能会提高稳定性,但不足以确保稳定性。 因此我们将注意力转向D。

4.2 CHARACTERIZING INSTABILITY: THE DISCRIMINATOR

与 G 一样,我们分析 D 权重的频谱以深入了解其行为,然后通过施加额外的约束来寻求稳定训练。 图 3(b) 显示了 D 的 σ0 的典型图(附录 F 中有更多图)。 与 G 不同,我们看到光谱有噪声,σ0/σ1 表现良好,并且奇异值在整个训练过程中不断增长,但仅在崩溃时跳跃,而不是爆炸。

D 谱中的尖峰可能表明它周期性地接收非常大的梯度,但我们观察到 Frobenius 范数是平滑的(附录 F),表明这种效应主要集中在前几个奇异方向上。 我们假设这种噪声是通过对抗性训练过程进行优化的结果,其中 G 定期生成强烈干扰 D 的批次。 如果这种谱噪声与不稳定性有因果关系,那么自然的对策是采用梯度惩罚,它明确地规范了 D 雅可比行列式的变化。 我们探索了 Mescheder 等人的 R1 零中心梯度惩罚。 (2018):

使用默认建议的 γ 强度为 10 时,训练变得稳定并提高了 G 和 D 中光谱的平滑度和有界性,但性能严重下降,导致 IS 降低 45%。 减少惩罚可以部分缓解这种退化,但会导致光谱表现越来越差; 即使惩罚强度降低到 1(不会发生突然崩溃的最低强度),IS 也会降低 20%。 使用正交正则化、DropOut(Srivastava 等人,2014)和 L2(有关详细信息,请参阅附录 I)的各种强度重复此实验,揭示了这些正则化策略的类似行为:对 D 进行足够高的惩罚,可以实现训练稳定性 ,但会以巨大的性能成本为代价。

我们还观察到 D 的损失在训练期间接近于零,但在崩溃时经历了急剧的向上跳跃(附录 F)。 对于这种行为的一种可能的解释是 D 过度拟合训练集,记住训练示例而不是学习真实图像和生成图像之间的一些有意义的边界。 作为对 D 记忆的简单测试(与 Gulrajani 等人(2017)相关),我们评估 ImageNet 训练和验证集上的未折叠判别器,并测量被分类为真实样本或生成样本的百分比。 虽然训练准确率始终高于 98%,但验证准确率在 50-55% 范围内,并不比随机猜测好(无论正则化策略如何)。 这证实了D确实在记忆训练集; 我们认为这符合 D 的角色,它不是明确地概括,而是提炼训练数据并为 G 提供有用的学习信号。附录 G 中提供了额外的实验和讨论。

4.3 SUMMARY

我们发现稳定性不仅仅来自 G 或 D,而是来自它们在对抗性训练过程中的相互作用。 虽然他们体能不佳的症状可以用来追踪和识别不稳定性,但确保合理的体能训练对于训练来说是必要的,但不足以防止最终的训练崩溃。 可以通过强烈约束 D 来增强稳定性,但这样做会导致性能方面的巨大损失。 利用当前的技术,可以通过放松这种条件并允许在训练的后期阶段发生崩溃来实现更好的最终性能,此时模型已得到充分的训练以取得良好的结果。

5 EXPERIMENTS

5.1 EVALUATION ON IMAGENET

我们使用表 1 第 8 行中的设置,在 ImageNet ILSVRC 2012(Russakovsky 等人,2015)上以 128×128、256×256 和 512×512 分辨率评估我们的模型。我们的模型生成的样本显示在 图 4,附录 A 中的附加样本和在线 2。我们在表 2 中报告了 IS 和 FID。由于我们的模型能够以样本品种换取质量,因此尚不清楚如何最好地与现有技术进行比较; 因此,我们报告了三种设置下的值,完整的曲线见附录 D。首先,我们报告了获得最佳 FID 的截断设置下的 FID/IS 值。 其次,我们报告了截断设置下的 FID,其中我们的模型的 IS 与真实验证数据所获得的相同,推断这是在仍然实现良好“客观性”水平的同时实现的最大样本多样性的一个可行的衡量标准。 第三,我们报告每个模型达到的最大 IS 的 FID,以证明必须权衡多少品种才能最大限度地提高质量。 在所有这三种情况下,我们的模型都优于 Miyato 等人之前取得的最先进的 IS 和 FID 分数。 (2018)和张等人。 (2018)。

除了本文第一个版本中介绍并在大多数实验中使用的 BigGAN 模型(除非另有说明)之外,我们还提出了一个 4 倍更深的模型(BigGAN-deep),它使用不同的残差块配置。 从表 2 中可以看出,BigGAN-deep 在所有分辨率和指标上都明显优于 BigGAN。 这证实了我们的发现可以扩展到其他架构,并且深度的增加可以提高样本质量。 附录 B 中描述了 BigGAN 和 BigGAN 深度架构。

我们观察到 D 与训练集过度拟合,再加上我们模型的样本质量,提出了一个明显的问题:G 是否只是简单地记住了训练点。 为了测试这一点,我们在像素空间和预训练分类器网络的特征空间中执行类最近邻分析(附录 A)。 此外,我们在图 8 和图 9 中展示了样本之间的插值和类间插值(其中 z 保持不变)。我们的模型令人信服地在不同样本之间进行插值,并且其样本的最近邻居在视觉上是不同的,这表明我们的模型 不只是简单地记住训练数据。

我们注意到,我们部分训练的模型的一些故障模式与之前观察到的不同。 以前的大多数失败都涉及局部伪影(Odena 等人,2016)、由纹理斑点而不是对象组成的图像(Salimans 等人,2016)或规范模式崩溃。 我们观察到类泄漏,其中一个类的图像包含另一类的属性,如图 4(d) 所示。 我们还发现 ImageNet 上的许多类对于我们的模型来说比其他类更困难; 我们的模型在生成狗(占数据集的很大一部分,并且主要通过它们的纹理来区分)方面比生成人群(占数据集的一小部分并且具有更大规模的结构)更成功。 进一步的讨论可参见附录 A。

5.2 ADDITIONAL EVALUATION ON JFT-300M

为了确认我们的设计选择对于更大、更复杂和多样化的数据集是有效的,我们还在 JFT-300M 的子集上展示了我们的系统的结果(Sun 等人,2017)。 完整的 JFT-300M 数据集包含 3 亿张真实世界图像,标记有 18K 类别。 由于类别分布具有严重的长尾特征,因此我们对数据集进行二次采样,以仅保留具有 8.5K 个最常见标签的图像。 生成的数据集包含 2.92 亿张图像,比 ImageNet 大两个数量级。 对于具有多个标签的图像,每当对图像进行采样时,我们都会随机且独立地对单个标签进行采样。 为了计算在此数据集上训练的 GAN 的 IS 和 FID,我们使用在此数据集上训练的 Inception v2 分类器(Szegedy 等人,2016)。 定量结果如表 3 所示。所有模型均以批量大小 2048 进行训练。我们将模型的消融版本(与 SA-GAN(Zhang 等人,2018)相当,但批量大小更大)与“完整模型”进行了比较。 BigGAN 模型利用了在 ImageNet 上获得最佳结果所应用的所有技术(共享嵌入、skip-z 和正交正则化)。 我们的结果表明,即使在相同模型容量(64 个基本通道)的更大数据集的设置中,这些技术也能显着提高性能。 我们进一步表明,对于这种规模的数据集,通过将模型容量扩展到 128 个基本通道,我们看到了显着的额外改进,而对于 ImageNet GAN 来说,额外的容量并没有带来好处。

在图 19(附录 D)中,我们展示了在此数据集上训练的模型的截断图。 与 ImageNet 不同,在 ImageNet 中,截断限制 σ ≈ 0 往往会产生最高的保真度分数,而当截断值 σ 范围在 0.5 到 1 之间时,我们的 JFT-300M 模型的 IS 通常会最大化。我们怀疑这至少部分是由于 JFT-300M 标签的类内变异性,以及图像分布的相对复杂性,其中包括具有各种尺度的多个对象的图像。 有趣的是,与在 ImageNet 上训练的模型不同,在 ImageNet 上训练的模型在没有严格正则化的情况下往往会崩溃(第 4 节),在 JFT-300M 上训练的模型在数十万次迭代中保持稳定。 这表明从 ImageNet 转向更大的数据集可能会部分缓解 GAN 的稳定性问题。

我们在该数据集上实现的基线 GAN 模型的改进,无需更改底层模型或训练和正则化技术(超出扩展容量),这表明我们的研究结果从 ImageNet 扩展到了规模和复杂性迄今为止对于图像生成模型来说前所未有的数据集 。

6 CONCLUSION

我们已经证明,经过训练来对多个类别的自然图像进行建模的生成对抗网络在生成样本的保真度和多样性方面都可以从扩展中受益匪浅。 因此,我们的模型在 ImageNet GAN 模型中设定了新的性能水平,大幅提高了现有技术水平。 我们还分析了大规模 GAN 的训练行为,根据权重奇异值表征其稳定性,并讨论了稳定性与性能之间的相互作用。

APPENDIX B ARCHITECTURAL DETAILS

在 BigGAN 模型(图 15)中,我们使用(Zhang 等人,2018)的 ResNet(He 等人,2016)GAN 架构,该架构与(Miyato 等人,2018)使用的相同,但是 修改 D 中的通道模式,以便每个块的第一个卷积层中的滤波器数量等于输出滤波器的数量(而不是输入滤波器的数量,如 Miyato 等人 (2018) 中所述;Gulrajani 等人 等(2017))。 我们在 G 中使用单个共享类嵌入,并跳过潜在向量 z 的连接(skip-z)。 特别是,我们采用分层潜在空间,以便潜在向量 z 沿着其通道维度分割成相同大小的块(在我们的例子中为 20-D),并且每个块都连接到共享类嵌入并传递给相应的 残差块作为条件向量。 每个块的调节被线性投影,以产生该块的 BatchNorm 层的每个样本增益和偏差。 偏置投影以 0 为中心,而增益投影以 1 为中心。由于残差块的数量取决于图像分辨率,因此 z 的全维数对于 128 × 128 为 120,对于 256 × 256 为 140,对于 256 × 256 为 160。 512 × 512 图像。

BigGAN 深度模型(图 16)在几个方面与 BigGAN 不同。 它使用了skip-z条件的一个更简单的变体:我们不是首先将z分割成块,而是将整个z与类嵌入连接起来,并通过skip连接将结果向量传递给每个残差块。 BigGAN-deep 基于具有瓶颈的残差块(He et al., 2016),它包含两个额外的 1 × 1 卷积:第一个在更昂贵的 3 × 3 卷积之前将通道数量减少了 4 倍; 第二个产生所需数量的输出通道。 当通道数量需要改变时,BigGAN 依赖于跳跃连接中的 1 × 1 卷积,而在 BigGAN-deep 中,我们使用不同的策略,旨在在整个跳跃连接中保持同一性。 在G中,需要减少通道数,我们只需保留第一组通道并丢弃其余通道即可产生所需的通道数。 在 D 中,通道数量应该增加,我们不加扰动地传递输入通道,并将它们与 1 × 1 卷积产生的剩余通道连接起来。 就网络配置而言,判别器是生成器的精确反映。 每个分辨率有两个块(BigGAN 使用一个),因此 BigGAN-deep 的深度是 BigGAN 的四倍。 尽管深度增加,BigGAN 深度模型的参数明显减少,这主要是由于其残差块的瓶颈结构。 例如,128×128 BigGAN-deep G和D分别有50.4M和34.6M参数,而相应的原始BigGAN模型有70.4M和88.0M参数。 所有 BigGAN 深度模型都使用 64 × 64 分辨率、通道宽度乘数 ch = 128 和 z ∈ R128 的注意力。

APPENDIX C EXPERIMENTAL DETAILS

我们的基本设置遵循 SA-GAN(Zhang 等人,2018),并在 TensorFlow 中实现(Abadi 等人,2016)。 我们采用附录 B 中详细介绍的架构,在每个网络的单个阶段插入非本地块。 G 和 D 网络均通过正交初始化进行初始化(Saxe 等人,2014)。 我们使用 Adam 优化器(Kingma & Ba,2014),β1 = 0 和 β2 = 0.999 以及恒定的学习率。 对于所有分辨率的 BigGAN 模型,我们在 D 中使用 2·10−4,在 G 中使用 5·10−5。对于 BigGAN 深度,我们在 D 中使用 2·10−4 的学习率,在 G 中使用 5·10−5 的学习率。 G 适用于 128 × 128 模型,D 和 G 均为 2.5·10−5,适用于 256×256 和 512×512 模型。 我们对每个 G 步骤的 D 步骤数量进行了实验(从 1 到 6),发现每个 G 步骤两个 D 步骤给出了最佳结果。

我们在采样时使用 G 权重的指数移动平均值,衰减率设置为 0.9999。 我们在 G 中采用跨副本 BatchNorm(Ioffe & Szegedy,2015),其中批量统计数据在所有设备上聚合,而不是像标准实现中的单个设备一样。 继 SA-GAN(Zhang 等人,2018)之后,G 和 D 中都使用了光谱归一化(Miyato et al., 2018)。 我们在 Google TPU v3 Pod 上进行训练,核心数量与分辨率成正比:128 个用于 128×128,256 个用于 256×256,512 个用于 512×512。 大多数模型的训练时间为 24 到 48 小时。 我们将 BatchNorm 和 Spectral Norm 中的  从默认的 10−8 增加到 10−4,以缓解低精度数值问题。 我们通过沿长边裁剪并通过区域重采样重新缩放到给定分辨率来预处理数据。

C.1 BATCHNORM STATISTICS AND SAMPLING

批量归一化分类器网络的默认行为是使用测试时激活时刻的运行平均值。 之前的作品(Radford et al., 2016)在对图像进行采样时使用了批量统计。 虽然这在技术上并不是一种无效的采样方式,但这意味着结果取决于测试批量大小(以及测试的设备数量),并且使再现性进一步复杂化。

我们发现这个细节非常重要,测试批量大小的变化会导致性能发生巨大变化。 当使用 G 权重的指数移动平均值进行采样时,这种情况会进一步恶化,因为 BatchNorm 运行平均值是使用非平​​均权重计算的,并且对平均权重的激活统计数据的估计很差。

为了解决这两个问题,我们采用“常备统计”,即通过多次前向传递(通常为 100 次)运行 G,每个前向传递具有不同批次的随机噪声,并存储所有前向聚合的均值和方差,从而在采样时计算激活统计数据。 通过。 与使用运行统计类似,这会导致 G 的输出对于批量大小和设备数量变得不变,即使在生成单个样本时也是如此。

APPENDIX E CHOOSING LATENT SPACES

虽然大多数先前的工作都采用 N(0, I) 或 U[−1, 1] 作为 z(输入到 G 的噪声)的先验,但我们可以自由选择可以从中采样的任何潜在分布。 我们通过考虑一系列可能的设计来探索潜在的选择,如下所述。 对于每个潜在变量,我们提供了其设计背后的直觉,并简要描述了它在 SA-GAN 基线中用作 z ∼ N(0, I) 的直接替代时的表现。 由于截断技巧被证明比切换到任何这些潜在变量更有益,因此我们没有进行完整的消融研究,而是采用 z ∼ N(0, I) 作为我们的主要结果,以充分利用截断。 我们发现在没有截断的情况下效果最好的两个潜在模型是 Bernoulli {0, 1} 和 Censored Normal max (N(0, I), 0),它们都提高了训练速度并略微提高了最终性能,但不太适合到截断。

我们还消除了潜在空间维度的选择(默认情况下为 z ∈ R128),发现我们能够成功地使用低至 z ∈ R8 的潜在维度进行训练,并且使用 z ∈ R32 我们看到性能下降最小 。 虽然这比许多以前的作品要小得多,但与单类网络(例如 Karras 等人(2018)中的网络)进行直接比较是不合适的,该网络在具有 30,000 个图像的高度约束数据集上采用 z ∈ R512 潜在空间) 我们的网络有额外的类信息作为输入提供。

LATENTS

• N(0, I)。 我们在主要实验中使用的潜在空间的标准选择。

• U[−1, 1]。 另一个标准选择; 我们发现它的表现与 N(0, I) 类似。

• 伯努利{0, 1}。 离散潜在可能反映了我们的先验,即自然图像中变化的潜在因素不是连续的,而是离散的(一个特征存在,另一个特征不存在)。 该潜在模型的性能优于 N(0, I)(就 IS 而言)8%,并且需要的迭代次数减少 60%。

• max (N(0, I), 0),也称为删失正态。 这种潜在特征旨在在潜在空间中引入稀疏性(反映了我们的先验,即某些潜在特征有时存在,有时不存在),但也允许这些潜在特征连续变化,表达活跃潜在特征的不同强度。 该潜在模型的性能优于 N(0, I)(就 IS 而言)15-20%,并且往往需要更少的迭代。

• 伯努利{−1, 1}。 这种潜在的设计是离散的,但不是稀疏的(因为网络可以学习激活以响应负输入)。 该潜伏的表现与 N(0, I) 几乎相同。

• {−1, 0, 1} 中的独立分类,概率相等。 该分布被选择为离散且稀疏的,但也允许潜在值同时呈现正值和负值。 该潜伏的表现与 N(0, I) 几乎相同。

• N(0, I) 乘以伯努利{0, 1}。 该分布被选择为具有连续的潜在因子,这些因子也是稀疏的(峰值为零),类似于删失正态分布,但不限于正值。 该潜伏的表现与 N(0, I) 几乎相同。

• 连接N(0, I) 和伯努利{0, 1},各占潜在维度的一半。 这是受到 Chen 等人的启发。 (2016),选择并允许一些变化因素是离散的,而其他因素是连续的。 该潜在性能优于 N(0, I) 约 5%。

• 方差退火:我们从N(0, σI) 中采样,其中允许σ 在训练过程中变化。 我们比较了各种分段计划,发现从 σ = 2 开始,在训练过程中向 σ = 1 退火,性能略有提高。 可能的差异计划的空间很大,我们没有深入探讨它 - 我们怀疑更有原则或更好调整的计划可能会更强烈地影响性能。

• 每样本变量方差:N(0, σiI),其中 σi ∼ U[σl, σh] 对于批次中的每个样本 i 独立,(σl, σh) 是超参数。 选择这种分布是为了通过向网络噪声样本提供非恒定方差来尝试提高截断技巧的适应性。 这似乎并没有影响性能,但我们没有深入探讨它。 人们还可以考虑调度(σl,σh),类似于方差退火。

APPENDIX G ADDITIONAL DISCUSSION: STABILITY AND COLLAPSE

在本节中,我们将介绍并讨论对模型稳定性的其他研究,并扩展第 4 节中的讨论。

G.1 INTERVENING BEFORE COLLAPSE

崩溃的症状是尖锐和突然的,样本质量在数百次迭代过程中从峰值下降到最低值。 当 G 中的奇异值爆炸时,我们可以检测到这种崩溃,但是虽然(非标准化)奇异值在整个训练过程中不断增长,但崩溃发生的阈值不存在一致的。 这就提出了一个问题:是否可以通过在崩溃前进行数千次迭代的模型检查点,并使用修改的一些超参数(例如学习率)继续训练来防止或延迟崩溃。

我们进行了一系列干预实验,其中我们在崩溃之前对崩溃模型进行了十到两万次迭代,改变了训练设置的某些方面,然后观察崩溃是否发生、相对于原始崩溃发生的时间以及最终性能崩溃时达到。

我们发现,增加 G 或 D 或 G 和 D 中的学习率(相对于其初始值)会立即导致崩溃。 即使将学习率从 D 中的 2 · 10−4 和 G 中的 5 · 10−5 加倍到 D 中的 4 · 10−4 和 G 中的 1 · 10−4,这种情况也会发生,这种设置通常在以下情况下不会不稳定: 用作初始学习率。 我们还尝试更改动量项(Adam 的 β1 和 β2),或将动量向量重置为零,但这往往没有任何区别,或者在增加动量时导致立即崩溃。

我们发现,降低 G 中的学习率,但保持 D 中的学习率不变可以延迟崩溃(在某些情况下超过十万次迭代),但也会削弱训练——一旦 G 中的学习率衰减,性能要么保持不变 恒定或缓慢衰减。 相反,在保持 G 的学习率的同时降低 D 的学习率会导致立即崩溃。 我们假设这是因为 D 需要在整个训练过程中保持最佳状态——如果它的学习率降低,它就无法再“跟上”G,训练就会崩溃。 考虑到这一点,我们还尝试增加每 G 步的 D 步数,但这要么没有效果,要么以严重训练为代价延迟崩溃(类似于衰减 G 的学习率)。

为了进一步阐明这些动态,我们构建了两个额外的干预实验,一个是在崩溃之前冻结 G(通过停止所有参数更新)并观察 D 是否保持稳定,而相反,我们在崩溃之前冻结 D 并观察 G 是否保持稳定 。 我们发现,当 G 被冻结时,D 保持稳定,并缓慢地将其损失的两个组成部分减少到零。 然而,当 D 被冻结时,G 立即急剧崩溃,与 0 到 3 的正常范围相比,D 的损失最大化到 300 以上。

这导致两个结论:首先,正如之前的作品中所指出的那样(Miyato et al., 2018;Gulrajani et al., 2017;Zhang et al., 2018),D 必须相对于 G 保持最优,以保证稳定性并提供有用的梯度信息。 无论 G 的调节或优化设置如何,G 赢得比赛的后果就是训练过程完全崩溃。 其次,即使 D 条件良好,偏向 D 而不是 G(通过使用更大的学习率进行训练,或者更多的步骤)也不足以确保稳定性。 这表明,在实践中,最优 D 是必要的,但对于训练稳定性来说还不够,或者系统的某些方面导致 D 没有被训练为最优。 考虑到后一种可能性,我们在下一节中仔细研究 D 光谱中的噪声。

G.2 SPIKES IN THE DISCRIMINATOR’S SPECTRA

如果 D 的训练过程中的某些元素导致了不良动态,那么 D 的光谱行为可能会提供有关该元素是什么的线索。 D 的前三个奇异值与 G 的不同之处在于它们具有较大的噪声分量,在整个训练过程中往往会增长,但对崩溃仅表现出较小的响应,并且前两个奇异值的比率往往以 1 为中心,这表明 D 的光谱衰减缓慢。 近距离观察时(图 29),噪声尖峰类似于脉冲响应:在每个尖峰处,频谱向上跳跃,然后缓慢下降,并伴有一些振荡。

一种可能的解释是,这种行为是 D 记忆训练数据的结果,如 4.2 节中的实验所示。 随着它接近完美的记忆,它从真实数据中接收到的信号越来越少,因为当 D 对给定示例输出自信且正确的预测时,原始 GAN 损失和铰链损失都提供零梯度。 如果来自真实数据的梯度信号衰减到零,这可能会导致 D 最终变得有偏差,因为专门接收到的梯度导致其输出为负。 如果这种偏差超过某个阈值,D 最终将错误分类大量真实示例,并收到鼓励正输出的大梯度,从而产生观察到的脉冲响应。

这个论点提出了一些解决办法。 首先,人们可能会考虑无界损失(例如 Wasserstein 损失(Arjovsky 等人,2017)),它不会遭受这种梯度衰减。 我们发现,即使有梯度惩罚和优化器超参数的短暂重新调整,我们的模型也无法在这种损失下稳定地训练超过几千次迭代。 相反,我们探索了改变铰链损失的边际作为部分妥协:对于给定的模型和小批量数据,增加边际将导致更多的例子落在边际内,从而导致损失。3。 使用较小裕度(高达 2 倍)的训练会显着降低性能,但使用较大裕度(高达 3 倍)的训练并不能防止崩溃或减少 D 谱中的噪声。 将余量增加到超过 3 会导致训练不稳定,类似于使用 Wasserstein 损失。 最后,记忆论点可能表明使用较小的 D 或在 D 中使用 dropout 可以通过降低记忆能力来改善训练,但实际上这会降低训练效果。

APPENDIX H NEGATIVE RESULTS

我们探索了一系列新颖的和现有的技术,这些技术最终降低了我们设置中的性能或以其他方式不影响性能。 我们在这里报告它们; 我们对这一部分的评估不如对主要架构选择的评估那么彻底。

我们报告这些结果的目的是为未来的工作节省时间,并更全面地了解我们为提高性能或稳定性所做的努力。 然而,我们注意到,这些结果必须被理解为特定于我们使用的特定设置。 报告负面结果的一个陷阱是,人们可能会报告某种特定的技术不起作用,而事实是这种技术在以特定方式应用于特定问题时没有达到预期的效果。 得出过于笼统的结论可能会关闭潜在富有成果的研究途径。

• 我们发现加倍深度(通过在每个上采样或下采样块之后插入一个额外的残差块)会影响性能。

• 我们尝试在G 和D 之间共享类嵌入(而不是仅在G 内)。 这是通过用 G 的嵌入的投影替换 D 的类嵌入来实现的,就像在 G 的 BatchNorm 层中所做的那样。 在我们最初的实验中,这似乎有助于并加速训练,但我们发现这个技巧的扩展性很差,并且对优化超参数很敏感,特别是每个 G 步的 D 步数的选择。

• 我们尝试用WeightNorm 替换G 中的BatchNorm(Salimans & Kingma,2016),但这会削弱训练。 我们还尝试删除 BatchNorm 并仅进行频谱归一化,但这也削弱了训练。

• 除了谱归一化之外,我们还尝试将 BatchNorm 添加到 D(类条件和无条件),但这会削弱训练。

• 我们尝试改变G和D中注意力块位置的选择(并以不同分辨率插入多个注意力块),但发现在128×128下这样做没有明显的好处,并且计算和内存成本大幅增加。 我们发现,当移动到 256×256 时,将注意力块上移一级有好处,考虑到分辨率的提高,这符合我们的预期。

• 我们尝试在G 或D 或两者中使用5 或7 的过滤器尺寸而不是3。 我们发现,过滤器大小为 5 in G 仅比基线提供了微小的改进,但带来了不合理的计算成本。 所有其他设置都会降低性能。

• 我们尝试在 128×128 下改变 G 和 D 中卷积滤波器的扩张,但发现即使任一网络中的少量扩张也会降低性能。

• 我们尝试在G 中使用双线性上采样来代替最近邻上采样,但这会降低性能。

• 在我们的一些模型中,我们观察到类条件模式崩溃,其中模型只会为类的子集输出一个或两个样本,但仍然能够为所有其他类生成样本。 我们注意到折叠类的嵌入相对于其他嵌入变得非常大,并尝试通过仅对共享嵌入应用权重衰减来改善此问题。 我们发现少量的权重衰减 (10−6) 相反会降低性能,并且只有更小的值 (10−8) 不会降低性能,但这些值也太小,无法防止类向量爆炸。 更高分辨率的模型似乎对这个问题更有弹性,并且我们的最终模型似乎都没有遭受这种类型的崩溃。

• 我们尝试使用 MLP 而不是从 G 的类嵌入到其 BatchNorm 增益和偏差的线性投影,但没有发现这样做有任何好处。 我们还尝试对这些 MLP 进行光谱归一化,并为这些(以及线性投影)提供输出偏差,但没有注意到任何好处。

• 我们尝试了梯度范数裁剪(通常在循环网络中使用的全局变体,以及基于每个参数确定裁剪值的局部版本),但发现这并没有减轻不稳定性。

APPENDIX I HYPERPARAMETERS

我们在这项工作中执行了各种超参数扫描:

• 我们通过 [10−5, 5 · 10−5, 10−4, 2 · 10−4, 4 · 10−4, 8 · 10−4, 10−3 扫描每个网络学习率的笛卡尔积 ],并初步发现 SA-GAN 设置(G 的学习率 10−4,D 的学习率 4·10−4)在较小的批量大小下是最佳的; 我们没有以更高的批量大小重复此扫描,而是尝试将学习率减半和加倍,从而达到我们实验中使用的减半设置。

• 我们将R1 梯度惩罚强度扫过[10−3, 10−2, 10−1, 0.5, 1, 2, 3, 5, 10]。 我们发现惩罚的强度与表现呈负相关,但高于 0.5 的设置会赋予训练稳定性。 • 我们将D 最后一层中DropOut 的保持概率扫过[0.5,0.6,0.7,0.8,0.9,0.95]。 我们发现 DropOut 具有与 R1 类似的稳定效果,但也会降低性能。

• 我们将D的Adam β1参数扫过[0.1, 0.2, 0.3, 0.4, 0.5],发现它具有类似于DropOut的轻度正则化效果,但并没有显着改善结果。 任一网络中较高的 β1 项都会削弱训练。

• 我们通过[10−5, 5 · 10−5, 10−4, 5 · 10−4, 10−3, 10−2] 扫描G 中修改后的正交正则化惩罚的强度,并选择10−4。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461577.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组队学习专用——task05

目录 一、基本原理 1. 决策树的基本思想 2. 决策树划分过程中可能遇到的特殊情况 (1) 单一类别终止: (2) 属性用尽: (3) 样本空缺: 3. 决策树的结构 二、信息量、信息熵 1. 信息量 2. 信息熵 三、决策树 1. ID3 决策树&#xff08…

Linux RAID 技术详解:原理、配置、管理及故障处理

本文档深入探讨 Linux 软件 RAID 技术,涵盖 RAID 原理、各种 RAID 级别、mdadm 命令详解、配置步骤、管理方法以及高级故障处理和性能调优策略。 一、 RAID 原理与架构 RAID (Redundant Arrays of Independent Disks,独立磁盘冗余阵列) 技术并非单一技…

「C/C++」C/C++标准库 之 <cstring> 字符串操作库

✨博客主页何曾参静谧的博客📌文章专栏「C/C++」C/C++程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明目…

单细胞数据分析(一):10X数据生成seurat数据对象

文章目录 介绍加载R包数据链接导入数据过滤细胞:移除双重细胞合并所有seurat数据对象输出结果系统信息介绍 在单细胞基因组学研究中,Seurat是一个流行的R包,用于单细胞基因表达数据的分析和探索。以下是如何从10X基因注释数据生成Seurat数据对象,并对该数据进行过滤的步骤…

day13:FTP服务

一,FTP概述 概述 FTP(File Transfer Protocol,文件传输协议)是用于在计算机之间传输文件的协议。它工作在网络的应用层,通过 TCP 协议进行数据传输,默认端口号为 21(命令端口,另外…

从0开始的STM32学习之旅:使用中断完成等待型任务(理论部分)

目录 中断 NVIC 中断优先级 先说说一般我们聊到的中断优先级 STM32中的NVIC中断优先级表示 API CubeMx配置说明 很好,我们在之前的学习中已经完成了简单的GPIO输入输出驱动的控制,我们的下一步就是仔细了解一下中断这个事情。 中断 中断这个事情…

使用Python进行数据分析入门

文章目录 Python环境搭建安装Anaconda验证安装 必备库介绍NumPyPandasMatplotlibSciPy 数据导入与清洗导入数据清洗数据 数据探索与分析描述性统计相关性分析 数据可视化绘制直方图 高级主题机器学习深度学习 总结 随着大数据时代的到来,数据分析变得越来越重要。Py…

RabbitMQ + JMeter组合,优化你的中间件处理方式!

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息中间件,它是基于Erlang语言编写的,并发能力强,性能好,是目前主流的消息队列中间件之一。 RabbitMQ的安装可参照官网( https://www.rabbitmq.c…

python 爬虫 入门 五、抓取图片、视频

目录 一、图片、音频 二、下载视频: 一、图片、音频 抓取图片的手法在上一篇python 爬虫 入门 四、线程,进程,协程-CSDN博客里面其实有,就是文章中的图片部分,在那一篇文章,初始代码的28,29行…

Vulnhub靶机——DC-1

#环境 本次环境是利用VMware15搭建 靶机DC-1( https://download.vulnhub.com/dc/DC-1.zip) --192.168.200.131 Kali2021.1--192.168.200 将以上两个操作系统启动,并设置网卡为NAT模式 #信息收集 使用arp-scan对网段进行扫描,探测存活主机 使用nmap…

吴恩达深度学习笔记(10)12.

多任务学习 什么时候多任务学习有意义: 能从共享低级特征中获益;每个任务拥有的数据相当相似;训练一个足够大的神经网络用于所有任务。 目标定位: 分类定位(单个对象)与检测不同(多个对象&…

Android 音量调节流程分析

音量调节流程分析 按下音量键 音量键被按下后,按键事件会一路派发给Acitivity,如果无人拦截并处理,承载当前Activity的显示PhoneWindow类的onKeyDown()以及onKeyUp()函数将会被处理,从而开始通过音量键调整音量的处理流程&#x…

LLMs在股票投资组合崩溃中的时间关系推理

1. 引言 想象一下,你是一位投资经理,管理着一个多元化的股票投资组合。突然,一场前所未有的全球性事件发生了,比如2007年的金融危机或2020年的新冠疫情,这可能会对你的投资组合造成重大影响。传统的投资组合崩溃检测方…

o1驾驶无人机后空翻,OpenAI开发者日惊掉下巴!2分钟爆改代码写App

【导读】OpenAI伦敦开发者日上,首次曝出了o1五大核心能力,还有图像理解。o1两分钟构建应用驾驶无人机、电话订餐、讲解太阳系,现场演示让所有开发者沸腾。 完整版o1的解禁,离我们不远了! 就在刚刚举办的OpenAI伦敦开…

利用AWS服务轻松迁移数据上云

在数字化转型的浪潮中,越来越多的企业意识到将数据迁移至云端的重要性。云服务不仅能够提供更高的灵活性和可扩展性,还能显著降低IT成本。AWS(Amazon Web Services)作为全球领先的云服务提供商,为企业提供了一系列高效…

期货跟单、量化交易模拟演示系统

演示版可直接下载本文绑定资源。 一、跟单下单 在“排行榜”中选择要跟单的用户,合约可以跟全部,也可以指定跟该用户的某一合约操作,选定跟单的倍数(操作手数的倍数)/手数(指定手数,可以不是对…

界面控件DevExpress WPF中文教程:Data Grid——卡片视图概述

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

【数据结构二叉树】补充:C实现二叉树的层次遍历

1、层次遍历 按层次遍历二叉树的方式:按照“从上到下,从左到右”的顺序遍历二叉树,即先遍历二叉树的第一层的结点,然后是第二层的结点,直到最底层的结点,对每一层的遍历按照从左到右的次序进行。 2、层次…

供应商图纸外发:如何做到既安全又高效?

供应商跟合作伙伴、客户之间会涉及到图纸外发的场景,这是一个涉及数据安全、效率及合规性的重要环节。供应商图纸发送流程一般如下: 1.申请与审批 采购人员根据需要提出发放图纸的申请并提交审批; 采购部负责人审批发放申请,确…

MySQL 9从入门到性能优化-系统信息函数

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…