Wasserstein GAN - Part 2. Wasserstein distance

wgan theory 2

Wasserstein GAN - Part 2. Wasserstein distance
Photo by DeepMind / Unsplash

推荐阅读

Wasserstein GAN and the Kantorovich-Rubinstein Duality - Vincent Herrmann

令人拍案叫绝的Wasserstein GAN - 知乎 (zhihu.com)

公式

在前文我们讲了GAN中使用KL散度是有问题的,于是WGAN作者紧接着提出了Wasserstein Distance来替换掉之前的KL和JS散度

$$
W(\mathbb{P}_r, \mathbb{P}g)=\color{Sepia}\inf{\color{NavyBlue}\gamma\in\Pi(\mathbb{P}_r, \mathbb{P}g)} \color{BurntOrange}{\mathbb{E}{(x,y)\sim \gamma}[||x-y||]}
$$

*孩子居然会给$\LaTeX$弄颜色了!

Part.1 公式解释

上述式子的inf指的是下确界

x, y可以看作是两个分布中的部分(看不懂可以先往下看,看完了就自然明白了)

后面的那一部分可以改写成以下形式
$$
\mathbb{E}{(x,y)\sim \gamma}[||x-y||] = \int_y \int_x \gamma(x,y) ||x-y|| dx dy=\sum{x, y}||x-y||\gamma (x, y)
$$
这一部分实际上在算一个加权和(x→y的部分乘上一个距离权重(distance matrix))

为了便于理解,我画了个图:

假设我们的噪声和真实图片的分布如上,我们的generator要将噪声的分布变换为真实图像的分布,可以有很多种解法,我们将各个小区间标号

我们想要将3号区间的数量变为8,那么我们可以将原来的3号区间的数据移到别的区间去,4号区间分出5个,1号期间分出1个再加上用5号区间来将3号区间凑出8

当然,凑法有很多种也有好有坏,上面这种就算是比较蠢的一种了,所以我们需要一个指标来评判我们的方法好不好。于是在这里我们引入一个距离矩阵,代表原先区间部分移动的距离。

![Matrix](03 WGAN part2.assets/Matrix.png)

p.s. x与y距离的加权和其实就可以看作期望了

看懂了上面的内容,你就基本上明白WGAN的公式到底在干什么了

顺带一提,Wasser 和 stein分别来自于德语的”水“和”石头“意思是这种分布的改变就像是河水冲刷河底的泥沙一样(解出上面的问题最优解也可以看作是河水把多泥土的往后面带,遇到坑就填上。)

$$
W(\mathbb{P}_r, \mathbb{P}g)
=\inf{\gamma\in\Pi(\mathbb{P}r, \mathbb{P}g)} \mathbb{E}{(x,y)\sim \gamma}[||x-y||]\
=\inf{\gamma\in\Pi(\mathbb{P}_r, \mathbb{P}g)} \int_y \int_x \gamma(x,y) ||x-y|| dx dy\
=\inf{\gamma\in\Pi(\mathbb{P}_r, \mathbb{P}_g)} {<\Pi,D>|A\Pi = b,\Pi\ge0}
$$

<Π,D>就相当于前面说的加权和,一维矩阵×一维矩阵的转置
$$
\Pi = \left(\begin{matrix}
\gamma(x_1, y_1)\ \gamma(x_1, y_2)\
\vdots\
\gamma(x_2, y_1)\ \gamma(x_2, y_2)\
\vdots\
\gamma(x_n, y_1)\ \gamma(x_n, y_2)\
\end{matrix}\right)

D = \left(\begin{matrix}
d(x_1, y_1)\ d(x_1, y_2)\
\vdots\
d(x_2, y_1)\ d(x_2, y_2)\
\vdots\
d(x_n, y_1)\ d(x_n, y_2)\
\end{matrix}\right)
$$
为什么说$A\Pi = b$ 呢?
$$
A = \left(\begin{array}{ccc|ccc|c|ccc|c}
\color{red}1 & \color{red}1 & \color{red}\dots & \color{green}0 & \color{green}0 & \color{green}\dots & \color{NavyBlue}\dots & \color{NavyBlue}0 & \color{NavyBlue}0 & \color{NavyBlue}\dots & \color{NavyBlue}\dots\
0 & 0 & \dots & 1 & 1 & \dots & \dots & 0 & 0 & \dots & \dots\
\vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \ddots & \vdots & \vdots & \ddots & \ddots \
0 & 0 & \dots & 0 & 0 & \dots & \dots & 1 & 1 & \dots & \dots\
\vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \ddots & \vdots & \vdots & \ddots & \ddots \
\hline
1 & 0 & \dots & 1 & 0 & \dots & \dots & 1 & 0 & \dots & \dots\
0 & 1 & \dots & 0 & 1 & \dots & \dots & 0 & 1 & \dots & \dots\
\vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \ddots & \vdots & \vdots & \ddots & \ddots \
0 & 0 & \dots & 0 & 0 & \dots & \dots & 1 & 1 & \dots & \dots\
\vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \ddots & \vdots & \vdots & \ddots & \ddots \
\end{array}
\right)

\Pi = \left(\begin{matrix}
\color{red}\gamma(x_1, y_1)\ \color{green}\gamma(x_1, y_2)\ \color{NavyBlue}\vdots\
\hline
\gamma(x_2, y_1)\ \gamma(x_2, y_2)\ \vdots\
\hline
\vdots\
\hline
\gamma(x_n, y_1)\ \gamma(x_n, y_2)\ \vdots\
\hline
\vdots
\end{matrix}\right)

B = \left(\begin{matrix}
\color{red}p_r(x_1)\ p_r(x_2)\ \vdots \ p_r(x_n) \ \vdots \
\hline
p_g(x_1)\ p_g(x_2)\ \vdots \ p_g(x_n) \ \vdots \
\end{matrix}\right)
$$
算出来就相当于之前的一列

Part.2 公式修正

刚刚也提到,我们的公式是要计算下确界,但是单单按照上面的说法的话,由于问题的可能凑法不是固定的,而且情况非常多。所以这个公式是不能直接用来计算的,需要对这个公式进行一些处理,让它能够直接被计算

毕竟我也不是数学专业,很多都看不明白,但是大概理解一下其中的思想还是必要的
$$
W(\mathbb{P}r, \mathbb{P}g)=\inf{\gamma\in\Pi(\mathbb{P}r, \mathbb{P}g)} \mathbb{E}{(x,y)\sim \gamma}[||x-y||]\
= \color{RawSienna}\sup{||f||L\le1}\mathbb{E}{x\sim\mathbb{P}r}[f(x)] - \mathbb{E}{x \sim \mathbb{P}g} [f(x)] \dots ①\
= \color{NavyBlue}\max{w \in W}\mathbb{E}_{x\sim\mathbb{P}r}[f_w(x)] - \mathbb{E}{z \sim \mathbb{P}z} [f_w(g{\theta}(z))] \dots②
$$
*sup (supremum)上确界

①式中将下确界转换成了上确界,并且γ也没有了

从原式到①式使用的是Kantorovich-Rubinstein Duality

从①式到②式使用的是Lipschitz Constraint