Ensinaram-lhe como gerar GAN rede confronto, 50 linhas de modelos de código Fun GAN (com código fonte)

Fonte: AI Youdao

Este artigo sobre 2820 Word, leitura recomendada 12 minutos.

Este artigo é introduzir uma geração contra a rede (Gerar Adversarial de rede, GAN), na linguagem mais simples de explicar, GAN, finalmente, implementar um programa simples para ajudar as pessoas a aprofundar a sua compreensão.

O que é GAN?

Bem, GAN tão poderoso que, no final, é um modelo de que tipo de estrutura é? Antes de nós aprendemos de aprendizagem de máquina ou modelo de rede neural é principalmente fazer duas coisas: previsão e classificação Isto é o que nós somos conhecidos. É possível fazer o modelo de máquina para gerar automaticamente uma imagem, uma voz? Mas também para obter uma certa imagem e som, ajustando os diferentes vetor de entrada do modelo. Por exemplo, você pode ajustar os parâmetros de entrada para obter um cara ruivo, de olhos azuis, você pode ajustar os parâmetros de entrada para obter uma fêmea clips de voz, e assim por diante. Em outras palavras, tais máquinas no modelo de demanda pode gerar automaticamente o que queremos. Portanto, GAN surgiu!

O GAN, isto é gerado contra rede, que compreende dois módulos principais:

  • Gerador (Generativo Modelo)
  • Discriminador (Discriminative Modelo)

Jogo um do outro para gerar o modelo e aprendizagem modelo discriminante produz muito boa saída. Com fotos, por exemplo, a principal tarefa do grupo gerador é aprender a verdadeira imagem, de modo que as imagens de auto-gerado mais perto da imagem real para "enganar" discriminador. A principal tarefa é encontrar discriminador imagem gerada por gerador nascido, diferenciar a sua imagem diferente da identificação real, verdadeiro e falso. Durante todo o processo iterativo, o gerador gera esforços contínuos para tornar a imagem mais e mais parecido com o real, enquanto discriminadores esforços contínuos para identificar genuínas e imagens falsas. Isto é semelhante ao jogo entre o gerador e o discriminador, com iteração repetida, os dois finalmente chegou a um saldo gerador gera uma imagem muito próximo da imagem real, enquanto discriminador tem sido difícil de identificar o quadro diferente do verdadeiro e falso. Seu desempenho é verdadeira e falsa para a saída de probabilidade discriminador estão perto de 0,5.

O conceito de GAN ainda é um pouco confusa? Não importa, dar um exemplo vivo para ilustrar.

Recentemente, eu queria estudar pintura, porque o Vaticano para ver pinturas do mestre, mas também quero chamar a trabalhos similares. pinturas de mestres do Vaticano como este:

Disse pintura na pintura, eu tenho um professor de pesquisa obras Wang Vaticano por muitos anos para me guiar. Professor Wang experiente, visão nítida, as pinturas de mestres do Vaticano imitar o mercado é capaz de escapar de seu material. Professor Wang disse uma palavra para mim: Quando você pintar o quadro pode me enganar, mesmo se você for bem sucedido.

Estou muito animado, ele voou para Professor Wang pintou esta imagem:

Professor Wang gentilmente varrer, com o rosto tremendo linhas pretas, gás, "0! Isso também é chamado de pintura? Muita diferença!" Depois de ouvir as palavras do Professor Wang, comecei a auto-reflexão, e não fazeis pintura terra, até mesmo os olhos, o nariz em tudo. Então, mais uma vez chamou a:

Professor Wang olhar, menos de 2 segundos, em seguida, caiu duas palavras: um minuto! Repaint! Eu acho que, ou não, mau pintado, você voltar e estudar o mestre do Vaticano de pintura estilo, melhoria contínua, re-criação, até que um dia, eu levei um novo olhar sobre as pinturas para Professor Wang:

Professor Wang olhar para seus amigos, um pouco como dizer. Eu tenho um olhar mais atento. Finalmente, disse ainda a mim, Não, não, detalhe muito ruim! Continue re pintando-lo. Bem, Professor Wang cada vez mais rigorosa! Suspirei e voltou para estudo e, finalmente, auto muito satisfeito com uma pintura dado a apreciação Professor Wang:

Desta vez, o professor Wang estava usando óculos, uma análise cuidadosa de produtos, depois de muito tempo, o professor Wang bateu no meu ombro e disse, muito bom, eu não posso identificar o verdadeiro eo falso. Haha, obter o louvor e reconhecimento do Professor Wang, eu estava lisonjeado, e, finalmente, criar um Vaticano como pinturas dos mestres. Em seguida, considerar uma mudança de carreira para ir.

