Pesquisa de site

Redes de cápsulas: uma introdução rápida


Introdução

Quer você seja novo no aprendizado profundo ou um pesquisador sério, certamente já encontrou o termo redes neurais convolucionais (CNNs). Eles são uma das arquiteturas mais pesquisadas e de melhor desempenho na área. Dito isto, as CNNs têm algumas desvantagens no reconhecimento de características dos dados de entrada quando estão em orientações diferentes. Para resolver este problema, Geoffrey E. Hinton, juntamente com a sua equipa Sara Sabour e Nicholas Frosst, criaram um novo tipo de rede neural. Eles as chamavam de redes cápsulas.

Pré-requisitos

A familiaridade com o seguinte será útil para a compreensão desta postagem:

Redes Neurais

Em alto nível, as redes neurais são compostas por nós interconectados (“neurônios”) organizados em camadas. Eles aprendem e fazem previsões por meio de um processo chamado “treinamento”, que ajusta os pesos e as tendências das conexões entre os neurônios. A compreensão das redes neurais inclui o conhecimento de suas diferentes camadas (camada de entrada, camadas ocultas, camada de saída), funções de ativação, algoritmos de otimização (variantes de descida de gradiente), funções de perda, etc.

CNN

As redes cápsula são uma extensão das CNNs. O conhecimento do papel das camadas de convolução e das camadas de pooling na extração de recursos ajudará a compreender a motivação por trás das redes de cápsulas.

Álgebra Linear

A álgebra linear envolve a análise do comportamento de vetores, matrizes e suas interações. Uma compreensão da álgebra linear ajudará na compreensão da matemática apresentada neste artigo.

Redes Neurais Convolucionais e o Problema de Orientação

As redes neurais convolucionais são uma das arquiteturas de aprendizado profundo mais populares e amplamente utilizadas para aplicações de visão computacional. Da classificação de imagens à detecção e segmentação de objetos, as CNNs definiram resultados de última geração. Dito isto, estas redes têm limitações. Vamos começar com suas origens e depois ver como está seu desempenho atualmente.

Yann LeCun propôs pela primeira vez a CNN no ano de 1989. Ele foi então capaz de detectar dígitos manuscritos com uma rede neural convolucional simples de cinco camadas que foi treinada no conjunto de dados MNIST, contendo mais de 60.000 exemplos. A ideia é simples: treinar a rede, identificar as características das imagens e classificá-las. Então, em 2019, o EfficientNet-B7 alcançou o desempenho de última geração na classificação de imagens no conjunto de dados ImageNet. A rede pode identificar o rótulo de uma imagem específica em mais de 1,2 milhão de imagens com 84,4% de precisão.

Olhando para esses resultados e progresso, podemos inferir que as abordagens convolucionais tornam possível aprender muitos recursos sofisticados com cálculos simples. Ao realizar muitas multiplicações e somatórios de matrizes com base na nossa entrada, podemos chegar a uma resposta confiável à nossa pergunta. Mas as CNNs não são perfeitas. Se as CNNs forem alimentadas com imagens de diferentes tamanhos e orientações, elas falharão. Vejamos um exemplo. Digamos que você gire um rosto de cabeça para baixo e depois o envie para uma CNN; não seria capaz de identificar características como olhos, nariz ou boca. Da mesma forma, se você reconstruir regiões específicas do rosto (ou seja, mudar as posições do nariz e dos olhos), a rede ainda será capaz de reconhecer o rosto – mesmo que não seja mais exatamente um rosto. Resumindo, as CNNs podem aprender estatisticamente os padrões das imagens, mas não a aparência da imagem real em diferentes orientações.

Imagem à esquerda: Pug: 0,8. Imagem à direita: Pug: 0,2

O problema do pooling em CNNs

Para entender o pooling, é preciso saber como funciona uma CNN. O alicerce das CNNs é a camada convolucional. Essas camadas são responsáveis por identificar as características de uma determinada imagem, como curvas, bordas, nitidez e cor. No final, as camadas totalmente conectadas da rede combinarão recursos de alto nível e produzirão previsões de classificação. Você pode ver abaixo a aparência de uma rede convolucional básica.

Os autores usam a operação de pooling máximo/médio ou têm camadas convolucionais sucessivas em toda a rede. A operação de pooling reduz informações desnecessárias. Usando esse design, podemos reduzir o tamanho espacial dos dados que fluem pela rede e, assim, aumentar o “campo de visão” dos neurônios nas camadas superiores, permitindo-lhes detectar características de ordem superior em uma região mais ampla da imagem de entrada. . É assim que as operações de max pooling em CNNs ajudam a alcançar um desempenho de última geração. Dito isto, não devemos nos deixar enganar pelo seu desempenho; As CNNs funcionam melhor do que qualquer modelo anterior, mas o pooling máximo envolve uma perda de informações valiosas.

Operação de pooling máximo extraindo recursos de nível superior

Geoffrey Hinton afirmou em uma de suas palestras:

