Meio Bit » Ciência » Imagens via Redes Neurais e o assustador futuro da IA

Imagens via Redes Neurais e o assustador futuro da IA

IA, Inteligência Artificial está sendo usada para criar imagens antes inexistentes. É algo surpreendente e impressionante. Vamos entender como funciona

9 semanas atrás

IA, ou Inteligência Artificial tem sido usada para um monte de atividades, de investimentos em bolsas de valores a ajudar um míssil a determinar se seu alvo é um tanque ou um Lada, mas ela também revolucionou um campo que parecia impossível: A geração de imagens.

Nenhuma dessas imagens existia alguns dias atrás. (Crédito: Carlos Cardoso/Stable Diffusion)

As imagens do banner de abertura desta matéria são um cachorro feito de origami, uma Emma Watson robótica, uma Vilma Flintstone ultrarealista, um foto macro de um inseto alienígena, Vladmir Putin com maquiagem de palhaço e um mundo alienígena. Elas foram geradas em alguns minutos, e todo o input necessário foi uma descrição, sucinta como a que acabei de fazer.

Nenhuma dessas imagens existia antes, não é uma colagem de fotos existentes. Elas são o resultado de uma rede neural que aprende a desenhar. Ela Não tem o conceito do que seja um cachorro, mas aprendeu a desenhar um, e principalmente, a reconhecer. Com esse conhecimento, este cachorro aqui, que também não existe, foi gerado em 87.13s.

Not dog (Crédito: Carlos Cardoso / Stable Diffusion)

Com um punhado de linhas a IA negou a premissa de Eu, Robô:

Detetive Del Spooner: Os seres humanos têm sonhos. Até os cães têm sonhos, mas você não, você é apenas uma máquina. Uma imitação da vida. Um robô pode escrever uma sinfonia? Um robô pode transformar uma tela em uma bela obra-prima?

Sonny: Pode *você*?

Essas imagens foram geradas com uma descrição de poucas palavras. (Crédito:Carlos Cardoso / Stable Diffusion)

COMO chegamos a isso, qual o papel da Inteligência Artificial no futuro e qual o segredo que permite a um computador produzir arte que não existe? Para chegarmos a essa resposta o caminho é longo, mas extremamente interessante. Me acompanhe:

IA? Inteligência Artificial não existe

Isso, pronto falei.

Alguns anos atrás a mídia resolveu demonizar a Engenharia Genética, criando uma aura de medo e desconfiança que atrasou ou cancelou milhares de projetos de pesquisa. Um belo dia um cientista marqueteiro teve a idéia de rebatizar o ramo como “Biologia Sintética”, um nome neutro, quase benigno. O resultado? As verbas voltaram.

Por isso tanto projeto envolve “nanotecnologia” e “grafeno”, temas da moda ganham atenção, temas tabu, são evitados. Inteligência Artificial, IA, foi uma jogada de mestre dos departamentos de matemática aplicada, idéia devidamente abraçada pelos institutos de computação e outras áreas.

O que é Inteligência Artificial afinal?

Em teoria existem dois tipos de IA: A IA Forte e a IA Fraca. A IA Forte é o pensamento abstrato, é o que quase todo mundo tem na cabeça, menos os eleitores daquele cara. IA Forte implica em consciência e senciência, a IA Forte tem consciência da própria existência, ela literalmente pensa e sonha. A IA Forte, a menos que você seja um engenheiro descompensado do Google, não existe.

A IA Fraca é a Inteligência Artificial aplicada a casos específicos, é a IA que aprende a jogar xadrez, jogo da velha e a não lançar ogivas nucleares no amiguinho. É a IA que faz com que a Alexa seja tão eficiente em te entender, exceto quando você precisa 😉

Em 1956 o MANIAC (Mathematical Analyzer, Numerical Integrator, and Computer or Mathematical Analyzer, Numerator, Integrator, and Computer) no Laboratório Nacional de Los Alamos foi o primeiro computador programado para jogar xadrez. (Crédito: Los Alamos National Lab)

