GAN:SNGAN-谱归一化GANs

news/2024/8/19 15:21:30

论文:https://arxiv.org/pdf/1802.05957.pdf

代码:GitHub - pfnet-research/sngan_projection: GANs with spectral normalization and projection discriminator

发表:2018 ICLR

摘要

GANs的主要挑战是:训练的稳定性。本文作者提出一种新的权重归一化:spectral normalization(谱归一化)来帮助稳定训练GANs。SN-GAN只需要改变判别器权值矩阵的最大奇异值,这种方法可以最大限度地保存判别器权值矩阵的信息,这个优势可以让SN-GAN使用类别较多的数据集作为训练数据,依旧可以获得比较好的生成效果。此外,SNGAN使用power iteration(迭代法),加快训练速度。

本文方案的优点:仅有一个超参数,调整简单。并且实现简单,计算量小。

谱归一化的引入

这篇文章给出了比较好的解释:我这里借鉴一下

生成模型的训练可以作为 W 距离下的一个最小-最大问题

第一个 arg max 试图获得 W 距离的近似表达式,而第二个 arg min 则试图最小化 W 距离。然而,T 不是任意的,需要满足 ‖T‖L≤1,这称为 Lipschitz 约束(L 约束),该怎么施加这个约束呢?

L约束:目前有3种方案

  • 权重裁剪

这是 WGAN 论文提出的方案:在每一步的判别器的梯度下降后,将判别器的参数的绝对值裁剪到不超过某个固定常数。这是一种非常朴素的做法,现在基本上已经不用了。其思想就是:L 约束本质上就是要网络的波动程度不能超过一个线性函数,而激活函数通常都满足这个条件,所以只需要考虑网络权重,最简单的一种方案就是直接限制权重范围,这样就不会抖动太剧烈了。

这篇博文的观点:WGAN利用Wasserstein距离代替原始GAN中的JS距离,但是为了去衡量Wasserstein距离判别器必须要满足Lipschitz假设,Lipschitz就是让模型对输入的细微变化不敏感。在WGAN中是直接对判别器的参数做裁剪,迫使参数在[−c,c][−c,c]之间,这种操作的方法算是改变了权值矩阵的最大奇异值,多少会造成信息损耗。

  • 梯度惩罚

这是 WGAN-GP 论文提出的方案:这种思路非常直接,即 ‖T‖L≤1 可以由 ‖∇T‖≤1 来保证,所以干脆把判别器的梯度作为一个惩罚项加入到判别器的 loss 中:

但问题是我们要求 ‖T‖L≤1 是在每一处都成立,所以 r(x) 应该是全空间的均匀分布才行,显然这很难做到。所以作者采用了一个非常机智(也有点流氓)的做法:在真假样本之间随机插值来惩罚,这样保证真假样本之间的过渡区域满足 L 约束。显然,它比权重裁剪要高明一些,而且通常都 work 得很好。但是这种方案是一种经验方案,没有更完备的理论支撑。

这篇博文的观点:WGAN-GP中使用gradient penalty 的方法来限制判别器,但这种放法只能对生成数据分布与真实分布之间的分布空间的数据做梯度惩罚,无法对整个空间的数据做惩罚。这会导致随着训练的进行,生成数据分布与真实数据分布之间的空间会逐渐变化,从而导致gradient penalty 正则化方式不稳定。此外,WGAN-GP涉及比较多的运算,所以训练也比较耗时。

  • 谱归一化

这是 SNGAN 论文提出的方案:本质上来说,谱归一化和权重裁剪都是同一类方案,只是谱归一化的理论更完备,结果更加松弛。而且还有一点不同的是:权重裁剪是一种“事后”的处理方案,也就是每次梯度下降后才直接裁剪参数,这种处理方案本身就可能导致优化上的不稳定;谱归一化是一种“事前”的处理方案,它直接将每一层的权重都谱归一化后才进行运算,谱归一化作为了模型的一部分,更加合理一些。

