小提示1:本篇部分内容基于个人理解,仅供参考,如有错误(非常)欢迎指出。另外,如果有看不明白的不好理解的地方,也欢迎告知作者。

小提示2:转载请注明出处。

 

目标函数的优化

第一篇我们了解到,原生的GAN采用零和博弈(zero-sum game)的策略,这会导致在训练初期生成器的临梯度消失(gradient vanishing),训练停止。如果将零和博弈改为非饱和博弈,这虽然能够解决梯度消失的问题,但会导致训练不稳定(instable)。为了解决这两个问题,许多研究者对目标函数的优化做了不同的尝试。
上一篇中,我们已经了解到GAN的目标函数等价于JS散度(JS divergence),那我们下面就先从散度的角度重新认识一下GAN,然后再介绍对目标函数的优化策略。

 

f-GAN
f-GAN又称为f-divergence GAN,其中f-divergence(f散度)是各类散度(divergences)的通称,定义为:

\begin{equation} D_f{(p(x) \parallel q(x))} = \int{q(x) f(\frac{p(x)}{q(x)})} dx \label{2.1} \end{equation}

其中$p$和$q$都是连续密度函数,$f$是一个凸下半连续函数(凸下半连续函数例如$图2.1$所示)。$f$满足$f(1)=0$,这保证了当$p$等于$q$时,它们的散度$D_f$为·零。当$f(u)=u \log{u}$时,f-divergence为KL散度,而当$f(u) = -(u+1)\log{(1+u)/2}+u \log{u}$时,f散度为JS散度(如$表2.1$所示)。从上一篇的式$(5)$我们知道,原生的GAN的目标函数是JS散度的近似,所以原生的GAN实际上属于f-GAN的特例

(表2.1、2.2,来自:f-GAN training generative neural samplers using variational divergence minimization,Nowozin)

(图2.1,来自百度)

 

f-GAN的目标函数可以统一表示为:

\begin{equation} V(D,G) = E_{x \sim P_{data}} [D(x)] + E_{x \sim P_g} [f^* (D(x))] \label{2.2} \end{equation}

其中$D$和$G$分别为判别器和生成器,$f^*$为函数$f$的凸共轭函数(convex conjugate function)或者称Frenchel conjugate,定义为:

\begin{equation} f^* (t) = \sup_{u \in dom_f}{ \lbrace ut - f(u) \rbrace }  \nonumber \end{equation}

其中$\sup$表示上确界或最小上界(supremum),也就是集合${·}$中的所有值的上边界,这个上边界可能包含在集合${·}$中,也可能不在${·}$中。$\sup{ \lbrace x \in R,0<x<1 \rbrace}=1$就是上确界不包含于集合中的例子。$dom_f$为函数$f$的定义域,或者说$u$的取值范围。不同散度对应的$dom_f$如$表2.2$中所示。
函数$f$之所以有Frenchel 共轭,是因为它是凸下半连续函数(在这里不做证明,有兴趣可以自己找答案)。另外,$f^*$也是凸下半连续函数,且与$f$互为共轭,$f^{**}= f$。因此:

\begin{equation} f(u) = \sup_{t \in dom_{f^*}}{ \lbrace tu - f^* (t) \rbrace} \label{2.3} \end{equation}

将式$(\ref{2.3})$带入$(\ref{2.1})$,得到f散度的下界(lower bound):

\begin{align} D_f (p(x) \parallel q(x)) &= \int{q(x) \sup_{t \in dom_{f^*}}{ \lbrace t \frac{p(x)}{q(x)} - f^* (t) \rbrace}} dx \nonumber \\ &\ge \sup_{t \in T}⁡{ \lbrace \int{p(x)t(x)} dx - \int{q(x) f^* (t(x)) } dx \rbrace} \nonumber \\ &= \sup_{t \in T}{ \lbrace E_{x \sim P} [t(x)] - E_{x \sim Q} [f^* (t(x))] \rbrace} \label{2.4} \end{align}

$(\ref{2.4})$是f散度的下界(小于等于$D_f$),原因是:1)根据Jensen’s不等式(Jensen’s inequality),在交换积分和求上确界的顺序时,得到的值小于等于原值;2)函数集$T$可能只是所有可能函数的子集(subset),取不到最优函数。另外,当$P$被替换为$P_{data}$,$Q$替换为$P_g$,并且令变分函数(variational function)$t$为$D$,我们就将$(\ref{2.4})$转换为f-GAN的目标函数$(\ref{2.2})$。也就是说,f-GAN的目标函数是f散度的估计。根据论文$[2.1]$,最优的$D$为:

