Inceptionism: Aprofundando as redes neurais

– https://research.googleblog.com/2015/06/inceptionism-going-deeper-into-neural.html
Quarta-feira, 17 de junho de 2015
Postado por Alexander Mordvintsev, engenheiro de software, Christopher Olah, técnico de engenharia de software e Mike Tyka, engenheiro de software

Atualização – 13/07/2015
As imagens nesta postagem no blog são licenciadas pela Google Inc. sob uma licença internacional Creative Commons Attribution 4.0. No entanto, as imagens baseadas em locais da MIT Computer Science e AI Laboratory requerem permissões adicionais do MIT para uso.

As Redes Neurais Artificiais estimularam avanços recentes notáveis na classificação de imagens e reconhecimento de fala. Mas mesmo que sejam ferramentas muito úteis, baseadas em métodos matemáticos bem conhecidos, realmente entendemos surpreendentemente pouco por que certos modelos funcionam e outros não. Então, vamos dar uma olhada para algumas técnicas simples para espreitar dentro dessas redes.
Treinamos uma rede neuronal artificial, mostrando milhões de exemplos de treinamento e ajustando gradualmente os parâmetros da rede até dar as classificações que queremos. A rede geralmente consiste em 10-30 camadas empilhadas de neurônios artificiais. Cada imagem é alimentada na camada de entrada, que então fala para a próxima camada, até que finalmente a camada de “saída” seja atingida. A “resposta” da rede vem dessa camada de saída final.
Um dos desafios das redes neurais é entender o que exatamente acontece em cada camada. Sabemos que, após o treino, cada camada extrai recursos de nível superior e da imagem, até a camada final essencialmente tomar uma decisão sobre o que a imagem mostra. Por exemplo, a primeira camada talvez procure bordas ou cantos. As camadas intermediárias interpretam as características básicas para procurar formas ou componentes gerais, como uma porta ou uma folha. As últimas camadas colocam essas em interpretações completas – esses neurônios se ativam em resposta a coisas muito complexas, como edifícios inteiros ou árvores.
Uma maneira de visualizar o que acontece é virar a rede de cabeça para baixo e pedir que melhore uma imagem de entrada de forma a obter uma interpretação particular. Diga que você quer saber que tipo de imagem resultaria em “Banana”. Comece com uma imagem cheia de ruído aleatório, depois ajuste gradualmente a imagem para o que a rede neural considera uma banana (veja o trabalho relacionado em [1], [2] , [3], [4]). Por si só, isso não funciona muito bem, mas sim se impomos uma restrição anterior de que a imagem deveria ter estatísticas semelhantes às imagens naturais, como os pixels vizinhos que precisam ser correlacionados.

Então, aqui está uma surpresa: as redes neurais que foram treinadas para discriminar entre diferentes tipos de imagens têm um pouco da informação necessária para gerar imagens também. Confira mais alguns exemplos em diferentes classes:

Por que isso é importante? Bem, nós treinamos as redes simplesmente mostrando-lhes muitos exemplos do que queremos que eles aprendam, esperando que eles extraem a essência do assunto em questão (por exemplo, um garfo precisa de uma asa e 2-4 dentes) e aprende a ignorar o que não importa (um garfo pode ser qualquer forma, tamanho, cor ou orientação). Mas como você verifica se a rede aprendeu corretamente os recursos certos? Isso pode ajudar a visualizar a representação da rede de um garfo.
Na verdade, em alguns casos, isso revela que a rede neural não está a procura daquilo que pensamos que era. Por exemplo, aqui está o que uma rede neural que desenhamos pensava como eram os halteres:

Há halteres, tudo bem, mas parece que nenhuma imagem de um haltere está completa sem um levantador de peso muscular lá para levantá-los. Nesse caso, a rede não conseguiu destilar completamente a essência de um haltere. Talvez nunca se mostra um haltere sem um braço segurando. A visualização pode ajudar-nos a corrigir este tipo de acidentes de treinamento.
Em vez de prescrever exatamente qual recurso queremos que a rede amplifique, também podemos deixar a rede tomar essa decisão. Nesse caso, simplesmente alimentamos a rede de uma imagem ou foto arbitrária e deixamos a rede analisar a imagem. Em seguida, escolhemos uma camada e pedimos à rede que melhore o que for detectado. Cada camada da rede lida com recursos em um nível de abstração diferente, de modo que a complexidade dos recursos que geramos depende da camada que escolhemos melhorar. Por exemplo, as camadas mais baixas tendem a produzir traços ou padrões simples de ornamento, porque essas camadas são sensíveis a características básicas, como bordas e as suas orientações.

Se escolhermos camadas de nível superior, que identificam recursos mais sofisticados em imagens, características complexas ou mesmo objetos inteiros que tendem a surgir. Mais uma vez, começamos apenas com uma imagem existente e entregamos a nossa rede neural. Pedimos à rede: “Tudo o que você vê lá, eu quero mais disso!” Isso cria um loop de feedback: se uma nuvem se parece um pouco a um pássaro, a rede a tornará mais parecida com um pássaro. Isso, por sua vez, fará com que a rede reconheça o pássaro ainda mais forte na próxima passagem e assim por diante, até aparecer um pássaro altamente detalhado, aparentemente do nada.

Os resultados são intrigantes – mesmo uma rede neural relativamente simples pode ser usada para interpretar demais uma imagem, assim como as crianças, gostamos de observar as nuvens e de interpretar as formas aleatórias. Esta rede foi treinada principalmente em imagens de animais, então, naturalmente, ele tende a interpretar formas como animais. Mas porque os dados são armazenados numa abstração tão alta, os resultados são um remix interessante desses recursos aprendidos.

Claro, podemos fazer mais do que ver a nuvem com esta técnica. Podemos aplicá-lo a qualquer tipo de imagem. Os resultados variam um pouco com o tipo de imagem, porque os recursos que são inseridos impedem a rede de determinadas interpretações. Por exemplo, as linhas do horizonte tendem a ser preenchidas com torres e pagodas. As rochas e árvores transformam-se em edifícios. Os pássaros e insetos aparecem em imagens de folhas.

Esta técnica nos dá uma sensação qualitativa do nível de abstração que uma camada particular alcançou na compreensão das imagens. Chamamos essa técnica de “Inceptionism” em referência à arquitetura da rede neural utilizada. Veja a nossa galeria de Inceptionism para mais pares de imagens e os seus resultados processados, além de algumas animações de vídeo.

Devemos aprofundar: Iterações
Se aplicarmos o algoritmo iterativamente nas suas próprias saídas e aplicamos algum zoom em cada iteração, obtemos um fluxo infinito de novas impressões, explorando o conjunto de coisas da rede. Podemos mesmo iniciar esse processo a partir de uma imagem de ruído aleatório, de modo que o resultado se torne puramente o resultado da rede neural, como se vê nas seguintes imagens:

Rede neural “sonhos” – gerada puramente por barulho aleatório, usando uma rede treinada em locais pela MIT Computer Science e AI Laboratory. Veja a nossa galeria de Inceptionism para versões de alta resolução das imagens acima e mais (Imagens marcadas como “Places205-GoogLeNet” foram feitas usando esta rede).

As técnicas apresentadas aqui nos ajudam a entender e visualizar como as redes neurais podem realizar tarefas de classificação difíceis, melhorar a arquitetura da rede e verificar o que a rede aprendeu durante o treinamento. Isso também nos faz saber se as redes neurais podem tornar-se uma ferramenta para os artistas – uma nova maneira de remixar conceitos visuais – ou talvez até lançar um pouco de luz sobre as raízes do processo criativo em geral.

Sobre o autor

Sara Filipa

Comentar

Posts recentes

Comentários

Arquivos

Categorias

Meta