Conv Nets: Uma Perspectiva Modular

– http://colah.github.io/posts/2014-07-Conv-Nets-Modular/
Postado em 8 de julho de 2014
redes neurais, aprendizagem profunda, redes neurais convolutivas, redes neurais modulares

Introdução
Nos últimos anos, as redes neurais profundas levaram a resultados inovadores em diversos problemas de reconhecimento de padrões, como a visão por computador e o reconhecimento de voz. Um dos componentes essenciais que levaram a esses resultados foi um tipo especial de rede neural chamada rede neural convolutiva.
Nas redes neurais mais básicas, convolutivas, pode ser pensado como uma espécie de rede neural que usa muitas cópias idênticas do mesmo neurônio.1 Isso permite que a rede tenha muitos neurônios e expresse modelos computacionalmente grandes, mantendo o número de parâmetros reais – os valores que descrevem como se comportam os neurônios – isso precisa ser aprendidos bastante poucos.

Uma rede de neurônios convolucionais 2D
Esse truque de ter múltiplas cópias do mesmo neurônio é aproximadamente análogo à abstração de funções em matemática e ciência da computação. Ao programar, nós escrevemos uma função uma vez e usamos em muitos lugares – não gravar o mesmo código cem vezes em diferentes lugares torna mais rápido o programa e resulta em menos erros. Da mesma forma, uma rede neural convolutiva pode aprender um neurônio uma vez e usá-lo em muitos lugares, fazendo mais fácil aprender o modelo e reduzir o erro.

Estrutura das redes neurais de convolução
Suponha que você deseja que uma rede neural analise as amostras de áudio e preveja se um ser humano está a falar ou não. Talvez você queira fazer mais análises se alguém estiver a falar.
Você recebe amostras de áudio em diferentes momentos. As amostras estão uniformemente espaçadas.

A maneira mais simples de tentar classificá-los com uma rede neural é apenas conectá-los a uma camada totalmente conectada. Há muitos de neurônios diferentes, e cada entrada se conecta a cada neurônio.

Uma abordagem mais sofisticada percebe um tipo de simetria nas propriedades que é útil procurar nos dados. Nós nos preocupamos muito com as propriedades locais dos dados: qual é a frequência dos sons que há em torno de um determinado momento? Eles estão a aumentar ou a diminuir? E assim por diante.
Nós nos preocupamos com as mesmas propriedades em todos os momentos. É útil conhecer as frequências no início, é útil conhecer as frequências no meio e também é útil conhecer as frequências no final. Mais uma vez, note que estas são propriedades locais, na medida em que só precisamos olhar para uma pequena janela da amostra de áudio, a fim de determiná-las.
Então, podemos criar um grupo de neurônios, A, que parecem pequenos segmentos dos nossos dados.2 Um olhar para todos esses segmentos, computando certos recursos. Então, a saída desta camada convolucional é alimentada em uma camada totalmente conectada, F.

No exemplo acima, A apenas analisou segmentos constituído por dois pontos. Isso não é realista. Geralmente, a janela de uma camada de convolução seria muito maior.
No exemplo a seguir, A olha para 3 pontos. Isso também não é realista – infelizmente, é complicado visualizar uma conexão com muitos pontos.

Uma propriedade muito agradável de camadas convolutivas é que elas são composáveis. Você pode alimentar a saída de uma camada convolucional para outra. Com cada camada, a rede pode detectar recursos de nível superior e mais abstratos.
No exemplo a seguir, temos um novo grupo de neurônios, B. B usa-se para criar outra camada convolucional empilhada em cima da anterior.

As camadas convolucionais estão muitas vezes entrelaçadas com camadas de pool. Em particular, existe um tipo de camada chamada camada de pool máximo que é extremamente popular.
Muitas vezes, a partir de uma perspectiva de alto nível, não nos importa o ponto preciso no tempo, uma característica está presente. Se ocorre uma mudança de freqüência um pouco mais cedo ou mais tarde, isso importa?
Uma camada de pool máximo possui o máximo de recursos em pequenos blocos de uma camada anterior. A saída nos diz se um recurso estava presente numa região da camada anterior, mas não exatamente onde.
Max-pooling camadas tipo “zoom out”. Eles permitem que as camadas convolutivas posteriores funcionem em seções maiores dos dados, porque um pequeno patch após a camada de pool corresponde a um remendo muito maior antes disso. Eles também nos tornam invariantes para algumas transformações muito pequenas dos dados.

