通过投影判别器构造条件生成对抗网络.
在条件生成对抗网络中,有许多不同的判别器构造形式:
- 在cGAN中,把标签和数据在输入端拼接起来,一起输入判别器,输出数据为真实数据的概率。
- 也可以把标签和数据在判别器隐藏层中的特征拼接起来,输出数据为真实数据的概率。
- 在AC-GAN中,判别器同时执行真假区分和分类:一部分输出表示输入数据为真实数据的概率,用于构造对抗损失;另一部分输出表示类别的概率,用于构造分类损失。
- 本文作者设计了一种投影判别器(Projection Discriminator),输入数据首先经过网络$\phi$提取特征,然后把特征分成两路:一路与编码后的类别标签$y$做点乘;另一路通过网络$\psi$映射成向量。最后两路相加作为判别器最终的输出。
条件生成网络的目标函数为:
\[\begin{aligned} \mathop{ \min}_{G} \mathop{\max}_{D} \Bbb{E}_{x,y \text{~} P_{data}(x,y)}[\log D(x,y)] + \Bbb{E}_{x,y \text{~} P_{G}(x,y)}[\log(1-D(x,y))] \end{aligned}\]判别器$D$的最优值$D^{*}$可以通过计算被积表达式的极值\(\frac{\partial L(G,D)}{\partial D} = 0\)得到:
\[\begin{aligned} D^*(x,y) &= \frac{P_{data}(x,y)}{P_{data}(x,y)+P_{G}(x,y)} \end{aligned}\]通常的判别器是二分类器,区分数据是真实数据还是生成数据,因此输出结果代表数据真实程度的概率,通过应用Sigmoid函数实现:$D(x,y) = 1/(1+\exp(-f(x,y)))$,其中$f(x,y)$为网络最后一层的输出特征。则有如下等式:
\[\frac{1}{1+e^{-f(x,y)}} = \frac{P_{data}(x,y)}{P_{data}(x,y)+P_{G}(x,y)}\]整理得:
\[\begin{aligned} f(x,y) &= \log \frac{P_{data}(x,y)}{P_{G}(x,y)} \\ &= \log \frac{P_{data}(y|x)P_{data}(x)}{P_{G}(y|x)P_{G}(x)} \\ &= \log \frac{P_{data}(y|x)}{P_{G}(y|x)} + \log \frac{P_{data}(x)}{P_{G}(x)} \end{aligned}\]上式第一项$\log \frac{P_{data}(y|x)}{P_{G}(y|x)}$对输入数据的类别进行了判断。分子为当输入数据$x$是真实数据时属于类别$y$的概率;分母为当输入数据$x$是生成数据时属于类别$y$的概率。两者的比值越高,表明$x$是真实数据时,属于类别$y$的概率越大。
上式第二项$\log \frac{P_{data}(x)}{P_{G}(x)}$对输入数据的真实性进行了判断。分子为输入数据$x$是真实数据的概率;分母为输入数据$x$是生成数据的概率。两者的比值越高,表明$x$是真实数据的概率越大。
下面进一步表示输出类别的条件概率。对于一个$C$分类器,通常用softmax函数计算属于各个类别的概率:
\[\begin{aligned} P(y=c|x) &= \frac{\exp(v_c^T\phi(x))}{\sum_{c=1}^C\exp(v_c^T\phi(x))} = \frac{\exp(v_c^T\phi(x))}{Z(\phi(x))} \end{aligned}\]其中$\phi(x)$表示网络倒数第二层的特征,$v$是网络最后一层的权重参数,$Z$是配分函数。则第一项$\log \frac{P_{data}(y|x)}{P_{G}(y|x)}$进一步表示为:
\[\begin{aligned} \log \frac{P_{data}(y|x)}{P_{G}(y|x)} &= \log P_{data}(y|x) - \log P_{G}(y|x) \\ &= \log \frac{\exp({v_c^{P_{data}}}^T\phi(x))}{Z^{P_{data}}(\phi(x))}-\log \frac{\exp({v_c^{P_{G}}}^T\phi(x))}{Z^{P_{G}}(\phi(x))} \\ &= (v_c^{P_{data}}-v_c^{P_{G}})^T\phi(x) - (\log Z^{P_{data}}(\phi(x)) - \log Z^{P_{G}}(\phi(x))) \end{aligned}\]将上式代入判别器特征$f(x,y)$的表达式:
\[\begin{aligned} f(x,y) &= \log \frac{P_{data}(y|x)}{P_{G}(y|x)} + \log \frac{P_{data}(x)}{P_{G}(x)} \\ &= (v_c^{P_{data}}-v_c^{P_{G}})^T\phi(x) - (\log Z^{P_{data}}(\phi(x)) - \log Z^{P_{G}}(\phi(x))) + \log \frac{P_{data}(x)}{P_{G}(x)} \end{aligned}\]令:
\[\begin{aligned} v_c & = v_c^{P_{data}}-v_c^{P_{G}} \\ \psi(\phi(x))&= - (\log Z^{P_{data}}(\phi(x)) - \log Z^{P_{G}}(\phi(x))) + \log \frac{P_{data}(x)}{P_{G}(x)} \end{aligned}\]可得最终判别器特征$f(x,y)$的表达式:
\[f(x,y=c) = v_c^T\phi(x) + \psi(\phi(x))\]其中$v_c$可以由类别$c$的嵌入向量表示。根据上述公式可设计本文所提的投影判别器。