In GAN, the latent space input is usually random noise, e.g., Gaussian noise. The objective of is a very generic one. It doesn’t say anything about how exactly the latent space will be used. This is not desirable in many problems. We would like to have more interpretability in the latent space. InfoGAN introduced constraints to the objective to enforce interpretability of the latent space1.

## Constraint

The constraint InfoGAN proposed is ,

$$\underset{{\color{red}G}}{\operatorname{min}} \underset{{\color{green}D}}{\operatorname{max}} V_I ({\color{green}D}, {\color{red}G}) = V({\color{green}D}, {\color{red}G}) - \lambda I(c; {\color{red}G}(z,c)),$$

where

• $c$ is the latent code,
• $z$ is the random noise input,
• $V({\color{green}D}, {\color{red}G})$ is the objective of GAN,
• $I(c; {\color{red}G}(z,c))$ is the mutual information between the input latent code and generated data.

Using the lambda multiplier, we punish the model if the generator loses information in latent code $c$.

## Training

The training steps are almost the same as but with one extra loss to be calculated in each mini-batch.

1. Train $\color{red}G$ using loss: $\operatorname{MSE}(v’, v)$;
2. Train $\color{green}D$ using loss: $\operatorname{MSE}(v’, v)$;
3. Apply Constraint:
1. Sample data from mini-batch;
2. Calculate loss $\lambda_{l} H(l’;l)+\lambda_c \operatorname{MSE}(c,c’)$

## Code

eriklindernoren/PyTorch-GAN

Planted: by ;

L Ma (2021). 'infoGAN', Datumorphism, 08 April. Available at: https://datumorphism.leima.is/wiki/machine-learning/adversarial-models/infogan/.