Bem, exemplos de acabado (para mim aceitar que todos Tucao pintura talento). Neste exemplo, é na verdade um processo de formação de GAN. Eu sou o gerador, o objetivo é ser capaz de saída de um tolo imagem Professor Wang, Professor Wang tornar real para o inimigo! Professor Wang é o discriminador, o objetivo é identificar minhas pinturas, julgado como falso! O processo todo é a "geração - contra o" processo de jogo, e finalmente, I (gerador) de saída de pinturas "enganosas", e até mesmo o professor Wang (árbitro) são difíceis de distinguir entre os dois.

Este é o GAN, eu entendo.

A estrutura básica do modelo GAN

Antes de modelo GAN entendimento, vamos dar uma olhada Yann LeCun opiniões pessoais sobre o futuro do ponto de tecnologia inovadora aprendizagem profunda:

O mais importante, na minha opinião, é o treinamento contraditório (também chamado GAN para Generative Adversarial Networks). Esta é uma ideia que foi originalmente proposto por Ian Goodfellow, quando ele era um estudante com Yoshua Bengio na Universidade de Montreal (ele desde então, mudou a Google Cérebro e, recentemente, a OpenAI).

Este, e as variações que estão sendo propostas é a idéia mais interessante nos últimos 10 anos no ML, na minha opinião.

Yann LeCun acho GAN é susceptível de trazer novo avanço dará modelo de aprendizagem profundidade, é 20 anos de máquina de aprendizagem mais legal ideia. Nos últimos anos GAN ímpeto é muito forte. A imagem abaixo é todos os trabalhos apresentados nos últimos anos reunião ICASSP incluído Palavras-chave "generativo", o número de "contraditório" e "reforço" das estatísticas de papel.

Os dados mostram que em 2018, o número de artigos que contenham palavras-chave "generativa" e "contraditório" ocorre surto de crescimento. Previsivelmente, os próximos anos serão mais papel na GAN.

Ao lado de explicar a estrutura básica do GAN, já sabemos pela composição GAN e discriminador de geração, com o respectivo G e D. Para gerar uma imagem exemplo de aplicação, a estrutura do modelo é mostrado abaixo:

modelo básico GAN a partir da entrada Vector, rede G, redes d. Em que, L e D são geralmente compostas por uma rede neural. Saída G é uma imagem, mas o formulário é totalmente conectado. saída L é D de entrada, a entrada compreende ainda uma amostra D definido verdadeiro. Assim, a produção real D amostra pontuação mais elevada quanto possível, as amostras geradas do número L de possíveis saídas de um baixo Índice. Cada iteração do loop, redes G continuar a parâmetros de rede otimizar, a D não pode distinguir entre o verdadeiro eo falso; e D redes estão constantemente parâmetros de rede Otimizar para melhorar o reconhecimento, as amostras verdadeiras e falsas ter deixado a lacuna pontuação.

Eventualmente, depois de várias iterações de treinamento, modelo GAN:

modelo final GAN, amostra G gerado reais, pontuação saída D perto de 0,5, isso significa que a amostra é difícil distinguir o verdadeiro eo falso, o treinamento é bem sucedida.

Aqui, o foco deve explicar o vetor de entrada. Qual é o vetor de entrada usado para fazê-lo? Na verdade, cada dimensão do vector de entrada pode representar uma característica da imagem de saída. Por exemplo, o tamanho numérica primeira dimensão do vector de entrada pode ser ajustado para gerar imagens de cor de cabelo, valores maiores são vermelhos, algum valor pequeno preto, uma dimensão numérica segunda dimensão vector de entrada pode ser ajustado para gerar uma imagem de cor; vector de entrada o tamanho numérica terceira dimensão pode ser ajustado emoções expressão geradas imagens, e assim por diante.

O poder do GAN é também nesta, ajustando a entrada Vector, pode gerar imagens com características diferentes. Estas imagens geradas não são conjunto de amostras reais lá, mas que não é visto na imagem, mas razoável. Não é interessante? O quadro abaixo reflete vector diferente para gerar imagem diferente.

Depois modelo GAN acabado, vamos olhar para o princípio simples do algoritmo GAN. Uma vez que existem dois módulos: L e D, cada módulo tem um parâmetros de rede correspondentes.

Primeiro, olhe para o módulo D, seu objetivo é fazer a amostra verdadeira marcar o maior, melhor, vamos G amostra pontuação gerado tão pequeno quanto possível. Você pode obter a função perda D é:

Em que, x é a verdadeira amostra, L (z) G é gerado amostra. Esperamos que D (x) tão grande quanto possível, D (G (z)) tão pequena quanto possível, o que é -D desejável (x) tão pequena quanto possível, -log (1-D (L (z))) é menor o melhor. Do ponto de vista da função de perda, a fórmula pode ser obtido.