Nos nossos exemplos anteriores, usamos camadas convolucionais de 1 dimensão. No entanto, as camadas convolucionais também podem funcionar em dados de dimensões superiores. De fato, os sucessos mais famosos das redes neurais convolutivas estão cuando aplicamos redes neuronais convolutivas 2D ao reconhecimento de imagens.

Em uma camada convolucional bidimensional, em vez de olhar para os segmentos, A agora olhará para os patches.
Para cada patch, A irá calcular os recursos. Por exemplo, pode aprender a detectar a presença de um precepicio. Ou pode aprender a detectar uma textura. Ou talvez um contraste entre duas cores.

No exemplo anterior, alimentamos a saída de nossa camada convolucional em uma camada totalmente conectada. Mas também podemos compor duas camadas convolucionais, como fizemos no caso unidimensional.

Também podemos fazer o pool máximo em duas dimensões. Aqui, nós tomamos o máximo de recursos em um pequeno patch.
O que isso realmente se resume é que, ao considerar uma imagem inteira, não nos importamos com a posição exata de uma borda, até um pixel. É suficiente saber onde está dentro de alguns pixels.

As redes convolutivas tridimensionais também são usadas às vezes, para dados como vídeos ou dados volumétricos (por exemplo, varreduras médicas em 3D). No entanto, eles não são amplamente utilizados e muito mais difíceis de visualizar.
Agora, dissemos anteriormente que A era um grupo de neurônios. Devemos ser um pouco mais precisos sobre isso: o que é A exatamente?
Em camadas convencionais tradicionais, A é um monte de neurônios em paralelo, que todos obtêm as mesmas entradas e calculam diferentes recursos.
Por exemplo, em uma camada convolucional bidimensional, um neurônio pode detectar bordas horizontais, outro pode detectar bordas verticais, e outro pode detectar contrastes de cores verde-vermelho.

Dito isto, no recente artigo ‘Network in Network’ (Lin et al. (2013)), uma nova camada “Mlpconv” é proposta. Neste modelo, A teria várias camadas de neurônios, com a camada final apresentando recursos de nível superior para a região. No documento, o modelo atinge alguns resultados muito impressionantes, estabelecendo um novo estado da arte em vários conjuntos de dados de referência.

Dito isto, para os propósitos desta publicação, nos focaremos em camadas convencionais tradicionais. Já é suficiente para nós considerar lá!

Resultados das redes neurais de convolução
Anteriormente, aludimos as descobertas recentes na visão computacional usando redes neurais convolutivas. Antes de prosseguir, gostaria de discutir brevemente alguns desses resultados como motivação.
Em 2012, Alex Krizhevsky, Ilya Sutskever e Geoff Hinton exibiram resultados de classificação de imagem existentes fora da água (Krizehvsky et al. (2012)).
O seu progresso foi o resultado de combinar muitas peças diferentes. Eles usaram GPUs para treinar uma rede neural muito grande e profunda. Eles usaram um novo tipo de neurônio (ReLUs) e uma nova técnica para reduzir um problema chamado ‘overfitting’ (DropOut). Eles usaram um conjunto de dados muito grande com muitas categorias de imagens (ImageNet). E, é claro, era uma rede neural convolutiva.
A sua arquitetura, ilustrada abaixo, era muito profunda. Possui 5 camadas convolucionais, 3 com agrupamento intercalado e três camadas totalmente conectadas. As camadas iniciais estão divididas em duas GPUs.

De Krizehvsky et al. (2012)
Eles treinaram a sua rede para classificar imagens em mil categorias diferentes.
Adivinhar aleatoriamente, alguém adivinharia a resposta correta 0,1% do tempo. O modelo de Krizhevsky, et al., é capaz de dar a resposta certa o 63% das vezes. Além disso, uma das 5 principais respostas que dá é exatamente o 85% do tempo!

Topo: 4 exemplos corretamente classificados. Parte inferior: 4 exemplos incorretamente classificados. Cada exemplo tem uma imagem, seguida pelo seu rótulo, seguido pelo top 5 de probabilidade de adivinhações. De Krizehvsky et al. (2012).
Mesmo alguns dos seus erros parecem bastante razoáveis para mim!
Também podemos examinar o que a primeira camada da rede aprende a fazer.
Lembre-se de que as camadas convolucionais foram divididas entre as duas GPUs. A informação não vai para a frente e para trás cada camada, então os lados divididos estão desconectados de forma real. Acontece que, sempre que o modelo é executado, os dois lados se especializam.

