O gerador

A parte do gerador de uma GAN aprende a criar dados falsos incorporando o feedback do discriminador. Ele aprende a fazer com que o discriminador classifique a saída como real.

O treinamento do gerador exige uma integração mais estreita entre o gerador e o discriminador do que o treinamento do discriminador. A parte do GAN que treina o gerador inclui:

  • entrada aleatória
  • rede de gerador, que transforma a entrada aleatória em uma instância de dados
  • rede discriminadora, que classifica os dados gerados
  • saída do discriminador
  • perda de gerador, que penaliza o gerador por não enganar o discriminador

Diagrama de uma rede adversarial generativa. No centro do
          diagrama, há uma caixa com o rótulo "discriminator". Duas ramificações alimentam esta
          caixa pela esquerda.  A primeira começa no canto superior esquerdo do
          diagrama com uma caixa com o rótulo "imagens do mundo real". Uma seta leva
          desse cilindro para uma caixa com o rótulo "Sample". Uma seta da caixa
          "Sample" (Amostra) alimenta a caixa "Discriminator" (Discriminador). A ramificação de baixo
          alimenta a caixa "Discriminator", começando com uma caixa chamada "Random
          Input". Uma seta aponta da caixa "Entrada aleatória" para uma caixa com o rótulo
          'Gerador'. Uma seta vai da caixa "Generator" para uma segunda
           caixa "Sample". Uma seta vai da caixa "Sample" para a caixa "Discriminator". No lado direito da caixa "Discriminator", duas setas levam a duas caixas no lado direito do diagrama. Uma seta leva a uma caixa
          rotulada como "Perda de discriminador". A outra seta leva a uma caixa com a identificação
          'Perda do gerador'. Uma caixa amarela com uma seta apontando para a esquerda e
          a palavra "Backpropagation" é desenhada em torno da caixa "Random Input",
          da caixa "Generator", da caixa "Sample" na parte de baixo, da caixa "Discriminator",
          da caixa com os rótulos "Real" e "Fake" e da caixa "Generator
          loss" para indicar que a retropropagação opera na parte do
          sistema contida na caixa amarela.

Figura 1: retropropagação no treinamento do gerador.

Entrada aleatória

As redes neurais precisam de alguma forma de entrada. Normalmente, inserimos dados com os quais queremos fazer algo, como uma instância que queremos classificar ou fazer uma previsão. Mas o que usamos como entrada para uma rede que gera instâncias de dados totalmente novas?

Na forma mais básica, um GAN usa ruído aleatório como entrada. O gerador transforma esse ruído em uma saída significativa. Ao introduzir ruídos, podemos fazer com que o GAN produza uma grande variedade de dados, fazendo amostragem em diferentes lugares na distribuição de destino.

Os experimentos sugerem que a distribuição do ruído não importa muito. Portanto, podemos escolher algo fácil de amostrar, como uma distribuição uniforme. Para conveniência, o espaço em que o ruído é amostrado geralmente tem dimensão menor do que a dimensionalidade do espaço de saída.

Como usar o discriminador para treinar o gerador

Para treinar uma rede neural, alteramos os pesos da rede para reduzir o erro ou a perda da saída. No nosso GAN, no entanto, o gerador não está diretamente conectado à perda que estamos tentando afetar. O gerador alimenta a rede discriminadora, e o discriminador produz a saída que estamos tentando afetar. A perda do gerador penaliza o gerador por produzir uma amostra que a rede discriminadora classifica como falsa.

Esse bloco extra de rede precisa ser incluído na retropropagação. A propagação para trás ajusta cada peso na direção certa calculando o impacto do peso na saída, ou seja, como a saída mudaria se você mudasse o peso. No entanto, o impacto do peso de um gerador depende do impacto dos pesos do discriminador que ele alimenta. A propagação para trás começa na saída e flui de volta pelo discriminador para o gerador.

Ao mesmo tempo, não queremos que o discriminador mude durante o treinamento do gerador. Tentar atingir um alvo em movimento tornaria um problema difícil ainda mais difícil para o gerador.

Então, treinamos o gerador com o seguinte procedimento:

  1. Amostra de ruído aleatório.
  2. Produz a saída do gerador a partir do ruído aleatório amostrado.
  3. Receba a classificação "Real" ou "Fake" do discriminador para a saída do gerador.
  4. Calcular a perda da classificação do discriminador.
  5. Faça a propagação de volta pelo discriminador e pelo gerador para receber gradientes.
  6. Use gradientes para mudar apenas os pesos do gerador.

Esta é uma iteração do treinamento do gerador. Na próxima seção, vamos mostrar como equilibrar o treinamento do gerador e do discriminador.