GAN论文逐段精读【论文精读】

 

1、标题 + 作者

近 5 年,GAN 上头条次数很多,Reddit 里 GAN 很火

thispersondoesnotexist.com

加州法令:禁止换脸、禁止对政治人物骚操作,说未讲过的话

GAN: 两个网络相互对抗

generative: ML模型分 discriminative(AlexNet, ResNet, Transformer) 和 generative

adversarial: 对抗

nets: networks 简写

非 native speaker 不建议使用简写

Ian DL❀书作者

2、摘要

        视频时间:03:52

写作简洁,可直接搬运😂(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、导言
视频时间:07:25


DL ≠ DNN,那 DL 是什么?

数据特征的概率表示,represent probability distributions

discriminative 模型发展很好,generative 模型发展困难、Why?

difficulty in maximum likelihood estimation 计算最大似然概率的近似时,计算困难。

本文的故事是什么?

解决 generative 模型发展的困难:不近似 likelihood 函数,使用别的方法计算 得到更好的模型。


导言第二段: GAN 的介绍 警察 造假币者


视频时间:08:38


adversarial nets framework 里 有什么?

generative model 造假币者
discriminative model 警察
造假者 和 警察 不断提升性能,造假者造出的假币和真币一模一样,警察判断的概率是 1 / 2

导言第三段:framework 里的 G 和 D 是 MLP --> adversarial nets


视频时间:09:42


G 的输入是 random noise,映射到任何一个想拟合的分布。

D 是 MLP

G 和 D 都是 MLP,有什么用? --> 计算上有优势

train using backpropagation √

Markov chains 分布采样 ❌

introduction写的怎么样?

good!摘要的扩充,第一段的故事性:generative models发展困难,因为拟合似然函数计算的复杂性。我能解决,MLP作为 G 和 D 的结构,反向传播 无需 Markov chain 采样。

4、相关工作

视频时间:10:42


版本: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 的区别


视频时间:15:25


adversarial examples 测试算法的稳定性,how?

构造一些假的、跟真的样本长得很像的 样本,能糊弄到分类器。

5、模型:GAN 目标函数 + 求解


视频时间:15:44


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 


视频时间:18:37


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 步


视频时间:22:46


噪音 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


视频时间:25:33


# 每一次做迭代 

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 的 梯度更新 问题

视频时间:28:45


第二项 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理论


视频时间:29:52


value function 的全局最优解 p_g = p_data, 当且仅当 G 生成器学到的分布和真实数据分布一致。

算法 1 能求解 value function

4.1 Global optimality of p_g = p_data 目标函数是正确的


视频时间:30:11


固定的生成器 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 证明




视频时间:32:52


 

 

期望的积分形式 代入 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)


视频时间:35:52


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


视频时间:39:37


算法 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) 是一个函数的函数,输入是一个函数,输入不再是一个值,而是一个值 + 一个计算。

来自弹幕的复合函数 、 泛函

python里的函数本来输入是一个数 or 向量

现在接受的输入是一个计算和一个数,closion(没听清)

之前:在一个高维的值空间做迭代

现在:在一个函数空间做梯度下降。


视频时间:41:16


看成 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实验+结论


视频时间:42:05


最后一列是GAN生成的

虽然分辨率低,但当时很震撼,i.e.,电视刚出现画面时


disad:训练难,G 和 D 需要比较好的均衡,否则生成的图片很难看。

 

adv:G 没有去看真实数据,没有试图拟合数据特征,生成的图片中边缘比较锐利。 ❌

未来研究方向

conditional GAN,本文 GAN 不受控制,增加 c 控制条件,i.e., 手写数字的 0 - 9

有几万工作继续改进。

8评论


视频时间:43:50


写作:清晰明确,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  作者:BeBraveBeCurious https://www.bilibili.com/read/cv13960882?from=note 出处:bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值