Conheça os desenvolvimentos mais recentes de um dos mais ambiciosos projetos de inteligência artificial.
As Redes Neurológicas Artificiais têm experimentado um notável progresso recentemente na classificação de imagens e reconhecimento da fala. Mas mesmo que estas sejam ferramentas muito úteis com base em métodos matemáticos conhecidos, entendemos realmente surpreendentemente pouco sobre porque é que certos modelos funcionam e outros não. Por isso vamos dar uma olhadela a algumas técnicas simples para espreitar dentro dessas redes.
Treinamos uma rede neurológica artificial mostrando-lhe milhões de exemplos de treino e ajustando gradualmente a rede de parâmetros até ela dar as classificações que queremos. A rede consiste tipicamente em 10 a 30 camadas empilhadas de neurónios artificiais. Cada imagem é dirigida para a camada de entrada, que, de seguida, transmite para a próxima camada, até que finalmente seja atingida a camada de "saída". A "resposta" da rede vem dessa camada de saída final.
Um dos desafios das redes neurológicas é entender o que acontece exatamente em cada camada. Sabemos que após a formação, cada camada extrai características progressivamente superiores e de nível superior da imagem, até que a camada final, essencialmente, toma uma decisão sobre o que a imagem mostra. Por exemplo, a primeira camada olha talvez para as margens ou cantos. As camadas intermediárias interpretam as características básicas para procurar formas gerais ou componentes, como uma porta ou uma folha. As poucas camadas finais compõem esses elementos até termos interpretações completas – esses neurónios são ativados em resposta a coisas muito complexas tais como edifícios ou árvores.
Uma maneira de visualizar o que se passa é virar a rede de cabeça para baixo e pedir-lhe para melhorar uma imagem de entrada, de maneira a eliciar uma interpretação particular. Digamos que quer saber que tipo de imagem resultaria de "Banana". Comece com uma imagem cheia de ruído aleatório, de seguida, ajuste gradualmente a imagem na direção daquilo que a rede neurológica considera uma banana (ver trabalhos relacionados em [1], [2], [3], [4]). Por si só, isto não funciona muito bem, mas funciona se antes se impuser uma restrição de que a imagem deve ter estatísticas semelhantes a imagens naturais, como pixels vizinhos que precisam de ser correlacionados.
Então aqui está uma surpresa: as redes neurológicas que foram treinadas para discriminar entre diferentes tipos de imagens também têm muitas das informações necessárias para gerar imagens. Veja mais alguns exemplos em diferentes classes:
Por que é que isto é importante? Bem, nós treinamos redes, mostrando-lhes simplesmente muitos exemplos do que queremos que elas aprendam, esperando que elas extraiam a essência do assunto em questão (por exemplo, um garfo precisa de uma pega e 2-4 dentes), e aprendam a ignorar o que não interessa (um garfo pode ser de qualquer forma, tamanho, cor ou orientação). Mas como se verifica que a rede aprendeu corretamente os recursos adequados? Pode ajudar visualizar a representação da rede de um garfo.
De facto, em alguns casos, isso revela que a rede neurológica não está mesmo à procura daquilo que nós pensamos que está. Por exemplo, aqui está o que uma rede neurológica que nós projetamos pensava que era a imagem de halteres:
Existem de facto halteres lá, mas parece que nenhuma imagem de um haltere está completa sem um levantador de peso muscular para os levantar. Neste caso, a rede falhou em perceber completamente a essência de um haltere. Talvez nunca lhe tenha sido mostrado um haltere sem um braço a segurá-lo. A visualização pode nos ajudar a corrigir estes tipos de acidentes de treino.
Em vez de prescrevermos exatamente que caraterística queremos que a rede amplifique, também podemos permitir que a rede tome essa decisão. Neste caso, simplesmente damos à rede uma imagem arbitrária ou fotografia e deixamos a rede analisar a imagem. Depois escolhemos uma camada e solicitamos à rede um aprimoramento do que for detectado. Cada camada de rede trata de recursos a um nível diferente de abstração, de modo a que a complexidade das características que geramos depende da camada que escolhemos para melhorar. Por exemplo, as camadas mais baixas tendem a produzir derrames ou simples padrões tipo ornamento, porque essas camadas são sensíveis a características básicas, tais como as bordas e as suas orientações.
Esquerda: Fotografia original por Zacho Evenor. Direita: processada por Günther Noack, engenheiro de software
Esquerda: pintura original por Georges Seurat. Direita: imagens processadas por Matthew McNaughton, engenheiro de software
Se escolhermos camadas de nível superior, que identificam características mais sofisticadas em imagens, tendem a surgir características complexas ou até mesmo objetos integrais. Mais uma vez, começamos apenas com uma imagem existente e damo-la à nossa rede neurológica. Pedimos à rede: "Tudo o que vires aqui, quero mais dela!" Isto cria um ciclo de feedback: se uma nuvem se parece um pouco com um pássaro, a rede irá torná-la mais como um pássaro. Isto, por sua vez fará com que a rede reconheça o pássaro ainda mais fortemente na passagem seguinte e assim por diante, até que apareça um pássaro altamente detalhado, aparentemente do nada.
Os resultados são intrigantes – até uma rede neurológica relativamente simples pode ser usada para interpretar excessivamente uma imagem, tal como as crianças observam nuvens e interpretam as suas formas aleatórias. Esta rede foi treinada principalmente com imagens de animais, por isso, naturalmente, tende a interpretar formas como animais. Mas porque os dados são armazenados numa alta abstracção, os resultados são uma mistura interessante destas características aprendidas.
Claro, podemos fazer mais do que ver nuvens com esta técnica. Podemos aplicá-la a qualquer tipo de imagem. Os resultados variam um pouco com o tipo de imagem, porque os recursos são inseridos obliquamente na rede em direção a certas interpretações. Por exemplo, linhas do horizonte tendem a ser preenchidas com torres e pagodes. Rochas e árvores transformam-se em edifícios. Pássaros e insetos aparecem em imagens de folhas.
A imagem original influencia que tipos de objetos se formam na imagem processada
Esta técnica dá-nos uma sensação qualitativa do nível de abstração que uma determinada camada alcançou na sua compreensão das imagens. Chamamos a essa técnica "Inceptionismo", em referência à arquitetura de rede neurológica utilizada. Veja a nossa galeria de Inceptionismo para mais pares de imagens e os seus resultados processados, além de algumas animações de vídeo.
Temos de ir mais longe: Iterações
Se aplicarmos o algoritmo de forma iterativa nas suas próprias saídas e aplicarmos um pouco de zoom depois de cada iteração, temos um fluxo interminável de novas impressões, a explorar o conjunto de coisas que a rede conhece. Podemos ainda iniciar este processo de uma imagem aleatória de ruído, de modo a que o resultado se torne puramente o resultado da rede neurológica, como pode ser visto nas imagens a seguir:
“Sonhos” das redes neurológicas – gerados puramente de ruído aleatório, usando uma rede treinada em certos aspetos pelo Laboratório de Ciência da Computação e de Inteligência artificial do MIT
As técnicas apresentadas aqui ajudam-nos a compreender e visualizar como é que as redes neurológicas são capazes de realizar tarefas de classificação difíceis, a melhorar a arquitetura de rede e a verificar o que a rede aprendeu durante o treino. Também nos fazem questionar se as redes neurológicas podem tornar-se uma ferramenta para artistas – uma nova forma de misturar conceitos visuais – ou talvez até mesmo lançar um pouco de luz sobre as raízes do processo criativo em geral.