Assim como a IA Forte, a IA Fraca também não existe. Ou melhor, ela não é “Inteligência”, nem é “Fraca”. Ela é uma excelente aplicação de um ramo da matemática que normalmente carece de charme: Estatística.

IA, Machine Learning, Deep Learning, é tudo aplicação de matemática, estatística, álgebra, Cálculo, não há magia negra envolvida (embora pareça). Há extrema complexidade, sim, mas essa complexidade deriva... de simplicidade.

O que é Machine Learning

OK, primeiro de tudo, os conceitos apresentados aqui são bem simplificados, extremamente simplificados. Não por eu subestimar a sua inteligência, caro leitor, mas por não querer transformar este texto gigantesco (e ainda são só 602 palavras) em uma aula chata.

Machine Learning, ou aprendizado de máquina, é uma forma de treinar o software para realizar uma tarefa, de forma genérica.

É extremamente simples fazer um computador reconhecer uma foto. Você gera um hash, compara com o arquivo de input, se forem iguais, the end. Já se você tiver que reconhecer uma pessoa em qualquer foto, a situação complica.

Autoretrato de uma rede neural (Crédito: Carlos Cardoso/Stable Diffusion)

Em machine learning você vai entrar com milhares de fotos da pessoa, sua função de reconhecimento vai tentar identificar se é a pessoa ou não. Caso não identifique, os parâmetros são mudados, até ela ter uma coleção de parâmetros que gerem resultados positivos. Esse treinamento é feito sem intervenção humana.

Imagine um computador que foi alimentado com milhões de partidas de xadrez, ele analisa estatisticamente cada uma delas, cada movimento, e tem um percentual de sucesso. Ele sabe a probabilidade de cada jogada do adversário, e cria um caminho de vitória mais provável. A cada jogada isso é reavaliado.

IA e Redes Neurais

Por muito tempo o campo de IA e Machine Learning ficou estagnado. Exigia muito processamento, e muito trabalho manual. Ironicamente, é um dos campos mais antigos da computação.

Nos anos 1940 estávamos começando a entender o funcionamento dos neurônios, e sua organização no cérebro. Era popular a hipótese de que neurônios tinham processamento simples mas a quantidade de interconexões gerava complexidade.

Nosso cérebro tem 1014 interconexões, ou sinapses, e isso definitivamente dá pra brincar. Esse número, caro, varia de pessoa a pessoa, e em geral quem vota naquele outro cara tem bem menos sinapses.

Em 1951. S.C. Kleene publicou um paper seminal, embora lidasse com outro tipo de célula: "Representation of Events in Nerve Nets and Finite Automata" (cuidado, PDF). Ele propôs o conceito de neurônio artificial, emulando uma célula neural natural.

Modelo de um neurônio (Crédito: Wikimedia Commons)

(de novo) simplificando, um neurônio é uma célula nervosa com um apêndice grande, chamado axônio, e milhares de conexões menores, dendritos. Esses dendritos são os dispositivos de entrada da célula. Eles se conectam ao axônio de outros neurônios, ou diretamente no corpo deles. A conexão entre um dendrito e uma célula se chama sinapse, é uma conexão eletroquímica que passa sinais via diferença de potencial.

EM GERAL, o neurônio recebe sinais via dendritos, um processamento interno balanceia esses sinais, e se atingirem as condições ideais, um potencial é atingido e o neurônio dispara um sinal de ativação em seu axônio, replicado para milhares de outros neurônios.

Imagine isso acontecendo em seu cérebro, sinais simples em uma estrutura quase infinitamente complexa.

Os cientistas de computação começaram a pensar se esse modelo poderia ser aplicado a computadores.

Normalmente problemas computacionais são reduzidos a etapas discretas, compondo um algoritmo, que se tornou uma palavra utilizada ad nauseum, e algo mítico. Não é. Um algoritmo é apenas uma forma de descrever a solução de um problema. Todo curso de computação básica na face da Terra usa o exemplo da receita de bolo, ou a descrição de como trocar um pneu, e é basicamente isso. Um algoritmo pode ser algo linear, ou mais complexo.

