Esta questão se resume a "como as camadas de convolução funcionam exatamente .
Suponha que eu tenha uma imagem escala de cinza. Então a imagem tem um canal. Na primeira camada, aplico uma convolução com filtros e preenchimento . Então eu tenho outra camada de convolução com convolutions e filtros . Quantos mapas de recursos eu tenho?3 × 3 k 1 5 × 5 k 2
Convolução tipo 1
A primeira camada é executada. Depois disso, tenho mapas de recursos (um para cada filtro). Cada um deles tem o tamanho . Cada pixel foi criado retirando pixels da imagem de entrada preenchida.
Em seguida, a segunda camada é aplicada. Cada filtro é aplicado separadamente a cada um dos mapas de recursos . Isso resulta em mapas de recursos para cada um dos mapas de recursos . Portanto, existem mapas de recursos após a segunda camada. Cada pixel único de cada um dos novos mapas de recursos foi criado usando "pixels" do mapa de recursos preenchido de antes.
O sistema precisa aprender os parâmetros .
Convolução do tipo 2.1
Como antes: a primeira camada é executada. Depois disso, tenho os mapas de recursos (um para cada filtro). Cada um deles tem o tamanho n \ vezes m . Cada pixel foi criado retirando 3 \ cdot 3 = 9 pixels da imagem de entrada preenchida. n × m 3 ⋅ 3 = 9
Diferente de antes: a segunda camada é aplicada. Cada filtro é aplicado à mesma região, mas todos apresentam mapas de antes. Isso resulta em mapas de recursos no total após a execução da segunda camada. Cada pixel único de cada um dos novos mapas de recursos foi criado usando "pixels" dos mapas de recursos preenchidos anteriormente.
O sistema precisa aprender os parâmetros .
Convolução do tipo 2.2
Como acima, mas em vez de ter parâmetros por filtro que precisam ser aprendidos e simplesmente copiados para os outros mapas de recursos de entrada, você tem parâmetros que precisam ser aprendidos.
Questão
- O tipo 1 ou tipo 2 é normalmente usado?
- Qual tipo é usado no Alexnet ?
- Que tipo é usado no GoogLeNet ?
- Se você diz o tipo 1: Por que convoluções fazem algum sentido? Eles não apenas multiplicam os dados com uma constante?
- Se você diz o tipo 2: explique o custo quadrático ("Por exemplo, em uma rede de visão profunda, se duas camadas convolucionais estão encadeadas, qualquer aumento uniforme no número de seus filtros resulta em um aumento quadrático da computação")
Para todas as respostas, forneça algumas evidências (documentos, livros didáticos, documentação de estruturas) de que sua resposta está correta.
Pergunta bônus 1
O pool é aplicado sempre apenas por mapa de recursos ou também é feito em vários mapas de recursos?
Pergunta bônus 2
Estou relativamente certo de que o tipo 1 está correto e entendi algo errado com o artigo do GoogLe. Mas há uma convoluções em 3D também. Digamos que você possua 1337 mapas de recursos de tamanho e aplique um filtro . Como você desliza o filtro sobre os mapas de recursos? (Da esquerda para a direita, de cima para baixo, do primeiro mapa ao último mapa?) Isso importa desde que você faça isso de forma consistente?3 × 4 × 5
Minha pesquisa
- Eu li os dois artigos de cima, mas ainda não tenho certeza do que é usado.
- Eu li a documentação da lasanha
- Eu li a documentação do theano
- Eu li as respostas sobre Noções básicas sobre redes neurais convolucionais (sem seguir todos os links)
- Eu li Redes Neurais Convolucionais (LeNet) . Especialmente a figura 1 me deixa relativamente certo de que o Tipo 2.1 é o correto. Isso também se encaixaria no comentário "custo quadrático" no GoogLe Net e em alguma experiência prática que tive com a Caffee.
fonte
Respostas:
Não tenho certeza sobre as alternativas descritas acima, mas a metodologia comumente usada é:
Bônus 1: O pool é feito por mapa de recursos, separadamente.
Bônus 2: A ordem do "deslizamento" não importa. De fato, cada saída é calculada com base na camada anterior, portanto, as respostas do filtro de saída não dependem uma da outra. Eles podem ser calculados em paralelo.
fonte
Eu apenas lutei com essa mesma pergunta por algumas horas. Pensei em compartilhar o interior que me ajudou a entendê-lo.
A resposta é que os filtros para a segunda camada convolucional não têm a mesma dimensionalidade que os filtros para a primeira camada. Em geral, o filtro deve ter o mesmo número de dimensões que suas entradas . Portanto, na primeira camada de conv, a entrada possui 2 dimensões (porque é uma imagem). Assim, os filtros também têm duas dimensões. Se houver 20 filtros na primeira camada de conv, a saída da primeira camada de conv será uma pilha de 20 mapas de recursos 2D. Portanto, a saída da primeira camada de conv é tridimensional, onde o tamanho da terceira dimensão é igual ao número de filtros na primeira camada.
Agora essa pilha 3D forma a entrada para a segunda camada de conv. Como a entrada para a 2ª camada é 3D, os filtros também precisam ser 3D. Torne o tamanho dos filtros da segunda camada na terceira dimensão igual ao número de mapas de recursos que foram as saídas da primeira camada.
Agora você apenas se envolve nas 2 primeiras dimensões; Linhas e colunas. Assim, a convolução de cada filtro da 2ª camada com a pilha de mapas de características (saída da primeira camada) produz um único mapa de características.
O tamanho da terceira dimensão da saída da segunda camada é, portanto, igual ao número de filtros na segunda camada.
fonte
Confira esta palestra e esta visualização
Geralmente é utilizado o tipo 2.1 de convolução. Na entrada, você tem uma imagem NxMx1; depois da primeira convolução, você obtém N_1xM_1xk_1; portanto, sua imagem após a primeira convolução terá k_1 canais. A nova dimensão N_1 e M_1 dependerá do passo S e do preenchimento P: N_1 = (N - 3 + 2P) / S + 1, você calcula M_1 por analogia. Para a primeira camada de conv, você terá pesos 3x3xk_1 + k_1. Foi adicionado k_1 para preconceitos na função não linear.
Na segunda camada, você tem como imagem de entrada o tamanho N_1xM_1xk_1, em que k_1 é o novo número de canais. E após a segunda convolução, você obtém a imagem N_2xM_2xk_2 (matriz). Você possui os parâmetros 5x5xk_2xk_1 + k_2 na segunda camada.
Para convolução 1x1 com filtros k_3 e entrada NxMxC (C é o número de canais de entrada), você obterá uma nova imagem (matriz) NxMxk_3, portanto 1x1 faz sentido. Eles foram introduzidos neste artigo
Bônus 1: o pool é aplicado por mapa de recursos.
Para detalhes, consulte os slides do curso da CNN em Stanford - você tem uma boa visualização de como a convolução é resumida em vários canais de entrada.
fonte
Ou seja, os núcleos em uma camada convolucional abrangem a profundidade da saída da camada anterior.
Especulação:
A questão bônus 2 não é algo que eu conheça, mas acho que o parâmetro de profundidade na convolução se torna uma dimensão extra.
fonte