\begin{equation} D^* (x) = f^{\prime} (\frac{p(x)}{q(x)}) \nonumber \end{equation}

时,下界$(\ref{2.4})$越接近f散度,或者说f-GAN的目标函数越接近f散度(注意,$D^*$表示最优的$t$,而$f^*$表示$f$的共轭函数,$f^{\prime}$表示$f$的导数)。对于原生的GAN来说,$D^*$就是第一篇中推导出的$(4)$:

\begin{align} D^* (x) = \frac{p_{data} (x)}{p_{data} (x) + p_g (x)} = f^{\prime} (\frac{p_{data} (x)}{p_g (x)}) \nonumber \end{align}

因为f散度是f-GAN目标函数的上确界,最大化f-GAN的目标函数(优化判别器)是使目标函数接近f散度,最小化f-GAN的目标函数(优化生成器)实际上是减小f散度。当f散度趋近于0时,生成数据的分布趋近于真实数据。


WGAN
WGAN,又称为Wasserstein GAN,是GAN的IPM(Integral Probability Metric)类的模型。IPM类的模型会用一个函数来衡量两个分布的差异,在WGAN中,这个函数是EM距离(Earth-Mover distance/Wasserstein-1,推土机距离)。EM 距离的定义如下:

\begin{equation} W(P_{data},P_g) = \inf_{P_{\gamma} \in \prod{(P_{data} \;,P_g)}}{ \lbrace E_{(x,\hat{x}) \sim P_{\gamma}} [ \parallel x - \hat{x} \parallel] \rbrace} \label{2.5} \end{equation}

其中$\inf$是下确界或最大下界(infimum),与$\sup$相反。例如,对于不包含下确界的集合,$\inf⁡{ \lbrace x \in R,0<x<1 \rbrace}=0$。$x$和$\hat{x}$的分布分别为$P_{data}$和$P_g$它们的联合分布(joint distribution)为$P_{\gamma} (x,\hat{x})$,$\prod{(P_{data},P_g)}$是这些联合分布的集合,也就是所有可能的联合分布组成的集。当生成数据$\hat{x}$越接近真实数据$x$时,EM距离越小,而优化判别器则是使EM距离最大化。但是EM距离中的$\inf$的不能直接计算,因为我们不知道$P_{data}$和$P_g$,不能求出联合分布$P_{\gamma}$。为了得到EM距离,我们需要对式子$(\ref{2.5})$做一些转换。
利用Kantorovish-Rubistein对偶(duality),上面的式子可以转换为:

\begin{equation} W(P_{data},P_g) = \sup_{{\parallel f \parallel}_L \leq 1}{ \lbrace E_{x \sim P_{data}} [f(x)] - E_{x \sim P_g} [f(x)] \rbrace} \label{2.6} \end{equation}

其中${\parallel f \parallel}_L \leq 1$表示函数$f$必须满足1-Lipschitz约束。Lipschitz约束(constraint)的定义是:

\begin{equation} \parallel f(x_1) - f(x_2) \parallel \leq k \parallel x_1 - x_2 \parallel \nonumber \end{equation}

当$k=1$时,k-Lipschitz约束为1-Lipschitz。这一约束保证对于相邻的两点$x_1$和$x_2$,函数值$f$不会剧烈波动,或者说函数$f$对数据不会过度敏感。
对EM距离$(\ref{2.6})$做一些变化,我们就得到了WGAN的目标函数:

\begin{equation} \min_G{⁡\max_f{V_W (f,G)}} = E_{x \sim P_{data}} [f(x)] - E_{z \sim P_z} [f(G(z))] \label{2.7} \end{equation}

式$(\ref{2.7})$中的$f$是critic。不同于执行二分类任务的判别器$D$,$f$可以是满足1-Lipschitz约束的任意函数,它的输出值没有限制,所以可以认为它是一个回归模型。当生成的数据$G(z)=x$时,$f(G(z))=f(x)$。
EM距离相对于JS散度和KL散度的优势是,它对没有重叠的两个分布的差异也能够进行衡量,或者说EM距离衡量的就是任意两个分布的差异。这样一个优势,使得WGAN不会出现生成器梯度消失的问题。
基于JS散度的GAN之所以会遇到梯度消失的情况,可以认为是因为JS散度无法处理不重叠的两个分布。根据在第一篇中推导得到的式子$(5)$,在判别器取到最优时,生成器的目标函数等价于JS散度:

\begin{align} \min_G{⁡V(D^*,G)} &= 2 JS(p_{data} \parallel p_g) - \log{4} \nonumber \\ &= KL(p_{data} \parallel \frac{(p_{data} + p_g)}{2}) + KL(p_g \parallel \frac{(p_{data} + p_g)}{2}) - \log{4} \nonumber \\ &= \int{p_{data} (x) \log{\frac{2 p_{data} (x)}{p_{data}(x) + p_g(x)}}} dx + \int{p_g (x) \log{\frac{2 p_g (x)}{p_{data} (x) + p_g (x)}}} dx - \log{4} \label{2.8} \end{align}

其中$p_{data} (x)$和$p_g (x)$的取值有四种情况,分别是:
$p_{data} (x)=0$, $p_g (x) \neq 0$
$p_{data} (x) \neq 0$, $p_g (x)=0$
$p_{data} (x)=0$, $p_g (x)=0$
$p_{data} (x) \neq 0$, $p_g (x) \neq 0$
当$p_{data} (x)=0$时,生成器的目标函数$(\ref{2.8})$变成:

\begin{align} \min_G{⁡V(D^*,G)} &= \int{p_g (x) \log{\frac{2 p_g (x)}{p_g (x)}}} dx - \log{4} \nonumber \\ &= \int{p_g (x) \log{2}} dx - \log{4} \label{2.9} \end{align}

当$p_g (x)=0$时, $(\ref{2.8})$变成,而常数的导数为0:

\begin{equation} \min_G{V(D^*,G)} = \int{p_{data} (x) \log{2}} dx - \log{4} \label{2.10} \end{equation}

当$p_{data} (x)$和$p_g (x)$都为零时:

\begin{equation} \min_G{⁡V(D^*,G)} = - \log{4} \label{2.11} \end{equation}

$(\ref{2.9})$、$(\ref{2.10})$和$(\ref{2.11})$都是常数,而常数的导数为0,此时生成器$G$停止优化。
当$p_{data} (x)$和$p_g (x)$都不为0时,也就是说数据$x$同时存在于$p_{data} (x)$和$p_g (x)$,$p_{data} (x)$和$p_g (x)$出现重叠。但是在训练初期,这种情况的概率很低,就像二维平面中的两条线,它们重叠的部分很小,甚至没有重叠。所以基于JS散度的GAN在训练初期,很容易出现梯度消失。
除了避免梯度消失外,WGAN的训练也很稳定,不会发生模式坍塌(mode collapse),因为EM距离就是在衡量两个分布的差异,训练生成器就是使EM距离变小,不存在同时变大又变小的情况。

参数约束
WGAN的目标函数中的函数$f$可以通过神经网络模型来估计。假设模型的每一层的激活函数(activation function)的输出为$a(Wx+b)$,其中$a(·)$为激活函数,$W$和$b$为模型参数,使这一层满足Lipschtz约束(Lipschitz constraint):

\begin{equation} \parallel a(x_1) - a(x_2) \parallel \leq k \parallel x_1 - x_2 \parallel \nonumber \end{equation}

根据泰勒展式:近似$a(x_1) - a(x_2)$:

\begin{align} &f(x_0 + \Delta x) = f(x_0) + \Delta x f^{\prime} (x_0) + \dotsb \nonumber \\[6pt] &f(x_0 + \Delta x) - f(x_0) \approx \Delta x f^{\prime} (x_0) \nonumber \end{align}

其中$f^{\prime}$为$f$的一阶导,$\Delta x = \parallel x_1 - x_2 \parallel$,$\parallel · \parallel$为求绝对值,将$f$替换为$a$,得到:

\begin{align} &a(x_1) - a(x_2) \approx \parallel x_1 - x_2 \parallel a^{\prime} (x_1) = \frac{∂a}{∂x} W \parallel x_1 - x_2 \parallel \nonumber \\[6pt] &\parallel \frac{∂a}{∂x} W(x_1 - x_2) \parallel \leq k \parallel x_1 - x_2 \parallel \label{2.12} \end{align}