módulo olhar G, o qual é o objectivo desejado de gerar o maior o melhor modelo pode ser obtido na pontuação D. Assim, a perda da função G pode ser obtido da seguinte forma:

Você sabe que depois que a função perda, então você pode usar uma variedade de algoritmos de otimização para treinar o modelo.

mãos GAN para escrever um modelo de

Em seguida, vou usar PyTorch implementar um modelo simples de GAN. Ainda pintando um exemplo, suponha que deseja criar como "pintura" (gráficos senoidais por exemplo):

A "arte em" código gerado é o seguinte:

def artist_works (): # a pintura do famoso artista (alvo real)

 r = 0,02 * np.random.randn (1, ART_COMPONENTS)

 pinturas = np.sin (PAINT_POINTS * np.pi) + r

 pinturas = torch.from_numpy (pinturas) .float ()

 pinturas de retorno

Em seguida, o modelo de rede, a rede G e D são definidos:

G = nn.Sequential (# Generator

 nn.Linear (N_IDEAS, 128), # ideias aleatórias (podia de distribuição normal)

 nn.ReLU (),

 nn.Linear (128, ART_COMPONENTS), # fazer uma pintura destas ideias aleatórias

)

D = nn.Sequential (# discriminador

 nn.Linear (ART_COMPONENTS, 128), # receber obras de arte a partir do famoso artista ou um novato como G

 nn.ReLU (),

 nn.Linear (128, 1),

 nn.Sigmoid (), # dizer a probabilidade de que a obra de arte é feita pelo artista

)

Montamos otimização algoritmo Adam:

opt_D = torch.optim.Adam (D.parameters (), lr = LR_D)

opt_G = torch.optim.Adam (G.parameters (), lr = LR_G)

Finalmente, o processo de formação iterativo construção GAN:

plt.ion () # algo sobre plotagem contínua

D_loss_history =

G_loss_history =

para o passo no intervalo (10000):

 artist_paintings = artist_works () # verdadeira pintura do artista

 G_ideas = torch.randn (batch_size, N_IDEAS) # ideias aleatórias

 G_paintings = G (G_ideas) # falso pintura de G (ideias aleatórias)

 prob_artist0 = D (artist_paintings) # D tentativa para aumentar esta prov

 prob_artist1 = D (G_paintings) # D tentar reduzir esta prov

 D_loss = - torch.mean (torch.log (prob_artist0) + torch.log (1 -. Prob_artist1))

 G_loss = torch.mean (torch.log (1 -. Prob_artist1))

 D_loss_history.append (D_loss)

 G_loss_history.append (G_loss)

 opt_D.zero_grad ()

 D_loss.backward (retain_graph = true) # reutilizando gráfico computacional

 opt_D.step ()

 opt_G.zero_grad ()

 G_loss.backward ()

 opt_G.step ()

 Se a etapa% 50 == 0: plotagem #

 plt.cla ()

 plt.plot (PAINT_POINTS , G_paintings.data.numpy () , c = '# 4AD631', lw = 3, label = 'Gerado pintura',)

 plt.plot (PAINT_POINTS , np.sin (PAINT_POINTS * np.pi), c = '# 74BCFF', lw = 3, label = 'curva padrão')

 plt.text (-1, 0,75, 'precisão D =% 2f (0,5 D para a convergir).' % prob_artist0.data.numpy () significativo (), fontdict = { 'tamanho': 8}.)

 plt.text (-1, 0,5, 'D marcar =% .2f (-1,38 L para a convergir)' % -D_loss.data.numpy (), fontdict = { 'tamanho': 8})

 plt.ylim ((- 1, 1)); plt.legend (loc = 'a direita inferior', tamanhodefonte = 10); plt.draw (); plt.pause (0,01)

plt.ioff ()

plt.show ()

Eu usei a dinâmica modo de desenho, fácil de sempre observar a situação treinamento do modelo GAN.

O número de iterações é 1:

O número de iterações é de 200:

O número de iterações de 1000:

O número de iterações para 10000:

Perfeito! Depois de 10.000 iterações de formação, a curva resultante é já muito perto da curva padrão. marcar D é também próximo de 0,5 quanto o esperado.

O código completo tem .py e .ipynb duas versões, pesquisa na web links abaixo você pode obter.

https://github.com/RedstoneWill/MachineLearningInAction/tree/master/GAN

Wi-Fi chave mestra Xiaoguang: a linha ter sido subestimado fluxo para a tomada
Anterior
Wuhan Loja do outono Carnaval "lotaria fazer isso", mil dólares cartões de presente recompensa de 15 de gola aberta
Próximo