“A operação de pooling usada em redes neurais convolucionais é um grande erro, e o fato de funcionar tão bem é um desastre! ”

Agora vamos ver como as redes cápsula superam esse problema.

Como funcionam as redes cápsula

Para superar esse problema que envolve as relações rotacionais nas imagens, Hinton e Sabour inspiraram-se na neurociência. Eles explicam que o cérebro está organizado em módulos, que podem ser considerados cápsulas. Com isso em mente, eles propuseram redes cápsula que incorporam algoritmos de roteamento dinâmico para estimar características de objetos como pose (posição, tamanho, orientação, deformação, velocidade, albedo, matiz, textura e assim por diante). Esta pesquisa foi publicada em 2017, no artigo intitulado Dynamic Routing Between Capsules.

Então, o que são “cápsulas”? E como funciona o roteamento dinâmico?

O que são cápsulas em uma rede de cápsulas?

Ao contrário dos neurônios normais, as cápsulas realizam seus cálculos em suas entradas e depois “encapsulam” os resultados em um pequeno vetor de saídas altamente informativas. Uma cápsula pode ser considerada um substituto para o neurônio artificial médio; enquanto um neurônio artificial lida com escalares, uma cápsula lida com vetores. Por exemplo, poderíamos resumir as etapas executadas por um neurônio artificial da seguinte forma:

1. Multiply the input scalars with the weighted connections between the neurons.
2. Compute the weighted sum of the input scalars.
3. Apply an activation function (scalar nonlinearity) to get the output.

Uma cápsula, por outro lado, passa por diversas etapas além das listadas acima, para conseguir a transformação afim (preservando a colinearidade e a proporção de distâncias) da entrada. Aqui, o processo é o seguinte:

1. Multiply the input vectors by the weight matrices (which encode spatial relationships between low-level features and high-level features) (matrix multiplication).
2. Multiply the result by the weights.
3. Compute the weighted sum of the input vectors.
4. Apply an activation function (vector non-linearity) to get the output.

Imagem: Cápsula vs Neurônio Artificial (fonte)

Vamos dar uma olhada mais detalhada em cada etapa para entender melhor como funciona uma cápsula.

1. Multiplique os vetores de entrada pelas matrizes de pesos (transformação afim)

Os vetores de entrada representam a entrada inicial ou uma entrada fornecida por uma camada anterior da rede. Esses vetores são primeiro multiplicados pelas matrizes de pesos. A matriz de pesos, conforme descrito anteriormente, captura as relações espaciais. Digamos que um objeto esteja centrado em torno de outro e que eles tenham tamanhos iguais. O produto do vetor de entrada e da matriz de pesos significará o recurso de alto nível. Por exemplo, se as características de baixo nível forem nariz, boca, olho esquerdo e olho direito, então se as previsões das quatro características de baixo nível apontarem para a mesma orientação e estado de um rosto, um rosto será o que foi previsto ( conforme mostrado abaixo). Isso é o que é o recurso de “alto nível”.

_Predição de um rosto (fonte)

2. Multiplique o resultado pelos pesos

Nesta etapa, as saídas obtidas na etapa anterior são multiplicadas pelos pesos da rede. Quais podem ser os pesos? Em uma rede neural artificial (RNA) usual, os pesos são ajustados com base na taxa de erro, seguido de retropropagação. No entanto, este mecanismo não é aplicado em uma Rede Cápsula. Roteamento dinâmico é o que determina a modificação dos pesos em uma rede. Isso define a estratégia para atribuir pesos às conexões dos neurônios.

Uma rede de cápsulas ajusta os pesos de modo que uma cápsula de baixo nível esteja fortemente associada a cápsulas de alto nível que estão próximas dela. A medida de proximidade é determinada pela etapa de transformação afim que discutimos anteriormente (Etapa 1). A distância entre as saídas obtidas da etapa de transformação afim e os aglomerados densos das previsões das cápsulas de baixo nível é calculada (os aglomerados densos poderiam ser formados se as previsões feitas pelas cápsulas de baixo nível fossem semelhantes, ficando assim próximas umas das outras). outro). A cápsula de alto nível que possui a distância mínima entre o cluster de previsões já feitas e o recém-previsto terá um peso maior, e as demais cápsulas receberão pesos menores, com base na métrica de distância.

Roteamento dinâmico em uma rede cápsula

Na imagem acima, os pesos seriam atribuídos na seguinte ordem: meio > esquerda > direita. Em poucas palavras, a essência do algoritmo de roteamento dinâmico poderia ser vista assim: a cápsula de nível inferior enviará sua entrada para a cápsula de nível superior que “concorda” com sua entrada.

3. Calcule a soma ponderada dos vetores de entrada

Isso resume todos os resultados obtidos na etapa anterior.

4. Aplique uma função de ativação (não linearidade vetorial) para obter a saída

Em uma rede cápsula, a não linearidade do vetor é obtida “comprimindo” (ou seja, por meio de uma função de ativação) o vetor de saída, para que ele tenha comprimento 1 e direção constante. A função de não linearidade é dada por:

