提交 f8674a05 编写于 作者: W wizardforcel

2021-01-07 21:13:36

上级 96f89ec5
......@@ -57,39 +57,39 @@ StackedGAN 使用预训练的编码器或分类器,以帮助解开潜在代码
![](img/B14853_06_002.png) (Equation 6.1.2)
生成器函数![](img/B14853_06_003.png)带有不可压缩的噪声代码和潜在代码。 从生成器的角度来看,优化`z = (z, c)`与优化`z`相同。
生成器函数`x = g(z, c) = g(z)`带有不可压缩的噪声代码和潜在代码。 从生成器的角度来看,优化`z = (z, c)`与优化`z`相同。
当提出解决方案时,生成器网络将仅忽略解纠结代码所施加的约束。
生成器学习分布![](img/B14853_06_004.png)。 这实际上将打乱分散表示的目的。
生成器学习分布`p_g(x | c) = p_g(x)`。 这实际上将打乱分散表示的目的。
InfoGAN 的关键思想是强制 GAN 不要忽略潜在代码`c`。 这是通过最大化`c`![](img/B14853_06_005.png)之间的相互信息来完成的。 在下一节中,我们将公式化 InfoGAN 的损失函数。
InfoGAN 的关键思想是强制 GAN 不要忽略潜在代码`c`。 这是通过最大化`c``g(z, c)`之间的相互信息来完成的。 在下一节中,我们将公式化 InfoGAN 的损失函数。
# InfoGAN
为了加强对代码的纠缠,InfoGAN 提出了一种针对原始损失函数的正则化函数,该函数可最大化潜在代码`c`![](img/B14853_06_006.png)之间的互信息:
为了加强对代码的纠缠,InfoGAN 提出了一种针对原始损失函数的正则化函数,该函数可最大化潜在代码`c``g(z, c)`之间的互信息:
![](img/B14853_06_007.png) (Equation 6.1.3)
正则化器在生成用于合成伪图像的函数时,会强制生成器考虑潜在代码。 在信息论领域,潜码`c`![](img/B14853_06_008.png)之间的互信息定义为:
正则化器在生成用于合成伪图像的函数时,会强制生成器考虑潜在代码。 在信息论领域,潜码`c``g(z, c)`之间的互信息定义为:
![](img/B14853_06_009.png) (Equation 6.1.4)
其中`H(c)`是潜码的熵,`c`,![](img/B14853_06_010.png)是观察发生器的输出后`c`的条件熵, ![](img/B14853_06_011.png)。 熵是对随机变量或事件的不确定性的度量。 例如,**在东方升起**之类的信息具有较低的熵,而**在彩票中赢得大奖**具有较高的熵。 可以在“第 13 章”,“使用互信息的无监督学习”中找到有关互信息的更详细讨论。
其中`H(c)`是潜码`c`的熵,`H(c | g(z | c))`是观察发生器的输出后`c`的条件熵, `g(z, c)`。 熵是对随机变量或事件的不确定性的度量。 例如,**在东方升起**之类的信息具有较低的熵,而**在彩票中赢得大奖**具有较高的熵。 可以在“第 13 章”,“使用互信息的无监督学习”中找到有关互信息的更详细讨论。
在“公式 6.1.4”中,最大化互信息意味着在观察生成的输出时,将![](img/B14853_06_012.png)最小化或减小潜码中的不确定性。 这是有道理的,因为例如在 MNIST 数据集中,如果 GAN 看到生成器 8 看到了数字 8,则生成器对合成数字 8 变得更有信心。
在“公式 6.1.4”中,最大化互信息意味着在观察生成的输出时,将`H(c | g(z | c))`最小化或减小潜码中的不确定性。 这是有道理的,因为例如在 MNIST 数据集中,如果 GAN 看到生成器 8 看到了数字 8,则生成器对合成数字 8 变得更有信心。
但是,![](img/B14853_06_013.png)很难估计,因为它需要后验![](img/B14853_06_014.png)的知识,这是我们无法获得的。 为简单起见,我们将使用常规字母`x`表示数据分布。
但是,`H(c | g(z | c))`很难估计,因为它需要后验`P(c | g(z | c)) = P(c | x)`的知识,这是我们无法获得的。 为简单起见,我们将使用常规字母`x`表示数据分布。
解决方法是通过使用辅助分布![](img/B14853_06_015.png)估计后验来估计互信息的下界。 InfoGAN 估计相互信息的下限为:
解决方法是通过使用辅助分布`Q(c | x)`估计后验来估计互信息的下界。 InfoGAN 估计相互信息的下限为:
![](img/B14853_06_016.png) (Equation 6.1.5)
在 InfoGAN 中,`H(c)`被假定为常数。 因此,使相互信息最大化是使期望最大化的问题。 生成器必须确信已生成具有特定属性的输出。 我们应注意,此期望的最大值为零。 因此,相互信息的下限的最大值为`H(c)`。 在 InfoGAN 中,离散隐码的![](img/B14853_06_017.png)可以由`softmax`非线性表示。 期望是`tf.keras`中的负`categorical_crossentropy`损失。
在 InfoGAN 中,`H(c)`被假定为常数。 因此,使相互信息最大化是使期望最大化的问题。 生成器必须确信已生成具有特定属性的输出。 我们应注意,此期望的最大值为零。 因此,相互信息的下限的最大值为`H(c)`。 在 InfoGAN 中,离散隐码的`Q(c | x)`可以由`softmax`非线性表示。 期望是`tf.keras`中的负`categorical_crossentropy`损失。
对于一维连续代码,期望是`c``x`的双整数。 这是由于期望从纠缠的代码分布和生成器分布中采样。 估计期望值的一种方法是通过假设样本是连续数据的良好度量。 因此,损失估计为![](img/B14853_06_018.png)。 在“第 13 章”,“使用互信息的无监督学习”中,我们将提供对互信息的更精确估计。
对于一维连续代码,期望是`c``x`的双整数。 这是由于期望从纠缠的代码分布和生成器分布中采样。 估计期望值的一种方法是通过假设样本是连续数据的良好度量。 因此,损失估计为`c log Q(c | x)`。 在“第 13 章”,“使用互信息的无监督学习”中,我们将提供对互信息的更精确估计。
为了完成 InfoGAN 的网络,我们应该有![](img/B14853_06_0151.png)的实现。 为了简单起见,网络 Q 是一个附加到判别器第二到最后一层的辅助网络。 因此,这对原始 GAN 的训练影响很小。
为了完成 InfoGAN 的网络,我们应该有`Q(c | x)`的实现。 为了简单起见,网络 Q 是一个附加到判别器第二到最后一层的辅助网络。 因此,这对原始 GAN 的训练影响很小。
“图 6.1.2”显示了 InfoGAN 网络图:
......@@ -105,11 +105,11 @@ InfoGAN 的关键思想是强制 GAN 不要忽略潜在代码`c`。 这是通过
| | ![](img/B14853_06_020.png) | 4.1.5 |
| InfoGAN | ![](img/B14853_06_021.png) | 6.1.1 |
| | ![](img/B14853_06_022.png) | 6.1.2 |
| | 对于连续代码,InfoGAN 建议使用![](img/B14853_06_023.png)的值。 在我们的示例中,我们设置![](img/B14853_06_024.png)。 对于离散代码,InfoGAN 建议使用![](img/B14853_06_025.png)。 | |
| | 对于连续代码,InfoGAN 建议使用`λ < 1`的值。 在我们的示例中,我们设置`λ = 0.5`。 对于离散代码,InfoGAN 建议使用`λ = 1`。 | |
表 6.1.1:GAN 和 InfoGAN 的损失函数之间的比较
InfoGAN 的损失函数与 GAN 的区别是附加术语![](img/B14853_06_026.png),其中![](img/B14853_06_027.png)是一个小的正常数。 最小化 InfoGAN 的损失功能可以将原始 GAN 的损失最小化,并将互信息最大化![](img/B14853_06_028.png)
InfoGAN 的损失函数与 GAN 的区别是附加术语`-λI(c; g(z, c))`,其中`λ`是一个小的正常数。 最小化 InfoGAN 的损失功能可以将原始 GAN 的损失最小化,并将互信息最大化`I(c; g(z, c))`
如果将其应用于 MNIST 数据集,InfoGAN 可以学习解开的离散码和连续码,以修改生成器输出属性。 例如,像 CGAN 和 ACGAN 一样,将使用`10-dim`一键标签形式的离散代码来指定要生成的数字。 但是,我们可以添加两个连续的代码,一个用于控制书写样式的角度,另一个用于调整笔划宽度。“图 6.1.3”显示了 InfoGAN 中 MNIST 数字的代码。 我们保留较小尺寸的纠缠代码以表示所有其他属性:
......@@ -323,7 +323,7 @@ def discriminator(inputs,
图 6.1.4:InfoGAN Keras 模型
建立判别器和对抗模型还需要进行许多更改。 更改取决于所使用的损失函数。 原始的判别器损失函数`binary_crossentropy`,用于离散码的`categorical_crossentropy`和每个连续码的`mi_loss`函数构成了整体损失函数。 除`mi_loss`函数的权重为 0.5(对应于连续代码的![](img/B14853_06_029.png))外,每个损失函数的权重均为 1.0。
建立判别器和对抗模型还需要进行许多更改。 更改取决于所使用的损失函数。 原始的判别器损失函数`binary_crossentropy`,用于离散码的`categorical_crossentropy`和每个连续码的`mi_loss`函数构成了整体损失函数。 除`mi_loss`函数的权重为 0.5(对应于连续代码的`λ = 0.5`)外,每个损失函数的权重均为 1.0。
“列表 6.1.3”突出显示了所做的更改。 但是,我们应该注意,通过使用构造器函数,判别器被实例化为:
......@@ -782,31 +782,31 @@ def build_encoder(inputs, num_labels=10, feature1_dim=256):
| | ![](img/B14853_06_034.png) | 6.2.3 |
| | ![](img/B14853_06_035.png) | 6.2.4 |
| | ![](img/B14853_06_036.png) | 6.2.5 |
| | 其中![](img/B14853_06_037.png)是权重,`i`是编码器和 GAN ID | |
| | 其中`λ1, λ2, λ3`是权重,`i`是编码器和 GAN ID | |
表 6.2.1:GAN 和 StackedGAN 的损失函数之间的比较。 `~p_data`表示从相应的编码器数据(输入,特征或输出)采样
条件“公式 6.2.3”中的损失函数![](img/B14853_06_038.png)确保发生器不会忽略输入`f[i + 1]`, 当从输入噪声代码`z[i]`合成输出`f[i]`时。 编码器`Encoder[i]`必须能够通过反转发生器的过程`Generator[i]`来恢复发生器输入。 通过`L2`或欧几里德距离(**均方误差****MSE**))来测量发电机输入和使用编码器恢复的输入之间的差异。
条件“公式 6.2.3”中的损失函数`L_i^(G_cond)`确保发生器不会忽略输入`f[i + 1]`, 当从输入噪声代码`z[i]`合成输出`f[i]`时。 编码器`Encoder[i]`必须能够通过反转发生器的过程`Generator[i]`来恢复发生器输入。 通过`L2`或欧几里德距离(**均方误差****MSE**))来测量发电机输入和使用编码器恢复的输入之间的差异。
“图 6.2.4”显示了![](img/B14853_06_039.png)计算所涉及的网络元素:
“图 6.2.4”显示了`L_0^(G_cond)`计算所涉及的网络元素:
![](img/B14853_06_11.png)
图 6.2.4:图 6.2.3 的简化版本,仅显示![](img/B14853_06_040.png)计算中涉及的网络元素
图 6.2.4:图 6.2.3 的简化版本,仅显示`L_0^(G_cond)`计算中涉及的网络元素
但是,条件损失函数引入了一个新问题。 发生器忽略输入噪声代码`z[i]`,仅依赖`f[i + 1]`。 熵损失函数“公式 6.2.4”中的![](img/B14853_06_041.png)确保发生器不会忽略噪声代码`z[i]`*Q 网络*从发生器的输出中恢复噪声代码。 恢复的噪声和输入噪声之间的差异也通过`L2`或欧几里德距离(MSE)进行测量。
但是,条件损失函数引入了一个新问题。 发生器忽略输入噪声代码`z[i]`,仅依赖`f[i + 1]`。 熵损失函数“公式 6.2.4”中的`L_0^(G_ent)`确保发生器不会忽略噪声代码`z[i]`*Q 网络*从发生器的输出中恢复噪声代码。 恢复的噪声和输入噪声之间的差异也通过`L2`或欧几里德距离(MSE)进行测量。
“图 6.2.5”显示了![](img/B14853_06_042.png)计算中涉及的网络元素:
“图 6.2.5”显示了`L_0^(G_ent)`计算中涉及的网络元素:
![](img/B14853_06_12.png)
图 6.2.5:图 6.2.3 的简单版本仅向我们显示了![](img/B14853_06_043.png)计算中涉及的网络元素
图 6.2.5:图 6.2.3 的简单版本仅向我们显示了`L_0^(G_ent)`计算中涉及的网络元素
最后的损失功能类似于通常的 GAN 损失。 它包括判别器损失![](img/B14853_06_044.png)和生成器(通过对抗性)损失![](img/B14853_06_045.png)。“图 6.2.6”显示了 GAN 丢失所涉及的元素。
最后的损失功能类似于通常的 GAN 损失。 它包括判别器损失`L_i^(D)`和生成器(通过对抗性)损失`L_i^(G_adv)`。“图 6.2.6”显示了 GAN 丢失所涉及的元素。
![](img/B14853_06_13.png)
图 6.2.6:图 6.2.3 的简化版本,仅显示了![](img/B14853_06_046.png)和![](img/B14853_06_047.png)计算中涉及的网络元素
图 6.2.6:图 6.2.3 的简化版本,仅显示了`L_i^(D)``L_0^(G_adv)`计算中涉及的网络元素
在“公式 6.2.5”中,三个发电机损耗函数的加权和为最终发电机损耗函数。 在我们将要介绍的 Keras 代码中,除的熵损失设置为 10.0 之外,所有权重都设置为 1.0。 在“公式 6.2.1”至“公式 6.2.5”中,`i`是指编码器和 GAN 组 ID 或级别。 在原始论文中,首先对网络进行独立训练,然后进行联合训练。 在独立训练期间,编码器将首先进行训练。 在联合训练期间,将使用真实数据和虚假数据。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册