Há algoritmos bem complicados, como o ranking de páginas do Google, só de escrever “Hitler”, este artigo já cai várias páginas no ranking (sorry, Mobilon). Outros podem ser extremamente simples. Para saber se um número é par ou ímpar, basta dividir por dois e verificar se o número é um inteiro. Se for, é par. Do contrário, é ímpar.

Em Python dá pra fazer em uma linha:

n = 34234234323
i=n/2
print(i.is_integer())

Esse algoritmo reporta TRUE, se o número n for par ou FALSE se for ímpar.

Algoritmos não são a solução para IA

Em 2001 – Uma Odisséia no Espaço o supercomputador com Inteligência Artificial se chamava HAL, de Heuristic algorithm, ou ao menos foi a explicação official de Arthur Clarke, na prática ele chamou o computador de HAL para estar um passo à frente da IBM.

Heurística em computação é uma técnica que difere dos algoritmos tradicionais, usando conhecimento prévio e retroalimentação, é bem menos rígida, uma solução heurística pode não ser um resultado específico, mas uma faixa de números. Isso é importante para redes neurais.

O pulo do gato da IA

Quando falamos de neurônios em redes neurais, isso soa como ficção científica, mas um neurônio artificial nada mais é que uma função, ela recebe um valor executa um processamento e repassa o resultado para todos os outros neurônios da próxima camada.

Essa função pode ser qualquer coisa. A beleza da IA é que tudo pode ser representado através de uma equação matemática, e equações podem ser transformadas em neurônios. Tipo isso:

Calma, não fuja, prometo que a explicação toda não vai usar nenhuma equação, foi só pra assustar mesmo.

O Esqueleto da Rede

Uma rede neural, assim como ogros e cebolas, têm várias camadas. Ensanduichadas entre os neurônios de entrada e de saída, há várias camadas escondidas. Cada neurônio recebe um valor numérico de entrada, executa processamento e se atingir um valor de ativação, envia o resultado para todos os neurônios da camada seguinte. Nela o processo de repete, até chegar na camada de saída.

Versão élfica da Emma Watson (Crédito: Carlos Cardoso / Stable Diffusion)

Imagine uma câmera de segurança. Você precisa detectar movimento, mas não quer ser importunado por alarmes falsos como cachorros ou carros na rua. Sua rede neural decompõe a imagem em pixels. Você gera o valor médio de um quadrado de 5x5 pixels, subtraído do mesmo quadrado, ½ Segundo antes. Com isso você sabe se os blocos são parecidos ou se algo se moveu.

A rede neural mais simples possivel, pouco mais complexa que um comentarista de portal (Crédito: Wikimedia Commons)

Na segunda camada, cada neurônio recebe um bloco desses. Internamente ele compara com os valores dos neurônios próximos. Se muitos neurônios forem ativados, significa que algo grande entrou no campo da camera.

Outras camadas podem determinar se os pixels estão se alterando muito rápido (carro ou pássaro passando) ou muito devagar ou em ritmo constante (folhagens). Uma camada especializada em detecção de formas pode determinar se a imagem é de uma pessoa.

A última camada vai pesar todos esses valores e decidir se o alarme deve ser acionado ou não.

Mas isso é pensar?

Não, e é uma forma bem rígida de programação também. Redes Neurais são flexíveis, e bem mais burras do que isso. E é esse o motivo delas funcionarem.

O pulo do gato é que redes neurais precisam ser treinadas. Ao invés de escrever um algoritmo detalhado de como identificar um ser humano, que é algo BEM complicado, uma rede neural usaria algoritmos simples de reconhecimento de padrões. Uma imagem conhecida seria usada como entrada, e no final do processamento a rede neural compararia seu resultado com o resultado esperado.

O valor obtido representaria o quão próximo a rede estaria do acerto, mas não acaba aqui.

