不用L约束又不会梯度消失的GAN,了解一下?
By 苏剑林 | 2018-11-20 | 169336位读者 |不知道从什么时候开始,我发现我也掉到了GAN的大坑里边了,唉,争取早日能跳出来...
这篇博客介绍的是我最近提交到arxiv的一个关于GAN的新框架,里边主要介绍了一种对概率散度的新理解,并且基于这种理解推导出了一个新的GAN。整篇文章比较偏理论,对这个GAN的相关性质都做了完整的论证,自认为是一个理论完备的结果。
文章链接:https://papers.cool/arxiv/1811.07296
先摆结论:
1、论文提供了一种分析和构造概率散度的直接思路,从而简化了构建新GAN框架的过程。
2、推导出了一个称为GAN-QP的GAN框架$\eqref{eq:gan-gp-gd}$,这个GAN不需要像WGAN那样的L约束,又不会有SGAN的梯度消失问题,实验表明它至少有不逊色于、甚至优于WGAN的表现。
论文的实验最大做到了512x512的人脸生成(CelebA HQ),充分表明了模型的有效性(效果不算完美,但是模型特别简单)。有兴趣的朋友,欢迎继续阅读下去。
直面对偶空间 #
我们现在要构建一个GAN框架,一般包含三个步骤
1、寻求一种良好的概率散度;
2、找出它的对偶形式;
3、转化为极小-极大游戏(min-max game)。
问题是:真正对训练过程有用的是第二、第三步,第一步并不是那么必要。
事实上,从原空间要定义一个新的散度很难,定义了之后也不一定容易转化为对偶形式。然而,我们可以直接在对偶空间分析,由此可以发现一批新的、形态良好的散度。换言之,我们其实可以直接在对偶空间中论述一个式子是否满足散度的定义,从而直接给出可优化的目标,而不需要关心它具体是JS散度还是W距离了。
下面我们来举例说明这个思路。
散度 #
首先我们来给出散度的定义:
如果$\mathcal{D}[p, q]$是关于$p,q$的标量函数,并且满足:
1、$\mathcal{D}[p, q]\geq 0$恒成立;
2、$\mathcal{D}[p, q]=0\Leftrightarrow p=q$。
那么称$\mathcal{D}[p, q]$为$p,q$的一个散度,散度与“距离”的主要差别是散度不用满足三角不等式,也不用满足对称性。但是散度已经保留了度量差距的最基本的性质,所以我们可以用它来度量$p,q$之间的差异程度。
SGAN #
基本定义 #
我们先来看SGAN中的判别器loss,定义
\begin{equation}\mathcal{D}[p(x),q(x)] = \max_T\, \frac{1}{2}\mathbb{E}_{x\sim p(x)}[\log \sigma(T(x))] + \frac{1}{2}\mathbb{E}_{x\sim q(x)}[\log (1 - \sigma(T(x)))] + \log 2\label{eq:js-dual-2}\end{equation}
这其实就是JS散度的对偶形式。但是我们可以直接基于这个定义来证明它是一个散度,然后讨论这个散度本身的性质,而根本不需要知道它是JS散度。
怎么证明?只需要证明这个结果满足刚才说的散度的两点要求。注意,按照我们的逻辑,我们不知道它是JS散度,但我们可以从数学角度证明它是一个散度。
其实如果读者真的明白了式$\eqref{eq:js-dual-2}$的含义,证明就不困难了。式$\eqref{eq:js-dual-2}$先定义了一个期望的式子,然后对$T$取最大(用更准确的说法是求“上确界”),取最大的结果才是散度。再强调一遍,“取最大之后的结果才是散度”,$\frac{1}{2}\mathbb{E}_{x\sim p(x)}[\log \sigma(T(x))] + \frac{1}{2}\mathbb{E}_{x\sim q(x)}[\log (1 - \sigma(T(x)))] + \log 2$这个式子并不是散度。
具体的证明过程略微冗长,就不完整摆出来了,请读者自行去看原文的附录。或者看下面的WGAN的部分,因为WGAN的部分相对简单。
对抗网络 #
假如有了散度之后,我们就可以通过缩小两个概率分布的散度,来训练生成模型了。也就是说接下来要做的事情应该是
\begin{equation}\min_{G} \mathcal{D}[p(x),q(x)]\end{equation}
注意$\mathcal{D}[p(x),q(x)]$是通过$\max_{T}$操作实现的,所以组合起来就是一个min-max的过程,比如前面的例子,等价地就是:
\begin{equation}G,T = \mathop{\text{argmin}}_G\mathop{\text{argmax}}_T\, \mathbb{E}_{x\sim p(x)}[\log \sigma(T(x))]+ \mathbb{E}_{x=G(z),z\sim q(z)}[\log (1 - \sigma(T(x)))]\label{eq:js-min-max}\end{equation}
这就是SGAN。
所以我们发现,GAN的过程其实就两步:1、通过$\max$定义一个散度;2、通过$\min$缩小两个分布的散度。这里的新观点,就是将$\max$直接作为散度的定义的一部分。
性能分析 #
我们知道SGAN可能有梯度消失的风险,这是为什么呢?我们考察一个极端情形:
\begin{equation}p(x)=\delta(x-\alpha),q(x)=\delta(x-\beta)\end{equation}
其中$\alpha\neq\beta$。这样一来,两个分布分别只是单点分布,完全没有交集。这种情况下代入$\eqref{eq:js-dual-2}$,结果就是
\begin{equation}\mathcal{D}[p(x),q(x)] = \max_T\, \frac{1}{2}[\log \sigma(T(\alpha))] + \frac{1}{2}[\log (1 - \sigma(T(\beta)))] + \log 2\end{equation}
注意我们对$T$没有任何约束,所以为了取最大,我们可以让$T(\alpha)\to +\infty,T(\beta)\to -\infty$,从而得到上确界是一个常数$\log 2$。即这种情况下$\mathcal{D}[p(x),q(x)]=\log 2$。
这就是说,对于两个几乎没有交集的分布,式$\eqref{eq:js-dual-2}$定义的散度给出的度量结果是常数$\log 2$,常数就意味着梯度是0,无法优化。而WGAN的那两篇文章则表明,“没有交集”理论上在GAN中是很常见的,所以这是SGAN的固有毛病。
一般的f散度 #
上面的几个小节已经完整了呈现了这种理解的流程:
1、我们通过$\max$定义一个数学式子,然后可以从数学角度直接证明这是一个散度,而不用关心它叫什么名字;
2、通过$\min$最小化这个散度,组合起来就是一个min-max的过程,就得到了一种GAN;
3、为了检查这种散度在极端情况下的表现,我们可以用$p(x)=\delta(x-\alpha),q(x)=\delta(x-\beta)$去测试它。
上述关于SGAN的论述过程,可以平行地推广到所有的f-GAN中(参考《f-GAN简介:GAN模型的生产车间》),各种f散度其实没有本质上的差异,它们有同样的固有毛病(要不就梯度消失,要不就梯度爆炸)。
WGAN #
基本定义 #
现在我们转向一类新的散度:Wasserstein距离。注意Wasserstein距离是一个严格的、满足公理化定义的距离,不过我们这里只关心它的散度性质。定义
\begin{equation}\mathcal{W}[p(x),q(x)] = \max_{T,\,\Vert T\Vert_L \leq 1}\, \mathbb{E}_{x\sim p(x)}[T(x)] - \mathbb{E}_{x\sim q(x)}[T(x)]\label{eq:wd-dual}\end{equation}
这里
\begin{equation}\Vert T\Vert_L = \max_{x\neq y} \frac{|T(x)-T(y)|}{d(x,y)}\end{equation}
而$d(x, y)$是任意一种现成的距离。
可以直接证明它是一个散度。这个证明还算经典,所以将它写在这里:
1、不管是什么$p(x),q(x)$,只要让$T(x)\equiv 0$,我们就得到$\mathbb{E}_{x\sim p(x)}[T(x)] - \mathbb{E}_{x\sim q(x)}[T(x)]=0$,因为散度的定义是要遍历所有的$T$取最大的,所以它至少不会小于0,这就证明了第一点非负性。
2、证明$p(x)=q(x)$时,$\mathcal{W}[p(x),q(x)]=0$,也就是$\mathcal{W}[p(x),p(x)]=0$,这几乎是显然成立的了。
3、证明$p(x)\neq q(x)$时(严格来讲是它们不等的测度大于0),$\mathcal{W}[p(x),q(x)] > 0$。这个相对难一点,但其实也很简单,只需要令$T_0(x) = \text{sign}(p(x) - q(x))$,那么显然有
\begin{equation}\begin{aligned}&\mathbb{E}_{x\sim p(x)}[T_0(x)] - \mathbb{E}_{x\sim q(x)}[T_0(x)] \\
=&\int (p(x)-q(x))\cdot \text{sign}(p(x) - q(x)) dx > 0\end{aligned}\end{equation}这样我们就直接地证明了$\mathcal{W}[p(x),q(x)]$是满足散度的定义的。
对抗网络 #
同样地,有了新散度,就可以定义新GAN了:
\begin{equation}G,T = \mathop{\text{argmin}}_G\mathop{\text{argmax}}_{T,\,\Vert T\Vert_L \leq 1}\, \mathbb{E}_{x\sim p(x)}[T(x)] - \mathbb{E}_{x=G(z),z\sim q(z)}[T(x)]\label{eq:wd-min-max}\end{equation}
这就是WGAN,本博客的参考资料有《互怼的艺术:从零直达WGAN-GP》、《WGAN-div:一个默默无闻的WGAN填坑者》。
性能分析 #
同样地,用$p(x)=\delta(x-\alpha),q(x)=\delta(x-\beta)$去测试$\mathcal{W}[p(x),q(x)]$散度的性能,我们得到
\begin{equation}\mathcal{W}[p(x),q(x)] = \max_{T,\,\Vert T\Vert_L \leq 1} T(\alpha) - T(\beta)\end{equation}
注意我们有L约束$\Vert T\Vert_L \leq 1$,这意味着$|T(\alpha) - T(\beta)| \leq d(\alpha, \beta)$,等号可以取到,所以
\begin{equation}\mathcal{W}[p(x),q(x)] = d(\alpha,\beta)\end{equation}
结果不是常数,所以即使在这种极端情况下我们可以也拉近两个分布的距离。所以从这一点看,WGAN要比SGAN要好。
L约束 #
WGAN的遗留问题就是如何往判别器加入L约束,目前有三种方案:参数裁剪、梯度惩罚、谱归一化,请参考《深度学习中的Lipschitz约束:泛化与生成模型》和《WGAN-div:一个默默无闻的WGAN填坑者》
参数裁剪基本已经被弃用了。梯度惩罚原则上只是一个经验方法,有它的不合理之处,而且要算梯度通常很慢。谱归一化看起来最优雅,目前效果也挺好,不过也有限制的太死的可能性。进一步讨论请看《WGAN-div:一个默默无闻的WGAN填坑者》。
新散度,新GAN #
现在的结论是:SGAN可能有梯度消失的风险,WGAN虽然很好,但需要额外的L约束。那么很自然就会问:有没有不需要L约束,又不会梯度消失的GAN?鱼与熊掌能否兼得?
还真的可以,下面带你找一个。不对,其实不止一个,带你找一批都行。
平方势散度 #
基本定义 #
下面要给出的散度,形式是这样的:
\begin{equation}\begin{aligned}&\mathcal{L}[p(x),q(x)] \\
=& \max_{T}\, \mathbb{E}_{(x_r,x_f)\sim p(x_r)q(x_f)}\left[T(x_r,x_f)-T(x_f,x_r) - \frac{(T(x_r,x_f)-T(x_f,x_r))^2}{2\lambda d(x_r,x_f)}\right]\end{aligned}\label{eq:qp-dual}\end{equation}
其中$\lambda > 0$是一个超参数,$d$可以是任意距离。
这个形式好像就在WGAN的基础上加了一个平方形式的势能,所以称为平方势散度(QP-div,quadratic potential divergence)。
论文的附录已经证明了式$\eqref{eq:qp-dual}$确实是一个散度。
性能分析 #
用$p(x)=\delta(x-\alpha),q(x)=\delta(x-\beta)$去测试这个散度,结果是
\begin{equation}\mathcal{L}[p(x),q(x)] = \max_{T}\, T(\alpha,\beta)-T(\beta,\alpha) - \frac{(T(\alpha,\beta)-T(\beta,\alpha))^2}{2\lambda d(\alpha,\beta)}\end{equation}
设$z = T(\alpha,\beta)-T(\beta,\alpha)$就得到$z - \frac{z^2}{2\lambda d(\alpha,\beta)}$,很熟悉有没有?这只是个二次函数的最大值问题呀,最大值是$\frac{1}{2}\lambda d(\alpha,\beta)$呀,所以我们就有
\begin{equation}\mathcal{L}[p(x),q(x)] = \frac{1}{2}\lambda d(\alpha,\beta)\end{equation}
这不就跟WGAN差不多了嘛,哪怕对于极端分布,也不会有梯度消失的风险。鱼与熊掌真的可以兼得。
GAN-QP #
对抗网络 #
有了散度就可以构建对抗网络,我们最终给出的形式为
\begin{equation}\begin{aligned}&T= \mathop{\text{argmax}}_T\, \mathbb{E}_{(x_r,x_f)\sim p(x_r)q(x_f)}\left[T(x_r,x_f)-T(x_f,x_r) - \frac{(T(x_r,x_f)-T(x_f,x_r))^2}{2\lambda d(x_r,x_f)}\right] \\
&G = \mathop{\text{argmin}}_G\,\mathbb{E}_{(x_r,x_f)\sim p(x_r)q(x_f)}\left[T(x_r,x_f)-T(x_f,x_r)\right]
\end{aligned}\label{eq:gan-gp-gd}\end{equation}
我在论文中称之为GAN-QP。
注意不要把二次项$-\frac{(T(x_r,x_f)-T(x_f,x_r))^2}{2\lambda d(x_r,x_f)}$这一项加入到生成器的loss中(理论上不成问题,但是用梯度下降优化时会有问题。),因为这一项的分母是$d(x_r,x_f)$,一旦最小化二次项,等价于最小化$d(x_r,x_f)$,也就是用$d(x_r,x_f)$来度量图片的差距,这是不科学的。
解的分析 #
通过变分法可以证明(还是在附录),判别器的最优解是:
\begin{equation}\frac{p(x_r)q(x_f) - p(x_f)q(x_r)}{p(x_r)q(x_f) + p(x_f)q(x_r)} = \frac{T(x_r,x_f)-T(x_f,x_r)}{\lambda d(x_r, x_f)}\label{eq:opt-t}\end{equation}
由这个最优解,我们可以得到两点结论。首先,不难证明最优解满足
\begin{equation}-1 \leq \frac{T(x_r,x_f)-T(x_f,x_r)}{\lambda d(x_r, x_f)}\leq 1\end{equation}
也就是说最优解自动满足L约束。所以我们可以认为GAN-QP是一种自适应L约束的方案。
其次,将最优解代入生成器的loss,那么得到总的目标是:
\begin{equation}\lambda\iint p(x_r)q(x_f)\frac{p(x_r)q(x_f) - p(x_f)q(x_r)}{p(x_r)q(x_f) + p(x_f)q(x_r)} d(x_r, x_f) dx_r dx_f\end{equation}
这也是一个概率散度,并且我们也从理论上证明了它不会梯度消失/爆炸(跟柯西不等式有关)。此外,还可以看到$\lambda$只是一个缩放因子,事实上并不重要,从而这个GAN-QP对$\lambda$是鲁棒的,$\lambda$不会明显影响模型的效果。
实验结果 #
论文在CelebA HQ数据集上,比较了多种GAN与GAN-QP的效果,表明GAN-QP能媲美甚至超越当前最优的模型。
注意,模型$\eqref{eq:gan-gp-gd}$中,$T$是$(x_r,x_f)$的二元函数,但实验表明,取最简单的一元特例$T(x_r,x_f)\equiv T(x_r)$即可,即$T(x_r,x_f) - T(x_f,x_r)$用$T(x_r) - T(x_f)$就够了,改成二元函数并没有明显提升(但也可能是我没调好)。这样的话,形式上就跟WGAN-GP非常相似了,但理论更完备。
代码开源:https://github.com/bojone/gan-qp
128x128 #
在128x128分辨率上,我们进行了较为全面的比较,定量指标是FID。结果如下图:
以及下表
$$\begin{array}{c|ccccc}
\hline
\hline
& \text{GAN-QP-L1/L2} & \text{WGAN-GP} & \text{WGAN-SN} & \text{SGAN-SN} & \text{LSGAN-SN} \\
\hline
\text{Best FID} & 45.0 / 44.7 & 55.5 & 47.8 & 44.5 & 45.8\\
\hline
\text{Speed} & 1\text{x} / 1\text{x} & 1.5\text{x} & 1\text{x} & 1\text{x} & 1\text{x}\\
\hline
\hline
\end{array}$$
256与512 #
在128分辨率上,最好的表现是GAN-QP和SGAN-SN,不过在256x256分辨率上,它们的表现就拉开了差距:
$$\begin{array}{c|ccccc}
\hline
\hline
& \text{GAN-QP} & \text{SGAN-SN} \\
\hline
\text{Best FID} & 22.7 & 27.9\\
\hline
\hline
\end{array}$$
我最大把GAN-QP的实验做到了512x512的人脸生成,效果还是不错的,最终的FID是26.44:
论文综述 #
这篇文章源于我对概率散度的思考,企图得到一种更直接的理解概率散度的方案,其中还受启发于WGAN-div。
幸好,最后把这条路走通了,还得到了一些新结果,遂提交到arxiv上,供各位参考,希望得到各位前辈高手的指点。事实上,基于类似的思路,我们可以构造很多类似的散度,比如将平方换成4次、6次方等,只不过理论分析起来就会困难一些了。
限于算力,加之我不是专门研究GAN的,所以实验方面可能做得不够完善,基本能论证结论即可,请大家体谅,当然也欢迎各位的指导。
转载到请包括本文地址:https://kexue.fm/archives/6163
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Nov. 20, 2018). 《不用L约束又不会梯度消失的GAN,了解一下? 》[Blog post]. Retrieved from https://kexue.fm/archives/6163
@online{kexuefm-6163,
title={不用L约束又不会梯度消失的GAN,了解一下?},
author={苏剑林},
year={2018},
month={Nov},
url={\url{https://kexue.fm/archives/6163}},
}
November 20th, 2018
苏老师,我想问一下:在您的论文附录中,证明公式$(8)$和$(14)$是divergence时,分别构造函数$T_0(x)$和$T_0(x_r,x_f)$ 来辅助证明.我感觉这些函数存在需要满足的条件比较多,不太确定是否一定存在,所以想请问您一下如何判断这些函数的是否确实存在呢?谢谢老师指点!
其实很简单。比如wgan中的证明:找到一个$T_0(x)$使得$(p(x)-q(x))T_0(x)\not\equiv 0$肯定是没有问题的,这时候要不$\int (p(x)-q(x))T_0(x)dx = 0$,要不$\int (p(x)-q(x))T_0(x)dx > 0$,要不$\int (p(x)-q(x))T_0(x)dx < 0$,如果是大于0,那么就已经说明了$\mathcal{W}[p(x),q(x)] > 0$,如果是小于0,也可以取$T(x) = -T_0(x)$,也说明$\mathcal{W}[p(x),q(x)] > 0$,这两种情况都是平凡的,只有$\int (p(x)-q(x))T_0(x)dx = 0$是不平凡的。
我刚刚向arxiv提交了个新版本,简化了其中的两个证明,明天早上九点后就可以在arxiv看到了~
November 21st, 2018
看了博主许多文章,非常敬佩你写了这么多有意思的东西。
博主现在的工作也是做DL, NLP之类的吗? (我不是recruiters, 我只是觉得有些东西可以探讨交流)
还没有正式工作,主要兴趣是机器学习和NLP。
我也做的NLP,推荐系统,以及一些DSP。
如果有时间,我觉得你可以写一篇上个月Google的BERT的文章,算是NLP里面很颠覆的一篇了。
对它没感觉、没兴趣~
November 30th, 2018
你的代码里
d_loss = x_real_score - x_fake_score
d_norm = 10 * K.mean(K.abs(x_real - x_fake), axis=[1, 2, 3])
d_loss = d_loss[:,0] # 从你的论文公式看,我觉得要加这一行。。
d_loss = K.mean(- d_loss + 0.5 * d_loss**2 / d_norm)
我在mnist数据集上跑了,在生成器里加上QP项是正常的,请问是在人脸集上不行吗?
你的论文的(34)式好像有个typo,我觉得应该是:$\gamma_1$
1、这个我得再确认一下;
2、一般情况下在生成器加QP都不行,因为效果相当于VAE,mnist有效不意外,因为VAE对mnist来说效果已经很好了;
3、typo能否说详细点?
else if gamma1
gamma1 小于等于 gamma2 少了等于 (
噢噢,这倒是。不过就这个问题暂时先不提交新版本了。
我打算先对比一下加不加d_loss = d_loss[:,0]这样的效果。
首先不加从理论上应该是不对的,但是我加了之后实验结果也没明显变化,有点神奇,我需要再跑跑,如果有明显变化,我就把实验结果也更新上去。
wan-qp用在vdb-gan中:https://github.com/createamind/VDB-GAN,供参考
感谢支持!请问是否有效果图?
还在跑,还没整理结果:)
December 3rd, 2018
K.mean(-d_loss+0.5*d_loss**2/d_norm),为什么是-d_loss呢?
T(Xr)-T(Xf)=d_loss嘛,
那么计算判别器T的博弈函数不该是用K.mean(d_loss+0.5*d_loss**2/d_norm)吗.
抱歉,没仔细看看论文,已解决
December 10th, 2018
苏神(14)式好像有误,多乘以了一个系数1/2?
$(13)$式的最大值就是$(14)$式,没有错误。
是的 没有错误 是我理解错了 以为是取得最大值时候的解了
December 12th, 2018
请问可以用在conditional gan里吗?
我在mnist上试了一下好像效果不是很好
原则上可以,我没试过,有空我试试。
December 26th, 2018
Hello, sorry I do not have Chinese input. Excellent work!
However, I have two minor questions. Could you please tell me more details about how to prove the optimal form of $T(x_r,x_f)$, which is in equation 15? I check your proof in the arxiv paper but I am still confused about it. How do you apply $\delta$ in the proof?
equation 15:
$$
T= \mathop{\arg\max}_T\, \mathbb{E}_{(x_r,x_f)\sim p(x_r)q(x_f)}\left[T(x_r,x_f)-T(x_f,x_r) - \frac{(T(x_r,x_f)-T(x_f,x_r))^2}{2\lambda d(x_r,x_f)}\right]
$$
equation 16
$$
\frac{p(x_r)q(x_f) - p(x_f)q(x_r)}{p(x_r)q(x_f) + p(x_f)q(x_r)} = \frac{T(x_r,x_f)-T(x_f,x_r)}{\lambda d(x_r, x_f)}
$$
Second, I also tried the code. From implementing side, I find that,
(1) batch normalization is better than group normalization. It seems group normalization has mode collapse problem but batch normalization works well. Is it related to some theory, or just an engineering problem?
(2) when we calculate $d(x_r, x_f)$, generally we use a batch data. Let's assume $x_r$ is will be 64 images $\{x_r^1, x_r^2, ..., x_r^{64}\}$ and $x_f$ is also 64 images $\{x_f^1, x_f^2, ..., x_f^{64}\}$. Here, $d(x_r, x_f)$ should be batch ditance, which is a scalar of $mean(abs(x_r - x_f))$, or it should be a image distance vector, which is $\{ mean(abs(x_r^1 - x_f^1)), mean(abs(x_r^2 - x_f^2)), mean(abs(x_r^3 - x_f^3)), ..., mean(abs(x_r^{64} - x_f^{64})) \}$?
Thank you and looking forward to your reply :)
收到,我直接用中文回复可以吧?不烧脑用英文了。
$T(x_r,x_f)$的最优解用到变分法,$\delta$是变分的标记,类似微分的$d$,这个我一下子也说不清楚,你有需要的话,我建议你读一下朗道十卷中的第一卷《力学》的第一章(没错,我认为最好懂的变分法教材,是这本物理学书)
至于后面两个问题:
1、我试了很多normalization,都没有简单地用BN好,我也表示很困惑;
2、代码中是这样的:K.mean(K.abs(x_real - x_fake), axis=[1, 2, 3]),对后面三个轴求均值,所以得到的是一列距离(向量),也就是你说的$\{ mean(abs(x_r^1 - x_f^1)), mean(abs(x_r^2 - x_f^2)), mean(abs(x_r^3 - x_f^3)), ..., mean(abs(x_r^{64} - x_f^{64})) \}$,而不是一个标量。
Thank you and I got it!
For the proof:
$$\begin{aligned}
\Delta =& \iint p(x_r)q(x_f)\left(\Delta T(x_r,x_f)- \Delta T(x_f,x_r) - \frac{(T(x_r,x_f)-T(x_f,x_r))(\Delta T(x_r,x_f)- \Delta T(x_f,x_r))}{\lambda d(x_r,x_f)}\right)\\
=& \iint p(x_r)q(x_f)\left(\Delta T(x_r,x_f) - \frac{(T(x_r,x_f)-T(x_f,x_r))(\Delta T(x_r,x_f))}{\lambda d(x_r,x_f)}\right ) - \iint p(x_r)q(x_f)\left (\Delta T(x_f,x_r) - \frac{(T(x_r,x_f)-T(x_f,x_r))(\Delta T(x_f,x_r))}{\lambda d(x_r,x_f)}\right)\\
=& \iint p(x_r)q(x_f)\left(\Delta T(x_r,x_f) - \frac{(T(x_r,x_f)-T(x_f,x_r))(\Delta T(x_r,x_f))}{\lambda d(x_r,x_f)}\right ) - \iint p(x_f)q(x_r)\left (\Delta T(x_r,x_f) - \frac{-(T(x_r,x_f)-T(x_f,x_r))(\Delta T(x_r,x_f))}{\lambda d(x_r,x_f)}\right)\\
=& \iint \Delta T(x_r,x_f) \left( p(x_r)q(x_f)-p(x_f)q(x_r) - \frac{(p(x_r)q(x_f)+p(x_f)q(x_r))(T(x_r,x_f)-T(x_f,x_r))}{\lambda d(x_r,x_f)}\right)
\end{aligned}$$
Oh no, the equation cannot display :( But I know that the proof is that we first separate $T(x_r,x_f)-T(x_f,x_r)$ in two integrals, then we swap $x_r$ and $x_f$ in the second integral and finally we merge them and get the results~
嗯嗯,好的。帮你编辑了一下。
January 17th, 2019
Hello!
How to run on TPU?
Thank you!
I am sorry that I have no experience on TPU.
Hi,you can test tpu with Google colab.
January 17th, 2019
您好,请问为什么构建GAN 3步骤中的第2步,也就是把散度转换成对偶形式,为什么要这么做呢?文章里和论文原文里都没有提到这个解释。
对偶形式才能采样训练。
比如KL散度是$p(x) \log \frac{p(x)}{q(x)}$的形式,你又没有$p(x)$的表达式,也没有$q(x)$的表达式,怎么算?对偶形式可以转化为对样本的采样,你可以进一步参考:https://kexue.fm/archives/6016
January 17th, 2019
usr/local/lib/python3.6/dist-packages/keras/engine/training.py:490: UserWarning: Discrepancy between trainable weights and collected trainable weights, did you set `model.trainable` without calling `model.compile` after ?
'Discrepancy between trainable weights and collected trainable'
请问这个是什么原因,为什么会出警告
不知道,python2.7没出现过。