Quantas camadas escondidas e quantos neurônios incluir numa rede neural artificial?

Uma dúvida comum aos desenvolvedores de redes neurais artificiais é sobre o número de camadas escondidas, e o número de neurônios em cada camada, a serem incluídas na estrutura. Para responder a esta pergunta, primeiro precisamos entender qual o papel das camadas escondidas nas redes neurais.

Uma camada escondida é um conjunto de neurônios que representa uma transformação matemática aplicada à camada anterior. Essa transformação é uma operação linear do tipo wX + b, onde X é o valor do neurônio na camada anterior, w é o peso e b é a unidade de bias. Dessa forma, se o problema que estamos tentando resolver é de natureza linear (ou seja, se a rede neural está tentando determinar a equação da reta num problema de regressão; ou se está tentando classificar dados linearmente separáveis num problema de classificação), não são necessárias camadas escondidas. A conexão direta entre a camada de entrada e a camada de saída é suficiente para gerar um modelo eficiente.

Problemas de regressão/classificação linear são resolvidos com uma rede neural sem camada escondida.

As camadas escondidas são incluídas nos casos de natureza não-linear. Elas têm a propriedade necessária pra resolver esses casos porque, à sua saída, nós aplicamos uma função de ativação de natureza não-linear. Assim conseguimos resolver problemas como os abaixo.

Problemas de regressão/classificação não-linear só são resolvidos com o uso de camadas escondidas.

É bem aceito na literatura que, na grande maioria dos casos, o uso de uma única camada escondida é suficiente, já que essa estrutura é capaz de aproximar qualquer equação não-linear (como, por exemplo, equações quadráticas ou exponencias). Duas camadas escondidas já são capazes de representar qualquer relação entre os dados, mesmo aquelas que não podem ser representadas por equações. Mais do que duas camadas escondidas só são necessárias em problemas ainda mais complexos como séries temporais e visão computacional, onde há uma certa inter-relação entre as dimensões que os dados contêm (tempo no primeiro caso, e formas geométricas no segundo).

Isso exposto, é importante, antes de desenvolver a estrutura da rede neural, conhecer as características dos dados com que estamos trabalhando. Dependendo da natureza do problema, o uso de poucas camadas escondidas pode levar ao underfitting (imagine tentar resolver um problema quadrático sem usar camadas escondidas), enquanto que o overfitting é possível com camadas demais (o mesmo problema com três camadas escondidas). A decisão deve ser pelo menor número de camadas escondidas que resolve o problema, o que pode ser mensurado pelas métricas de desempenho aplicadas a um dataset de validação.

Já o número de neurônios em cada camada é uma questão mais empírica, não existindo regras explícitas para um cálculo ideal. Jeff Heaton, o autor de Introduction to Neural Networks for Java, sugere três abordagens iniciais, que vamos aplicar como exemplo para uma rede contendo 30 neurônios na camada de entrada e 2 neurônios na camada de saída:

  • O número de neurônios escondidos deve estar entre o tamanho da camada de entrada e o da camada de saída. Usar o número médio entre as duas camadas é uma boa opção; ou seja, no nosso exemplo, o valor de (30+2)/2 = 16 neurônios.
  • O número de neurônios escondidos deve ser 2/3 do tamanho da camada de entrada, mais o tamanho da camada de saída. Assim, a camada escondida no nosso exemplo deve conter 30*2/3+2 = 22 neurônios.
  • O número de neurônios escondidos deve ser menor que o dobro do tamanho da camada de entrada. Ou seja, no nosso exemplo, a camada escondida deve conter menos que 60 neurônios.

Com base nessas três estimativas, poderíamos construir três modelos iniciais e fazer pequenos ajustes no intervalo entre os dois resultados melhores. Por exemplo, se o problema alcançar os menores erros nas redes com 16 e 22 neurônios escondidos, podemos testar novas redes com valores nesse intervalo.

Se estivermos trabalhando com mais camadas, podemos incluir uma primeira camada se baseando nos critérios acima, e uma segunda considerando que a primeira camada é sua camada de entrada. Ou seja, para a rede neural definida acima no formato 30 > 16 > 2, podemos incluir a segunda camada escondida entre 16 > 2 que, pelos mesmos critérios, teria (16+2)/2 = 9 neurônios.

As recomendações acima são um bom ponto de partida, mas a decisão final pode se beneficiar da intuição do desenvolvedor bem familiarizado com os dados com que está trabalhando.