Cada neurônio virtual tem, além dos valores de input de dados, dois valores especiais: Peso e Viés. Imagine uma rede neural que se propõe a identificar uma pessoa em uma imagem. Um neurônio com a função de identificar olhos não pode ter peso muito grande, pois a pessoa pode estar de costas. Ao mesmo tempo seu viés deve tender a 2 ou menos. (eu sei que não funciona exatamente assim, caro Cientista de Dados)

Isso, mas milhares de vezes mais complexo. (Crédito: Reprodução Internet)

A cada vez que a rede neural é executada, os valores de peso e viés são modificados aleatoriamente, nos casos em que os neurônios não produziram resultados satisfatórios. Dependendo do tipo de rede neural, pode ocorrer propagação reversa, um neurônio recebe de volta os valores que gerou, e os recomputa de acordo com o resultado desejado.

Esse tipo de treinamento permite que depois de ouvir milhares de horas de pessoas falando, a Alexa consiga entender qualquer voz. A rede neural consegue aproximar os dados da fala, através de milhares de neurônios treinados, e chegar a uma média, aprendendo a ignorar ruídos de fundo, gaguejadas e sotaques.

OK, mas e as imagens?

Existem várias redes neurais gerando imagens, com métodos completamente diferentes. Nosso foco é a Stable Diffusion, uma rede que usa conceitos entrópicos de física dos gases, algo que a princípio não teria nada a ver com imagens. O paper que deu origem à Stable Diffusion é o High-Resolution Image Synthesis with Latent Diffusion Models.

Primeiro de tudo, a SD não faz colagem de imagens. Não é um banco de fotos do qual ela pega pedaços. As imagens geradas pela Stable Diffusion não existiam antes. A coisa é bem mais bonita e complicada do que isso.

A Stable Diffusion funciona inicialmente destruindo imagens.

Imagem sendo progressivamente destruída com adição de ruído gaussiano. (Crédito: nVidia)

Uma imensa base de imagens, de 600 mil fotos foi usada em seu treinamento. Cada imagem passou por um processo de destruição. A rede neural aprendeu a adicionar ruído gaussiano a uma imagem, até ela se tornar ruído puro, uma coleção de pixels aleatórios.

Com essa informação de como uma imagem é destruída com adição de ruído, é hora do próximo passo, da bruxaria em pessoa: Se você pode transformar imagem em ruído, por que não transformar ruído em imagem? Em teoria a imagem está ali. Uma tela em branco pode conter qualquer imagem do Universo.

Agora vou explodir sua cabeça: Acabei de escrever um programa capaz de gerar todas as imagens do Universo. Das fotos íntimas da Princesa Daiana às formas de vida em Epsilon Eridani. Da página de abertura de todos os romances que Tolkien não escreveu, ao mais distante quasar do Universo. Aqui está ele:

 

Esse programa, em Python, cria uma imagem de 512x512 pixels e a enche com pixels aleatórios. De acordo com a Teoria da Probabilidade, em algum momento imagens coerentes VÃO aparecer. Pode ser na segunda vez que o programa é executado, pode ser em alguns milhões de anos.

Mas e a Stable Diffusion?

A técnica aqui é diferente, mas parte do mesmo ruído. A diferença é que a Stable Diffusion foi treinada para reconhecer padrões de forma extremamente eficiente. Ela não sabe o que é um cavalo, uma flor ou uma Emma Watson, mas ela sabe reconhecer, mesmo em puro ruído, padrões que se assemelham a essas formas.

Através de sucessivas iterações, a rede neural começa a “limpar” a imagem. Isso aqui lembra vagamente um olho? Como foi que eu transformei olho em ruído da outra vez? Vamos reverter o processo. Uma boca? Sim, aqui costuma ficar a boca. E por aí vai, mas sem esses rótulos, é pura reconstrução matemática de padrões.

Eu pedi um alien peludo. Só isso. (Crédito: Stable Diffusion)

Exceto que não é uma reconstrução rígida. A rede foi alimentada por milhares de imagens com os mesmos temas. “Emma Watson” não significa uma imagem, mas uma média. É impossível reconstruir as imagens originais, justamente por isso.

