BEGAN的填坑之路

BEGAN的填坑之路

--------------------------------------- Update ---------------------------------------


我自己复现了BEGAN,发现是可以收敛的,以前用的artcg的代码, 实验效果很差,k_t并不收敛。从复现的结果来看,k_t到最后基本上稳定了,收敛到哪个值并不是确定的,跟实验参数有关。作者似乎有意避开相同的数据集比较,从实验结果来看,如果采用CelebA数据集,加上一些crop,效果还不错,但是存在一些问题:

  • BEGAN生成的样本像是美颜过的,或者说,它有点mode collapse到脸部比较“干净”的数据上去了。这一点跟DCGAN形成很大反差,从实验结果来看,我觉得DCGAN反而mode collapse没那么严重,尽管有些人脸学糊了。
  • 生成的图像存在瑕疵(artifacts)。


(CelebA数据集的样本)


(BEGAN生成样本,\gamma=0.75, \lambda_k=0.001


(DCGAN生成样本)

--------------------------------------- 以下是原文,或许不会再更新了 ---------------------------------------

前些天我在公众号上“偷懒”,没有写读书笔记,而是推送了一篇“论文推荐”。其中有一篇推荐的论文就是BEGAN:boundary equilibrium generative adversarial networks[1]。

文章没有多少创新,细节也没去深入理解,我也没太当回事,只是觉得他提出来的diversity ratio参数有点意思,这个超参数值得继续探索。我当时没有做实验复现结果,然后,几天后在群里就聊得热火朝天了,大家都发现复现不了文章的结果,以及文章的一些细节无法解释。Reddit上甚至有人说这文章就是愚人节的玩笑(手动微笑)。知乎上也开了问题,我们发现,文章的坑有点儿深,掉进去了就爬不出来了(手动捂脸)。

我写这篇文章,打算简单介绍BEGAN,定位它有哪些坑,以及尝试填坑。

PS:文章还没竣工,实验需要花很多时间,有新的进展我会陆续放上来。如果你也感兴趣,或者对文章有什么疑问/建议,欢迎私信跟我讨论。

本文结构

  1. BEGAN简介
  2. 找坑
  3. 填坑

下面进入正文。


1. BEGAN简介

为方便叙述,以下假设样本均为图像。

类似于EBGAN,BEGAN采用autoencoder结构的discriminator。


其中,loss采用pixel level的L1或者L2 norm,即

\mathcal{L}(v)={\|v - D(v)\|}_p \ , \quad p \in {1,2}

作者通过实验发现,每个pixel的重构误差实际上是独立同分布的,并且都是(近似)正态分布。根据中心极限定理,整个图像的重构误差也将服从相同的正态分布。

据此,作者提出了让生成图像的重构误差分布逼近真实图像的重构误差分布的做法,而传统的GAN的做法是让生成图像的分布逼近真实图像的分布。

给定两个一维的正态分布\mu_1 = \mathcal{N}(m_1, c_1), \quad \mu_2 = \mathcal{N}(m_2, c_2),不难计算出它们之间的Wasserstein distance:

W(\mu_1, \mu_2)^2 = (m_1 - m_2)^2 + (c_1 + c_2 - 2\sqrt{c_1 c_2})

假设:
\frac{c_1 + c_2 - 2\sqrt{c_1 c_2}}{(m_1 - m_2)^2 }是常数,或者是关于W的递增函数。

在该假设下,我们可以只通过最小化(m_1-m_2)^2来最小化W(\mu_1, \mu_2)^2。也就是说,W(\mu_1, \mu_2) \propto |m_1 - m_2|

根据GAN对抗性的原则,D的目标是拉大两个分布的距离,也就是最大化W(\mu_1, \mu_2),而G的目标则是拉进两个分布的距离。

由于m_1, m_2 \in \mathcal{R}^+,最大化W(\mu_1, \mu_2)实际上有两组解:

W(\mu_1, \mu_2) = m_1 - m_2, \quad m_1 \rightarrow \infty, \quad m_2 \rightarrow 0 或者

W(\mu_1, \mu_2) = m_2 - m_1, \quad m_1 \rightarrow 0, \quad m_2 \rightarrow \infty

根据D和G的目标,不难确定第二组解更合理。它一方面拉大两个分布的距离,另一方面还能降低真实样本的重构误差。而G为了缩小两个分布的差异,可以通过最小化m_2来实现。也就是说(D实际上已对目标函数取了相反数,因此下面两个目标函数都需要最小化)

\begin{aligned} \mathcal{L}_D &=& \mathcal{L}(x, \theta_D) - \mathcal{L}(G(z, \theta_G), \theta_D), \quad \text{for} \ \theta_D \\ \mathcal{L}_G &=& \mathcal{L}(G(z, \theta_G), \theta_D), \quad \text{for} \ \theta_G \end{aligned}公式(1)

然而,当D和G的能力不相当时,一方很容易就打败了另一方,这将导致训练不稳定。为此,作者引入了一个超参数\gamma \in [0,1]来平衡两者的loss:

\gamma = \frac{\mathbb{E}_z(\mathcal{L}(G(z)))}{\mathbb{E}_x(\mathcal{L}(x))}公式(2)

\gamma较小时,D致力于最小化真实样本的重构误差,相对来说,而对生成样本的关注较少,这将导致生成样本的多样性降低。作者称这个超参数为diversity ratio,它控制生成样本的多样性。

所以现在的目标有两个,尽可能地最小化公式(1)以及尽可能地满足保证公式(2)成立。综合这两个目标,可以设计一个判断收敛情况的指标:

\mathcal{M} = \mathcal{L}(x) + |\gamma \mathcal{L}(x) - \mathcal{L}(G(z))|

为了尽可能地满足公式(2),作者借鉴控制论中的“比例控制理论”(Proportional Control Theory),引入比例增益\lambda_k和比例控制器的输出k_t,完整的BEGAN的目标函数如下:

\mathcal{L}_D &=& \mathcal{L}(x) - k_t \mathcal{L}(G(z)) , \quad \text{for} \ \theta_D\\<br>\mathcal{L}_G &=& \mathcal{L}(G(z)) , \quad \text{for} \ \theta_G \\<br>k_{t+1} &=& k_t + \lambda_k (\gamma \mathcal{L}(x) - \mathcal{L}(G(z))) , \quad \text{for each training step} \ t公式(3)

到这里,BEGAN的主要思想就介绍完了。文章还设计了自己的generator和discriminator。我认为,网络架构不是关键。这里就不再展开。



2. 找坑

这个文章坑很多,有些坑比较容易填,也有很难填的坑。具体来说,我认为有以下这些坑:

  • 【这不是坑,但是需要验证or证明】对于一个训练良好的autoencoder来说,每个pixel位置满足正态分布吗?是否满足独立同分布?
  • 为什么要求\gamma \in [0,1]?如果采用\gamma>1,是否也可以?
  • 根据比例控制理论,比例控制器的输出实际上看成reward,它跟实时处理的误差成正比,这样在“过”和“不及”的时候都能够有信号去引导系统。根据公式(3)的设计,它能如愿以偿吗?如果收敛,k_t最终会收敛到什么值?



3. 填坑

种萝卜时间到了。我们期望填坑的时候能顺带种下萝卜,或许来年会有收成。

我尝试对上面提到的“坑”进行填补。有些“坑”目前还没想到好的填补方式,我会继续跟进。

PS:这里实验用的BEGAN代码,来自artcg/BEGAN目前github上出了一份新的代码Heumi/BEGAN,据说基本上复现了文章的实验,还没上手跑过。

PPS:目前填坑工作还在进行中,没有时间对这些文字做整理,下面的填坑写的逻辑比较混乱,基本上是做了一个实验或者做了一点理论分析就写一小段,这样拼凑出来的。待填坑差不多了,我会重新整理文章的逻辑。



对于一个训练良好的autoencoder来说,每个pixel位置满足正态分布吗?是否满足独立同分布?

首先,从理论上来说,一个训练良好的autoencoder能够很好地捕捉到图像中的结构信息,从而压缩图像。如果模型能力足够强,或者说,隐变量空间足够大(足以表达图像的所有结构信息),那么图像的重构误差将趋于0,也就是说,每个pixel位置都会满足独立的狄拉克\delta分布。

但是,我们注意到,编码图像的所有结构信息所需的空间维数 << 图像空间的维数。设图像大小为3wh(以3通道图像为例,其中,w,h分别为图像的宽和高),编码图像的所有结构信息所需的空间维数为n,则n \ll 3wh。对于噪声图像而言,它的每个pixel都是任意的,也就是说它是充满整个图像空间的,维数为3wh。因此,autoencoder不可能将任意噪声图像完美地压缩到n维空间,然后再完美地解压缩。

以上假定了autoencoder具有足够强的能力,实际中我们一般不能对真实图像做到几乎无损的压缩,因此不会是满足狄拉克分布。

我们通过实验验证。Autoencoder采用单层encoder,单层decoder。


我们采用动漫数据集,图像大小采用32x32x3。我们挑了三个位置,画了下面的直方图。

可以看出来,真实图像和噪声图像的重构误差都满足正态分布。并且两者的均值是不同的。

那么它们独立同分布吗?对于真实图像来说,随机挑选一些pixel位置,通过KS检验我们发现它们确实是独立同分布的。对于噪声图像,上图中一和二在0.05的水平下没通过KS检验。随机挑选其他一些位置做KS检验,发现在0.05水平下没通过KS检验的数量较低。这可能跟训练没完全收敛有关系,或者跟autoencoder的能力有关系。



  • 延伸


这里,我们可以拓展一下,对autoencoder做一个更深入的了解。

我们以前讨论过autoencoder是否适合作为生成模型,我们从实验中观察到,autoencoder并没有泛化能力,它学到的不是连续的真实样本的分布,而是在训练集上的离散经验分布。

(连续的真实分布与训练集上的离散经验分布示例)

关于autoencoder没有泛化能力,可以通过下面的实验结果来验证。下图第一行是随机隐层输入生成的样本,第二行是真实样本每个像素加独立的\mathcal{N}(0,0.5)噪声重构的结果。可以看到,这个实验结果表明,autoencoder没有学到真实的数据分布,它学到的分布是离散的,不能充满整个空间。

对于GAN来说,它具有一定的泛化能力,在样本足够多的情况下,由大数定律,训练集上的经验分布将有可能泛化到连续的真实分布。



为什么要求\gamma \in [0,1]?如果采用\gamma>1,是否也可以?

根据比例控制理论,比例控制器的输出实际上看成reward,它跟实时处理的误差成正比,这样在“过”和“不及”的时候都能够有信号去引导系统。根据公式(3)的设计,它能如愿以偿吗?

我们把关于\gamma的讨论和关于公式(3)的讨论放在一起,两者密不可分。

讨论超参数\gamma,得结合比例控制器的输出k_t

作者自己也说,在实验初期,G生成的图像每个像素值都很小,比真实图像容易重构,重构误差小,于是有\mathcal{L}(x) > \mathcal{L}(G(z))

在实验中,我们也发现,k_t实际上一直都是负值,由于限制k_t \in [0,1],实际上k_t一直被clip为0,也就是说,D的目标函数是\mathcal{L}_D = \mathcal{L}(x),D致力于最小化真实图像的重构误差,而G致力于最小化生成图像的重构误差。


(上图中橙色线表示真是样本的重构误差,蓝色线表示生成样本的重构误差,绿色线与x轴重叠,表示经过clip的k_t,实验在CelebA数据集上进行,\gamma=0.75。感谢@郑华滨 供图,采用hyperboard作图)


(上图绿色线表示未经clip的k_t,请注意,实验时仍然要经过clip,这里画的是clip之前的数据,实验在CelebA数据集上进行,\gamma=0.75。这个图和上个图来自两次实验,感谢@郑华滨 供图,采用hyperboard作图)

也就是说,实验中G和D只是各自为政,如果要让G和D产生互动,\gamma在初期需要较大,接近1才可行。如果不产生对抗的话,G能生成什么样的数据呢?

事实上,autoencoder在图像数据上训练好了以后,对于任意噪声输入,它虽然不能完美压缩并解压,但是解压结果会具有一些训练集图像的结构信息。而G的目标是最小化噪声图像的重构误差,这就会引导G往生成更像真实图像的方向移动。然而,这种引导是很弱的。

上面这段话是需要验证的。事实上,我们很容易验证第一句话,利用动漫数据集训练autoencoder,然后拿随机生成的噪声图像去重构,结果如下,可以看出确实解压结果确实具有图像的结构信息,而这是原来的噪声图像所不具有的。

第二句话和第三句话也不难验证,从BEGAN的训练结果来看,还是有效的,但是,从下图我们可以看到(\gamma=0.75),当训练到一定程度的时候,生成图像的质量就变化不大了。

关于\gamma的取值范围,设置大于1和小于1没有显著变化,原因在于BEGAN的目标函数中并没有对抗性质,G和D各自为政。\gamma控制着真实图像和噪声图像的重构误差的比例,似乎力不从心,没有起到应有的效果。下图是\gamma = 1.2的实验结果。



(未完待续)

参考文献


[1]. Berthelot D, Schumm T, Metz L. BEGAN: Boundary Equilibrium Generative Adversarial Networks[J]. arXiv preprint arXiv:1703.10717, 2017.

编辑于 2018-06-23

文章被以下专栏收录