Como os filtros e os mapas de ativação estão conectados nas Redes Neurais Convolucionais?

11

Como os mapas de ativação em uma determinada camada são conectados aos filtros dessa camada? Não estou perguntando sobre como fazer uma operação convolucional entre o filtro e o mapa de ativação, estou perguntando sobre o tipo de conectividade que esses dois possuem.

Por exemplo, digamos que você queira fazer conectividade completa. Você tem um número f de filtros e um número n de mapas de ativação em uma determinada camada. Você obterá um número f * n de mapas de ativação na próxima camada, e o número de mapas de ativação aumentará a cada nova camada. É assim que presumo que seja feito.

Ou você pode dizer que cada filtro está conectado a apenas um mapa de ativação. Nesse caso, o número de filtros seria igual ao número de mapas de ativação, e cada camada teria o mesmo número de filtros e mapas de ativação. Essa é a arquitetura atual da minha rede e parece aprender bem.

A principal fonte da minha confusão é olhar para diagramas de convnets que vejo online. Alguns deles têm a "conexão completa" entre filtros e mapas de ativação, como este - insira a descrição da imagem aqui na primeira camada, você tem 4 mapas de ativação e presumivelmente 2 filtros. Cada mapa é convolvido com cada filtro, resultando em 8 mapas na próxima camada. Parece ótimo.

Mas aqui temos uma arquitetura que não faz sentido para mim - insira a descrição da imagem aqui Como você passa de 6 mapas na primeira camada para 16 na 2ª? Posso pensar em maneiras de obter 16 mapas de 6, mas eles não faziam sentido.

Frobot
fonte

Respostas:

10

A segunda arquitetura de rede neural convolucional (CNN) que você postou vem deste artigo . No artigo, os autores descrevem o que acontece entre as camadas S2 e C3. A explicação deles não é muito clara. Eu diria que essa arquitetura da CNN não é 'padrão' e pode ser bastante confusa como primeiro exemplo para as CNNs.

Arquitetura CNN

28×285×5M×MN×NMN(MN+1)×(MN+1)

O que acontece entre a camada S2 e a camada C3 é o seguinte. Existem 16 mapas de recursos na camada C3 produzidos a partir de 6 mapas de recursos na camada S2. O número de filtros na camada C3 não é de fato óbvio. De fato, apenas do diagrama da arquitetura, não se pode julgar qual é o número exato de filtros que produzem esses 16 mapas de recursos. Os autores do artigo fornecem a seguinte tabela (página 8):

conexões entre as camadas S2 e C3

Com a tabela, eles fornecem a seguinte explicação (parte inferior da página 7):

5×5

Na tabela, os autores mostram que todos os mapas de recursos na camada C3 são produzidos combinando 3 ou mais mapas de recursos (página 8):

Os seis primeiros mapas de recursos C3 recebem entradas de todos os subconjuntos contíguos de três mapas de recursos no S2. Os próximos seis recebem informações de cada subconjunto contíguo de quatro. Os próximos três recebem informações de alguns subconjuntos descontínuos de quatro. Finalmente, o último recebe informações de todos os mapas de recursos do S2.

Agora, quantos filtros existem na camada C3? Infelizmente, eles não explicam isso. As duas possibilidades mais simples seriam:

  1. Há um filtro por mapa de recursos S2 por mapa de recursos C3, ou seja, não há compartilhamento de filtro entre os mapas de recursos S2 associados ao mesmo mapa de recursos C3.
  2. Há um filtro por mapa de recursos C3, que é compartilhado entre os (3 ou mais) mapas de recursos da camada S2 combinados.

Em ambos os casos, 'combinar' significaria que os resultados da convolução por grupo de mapas de recursos S2 precisariam ser combinados para produzir mapas de recursos C3. Os autores não especificam como isso é feito, mas a adição é uma escolha comum (veja, por exemplo, o gif animado próximo ao meio desta página .

Os autores fornecem algumas informações adicionais, que podem nos ajudar a decifrar a arquitetura. Eles dizem que 'a camada C3 tem 1.516 parâmetros treináveis' (página 8). Podemos usar essas informações para decidir entre os casos (1) e (2) acima.

(6×3)+(9×4)+(1×6)=60(1410+1)×(1410+1)=5×55×5×60=1,5001,500+16=1,516(5×5×16)+16=416

Portanto, se olharmos novamente para a Tabela I acima, existem 10 filtros C3 distintos associados a cada mapa de recursos S2 (portanto, 60 filtros distintos no total).

Os autores explicam esse tipo de escolha:

Mapas de recursos diferentes [na camada C3] são forçados a extrair recursos diferentes (que se espera que sejam complementares) porque eles obtêm diferentes conjuntos de entradas.

Espero que isso esclareça a situação.

Orestis Tsinalis
fonte
3

Você está realmente certo de que o valor antes de @ indica a quantidade de filtros, e não a quantidade de mapas de recursos (embora, para as primeiras camadas convolucionais, esses valores coincidam).

Em relação à sua última pergunta: sim, faz sentido ter todos os mapas de recursos na camada l conectados a todos os filtros na camada l + 1. A única razão para isso é que isso aumenta muito o poder de expressão da rede, pois possui mais maneiras (caminhos) de combinar os mapas de recursos, o que permite distinguir melhor o que estiver na imagem de entrada.

Por fim, não sei se você está praticando suas habilidades de rede neural implementando-as, mas se você deseja aplicar redes convolucionais a uma tarefa específica, já existem várias excelentes bibliotecas de redes neurais, como Theano, Brainstorm, Caffe

Sjoerd
fonte
Acho que o que vou fazer é comparar as duas maneiras de compará-las. Com a versão não totalmente conectada, ele treina e calcula sua classificação mais rapidamente. Mas a precisão é mais importante. Na versão não totalmente conectada, cada filtro é localizado em uma tarefa muito mais específica, em vez de em uma tarefa mais geral. Na versão totalmente conectada, um filtro é atualizado com base no que é melhor para todos os filtros anteriores, em vez de apenas um único tipo de recurso. Eu tenho feito minha rede a partir do zero 100% usando c #. certamente não a maneira mais fácil de fazer as coisas ... mas ensinou-me nas coisas de profundidade
Frobot
Isso soa como um plano de som. Boa sorte!
Sjoerd