E lembre-se, cada imagem tem um monte de modificadores, que afetam o peso de cada decisão feita pela rede. Você pode descrever a imagem do jeito que quiser, cada palavra afetará o resultado. Se você comandar “Batman Samurai”, a Stable Diffusion não irá tentar reconstruir uma imagem que lembre o Batman e outra que lembre um Samurai, ela irá amalgamar os dois conceitos, e sem maiores especificações, gerará imagens completamente diferentes.

Batsamurai (Crédito: Carlos Cardoso / Stable Diffusion)

A Stable Diffusion não entende os objetos que cria, ela adora desenhar humanos com membros a mais (inclusive aqueles). Ela aprendeu a identificar as formas dos conceitos, inclusive emoções abstratas, e aplicá-las nas imagens.

Os Riscos da IA

A popularização da Stable Diffusion e outras redes neurais gerou uma explosão de imagens geradas por IA. Sites como o Getty Images baniram a inclusão e venda de imagens geradas por computador, outros sites fizeram o mesmo. Artistas estão revoltados com a facilidade com que imagens podem ser criadas.

Para piorar, a Stable Diffusion é excepcionalmente boa em emular o estilo de outros artistas, vários estão considerando plágio, mas fica a questão: É possível registrar um estilo?

Legalmente a situação tende a se complicar ainda mais. Quem detém os direitos autorais de uma imagem feita via IA? Os autores do algoritmo? O dono do computador?

Hitler como uma bailarina? (Crédito: Carlos Cardoso / Stable Diffusion)

Outro problema: Quando eu digo que a IA é capaz de todo tipo de imagem, eu quero dizer todo MESMO. A maioria dos serviços online filtra a geração de conteúdo ofensivo ou #NSFW, com a Stable Diffusion é Open Source, você pode baixar e rodar em seu próprio computador, sem filtros ou restrições.

Dica: Nunca peça para a SD gerar “Margareth Thatcher Naked on a cold day”.

Você está limitado apenas por sua imaginação, a Stable Diffusion gera muito mais do que pessoas ou paisagens. Ela cria objetos, carros, animais, animais inexistentes, planetas, action figures, layouts de websites (essa foi sugestão de um leitor e me surpreendeu), sua imaginação é o limite, e esse é o problema.

Em mais alguns anos -alguns diriam meses- a SD e outras ferramentas terão atingido um grau de maturidade excepcional, produzindo imagens realistas, e até vídeo -já há gente experimentando com isso-. Imagine a quantidade de imagens falsas circularão nas próximas eleições!

Calma que Piora

A Stable Diffusion vai além de gerar fotos à partir do nada. Ela pode usar imagens existentes como base, e alterá-las. Você pode mudar tom de pele, cor de cabelo, estilo da foto, tudo. Por enquanto é perceptível a manipulação. Por enquanto.

Isso vai gerar uma montanha de processos, quando gente sem-noção começar a soltar nudes (ou pior) de gente conhecida, achando que “é de mentirinha, tudo bem”. Reputações serão destruídas antes que o desmentido apareça, pois o ZapZap não liga pra Verdade.

Stable Diffusion e Cia são uma caixa de Pandora, mas é tarde demais para fechá-la. Do mesmo jeito que todas as ferramentas do passado, seu uso dependerá de seus usuários. Grandes poderes grandes responsabilidades, bla bla bla.

É verdade esse bilete. (Crédito: Carlos Cardoso / Stable Diffusion)

Como brincar com SD?

Meus dedos estão caindo, então vou dar uma pausa antes de escrever um tutorial completo para a ferramenta, mas enquanto isso, se você tiver conhecimento de Python e um computador com uma GPU com no mínimo 4GB de VRAM, pode consultar este guia aqui.

O tempo de geração de imagens independe da complexidade do prompt, o fator principal é sua GPU. Eu uso uma jurássica GeForce 1050ti com 4GB de VRAM, então aqui uma imagem leva pouco mais de um minuto para ser gerada. Com placas decentes o tempo cai rapidamente.

Leia mais sobre: , , .

relacionados


Comentários