Filtros aprendidos pela primeira camada convolucional. A metade superior corresponde à camada em uma GPU, a parte inferior na outra. De Krizehvsky et al. (2012)
Os neurônios em um lado concentram-se em preto e branco, aprendendo a detectar bordas de diferentes orientações e tamanhos. Os neurônios do outro lado especializam-se em cores e textura, detectando contrastes e padrões de cores.4 Lembre-se de que os neurônios são inicializados aleatoriamente. Nenhum humano foi e os configurou para serem detectores de borda, ou dividir dessa maneira. Ele surgiu simplesmente de treinar a rede para classificar as imagens.
Esses resultados notáveis (e outros resultados emocionantes em torno desse tempo) foram apenas o começo. Eles foram rapidamente seguidos por muitos outros trabalhos testando abordagens modificadas e melhorando gradualmente os resultados ou aplicando-os a outras áreas. E, além da comunidade de redes neurais, muitos na comunidade de visão computacional adotaram redes neurais convolutivas profundas.
As redes neurais convolutivas são uma ferramenta essencial na visão por computador e no reconhecimento moderno de padrões.

Formalização de Redes Neurais Convolucionais
Considere uma camada convolucional 1-dimensional com entradas {xn} e saídas {yn}

É relativamente fácil descrever as saídas em termos de entradas:
yn = A (xn, xn + 1, …)

Por exemplo, no acima:
y0 = A (x0, x1)
y1 = A (x1, x2)

Da mesma forma, se considerarmos uma camada convolucional bidimensional, com entradas {xn, m} e saídas {yn, m}:

Podemos, novamente, anotar as saídas em termos das entradas:

Por exemplo:

Se alguém combina isso com a equação para A (x),
A (x) = σ (Wx + b)
um tem tudo o que eles precisam para implementar uma rede neural convolutiva, pelo menos em teoria.
Na prática, esta não é, muitas vezes, a melhor forma de pensar em redes neurais convolutivas. Existe uma formulação alternativa, em termos de uma operação matemática chamada convolução, que muitas vezes é mais útil.
A operação de convolução é uma ferramenta poderosa. Em matemática, surge em diversos contextos, desde o estudo de equações diferenciais parciais até a teoria da probabilidade. Em parte devido ao seu papel nas PDEs, a convolução é muito importante nas ciências físicas. Também tem um papel importante em muitas áreas aplicadas, como computação gráfica e processamento de sinal.
Para nós, a convolução proporcionará uma série de benefícios. Em primeiro lugar, isso nos permitirá criar implementações muito mais eficientes de camadas convolutivas do que a perspectiva ingênua pode sugerir. Em segundo lugar, removerá muita desordem da nossa formulação, lidar com toda a contabilidade que está a aparecer na indexação de xs – a formulação atual pode não parecer desordenada ainda, mas é só porque ainda não entramos nos casos difíceis. Finalmente, a convolução nos dará uma perspectiva significativamente diferente para o raciocínio sobre camadas convolutivas.
“Eu admiro a elegância de seu método de computação, deve ser bom andar através desses campos sobre o cavalo da verdadeira matemática, enquanto o nosso tipo de gente tem que fazer o nosso caminho laboriosamente a pé”. – Albert Einstein

Próximas postagens nesta série
Leia a próxima postagem!
Esta publicação faz parte de uma série de redes neurais convolutivas e as suas generalizações. As duas primeiras postagens serão revisadas para aqueles que estão familiarizados com a aprendizagem profunda, e os mais recentes devem ser de interesse para todos. Para obter atualizações, inscreva-se no meu feed RSS!
Por favor, comente abaixo ou ao lado. Os pedidos de envio podem ser feitos no github.
Reconhecimentos
Agradeço a Eliana Lorch, Aaron Courville e Sebastian Zany por seus comentários e apoio.
1. Deve-se notar que nem todas as redes neurais que usam múltiplas cópias do mesmo neurônio são redes neurais convolutivas. As redes neurais convolutivas são apenas um tipo de rede neural que usa o truque mais geral, com peso. Outros tipos de rede neural que fazem isso são as redes neurais recorrentes e redes neurais recursivas.
2. Os grupos de neurônios, como A, que aparecem em vários lugares são às vezes chamados de módulos, e as redes que os usam são às vezes chamadas de redes neurais modulares.
3. Eles também testam usando 7 no papel.
4. Isto parece ter analogias interessantes com varas e cones na retina.↩

Sobre o autor

Sara Filipa







por: Sara Filipa

Posts recentes

Comentários

Arquivos

Categorias

Meta