根据$(\ref{2.12})$,要使$k$尽可能小,需要$\frac{∂a}{∂x}$和$W$的绝对值尽可能小。因为在神经网络中,激活函数a的导数的绝对值基本上都小于或等于1(例如ReLU在$Wx+b>0$时导数都为1)。假设激活函数的导数为1,那么要使这一层满足1-Lipschitz约束,只需要约束参数$W$:

\begin{equation} \parallel W(x_1 - x_2) \parallel \leq k \parallel x_1 - x_2 \parallel \label{2.13} \end{equation}

参数裁剪
为了使f对数据点x满足1-Lipschitz约束,WGAN$[2.2]$的作者采用参数裁剪(weight clipping)的方法来约束参数的范围。参数裁剪方法是设置阈值$c$,使f的参数落在区间$[-c,c]$的方法。虽然这种方法能够约束$f$,但用这种方法训练出来的模型过于简单,能力较差。另外,论文$[2.3]$中的实验显示,采用参数裁剪的方法,模型的训练比较耗时。
除裁剪之外,其他对参数进行约束的方法有:参数归一化(weight normalization)、谱归一化(spectral normalization)等。

参数归一化
参数归一化的方法是受到批归一化(Batch Normalization,BN)的启发而设计的。批归一化方法对神经网络每一层的输入做归一化,使$\bar{x}=(x-\mu)/ \sigma$——这里$\mu$是某一批(minibatch)数据$x$的均值,而$\sigma$是它们的标准差。参数归一化是采用重参数技巧(reparameterization trick),将$W$用新的参数$V$和$g$替换:
\begin{equation} W = g \frac{V}{\parallel V \parallel} \nonumber \end{equation}
其中$V$和$W$一样都是参数矩阵。在这里我们所做的参数归一化是将W替换为$\bar{W}$:

\begin{align} &\bar{W} = \frac{W}{{\parallel W \parallel}_F} \label{2.14} \\[6pt] &{\parallel W \parallel}_F = \sqrt{ \sum_{i,j}{w_{i,j}^2}} \nonumber \end{align}

从$(\ref{2.14})$可以发现,参数归一化等价于Frobenius归一化,其中${\parallel W \parallel}_F$为Frobenius范数(Frobenius norm)。
如果不是用归一化的方式,而是用正则化(regularization)的方式来约束参数的话,那么目标函数则是:

\begin{align} V_{new}{(D,G)} &= V(D,G) + \lambda {\parallel W \parallel}_F \nonumber \\ &= V(D,G) + \lambda {\parallel W \parallel}_2 \nonumber \end{align}

这相对于L2正则化。所以L2正则化实际上是使模型的参数对数据的敏感度降低,使模型泛化能力更强。另外,正则化相比归一化,它不需要对每个参数进行重新计算。

谱归一化
谱范数(spectral norm)的定义是:

\begin{align} {\parallel W \parallel}_s = \max_{x \neq 0}⁡{\frac{{\parallel Wx \parallel}_2}{{\parallel x \parallel}_2}}  = \max_{{\parallel x \parallel}_2 \leq 1}{{\parallel Wx \parallel}_x} \label{2.15} \end{align}

${\parallel W \parallel}_s$等于矩阵$W$的最大特征值(maximum singular value),它可以通过幂迭代(power iteration)的方式计算出来。
对$(\ref{2.15})$做一些调整:

\begin{equation} {\parallel Wx \parallel}_2 \leq {\parallel W \parallel}_s \cdot {\parallel x \parallel}_2  \nonumber\end{equation}

如果将$x$替换为$(x_1 - x_2)$:

\begin{equation} {\parallel W(x_1 - x_2) \parallel}_2 \leq {\parallel W \parallel}_s \cdot {\parallel x_1 - x_2 \parallel}_2 \label{2.16} \end{equation}

结合$(\ref{2.13})$和$(\ref{2.16})$,发现谱范数能更准确地反映Lipschitz约束中的$k$。如果将参数矩阵$W$除以谱范数${\parallel W \parallel}_s$,就可以使$k$等于1。这就是谱归一化,参数归一化得到的是它的上界(upper bound):

\begin{align} &W_{SN} = \frac{W}{{\parallel W \parallel}_s} \nonumber \\[6pt] &{\parallel W_{SN} \parallel}_s = 1 \nonumber \end{align}