尽管谱归一化更加高明,但是它跟权重裁剪一样存在一个问题:把判别器限制在了一小簇函数之间。也就是说,加了谱归一化的 T,只是所有满足 L 约束的函数的一小部分。因为谱归一化事实上要求网络的每一层都满足 L 约束,但这个条件太死了,也许这一层可以不满足 L 约束,下一层则满足更强的 L 约束,两者抵消,整体就满足 L 约束,但谱归一化不能适应这种情况。

GANs的难点

GANs训练中的一个持续挑战是鉴别器的性能控制。在高维空间中,鉴别器的密度比估计通常是不准确的,并且在训练过程中不稳定,所以生成器网络无法有效学习目标分布的模式结构。更糟糕的是,当模型分布和目标分布是不相交的,存在一个可以完全区分模型的鉴别器目标的分布。一旦这种情况发生:生成器的训练会完全停止,因为此时判别器的导数总会为0。

训练速度
SNGAN:使用power iteration(迭代法),加快训练速度。

WGAN-GP:使用gradient penalty后,模型在梯度下降的过程中相当于计算两次梯度,计算量更大,所以整体训练速度就变慢了。
 

参考

1:SN-GAN论文解读 | TwistedW's Home

2:WGAN-div:默默无闻的WGAN填坑者(附开源代码) - 知乎 

3:为什么spectral norm对应的SNGAN未使用WGAN的loss? - 知乎

4:GAN的优化(四):奇异值与SNGAN - 知乎 


http://lihuaxi.xjx100.cn/news/1863238.html

相关文章

决策分析实施指南

决策分析实施指南参考文件: 1. 概要 2. 正式决策的进入准则 2.1. 项目的软硬件及服务的采购 2.2. 公司培训的采购 2.3. 重大技术方案的选择 2.4. 变更的决策 3. 建立评价准则 3.1. 建立评价准则的要点 3.2. 项目的软硬件及服务的采购 3.3. 公司培训的采购 3.4. 重大…

开关电源调试时,常见的10个问题:

1、变压器饱和 变压器饱和现象 在高压或低压输入下开机(包含轻载,重载,容性负载),输出短路,动态负载,高温等情况下,通过变压器(和开关管)的电流呈非线性增长,当出现此现象时,电流的…

虾皮数据分析网站:了解Shopee市场趋势与优化运营的利器

在如今的电商时代,越来越多的人选择在虾皮购物(Shopee)平台上开设自己的店铺。然而,要在这个竞争激烈的市场中脱颖而出并取得成功,并不是一件容易的事情。为了更好地了解市场趋势、优化产品和店铺运营,了解…

Windows系统远程桌面本地Ubuntu虚拟机

应用概览 在Windows系统上,有时候我们虽然本地安装了Linux虚拟机系统,但是由于特殊原因导致虚拟机与主体机之间无法复制粘贴文本和文件,但是却有基本的联网功能,此时就可以用本方案解决,即:本地远程桌面方…

chrome overrides 怎么用?

在network里找到你想替换的文件 右键选择override content 他会提示你选择文件夹 你选择本地的一个 紧接着他会提示你 点允许 再去你创建的那个目录里查看 会发现 他自动帮你创建了目录 他会把线上的被替换目标文件放在里面 你直接修改他就可以了

AutoHotKey-study

目录 使用编辑器脚本注意函数解释信息调试方法键盘获取方法脚本练习 最近发现常用键盘的上下左右箭头去操作输入输出问题感觉很不是滋味,不像Linux那样,有vim的使用,就想着有没有什么方法更快捷,更方便的去使用电脑键盘&#xff0…

python读取所有sheet内容到另一个文件中

实现效果: 将原excel中的步骤、预期效果列按回车拆成多行数据,其余字段值填充其他数据 实现结果: # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your code. # Press Double Shift to search everyw…

分享77个菜单导航JS特效,总有一款适合您

分享77个菜单导航JS特效,总有一款适合您 77个菜单导航JS特效下载 链接:https://pan.baidu.com/s/1sfT9ONLH4ocliA1C7Z5xbQ?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气&#xff0…