Redes neurais convolucionais: os neurônios centrais não estão super-representados na saída?

30

[Esta questão também foi colocada no estouro de pilha]

A questão em suma

Estou estudando redes neurais convolucionais e acredito que essas redes não tratam todos os neurônios de entrada (pixel / parâmetro) de maneira equivalente. Imagine que temos uma rede profunda (muitas camadas) que aplica convolução em alguma imagem de entrada. Os neurônios no "meio" da imagem têm muitas vias únicas para muitos neurônios da camada mais profunda, o que significa que uma pequena variação nos neurônios do meio tem um forte efeito sobre a saída. No entanto, os neurônios na borda da imagem têm apenas caminho (ou, dependendo da implementação exata, da ordem de ) caminhos pelos quais suas informações fluem através do gráfico. Parece que estes estão "sub-representados".11

Estou preocupado com isso, pois essa discriminação de neurônios de borda aumenta exponencialmente com a profundidade (número de camadas) da rede. Mesmo a adição de uma camada de pool máximo não interromperá o aumento exponencial, apenas uma conexão completa coloca todos os neurônios em pé de igualdade. Não estou convencido de que meu raciocínio esteja correto, portanto, minhas perguntas são:

  • Estou certo de que esse efeito ocorre em redes convolucionais profundas?
  • Existe alguma teoria sobre isso, alguma vez foi mencionada na literatura?
  • Existem maneiras de superar esse efeito?

Como não tenho certeza se isso fornece informações suficientes, vou elaborar um pouco mais sobre a declaração do problema e por que acredito que isso é uma preocupação.

Explicação mais detalhada

Imagine que temos uma rede neural profunda que captura uma imagem como entrada. Suponha que aplicamos um filtro convolucional de pixels sobre a imagem, onde alteramos a janela de convolução em pixels por vez. Isso significa que todo neurônio na entrada envia sua ativação para neurônios na camada . Cada um desses neurônios pode enviar sua ativação para outros , de modo que nosso neurônio superior esteja representado em neurônios de saída, e assim por diante.64×64416×16=26522652652

No entanto, isso não é verdade para os neurônios nas bordas: eles podem ser representados em apenas um pequeno número de janelas de convolução, fazendo com que eles ativem (da ordem de) apenas neurônio na próxima camada. Usar truques como espelhar ao longo das bordas não ajudará: os neurônios da segunda camada que serão projetados ainda estão nas bordas, o que significa que os neurônios da segunda camada ficarão sub-representados (limitando assim a importância de nossos neurônios de borda também). Como pode ser visto, essa discrepância escala exponencialmente com o número de camadas.1

Eu criei uma imagem para visualizar o problema, que pode ser encontrada aqui (não tenho permissão para incluir imagens no próprio post). Esta rede possui uma janela de convolução de tamanho . Os números próximos aos neurônios indicam o número de caminhos até o neurônio mais profundo. A imagem lembra o Triângulo de Pascal .3

https://www.dropbox.com/s/7rbwv7z14j4h0jr/deep_conv_problem_stackxchange.png?dl=0

Por que isso é um problema?

Esse efeito não parece ser um problema à primeira vista: em princípio, os pesos devem se ajustar automaticamente de forma que a rede faça seu trabalho. Além disso, as bordas de uma imagem não são tão importantes assim no reconhecimento de imagem. Esse efeito pode não ser perceptível nos testes diários de reconhecimento de imagem, mas ainda me preocupa por dois motivos: 1. generalização para outros aplicativos e 2. problemas que surgem no caso de redes muito profundas.

1. Pode haver outras aplicações, como reconhecimento de fala ou som, em que não é verdade que os neurônios mais centrais são os mais importantes. A aplicação da convolução geralmente é feita neste campo, mas não consegui encontrar nenhum documento que mencione o efeito com o qual estou preocupado.

2. Redes muito profundas notarão um efeito exponencialmente ruim da discriminação de neurônios de fronteira, o que significa que os neurônios centrais podem ser super-representados por ordem de magnitude múltipla (imagine que temos camadas, de forma que o exemplo acima daria maneiras os neurônios centrais podem projetar suas informações). À medida que se aumenta o número de camadas, é possível atingir um limite em que os pesos não podem compensar esse efeito de maneira viável.265 101026510

