仅使前面的损失最小化是不够的。 我们必须确保在域 B 中创建的图像`x[B]`看起来逼真。例如,如果我们将域 A 中的衣服映射到域 B 中的鞋子,我们将 确保`x[B]`类似于鞋子。 如果图像不够真实,则在域 B 侧的鉴别符`D[B]`将检测为`x[B]`为假。 鞋子,因此也要考虑与此有关的损失。 通常,在训练过程中,向鉴别器提供生成的图像 *x <sub>AB</sub> = G <sub>AB</sub> (x <sub>A</sub> )* 域 B,我们选择在这里用`y[B]`表示,以便它学习从假图像中对真实图像进行分类。 您可能还记得,在 GAN 中,生成器和判别器相互进行*零和最小极大值游戏*,以便不断变得更好,直到达到平衡为止。 如果伪造的图像看起来不够逼真,则鉴别器将对其进行惩罚,这意味着生成器必须学习产生更好的图像`x[AB]`,如果输入图像`x[A]`。 考虑到所有这些因素,我们可以将我们希望最小化的生成器损耗公式化为重建损耗,以及鉴别器将`x[AB]`识别为假冒的损耗。 第二种损失将试图使生成器在域 B 中生成逼真的图像。将域 A 中的图像`x[A]`映射到域 B 中的图像的生成器损失可以表示为 如下:
仅使前面的损失最小化是不够的。 我们必须确保在域 B 中创建的图像`x[B]`看起来逼真。例如,如果我们将域`A`中的衣服映射到域`B`中的鞋子,我们将 确保`x[B]`类似于鞋子。 如果图像不够真实,则在域 B 侧的鉴别符`D[B]`将检测为`x[B]`为假。 鞋子,因此也要考虑与此有关的损失。 通常,在训练过程中,向鉴别器提供生成的域`B`图像`x[AB] = G[AB](X[A])`,我们选择在这里用`y[B]`表示,以便它学习从假图像中对真实图像进行分类。 您可能还记得,在 GAN 中,生成器和判别器相互进行*零和最小最大值游戏*,以便不断变得更好,直到达到平衡为止。 如果伪造的图像看起来不够逼真,则鉴别器将对其进行惩罚,这意味着生成器必须学习产生更好的图像`x[AB]`,如果输入图像`x[A]`。 考虑到所有这些因素,我们可以将我们希望最小化的生成器损耗公式化为重建损耗,以及鉴别器将`x[AB]`识别为假冒的损耗。 第二种损失将试图使生成器在域 B 中生成逼真的图像。将域 A 中的图像`x[A]`映射到域 B 中的图像的生成器损失可以表示为 如下:
最大的问题是,我们可以在这里停下来吗? 由于我们有来自两个域的图像,因此要获得更好的映射,我们也可以从域 B 拍摄图像,并通过生成器`G[BA]`将它们映射到域 A。 如果我们在域 B 中拍摄`x[B]`图像,并通过生成器*G 将其转换为图像`x[BA]`HTG13] BA*,而域 A 上的标识符由`D[A]`给出,则与这种转换相关的成本函数由以下给出:
最大的问题是,我们可以在这里停下来吗? 由于我们有来自两个域的图像,因此要获得更好的映射,我们也可以从域 B 拍摄图像,并通过生成器`G[BA]`将它们映射到域 A。 如果我们在域 B 中拍摄`x[B]`图像,并通过生成器`G[BA]`将其转换为图像`x[BA]`,而域 A 上的标识符由`D[A]`给出,则与这种转换相关的成本函数由以下给出:
| `self.D_B_loss_real` | 在对域 B 中的真实图像进行分类时,鉴别符`D[B]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>B.</sub>*) |
| `self.D_B_loss_fake` | 在对域 B 中的伪造图像进行分类时,鉴别符`D[B]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>B.</sub>*) |
| `self.D_A_loss_real` | 在对域 A 中的真实图像进行分类时,鉴别符`D[A]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>A.</sub>*) |
| `self.D_A_loss_fake` | 在对域 A 中的伪造图像进行分类时,鉴别符`D[A]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>A.</sub>*) |
| `self.loss_GABA` | 通过两个生成器`G[AB]`和`G[BA]`将域 A 中的图像映射到 B,然后再映射回 A 的重建损失 )加上假图片*G <sub>AB</sub> (x <sub>A</sub> )*的二进制交叉熵,并由域 B 中的鉴别器标记为真实图像。(This loss is to be minimized with respect to the parameters of the generators *G<sub>AB</sub>* and *G<sub>BA.</sub>*) |
| `self.loss_GBAB` | 通过两个生成器`G[BA]`和`G[AB]`将域 B 中的图像映射到 A,然后再映射回 B 的重建损失 加上伪图片*G <sub>BA</sub> (x <sub>B</sub> )*的二元交叉熵,由域 A 中的鉴别器标记为真实图像。(This loss is to be minimized with respect to the parameters of the generators *G<sub>AB</sub>* and *G<sub>BA.</sub>*) |
| `self.D_B_loss_real` | 在对域 B 中的真实图像进行分类时,鉴别符`D[B]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator `D[B]`) |
| `self.D_B_loss_fake` | 在对域 B 中的伪造图像进行分类时,鉴别符`D[B]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator `D[B]`) |
| `self.D_A_loss_real` | 在对域 A 中的真实图像进行分类时,鉴别符`D[A]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator `D[A]`) |
| `self.D_A_loss_fake` | 在对域 A 中的伪造图像进行分类时,鉴别符`D[A]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator `D[A]`) |
| `self.loss_GABA` | 通过两个生成器`G[AB]`和`G[BA]`将域 A 中的图像映射到 B,然后再映射回 A 的重建损失 )加上假图片`G[AB](x[A])`的二进制交叉熵,并由域 B 中的鉴别器标记为真实图像。(This loss is to be minimized with respect to the parameters of the generators `G[AB]` and `G[BA]`) |
| `self.loss_GBAB` | 通过两个生成器`G[BA]`和`G[AB]`将域 B 中的图像映射到 A,然后再映射回 B 的重建损失 加上伪图片`G[BA](x[B])`的二元交叉熵,由域 A 中的鉴别器标记为真实图像。(This loss is to be minimized with respect to the parameters of the generators `G[AB]` and `G[BA]`) |
从前面的屏幕截图中,我们可以看到不同批次中域 A 中鉴别器的损失。 `da_loss` 是`da_loss_real`和 **`da_loss_fake`** 损失*的总和。*`da_loss_real`稳步下降,这是因为鉴别器易于学会识别域 A 中的真实图像,而虚假图像的损失则稳定在 0.69 左右,这是二进制分类器输出时您可以期望的`logloss` 具有 1/2 概率的类。 发生这种情况是因为生成器也在同时学习以使伪图像看起来逼真,因此使鉴别人员很难轻松地将生成器图像分类为伪图像。 域 B 上的鉴别器的损耗曲线看起来与域 A 的上一幅屏幕快照所示的相似。
从前面的屏幕截图中,我们可以看到不同批次中域 A 中鉴别器的损失。 `da_loss`是`da_loss_real`和`da_loss_fake`损失的总和。`da_loss_real`稳步下降,这是因为鉴别器易于学会识别域 A 中的真实图像,而虚假图像的损失则稳定在 0.69 左右,这是二进制分类器输出时您可以期望的`logloss` 具有 1/2 概率的类。 发生这种情况是因为生成器也在同时学习以使伪图像看起来逼真,因此使鉴别人员很难轻松地将生成器图像分类为伪图像。 域 B 上的鉴别器的损耗曲线看起来与域 A 的上一幅屏幕快照所示的相似。