对于多层网络结构:

\begin{align} {\parallel f \parallel}_L &\leq {\parallel a^l \parallel}_L \cdot {\parallel W^l h^l + b^l \parallel}_L \cdot {\parallel a^{l-1} \parallel}_L \cdot {\parallel W^{l-1} h^{l-1} + b^{l-1} \parallel}_L \cdot \dotsb \cdot {\parallel a^1 \parallel}_L \cdot {\parallel W^1 h^1 + b^1 \parallel}_L \nonumber \\ &= \prod_l{{\parallel W^1 h^1 + b^1 \parallel}_L} = \prod_l{{\parallel W^l \parallel}_s} \nonumber \end{align}

只要通过谱归一化,用${\parallel W_{SN} \parallel}_s=1$替换每一层的${\parallel W^l \parallel}_s$,就可以使整个模型${\parallel f \parallel}_L \leq 1$。
如果用正则化代替归一化,那就是谱正则化(spectral norm regularization)。它就是将参数的谱范数作为正则化项加入目标函数,约束参数的范围。

梯度约束
除了对参数进行约束,还可以直接对梯度进行约束,因为1-Lipschitz约束为:

\begin{equation} \frac{\parallel f(x) - f(y) \parallel}{\parallel x - y \parallel} \leq 1 \nonumber \end{equation}

对梯度进行约束的方法有WGAN-GP模型,其中GP代表梯度惩罚(Gradient Penalty)。在梯度惩罚中,为了使梯度趋向于1,将梯度设置成正则项,将其添加到WGAN的目标函数后面:

\begin{equation} V_W{(D,G)} = E_{x \sim P_{data}} [f(x)] - E_{z \sim P_z} [f(G(z))] + \lambda E_{\check{x} \sim P(\check{x})} [({\parallel f^{\prime} (\check{x}) \parallel}_2 - 1)^2] \nonumber \end{equation}

其中右边前两项为WGAN的目标函数,第三项为正则项,超参数$lambda$控制惩罚对目标函数的影响。$f^{\prime}$是函数$f$的梯度/一阶导。$\check{x}$通过采样得到:

\begin{equation} \check{x} = \epsilon \hat{x} + (1- \epsilon) x \nonumber \end{equation}

其中$\hat{x}$为生成的数据,$x$为真实数据,$\epsilon$是[0, 1]区间内的随机数。
根据论文$[2.4]$的作者分析,梯度惩罚有两个缺点:1)$f^{\prime} (G(z))$依赖于生成模型生成的数据的分布,而这一分布在训练时不断地变化,这会导致训练不稳定,这一现象在学习率较大时比较明显;2)求导$f^{\prime}$要参与前向传播(forward propagation)和后向传播(backword propagation),因而计算量较大。


LS-GAN
LS-GAN又称loss sensitive GAN,和WGAN一样,也是基于Lipschitz约束的GAN模型。事实上,WGAN可以被认为是LS-GAN的一种特例。
LS-GAN中的loss是一个函数,或者loss模型,和判别器或者WGAN中的critic类似。Loss函数的工作是给真实数据一个较低的评分(loss),给生成的数据较高的loss值。另外,loss函数要满足下面的约束:

\begin{equation} L_{theta} (x) \leq L_{theta} (G(z)) - \Delta (x,G(z)) \label{2.17} \end{equation}

其中$L_{\theta}$是以$\theta$为参数的loss函数,$G$是生成器,$z$是噪音变量,与原生的GAN中的$z$相同。这个约束其实就是1-Lipschitz约束。
因为上面的约束过于严苛,所以LS-GAN中引入了非负的松弛变量${\xi}_{x,z}$。这样,带约束的目标函数变成:

\begin{align} &V_{LS} {(L,G)} = E_{x \sim P_{data}} [L(x)] + \lambda E_{x \sim P_{data} \; ,z \sim P_z} [{\xi}_{x,z}] \label{2.18} \\[6pt] &L(x) - {\xi}_{x,z} \leq L(G(z)) - \Delta(x,G(z)) \nonumber \\[6pt] &{\xi}_{x,z} \ge 0 \nonumber \end{align}

最小化$(\ref{2.18})$等号右边第一项等于使真实数据得到较小的loss值,因为${\xi}_{x,z}$可以衡量生成的数据使得违反约束$(\ref{2.17})$的程度,所以最小化等号右边第二项等于使生成的数据尽可能满足1-Lipschitz约束。把$(\ref{2.18})$中所有的约束带$(\ref{2.18})$中的目标函数,得到:

