A CNN aprende entradas modificadas?
A versão em inglês deste artigo está disponível em Does CNN learns modified inputs?
A CNN (Rede Convolucional Neural) surgiu primeiramente com a ideia de melhorar a precisão no problema de reconhecimento de imagens. Seu sucesso foi devido à duas características principais de sua arquitetura: entradas tridimensionais e convoluções.
As entradas 3D tornam o modelo mais realista, visto que as imagens possuem largura, altura e profundidade (que representa os canais de cores, como por exemplo, RGB), e as convoluções, mais eficientes, visto que o número de operações e parâmetros de um filtro é bem menor do que uma camada totalmente conectada.
Podemos interpretar cada camada como sendo uma característica que a rede conseguiu extrair da imagem. As primeiras camadas são as características mais básicas como arestas, bordas e formas geométricas.
Porém, será que os canais de entrada são dependentes entre si? Isto é, será que se modificarmos um canal (inverter o canal verde, por exemplo) de todas imagens de entrada, a rede conseguirá aprender com a mesma precisão e velocidade?
Por um lado, podemos pensar que o canal dos filtros aprendidos estarão igualmente modificados, isto é, se espelhamos o canal horizontalmente, os filtros aprendidos também estarão espelhados horizontalmente.
Por outro lado, é difícil imaginar quais características a rede conseguirá extrair da imagem visto que, ao modificar um canal, obtemos uma imagem que, visualmente, é completamente aleatória, com várias manchas coloridas em diversas partes.
Motivação
Muito provavelmente, esse problema nunca irá ocorrer em uma rede para reconhecimento de imagens, porém, há muitas outras aplicações em que isso é possível. Por exemplo, imagine uma rede modelada para fazer o mapeamento de um solo. Na entrada, cada canal representaria uma propriedade específica do solo (pH, concentração de diversos nutrientes, etc.), onde cada elemento de um canal (equivalente a um pixel de uma imagem) representaria uma área do solo.
Entretanto, por diversos motivos, pode acontecer de que um elemento de cada canal representar uma área diferente, fazendo com que os canais possuam tamanhos diferentes.
Como uma CNN só aceita entradas cujos canais possuem tamanhos iguais, para treinar essa rede, devemos redimensionar as camadas para que as informações de cada localização estejam “alinhadas”, ou ela consegue aprender as informações de cada camada independentemente?
Teste
Para fazer o teste, foi utilizado uma rede simples para reconhecer cachorros sobre o conjunto de dados do Open Images.
Um resumo da rede utilizado pode ser observada abaixo: CONV -> RELU -> MAXPOOL ->CONV -> RELU -> MAXPOOL ->DROPOUT -> FC -> Softmax
Treinamos a mesma rede duas vezes, uma vez com as imagens originais e a outra com as imagens modificadas (a modificação feita foi espelhar horizontalmente a camada verde, e espelhar verticalmente a camada azul). Com isso obtemos o seguinte resultado:
Podemos observar que, apesar de no conjunto de imagens de treinamento ambos modelos terem praticamente a mesma velocidade e precisão de aprendizado, no conjunto de validação (que é onde realmente devemos analisar), a treinamento com as imagens originais apresentou um resultado ligeiramente melhor: 74,3% contra 69,3%.
Além disso, é possível observar que, no treinamento com as imagens modificadas, a acurácia na validação está caindo aos poucos, isso indica que pode estar ocorrendo overfitting. Outro indício de que o overfitting ocorre é observando as perdas:
Vemos que a perda no treinamento continua diminuindo porém, na validação a perda aumenta bastante. E esse efeito é bem mais acentuado no treinamento com as imagens modificadas.
Justificativa
Para tentar entender o porquê isso ocorreu (a rede conseguir aprender mesmo com as imagens modificadas porém com uma tendência maior a overfitting), vamos relembrar alguns conceitos de convolução.
Os filtros das convoluções, assim como as entradas de uma CNN, possuem três dimensões, em que a profundidade é sempre igual à profundidade da camada anterior. Portanto, os filtros da primeira camada da CNN possuem profundidade igual á profundidade das entradas (no caso de uma imagem RGB, por exemplo, a profundidade seria três).
Durante a convolução, o filtro desliza ao longo da largura e da altura da camada anterior, multiplicando elemento a elemento a cada passo.
O fato de o filtro ter três dimensões e cada canal do filtro multiplicar um mesmo canal da camada anterior, cria um certa independência entre os canais. Logo, cada canal dos filtros da primeira camada aprendem de acordo com o que é visto no respectivo canal da imagem de entrada.
Porém, ao modificar os canais da imagem, ficou a impressão de que foi adicionado muito ruído às imagens, pois como os filtros aprendem características observadas das entradas (como por exemplo bordas e arestas), com as modificações, tais padrões não podem ser encontrados facilmente. E isso fez com que o efeito do overfitting fosse ainda maior.
Conclusão
Por se tratar uma arquitetura bem simples, e um tamanho de conjunto de dados não ser muito grande (27000 de treinamento e 18000 de validação), podemos concluir que uma rede consegue aprender mesmo com os canais modificados com uma precisão bem menor (aproximadamente 5% neste caso). Porém, devemos tomar um cuidado maior com esses dados modificados, pois eles possuem maior tendência de apresentar overfitting.
Referências:
- Deep learning and Soil Science — Part 2: https://towardsdatascience.com/deep-learning-and-soil-science-part-2-129e0cb4be94
- Convolutional Neural Networks (CNNs / ConvNets): http://cs231n.github.io/convolutional-networks/