Notícias falsas ou fake news são um dos assuntos do momento, certo? Por todo lado vemos pessoas compartilhando notícias ou desvendando elas. Entre as várias formas que essas informações não verídicas podem aparecer é como vídeos ou imagens, as chamadas deep fakes. Geralmente é fácil identificar uma deep fake, pois estas costumam ser “toscas”. Entretanto já existem várias técnicas de aprendizado de máquina, machine learning, capazes de criar imagens falsas tão reais que nem humanos conseguem distingui-las de verdadeiras. Hoje você vai aprender como a mais famosa delas (provavelmente) funciona, as chamadas GANs (Redes Geradoras Adversariais).

Quer uma demonstração? Observe a imagem abaixo por alguns segundos e tente descobrir qual das duas imagens é real. Logo mais no texto te dou a resposta.

Distribuição dos dados

Para começar esse assunto precisamos entender o que é a distribuição dos dados. É bem simples, a informação que adquirimos em qualquer lugar pode ser transformada em números. E para cada tipo de fenômeno natural, social, cósmico e etc. os valores das informações, ou seja, os valores que medimos, seguem algum tipo de padrão, mesmo que seja um fenômeno totalmente aleatório. Esse padrão nós traduzimos em um formato chamado distribuição. A seguir temos alguns exemplos

Temos aí alguns exemplos de distribuições de dados variados. Vou explicar melhor o segundo deles (em cima no lado direito). Nesse caso temos o resultado de um teste aplicado em cerca de 5000 estudantes, a pontuação mínima era zero e a máxima cinquenta. O eixo x fornece a informação sobre a pontuação e o y sobre o número de estudantes. Por exemplo, temos cerca de 300 estudantes que conseguiram pontuação em torno de 25, já cerca de 100 estudantes conseguiram pontuação de 34 pontos no segundo pico.

Podemos perceber que, em cada um dos exemplos, o formato de como os dados se distribuem é diferente, certo? Esses formatos dão a característica pessoal que cada fenômeno ou experimento possui. 

Se nós soubermos exatamente como algum dado se distribui, podemos fazer amostragem e usar esse conhecimento para fazer simulações, ou seja, experimentos em um computador.

Amostragem é o nome do método usado para simular um comportamento. Por exemplo, imagine que você foi corrigindo as provas desses alunos e a cada nova pontuação conhecida você anotava em uma tabela e iria formando esse gráfico até que corrigiu todas as provas. Se essa distribuição agora representa as notas daqueles alunos para essa prova, teoricamente você escolher estudantes aleatoriamente da mesma população para fazer a mesma prova e a distribuição das notas se repetiria.

Esse processo de escolher um aluno aleatoriamente daquela população é uma amostragem. A parte boa de conhecer a distribuição é que você pode usar um computador para simular a mesma distribuição, você não precisaria mais fazer o experimento com estudantes reais.

Imagem como informação

Como isso se encaixa nas imagens que falamos antes? Cada pixel da imagem é representado por números que dão as características de cor e brilho, ou seja são dados capturados através de um experimento, nesse caso tirar a foto. Esses dados possuem também uma distribuição de valores que podem ser representadas como nos gráficos acima, sendo uma distribuição para cada pixel.

Você vê onde estamos chegando? Se eu souber como os valores dos pixels se distribuem eu posso fazer uma simulação para criar imagens novas. É aí que está a chave do sucesso e vamos agora falar de como isso pode ser feito.

Vamos ver um exemplo simples. Na imagem abaixo podemos ver os pixels, os quadradinhos. Como essa imagem está em preto e branco, fica fácil entender os possíveis valores dos pixel. Os pixels totalmente pretos possuem valor zero e conforme esse valor vai aumentando o pixel se torna cinza até ficar totalmente branco com valor cem.

Neste exemplo temos a imagem de um número 9 retirado de um conjunto de dados muito famoso chamado MNIST of handwritten digits (dígitos escritos à mão). 

Resumindo mais uma vez: precisamos encontrar um meio de aprender a distribuição de valores de cada um dos pixels. Encontrando como os valores se distribuem para todos os números 9, por exemplo, podemos formar novas imagens desse número.

GANs

Chega de lero-lero e vamos ao que importa: “Como fazemos isso acontecer?”

Bom, eu disse que focaremos em uma das técnicas, as tais GANs. Para você ter uma ideia, essa técnica possui um potencial tão grande que o próprio diretor de inteligência artificial do Facebook, Yann Lecun, disse que elas são a ideia mais interessante em machine learning nos últimos 10 anos. 

O responsável pela sua criação, o pesquisador Ian Goodfellow (que escreveu o melhor livro que existe sobre deep learning, na minha opinião), foi contratado pela Apple a peso de ouro e seu orientador, Yoshua Bengio, foi um dos vencedores do Turing Award em 2019 (junto com Yann Lecun e Geoffrey Hinton). Estes são nomes muito famosos hoje na área de inteligência artificial.

Ian Goodfellow e seu livro Deep Learning

E por último e não menos importante, eu acho a ideia por trás das GANs maravilhosa e por isso são hoje parte fundamental da minha pesquisa como cientista de dados.

Bom, vamos ver como as GANs funcionam. Comecemos com uma anedota sobre um menino, seu nome é Gerador. Ele ouviu dizer que às vezes os professores mandam bilhetes para os pais informando que não haverá aulas em algum dia devido a um evento especial ou mesmo algum tipo de feriado. Como Gerador não gosta da escola, ele pensou em fazer ele mesmo o tal bilhete. Quando esse menino chegou em casa, entregou ao seu pai o pedaço de papel mostrado na imagem a seguir.

O pai, chamado de Discriminador já viu outros bilhetes que as escolas mandam e esse da imagem claramente é bem diferente. Assim, prontamente concluiu que era um bilhete falso, deu uma bronca no Gerador e o colocou de castigo.

Nosso protagonista ficou intrigado “O que será que denunciou o documento forjado? Talvez a cor da caneta? O formato da letra? O tipo de papel?”

É claro que o pequeno falsário não desistiria com apenas uma tentativa e passou anos e anos criando os mais variados tipo de bilhetes e recebendo os castigos do pai. Eventualmente, após praticar muito ele começou a perceber quais características um bilhete real tem e passou a produzir documentos falsos cada vez mais difíceis de serem  detectados ao ponto de que seu pai, o Discriminador, não era mais capaz de diferenciar um bilhete real de um falso. O que temos no fim é um gerador de bilhetes capaz de produzir bilhetes com tamanho, conteúdo e etc. variados que nem mesmo um especialista é capaz de perceber a farsa.

E é assim que funcionam as Redes Geradoras Adversariais, ou GANs (Generative Adversarial Networks). Existe hoje uma variedade muito grande de GANs, cada uma com características de treino e arquitetura específicas, mas aqui falaremos do tipo mais comum, a primeira criada em 2014 pelo Ian Goodfellow.

Vejamos o significado do seu nome: o termo “redes” é porque é composta de duas redes neurais, uma chamada de Gerador e outra de Discriminador; “geradoras” é devido a característica de gerar dados; e “adversariais” vem do tipo de treino usado, o Gerador e o Discriminador competem nesse jogo de enganar e descobrir a verdade.

Aliás, toda a inspiração para sua criação veio mesmo da teoria de jogos, de um tipo de jogo conhecido como MinMax, o qual se estende até o equilíbrio de Nash ser atingido (lembrou do filme “Uma mente brilhante”?). Esse equilíbrio é atingido quando o Discriminador não é mais capaz de diferenciar o que é falso e verdadeiro. Em termos práticos ele acaba identificando cada um dos documentos, verdadeiros e falsos, como verdadeiros 50% das vezes (e outros 50% como falsos consequentemente).

Para mais detalhes sobre como treinamos essas redes neurais observe a imagem abaixo.

Temos aí o pai que faz o papel de um investigador, Discriminador, e seu filho que forjar documentos, Gerador. Na imagem acima pense que o Gerador quer criar números “1” falsos iguais ao de verdade. As etapas do treino são as seguintes:

  1. O Discriminador vê um número real e aprende algumas características sobre eles
  2. O Gerador recebe um ruído (já entro em mais detalhes sobre isso) e produz alguma informação
  3. O Discriminador recebe o número falso e o classifica como real ou falso
  4. O Gerador é informado sobre o resultado de sua tentativa de falsificação. Se falha entende que deve gerar dados diferentes, caso não falhe ele entende que algumas das características da falsificação são boas e pode tentar usá-las mais vezes.

Esse processo se repete até o equilíbrio de Nash. Devemos notar que inicialmente nenhum dos dois sabe cumprir seu papel direito, nem mesmo o Discriminador. Ele aprende a identificar os números conforme vê os reais e os falsos. Uma característica muito importante que faz toda a diferença é o fato do Gerador nunca ver os dados reais.

Desse jeito ele não fica viciado ou na linguagem de machine learning, não ocorre overfitting. A capacidade de sempre criar imagens diferentes vem dar “semente”, o ruído que falei ali em cima. Esse ruído é um número aleatório (bom, computadores geram números pseudo-aleatórios, mas não entraremos nessa questão) que o Gerador recebe toda vez que vai gerar novos dados. Se ele receber o mesmo ruído duas vezes vai gerar os mesmos dados na duas.

É isso que faz com que as GANs pareçam ser uma inteligência artificial com criatividade verdadeira, capaz de criar imagens, textos, músicas e por aí vai.

Conclusão

Agora posso revelar a verdade sobre as duas pessoas na imagem no início do texto. Tanto aquele homem quanto aquela mulher não existem, as duas imagens são falsas e foram criadas artificialmente usando um tipo de GAN, o StyleGAN. Essa imagem faz parte de um dos artigos publicados pela NVIDIA, sim a mesma das placas de vídeo. Você pode encontrar o artigo do StyleGAN aqui.

Existe muito mais a ser dito sobre GANs, mas exigiria um espaço maior e mais tempo para isso, pois acredite, tem coisas impressionantes sendo feitas por aí com essas belezinhas. Acredite, eu ficaria fácil várias horas discutindo sobre isso, já passo muitas implementando e experimentando com elas :D.

Se você quiser ler algo um pouco mais técnico sobre GANs pode ler outros dois textos que escrevi no blog da empresa que trabalho:

Vou aproveitar também para fazer um jabá próprio. Em dezembro de 2019 eu criei um evento chamado GAN School, este foi o primeiro evento no Brasil dedicado exclusivamente para o ensino, estudo e divulgação das GANs. Tivemos essa primeira edição, mas outras virão por aí num formato de ensino à distância, provavelmente. Se você tiver curiosidade pode também acessar o material usado no curso disponível aqui. Quem sabe você não participa na próxima?

Obrigado :)