\begin{equation} V_{LS} {(L,G)} = E_{x \sim P_{data}} [L(x)] + \lambda E_{x \sim P_{data} \; ,z \sim P_z} [\max⁡{(0,L(x) - L(G(z)) + \Delta(x,G(z)))}] \label{2.19} \end{equation}

$\max{⁡(0,·)}$是一个铰链损失函数(hinge loss)。
对于最优loss模型$L^*$,生成器$G$的目标是使生成的数据的loss值也和真实数据一样小,它的目标函数是:

\begin{equation} \min_G{E_{z \sim P_z} [L^* (G(z))]} \nonumber \end{equation}

因为不知道具体的$p_{data}$和$p_g$,所以上面的目标函数要通过采样估计:

\begin{gather} V_{LS} {(L,G^* )} = \frac{1}{m} \sum_i^m{L(x_i )} + \frac{λ}{m} \sum_i^m{\max{⁡(0,L(x_i) - L(G^* (z_i)) + \Delta(x_i,G^* (z_i)))}} \nonumber \\[6pt] \min_{\phi}⁡{\frac{1}{n} \sum_i^n{L^* (G(z_i))}} \nonumber \end{gather}

对此LS-GAN$[2.5]$的作者分析了需要多少数据才能使估计值接近目标函数真实值。分析结果显示,所需的数据量与模型的复杂度以及Lipschitz常数k有关。因此,论文作者建议通过梯度惩罚,使loss模型$L$和生成器$G$的k-Lipschitz的$k$尽可能小。
另外,论文[2.5]作者还论证了LS-GAN和WGAN都属于GLS-GAN的特例,而GLS-GAN是LS-GAN的泛化版本。如果将LS-GAN的目标函数(2.19)中的将$\max{⁡(0,a)}$替换为一个函数$C(a,υa)$,也就是使目标函数变为:

\begin{equation} V_{LS} {(L,G)} = E_{x \sim P_{data}} [L(x)] + \lambda E_{x \sim P_{data} \; ,z \sim P_z} [C⁡(0,L(x) - L(G(z)) + \Delta(x,G(z)))] \nonumber \end{equation}

当$υ=0$时,$C(a,υa)=\max{⁡(0,a)}$,而当$υ=1$时,GLS-GAN等价于WGAN:

\begin{align} V_{LS} {(L,G)} &= E_{x \sim P_{data}} [L(x)] + \lambda E_{x \sim P_{data} \; ,z \sim P_z} [L(x) - L(G(z)) + \Delta(x,G(z))] \nonumber \\[6pt] &= (1+ λ) E_{x \sim P_{data}} [L(x)] - \lambda E_{z \sim P_z} [L(G(z))] + \lambda E_{x \sim P_{data} \; ,z \sim P_z} [\Delta(x,G(z))] \label{2.20} \end{align}

其中等号右边第三项是常数,省略掉后就得到了WGAN的目标函数:

\begin{align} V_{LS}{(L,G)} &= (1+ λ) E_{x \sim P_{data}} [L(x)] - \lambda E_{z \sim P_z} [L(G(z))] \nonumber \\[6pt] &= E_{x \sim P_{data}} [L(x)] - E_{z \sim P_z} [L(G(z))] \nonumber \end{align}

其中$\lambda$是一个远大于1的值($1+ \lambda \approx \lambda$),而且因为它在等号右边的两项中都出现,所以可以将其放入$L$中。

 

未完待续~

 


[2.1] X. Nguyen, M. Wainwright, M. Jordan, (2008). “Estimating Divergence Functionals and the Likelihood Ratio by Convex Risk Minimization”.
[2.2] M. Arjovsky, S. Chintala, and L. Bottou, (2017). “Wasserstein generative adversarial networks”.
[2.3] A. Radford, L. Metz, and S. Chintala, (2015). “Unsupervised representation learning with deep convolutional generative adversarial networks”.
[2.4] T. Miyato, T. Kataoka, M. Koyama, and Y. Yoshida, (2018). “Spectral normalization for generative adversarial networks”.
[2.5] G.-J. Qi, (2019). “Loss-sensitive generative adversarial networks on lipschitz densities”.