Crd233's Notebook
Home
Courses
Languages
Math
CG
CV
AI
Reading
其它
— order: 6 —
1
Generative Adversarial Nets
1.1
摘要
&
引言
&
相关工作
●
摘要
○
两种写法
■
创新工作(本文):讲清楚自己是谁?
■
拓展工作:和别人的区别、创新
○
提出了一种
framework
(
掂量这个词的份量),即
Generator
和
Discriminator
■
𝐺
的目标是使
𝐷
犯错,而非常见的直接拟合数据分布
■
𝐷
的目标是分辨输入来自
𝐺
还是真实数据
■
类似于
minimax two-player game
,
最终希望找到函数空间中的一个解,使
𝐺
逼近真实数据而
𝐷
无法分辨
■
使用
MLP –> error backpropagation
训练,无需
Markov chains or unrolled approximate inference networks
近似推理过程的展开
●
引言
○
深度学习不等于深度神经网络,我可以不用
DNN
去近似似然函数,可以有别的方法得到计算上更好的模型
○
对
𝐺
和
𝐷
做了造假者和警察的比喻
○
𝐺
的输入是随机噪音(通常为高斯),映射到任意分布。两个模型都是
MLP
所以可以通过反向传递来优化
●
相关工作
○
版本为
NIPS final version
,
不同于
arxiv
早期版本其实基本没写相关工作,可能是因为作者的确是完全自己想毫无参考的,但事实
上还是有一定类似工作的
○
学习数据分布,一种想法是直接假定了数据分布是什么然后去学它的参数,另一种想法是直接学习一个模型去近似这个分布(坏处
是,即使学会了也不知道究竟是什么分布),后者逐渐成为主流
○
相关工作
VAEs
○
相关工作
NCE (noise-contrastive estimation)
○
相关工作
PM (predictability minimization)
,
GAN
几乎是它的逆向,也是一段趣事
○
易混淆的概念
adversarial examples
,
用于测试算法的稳定性
1.2
方法
●
adversarial modeling framework
在
𝐺
和
𝐷
都是
MLP
最简单直白
○
我们设数据为
𝒙
,其分布为
𝑝
data
(
𝑥
)
,并定义一个噪声变量,其分布为
𝑝
𝑧
(
𝒛
)
○
𝐺
学习
𝒙
上的分布
𝑝
𝑔
=
𝐺
(
𝒛
;
𝜃
𝑔
)
,
𝐺
为由
𝜃
𝑔
参数化的
MLP
函数,使
𝑝
𝑔
逼近
𝑝
data
○
定义
𝐷
(
𝒙
;
𝜃
𝑑
)
,
𝐷
为由
𝜃
𝑑
参数化的
MLP
函数,输出标量表示输入是真实数据的概率(
1
为真实)
○
定义损失函数和优化目标
min
𝐺
max
𝐷
𝑉
(
𝐷
,
𝐺
)
=
𝔼
𝒙
∼
𝑝
data
(
𝒙
)
[
log
𝐷
(
𝑥
)
]
+
𝔼
𝒛
∼
𝑝
𝑧
(
𝒛
)
[
log
(
1
−
𝐷
(
𝐺
(
𝒛
)
)
)
]
●
举一个游戏的例子
○
显示器里一张
4
K
分辨率
(
8
0
0
𝑤
pixels)
的图片。每一个像素是一个随机向量,由游戏程序
𝑝
data
所控制。
𝒙
是一个
8
0
0
𝑤
维度的多维
随机变量
○
𝐺
的学习目标:生成和游戏里一样的图片。思考游戏生成图片的方式?
4
𝐾
图片由
1
0
0
个变量控制
1.
反汇编游戏代码,找到代码生成原理
——
困难
2.
放弃底层原理,直接构造一个约
1
0
0
维的向量(这就是这里的
𝒛
,
a prior on input
),
用
MLP
强行拟合最后图片的样子
■
好处是计算简单,坏处是不真正了解代码。看到一个图片,很难找到对应的
𝒛
;只能反向操作,随机给一个
𝒛
,生成一个像样
的图片
○
𝐷
的学习目标,判断一个图片是不是游戏里生成的
○
𝐷
最大化
𝑉
(
𝐷
,
𝐺
)
。对完美的
𝐷
而言,前一项判正,后一项判负,即
𝐷
(
𝒙
)
=
1
,
𝐷
(
𝐺
(
𝒛
)
)
=
0
,上式
𝑉
(
𝐷
,
𝐺
)
=
0
,达到最大
○
𝐺
最小化
𝑉
(
𝐷
,
𝐺
)
。对完美的
𝐺
而言,
𝐷
(
𝐺
(
𝒛
)
)
=
1
,上式
𝑉
(
𝐷
,
𝐺
)
=
−
∞
,达到最小
●
伪代码
Algorithm 1
:
伪代码
1
for
number of training iterations
do
2
for
𝑘
steps
do
3
Sample minibatch of m noise samples
{
𝒛
(
1
)
,
.
.
.
,
𝒛
(
𝑚
)
}
from noise prior pg(z).
4
Sample minibatch of m examples
{
𝒙
(
1
)
,
.
.
.
,
𝒙
(
𝑚
)
}
from data generating distribution
𝑝
data
(
𝑥
)
.
5
Update the discriminator by ascending its stochastic gradient:
∇
𝜃
𝑑
1
𝑚
∑
𝑚
𝑖
=
1
[
log
𝐷
(
𝒙
(
𝑖
)
)
+
log
(
1
−
𝐷
(
𝐺
(
𝒛
(
𝑖
)
)
)
)
]
6
end for
7
Sample minibatch of m noise samples
{
𝒛
(
1
)
,
.
.
.
,
𝒛
(
𝑚
)
}
from noise prior
𝑝
𝑔
(
𝒛
)
.
8
Update the generator by descending its stochastic gradient:
∇
𝜃
𝑑
1
𝑚
∑
𝑚
𝑖
=
1
log
(
1
−
𝐷
(
𝐺
(
𝒛
(
𝑖
)
)
)
)
9
end for
10
The gradient-based updates can use any standard gradient-based learning rule. We used momentum in our experiments.
●
GAN
的收敛特别不稳定,因为要确保
𝐺
和
𝐷
实力相当,这也是后续很多工作的改进方向
●
另外一个小问题是说,一开始判别器
𝐷
容易训练得特别强大,导致
log
(
1
−
𝐷
(
𝐺
(
𝒛
)
)
)
=
=
0
,
𝐺
梯度消失无法学习,可以把
𝐺
的优化
目标暂时改成
max
𝐺
log
𝐷
(
𝐺
(
𝒛
)
)
●
理论证明
1.
当
𝐺
固定,
𝐷
的最优解就是
𝐷
(
𝑥
)
=
𝑝
data
(
𝒙
)
𝑝
data
(
𝒙
)
+
𝑝
𝑔
(
𝒙
)
2.
𝐺
达到全局最优当且仅当
𝑝
𝑔
=
𝑝
data
(使用
KL
散度证明)
3.
如果
𝐺
和
𝐷
有足够的容量,并且算法中每一次迭代都让
𝐷
达到当前最优(但其实不一定有,只迭优化了
𝑘
步),那么
𝐺
确保能够
收敛到最优(使用泛函分析证明)
1.3
实验
&
评价
●
实验结果相对来说不是那么好,但也因此给后人留了很多机会
●
优劣
○
作者
claim
优点是没有看训练数据,因此能够生成比较锐利的边缘(?),但后来大家发现不是这样子
○
缺点是训练困难,不好收敛
●
未来工作
1.
conditional GAN
2.
学习到的近似
inference
其实可以用任意模型去蒸馏
3.
通过训练一组共享参数的条件模型,可以对所有条件进行近似建模
4.
半监督学习
5.
效率优化
●
李沐的评价
1.
无监督学习,无需标注数据。标签和数据来自真实采样
+
生成器拟合
2.
借助
𝐷
用有监督的损失函数来训练无监督,相对高效。同时也是自监督学习的灵感来源,
i.e. BERT