Agora imagine que perturbamos todos os neurônios em uma pequena quantidade. Os neurônios centrais farão com que a saída mude mais fortemente em várias ordens de magnitude, em comparação com os neurônios da borda. Acredito que para aplicações gerais e para redes muito profundas, devem ser encontradas formas de contornar o meu problema?

Koen
fonte
8
Não consigo responder totalmente à sua pergunta, mas encontrei este documento: cs.utoronto.ca/~kriz/conv-cifar10-aug2010.pdf, que trata do seu problema. Eles falam sobre soluções diferentes, 1) preenchendo as bordas das entradas com zeros, 2) adicionando componentes conectados aleatoriamente em todo o mundo, ou 3) fixando e propagando as bordas para que nenhuma informação seja perdida. Recentemente, fiquei curioso sobre o mesmo problema e encontrei sua pergunta. Ainda estou vasculhando os detalhes desse jornal. Espero que ajude.
Nfmcclure
Obrigado, era exatamente isso que eu estava procurando! Impressionante que isso seja perceptível com menos de 2 camadas. Para aqueles TL; DR 'no artigo inteiro: o uso de uma combinação de 1) (preenchimento zero) e 2) (conexões globais aleatórias) foi o melhor remédio.
Koen
Estou curioso, não é suficiente usar um deslocamento não sobreposto? Portanto, no seu exemplo, você tem patches de 64x64 e move sua entrada de 64 pixels todas as vezes enquanto aplica a convolução. (seu 'turno' é meu 'deslocamento'). Qual é, eu acho, exatamente o mesmo que fazer zero padding?
Renthal 19/09/16
11
Desculpe por não responder por um tempo, não estou mais trabalhando no NN. No entanto, acho que poderia responder às perguntas, embora perceba que meu objetivo maior era entender melhor o que está acontecendo (o que ainda não faço). 1) Este efeito parece ocorrer de fato. 2) O artigo acima descreve e 3) também explora maneiras de superá-lo. Para Renthal: Os patches não sobrepostos (escolher deslocamento = tamanho de conv.) Devem superar meu problema, mas as pessoas geralmente encontram patches sobrepostos para funcionar melhor. Para o EngrStudent, desculpe, não estou familiarizado com a reamostragem do Bootstrap.
Koen

Respostas:

4

Representações esparsas são esperadas em modelos hierárquicos. Possivelmente, o que você está descobrindo é um problema intrínseco à estrutura hierárquica dos modelos de aprendizado profundo. Você encontrará alguns artigos científicos sobre "representações esparsas", especialmente em pesquisas sobre memória.

Eu acho que você se beneficiaria da leitura sobre "campos receptores" no córtex visual. Não apenas existem células ON e OFF no cérebro dos mamíferos, mas também células RF que disparam tanto durante ON quanto OFF. Talvez o problema da borda / escarsidade possa ser contornado com a atualização do modelo para refletir a neurociência atual na visão, especialmente em modelos animais.

noumenal
fonte
3

Você está certo de que isso é um problema se a convolução operar apenas nos pixels da imagem, mas o problema desaparecerá se você zerar as imagens (como geralmente é recomendado). Isso garante que a convolução aplique o filtro o mesmo número de vezes em cada pixel.

jon_simon
fonte
11
Ainda não estou convencido. O preenchimento zero cria apenas mais pixels de saída em torno dos pixels "centrais" encontrados sem preenchimento. Os valores dos pixels "centrais" são exatamente os mesmos, independentemente do uso de preenchimento zero.
Koen
11
Se a janela convolucional for do tamanho , preenchendo todas as arestas com muitos zeros, você garantirá que a convolução atuará nos pixels da aresta tantas vezes quanto os pixels internos (supondo que você isso em todas as camadas convolucionais da rede). Na prática, porém, não ter um preenchimento tão agressivo e diminuir a importância dos pixels da borda, pois as informações importantes têm muito mais probabilidade de serem localizadas perto do centro da imagem. n - 1n×nn1
Jon_simon 2/17
A visualização convolução meio caminho nesta página podem ajudar a transmitir a intuição: cs231n.github.io/convolutional-networks
jon_simon