Onde sj é a saída obtida na etapa anterior e vj é a saída obtida após a aplicação da não linearidade. O lado esquerdo da equação realiza compressão adicional, enquanto o lado direito da equação realiza o escalonamento unitário do vetor de saída.

No geral, o algoritmo de roteamento dinâmico é assim resumido:

Linha 1: Esta linha define o procedimento de ROUTING, que recebe a entrada transformada afim (u), o número de iterações de roteamento ® e o número da camada (l) como entradas.

Linha 2: bij é um valor temporário usado para inicializar ci no final.

Linha 3: O loop for itera ‘r’ vezes.

Linha 4: A função softmax aplicada a bi garante a saída de um ci não negativo, onde todas as saídas somam 1.

Linha 5: Para cada cápsula na camada seguinte, a soma ponderada é calculada.

Linha 6: Para cada cápsula na camada seguinte, a soma ponderada é compactada.

Linha 7: Os pesos bij são atualizados aqui. uji denota a entrada para a cápsula da cápsula de baixo nível i, e vj denota a saída da cápsula de alto nível j.

Arquitetura CapsNet

A arquitetura CapsNet consiste em um codificador e um decodificador, onde cada um possui um conjunto de três camadas. Um codificador possui uma camada convolucional, uma camada PrimaryCaps e uma camada DigitCaps; o decodificador possui 3 camadas totalmente conectadas.

Vamos agora examinar cada uma dessas redes. Consideraremos isso no contexto do conjunto de dados MNIST, por exemplo.

Rede de codificadores

Arquitetura do codificador CapsNet (fonte)

Um codificador possui duas camadas convolucionais e uma camada totalmente conectada. A primeira camada convolucional, Conv1, possui 256 kernels convolucionais 9×9 com avanço de 1 e uma função de ativação ReLU. Esta camada é responsável por converter as intensidades dos pixels nas atividades dos detectores de recursos locais, que são então alimentados na camada PrimaryCaps. A camada PrimaryCaps é uma camada convolucional que possui 32 canais de cápsulas convolucionais 8-D (cada cápsula possui 8 unidades convolucionais com um núcleo 9×9 e um passo de 2). As cápsulas primárias executam gráficos inversos, o que significa que fazem engenharia reversa do processo de geração real da imagem. A cápsula aplica oito kernels 9×9×256 no volume de entrada 20×20×256, o que fornece um tensor de saída 6×6×8. Como existem 32 cápsulas 8-D, a saída seria do tamanho 6×6×8×32. A camada DigitCaps possui cápsulas 16-D por classe, onde cada cápsula recebe informações da cápsula de baixo nível.

O 8×16 Wij é a matriz de peso usada para transformação afim contra cada cápsula 8-D. O mecanismo de roteamento discutido anteriormente sempre existe entre duas camadas de cápsula (digamos, entre PrimaryCaps e DigitCaps).

No final, uma perda de reconstrução é usada para codificar os parâmetros de instanciação. A perda é calculada para cada exemplo de treinamento em relação a todas as classes de saída. A perda total é a soma das perdas de todas as cápsulas dos dígitos. A equação de perda é dada por:

Onde :

Tk=1 se um dígito da classe k estiver presente

m+=0,9

m-=0,1

vk=vetor obtido da camada DigitCaps

O primeiro termo da equação representa a perda para DigitCaps corretos e o segundo termo representa a perda para DigitCaps incorretos.

Rede de decodificadores

Arquitetura do decodificador CapsNet (fonte)

Um decodificador pega a cápsula correta de 16 dígitos e a decodifica em uma imagem. Nenhuma das cápsulas de dígitos incorretas é levada em consideração. A perda é calculada encontrando a distância euclidiana entre a imagem de entrada e a imagem reconstruída.

Um decodificador possui três camadas totalmente conectadas. A primeira camada possui 512 neurônios; o segundo possui 1.024 neurônios; e o terceiro tem 784 neurônios (fornecendo imagens reconstruídas 28×28 para MNIST).

Notas Finais

As redes de cápsulas tentam modelar o cérebro humano. Ao contrário das redes neurais convolucionais, que não avaliam as relações espaciais nos dados fornecidos, as redes cápsula consideram a orientação das partes de uma imagem como uma parte fundamental da análise de dados. Eles examinam essas relações hierárquicas para melhor identificar as imagens. O mecanismo gráfico inverso que nossos cérebros utilizam é imitado aqui para construir uma representação hierárquica de uma imagem e combiná-la com o que a rede aprendeu. Embora ainda não seja computacionalmente eficiente, parece haver um aumento de precisão benéfico no enfrentamento de cenários do mundo real. O mecanismo de roteamento dinâmico é o que torna tudo isso possível. Emprega uma estratégia incomum de atualização dos pesos em uma rede, evitando assim a operação de pooling. Com o passar do tempo, as redes de cápsulas certamente penetrarão em vários outros campos, tornando as máquinas ainda mais parecidas com os humanos.

Artigos relacionados: