1标题 + 作者
近 5 年,GAN 上头条次数很多,Reddit 里 GAN 很火
thispersondoesnotexist.com
加州法令:禁止换脸、禁止对政治人物骚操作,说未讲过的话
GAN: 两个网络相互对抗
generative: ML模型分 discriminative(AlexNet, ResNet, Transformer) 和 generative
adversarial: 对抗
nets: networks 简写
非 native speaker 不建议使用简写
2摘要
写作简洁,可直接搬运😂(wiki, textbook)
-
创新工作:讲清楚自己是谁?
-
拓展工作:和别人的区别、创新
framework 如何用?
framework 比 一个模型 model 要大。自己是否适合使用?哈哈哈哈哈
本文的 framework 是什么?
-
estimating generative models via an adversarial process
-
simultaneously train two models 生成器、判别器
-
G: 假钞制造者 capture the data distribution
-
data distribution 可以是图片、文本、电影
-
统计学视角: 世界由采样不同的分布得到的
-
D: 警察判断 💴 是真的,而不是伪造的概率 estimate the probability that a sample came from the training data rather than G
G 和 D 怎么 adversarial?
G 的目标是什么?
-
让 D 犯错
-
GAN 的 G 可不一般,一般的生成模型干什么?
-
让生成数据 尽可能靠近 原始分布
G D 一起玩和博弈有什么关系?
-
minimax two-player game
在任意函数 G 和 D 的空间里,a unique solution exisits,独一无二的解表明 G 找到了真实数据分布,D 无法分辨。
G 和 D 是 MLP --> error backpropagation 训练,简单。
无需 Markov chains or unrolled approximate inference networks 近似推理过程的展开。
实验效果非常好。
写作:摘要简洁,权衡读者是谁。懂得都懂。
3导言
DL ≠ DNN,那 DL 是什么?
数据特征的概率表示,represent probability distributions
discriminative 模型发展很好,generative 模型发展困难、Why?
difficulty in maximum likelihood estimation 计算最大似然概率的近似时,计算困难。
本文的故事是什么?
解决 generative 模型发展的困难:不近似 likelihood 函数,使用别的方法计算 得到更好的模型。
导言第二段: GAN 的介绍 警察 造假币者
adversarial nets framework 里 有什么?
-
generative model 造假币者
-
discriminative model 警察
造假者 和 警察 不断提升性能,造假者造出的假币和真币一模一样,警察判断的概率是 1 / 2
导言第三段:framework 里的 G 和 D 是 MLP --> adversarial nets
G 的输入是 random noise,映射到任何一个想拟合的分布。
D 是 MLP
G 和 D 都是 MLP,有什么用? --> 计算上有优势
train using backpropagation √
Markov chains 分布采样 ❌
introduction写的怎么样?
good!摘要的扩充,第一段的故事性:generative models发展困难,因为拟合似然函数计算的复杂性。我能解决,MLP作为 G 和 D 的结构,反向传播 无需 Markov chain 采样。
4相关工作
版本:NIPS final version,arxiv 早期版本
相关工作 的 区别,未参考别人工作,大佬!高级高级!
Related work 第一段:先说别人的问题,我们怎么做?
别人的问题在哪里呢?
构造 有参数的 概率分布函数,provide a parametric specification of a probability distribution function
参数构造了,怎么学习呢?
maximizing the log-likelihood,但采样分布计算难, esp 维度高, i.e., DBM。
怎么解决这个计算难的问题?当然是不要 分布 啦
直接学习一个模型,近似数据分布。
DBM 和 我们的 generative models 有什么区别?
DBM:一定要学 分布,知道均值、方差等一系列参数
GAN:用一个模型学习 你想要的结果,答对题就行。
GAN 的好处和坏处是什么呢?
-
pros: 计算容易;
-
cons: 即使答对了题,GAN 不知道正确的分布长什么样。
Related work 第二段:误差反向传递对 GAN 进行求解
Why error BP 有效?
对 f 的期望求导 == 对 F 自己求导
Related work 第三段:unaware 别人的类似工作,VAE
Related work 第四段:从 discriminative 角度 to train a generative model 的相关工作
GAN 和 Noise-contrastive estimation (NCE) 的区别?
NCE 的损失函数复杂一点 --> 求解性能不如 GAN
Related work 第五段:和 predictability minimization 1992的区别
Jürgen (LSTM作者) 有非常超前的工作,LSTM在当年的计算量和数据量的条件,很难大展身手。现在,LSTM 效果被发现了。
Jürgen predictability minimization算法被埋没了,Jürgen 认为 GAN 是 reverse PM。
轶事:Jürgen 在GAN 的 NIPS 汇报,也提出质疑。Ian 回绝,邮件交流已经很清楚了,你在耽搁大家学习 GAN
Remark:一个真实有用的技术,会在不同领域、不断的被人重新发现,给予新的名词。大家会把功劳归给那一个教会了大家这个算法的人,而不是最早发明它的人。
Related work 第六段:和 adversarial examples 的区别
adversarial examples 测试算法的稳定性,how?
构造一些假的、跟真的样本长得很像的 样本,能糊弄到分类器。
5模型:GAN 目标函数 + 求解
adversarial modeling framework 怎么简单 most straightforward 呢?
G 和 D 都是 MLP
G 如何学习 data x 上的分布 pg?
i.e., 游戏 4k 分辨率的屏幕,60 pictures / second
G 的学习目标:生成和游戏里一样的图片。
data x :显示器里每一张 4k 分辨率(800w像素)的图片。每一个像素是一个随机向量,data x 是一个 800w 维度的多维随机变量。
每一个像素的值由 pg 分布控制,此例中 pg 是游戏程序。
生成模型 怎么输出 x 呢?
z 噪音变量:i.e., 1个100维的向量,每个元素是高斯噪音,服从G(0, 1)
define a prior on input noise variables p_z(z)
定义一个在输入噪音变量 z 的先验分布
生成模型做什么呢?
把 z 映射成 x
生成模型怎么把 z 映射成 x ?
生成模型是 MLP,有可学习参数 theta_g
游戏 example (continued) 生成游戏图片的方式?
-
反汇编 游戏代码,找到代码生成原理 ------- DBM 难计算
-
放弃底层原理。假设游戏里 4k图片由 100个变量 控制。直接构造一个 约100维 的向量,用 MLP 强行拟合最后图片的样子。(MLP理论可以拟合任意函数)
使用 MLP 的利弊?
计算简单、但不真正了解代码。看到一个图片,很难找到对应的 z;只能反向操作,随机给一个 z ,生成一个像样的图片。
====================================
Discriminative model
MLP with 可学习参数 theta_d,ouputs a single scalar
判别模型的作用?
游戏example(continued), 一张 800w 像素的图片输入判别模型,输出一个概率值。
概率 = 1:这张图来自真实采样数据(游戏截图)
概率 = 0:来自生成模型?
同时训练 D 和 G
训练 D to maximize 正确分类的概率:真实采样数据 和 来自 G 生成的样本
训练 G to minimize log( 1 - D(G(Z)) ),尽可能使 D 犯错, D(G(Z)) 更大、更靠近 1。
✔ D 判断此图是生成的,D(G(Z)) = 0, log( 1 - D(G(Z)) ) = log1 = 0
❌ D 判断此图是真实采样,D(G(Z)) = 1, log( 1 - D(G(Z)) ) = log0 = -∞
训练 G 使得 D 无法区别 是真实采样数据 还是生成数据。
完美情况:log 1 + log 1 = 0
不完美情况:log(0 ~ 1) + log(0 ~ 1) < 0 ----> maximize D 正确分类的概率,objective 靠近 0,靠近完美情况
min G 尽可能得使 D 判别器 犯错,无法判断来自 真是采样 or 生成数据。
value function 有 min G max D 的双目标
-
D 使数据尽量分开
-
G 使数据尽量分不开
two-player minimax game Nash equilibrium:D和G都不能往前进步
图 1: GAN 的前 3 步 和 最后 1 步
噪音 z 一维标量 (均匀分布采样得来),数据 x 也是 一维标量(图中黑点,高斯分布)。
图例:
G 对 噪声 z 的映射
D 对 噪声 z 映射到 数据空间的判断线
data x 真实数据点
step 1: G 把 均匀分布采样得到的噪声 z 映射到 绿色高斯分布
step 1 --> 2: D 尽可能地去学习如何判断,i.e., 真实数据均值更靠左,将左侧的数据判断为真 1, 将右侧数据判断为假 0
step 2 --> 3:G 尽可能地去糊弄 D,把高斯分布的均值中心往左挪动
final step: G 把 来自均匀分布的噪声,映射成和真实 data x 相似的高斯分布。
D 对来自真实采样的数据 or G 生成的数据无法判断来源,概率都是 0.5,躺平-------
算法 1
# 每一次做迭代
for number of training iterations do
# 有采样 k * 2m 个 examples
for k steps do
每一步有 2m 个 examples
【从噪声变量 z 的先验分布采样的 m 个 noise examples,从真实数据 data x 中采样 m 个 examples】
用 2m 个examples 输入价值函数 求梯度
m 个 examples 放进 log D(x^(i))
m 个 noise examples 放进 log (1 - D(G(z^(i)))
对 判别器 D 的参数求梯度,更新判别器 D 的参数
end for # for k steps do, 完成 k 次 2m 个数据采样
从噪音的先验分布中 sample m 个 noise samples
把 m 个 noise samples 放进 价值函数 (只有第二项,第一项与生成器 G 无关)
得到生成器 G 的梯度,更新生成器 G 的参数
# 每次迭代,先更新 D 再更新 G
end for # for number of training iterations
超参数:k 不能太小、不能太大
Why k 重要?
k 不能太小 --> 保证 判别器 D 有足够的更新
-
D 要对 G 生成的不错的数据 有一定的判别能力,不然 G 很无聊的,都不想糊弄 D,轻而易举。
-
警察不给力,假钞不会被发现,抓不到造假者,无需提升工艺,游戏结束。
k 不能太大 --> D 过于完美,D(G(z^(i))) = 0,对值为 0 求导,G 梯度更新有困难
-
警察超厉害,造假者产一点假钞就会被发现,端掉制造工厂;造假者赚不到钱,不能提升工艺,结束游戏。
最好情况:双方实力相当、相爱相杀、一起进步。
k 的设计目标:使得 D 和 G 的更新进度差不多
如何判断 GAN收敛?min max 两项
一方不动、一方动;双方都在相互抖动;有很多 GAN 收敛相关的研究工作。
Model 最后一段:G 的 梯度更新 问题
第二项 log( 1 - D(G(z)) ) 变为 log( D(G(z)) )
Why 通过变化 目标函数第二项 来解决 ?
早期 G 比较弱,生成数据和真实采样的数据差距很大。--> D 判别器 很容易区分数据来源。 --> log( 1 - D(G(z)) ) 变为 log(1 - 0) = 0 --> 无法更新判别器 D 的参数。
改变 value function:min log( 1 - D(G(z)) ) --> max log( D(G(z)) )
如果 D 判别得很好,log( D(G(z)) ) = log( 0 ), -∞ 带来其它问题,有后续的研究工作改进。
6理论
value function 的全局最优解 p_g = p_data, 当且仅当 G 生成器学到的分布和真实数据分布一致。
算法 1 能求解 value function
4.1 Global optimality of p_g = p_data 目标函数是正确的
固定的生成器 G,最优的判别器 D 是 D_G^*(x) = p_data(x) / ( p_data(x) + p_g(x) )
p_data(x): x 在真实数据分布中的概率 ∈[0,1]
p_g(x): x 在生成器拟合的分布中的概率∈[0,1]
a global optimum: D_G^*(x) = 1 / 2
D 的训练过程:从真实数据分布和噪音变量的先验分布中采样数据,用 value function 训练一个二分类的分类器,但分类器输出的概率一直是 1 / 2 --> D 什么都分不出来 --> 分布是重合的
two sample test 判断两块数据是否来自同一分布。
i.e., T 分布检测 in 数据科学
1 / 2 的启示:高维数据统计分布不好用时,训练一个分类器。
这个分类器能分开两块数据 --> 不同分布
这个分类器不能分开两块数据 --> 相同分布
分类器的应用:
部署 训练集上训练好的模型 到另一个环境,用一个分类器检测 训练集和测试集 是否同一分布,避免部署的新环境和已有模型的不匹配。
Global optimality 证明
期望的积分形式 代入 value function
用复合函数 x = g(z) 消除 z
抽象为 a log(y) + b log(1 - y) convex function
求导得到 最优点 y = a / (a + b)
最优解 D 对 任意 x 的输出 = y = a / (a + b) = p_data(x) / ( p_data(x) + p_g(x) )
D_G^* 代入 value function 得到 C(G)
max_D V(G, D) --> min C(G)
Theorem 1: C(G) 取全局最小值时,if and only if 生成器 G 生成的数据分布和真实数据分布一样 p_g = p_data
KL 散度:衡量两个分布
KL(P ||Q)= E_{x ~ P} log( P(x) / Q(x) )
在知道 P 的情况下,至少要多少个 bit 能够把 Q 给描述出来。
分母凑成 和为 1 的概率分布 1 / 2 *( p_data(x) + p_g(x) ),分子凑的 1/2 根据对数运算法则,为 + log 1 / 2
KL 散度 ≥ 0
KL 散度 = 0 的情况是,P Q 两个分布相等
推导 p_data = p_g
KL divergence (不对称,PQ不可互换)两个写成 JS divergence (对称,PQ可互换)
GAN 使用了 JS divergence,训练容易一些。
之后的研究工作有更好的目标、训练更容易。
4.1总结 value function 很不错!
4.2 Convergence of algorithm 1
算法 1 能够优化 value function
proposition 2:当 G 和 D 有足够的容量的时候,在算法 1 的每一步,判别器 D 是可以达到最优解的,对 生成器 G 的优化 如下
判别器 D 已经换成了 D_G^*, p_g converges to p_data
将 V(G, D) 看成 U(p_g, D),一个关于 p_g 的函数。p_g 是模型 or 分布,p_g 也是一个函数。
函数的输入可以是标量 or 向量。
U(p_g, D) 是一个函数的函数,输入是一个函数,输入不再是一个值,而是一个值 + 一个计算。
之前:在一个高维的值空间做迭代
现在:在一个函数空间做梯度下降。
看成 p_g 的函数,第二项关于 p_g 的期望展开,是 p_g 的线性函数(log(1 - D_G^*(x)) 与 p_g 无关,so linear function)--> U(p_g, D) is convex in p_g
sup_D U(p_g, D) is convex in p_g 一个凸函数的上限函数还是凸函数。
每一步把 D 求到最优,对一个 convex function 梯度下降,会得到最优点。
假设:每次对 D 优化到极致
实际:只是迭代 k 步。
证明不能说明 algorithm 1 works,但实际 algorithm 1跑的效果还可以。
“效果还可以”的误解:算法一 难收敛。
但没关系,坑留给后来的人填。
7实验+结论
最后一列是GAN生成的
虽然分辨率低,但当时很震撼,i.e.,电视刚出现画面时
disad:训练难,G 和 D 需要比较好的均衡,否则生成的图片很难看。
adv:G 没有去看真实数据,没有试图拟合数据特征,生成的图片中边缘比较锐利。 ❌
未来研究方向
conditional GAN,本文 GAN 不受控制,增加 c 控制条件,i.e., 手写数字的 0 - 9
有几万工作继续改进。
8评论
写作:清晰明确,GAN 在做什么?
Abstract: GAN 在干什么?
Intro: 短 + 故事性(why 需要 GAN,无需拟合似然函数的参数、计算简单)
Related works: GAN 与已有工作 adversarial examples 的区别
真正伟大的工作:不在于你的那些想法是否出现过,而在于你给大家展示,这个工作可以取得非常好的应用;让别人信服,有人 follow,把这个领域做大做强。
adversarial nets: value function 如何做优化
theoretical results: 证明 value function 为什么能得到最优解,求解算法 algorithm 1 差不多能得到最优解
experiments + pros & cons + future works
开创性比较高的工作:适合本文的写法
创新度不够的工作:讲清楚和别人的区别、文章的贡献
GAN 算法评论:
-
无监督学习,无需标注数据
-
标签 by 数据来自真实采样 or 来自生成器拟合的
-
有监督学习的损失函数来训练无监督学习,训练高效
-
自监督学习的灵感来源 i.e., BERT
自监督学习(Self-supervised learning) 旨在对于无标签数据 ,通过设计 辅助任务(Proxy tasks) 来挖掘数据自身的表征特性作为监督信息,来提升模型的特征提取能力(PS:这里获取的监督信息不是指自监督学习所面对的原始任务标签,而是构造的辅助任务标签)。注意这里的两个关键词:无标签数据和辅助信息,这是定义自监督学习的两个关键依据。
有监督(Supervised): 监督学习是从给定的带标签训练数据集中学习出一个函数(模型参数),在输入新的测试数据时,可以根据这个函数预测结果;
无监督(Unsupervisedg): 无监督学习是从无标签数据中分析数据本身的规律性等解析特征。无监督学习算法分为两大类:基于概率密度函数估计的方法和基于样本间相似性度量的方法;
半监督习(Semi-supervised): 半监督介于监督学习和无监督之间,即训练集中只有一部分数据有标签,需要通过伪标签生成等方式完成模型训练;
弱监督(Weakly-supervised): 弱监督是指训练数据只有不确切或者不完全的标签信息,比如在目标检测任务中,训练数据只有分类的类别标签,没有包含Bounding box坐标信息。