Pages

Quantos neurônios/camadas escondidas são necesários para uma rede neural ?

Wednesday, January 21, 2009

Neste post, estarei falando falando um pouco sobre uma das questões mais presentes nos círculos de estudo sobre redes neurais: Quantos neurônios que compõem a camada escondida são necessárias para solucionar o meu problema ? E quantas camadas escondidas são necessárias ?
Uma pesquisa rápida que fiz por alguns materiais, e pela minha experiência com alguns projetos utilizando redes neurais, sugiro que sejam o mínimo possível.

Na verdade, não há nenhum embasamento matemático que forneça uma resposta definitiva para estas questões. Obtemos essas respostas na base de tentativa e erro.

Vamos a um pequeno problema. Se usarmos poucos neurônios na camada escondida, a rede neural é incapaz de modelar dados mais complexos, resultando em uma baixa capacidade de generalização ('underfitting'). Se muitos neurônios forem utilizados, o treinamento da rede irá se tornar excessivamente longo e a rede pode sofrer problemas de sobreajuste ('overfitting') resultando na perda da capacidade preditiva da rede, pois observa-se pequenos desvios de previsão para os dados usados na fase de treino, mas grandes desvios quando novos dados de entrada são utilizados. Dados com ruídos ou redundantes podem provocar a falha da rede na convergência de uma solução genérica.

E em relação ao número de camadas escondidas ? Para a maiora dos problemas, uma camada escondida é suficiente. Entretanto, se seus dados contêm descontinuidades, uma camada escondida adicional pode ajudar. É importante notar que redes neurais com 2 camadas intermediárias pode aproximar funções de quaisquer tipos ou formas, então não há uma razão plausível para usar mais de duas.

Anteriormente, citei que o número de neurônios ou camadas escondidas é baseado sobre a técnica de "tentativa e erro". Mas, o que isto significa ? O processo utilizado por alguns estudiosos na área, é determinar o número de neurônios escondidos baseado na premissa de que rede neurais com muitos neurônios nas camadas intermediárias irão convergir. Logo, o objetivo é tentar encontrar a menor rede neural possível que convirja e refinar a rede a partir desta encontrada. Segue um pequeno algoritmo, para melhor esclarecimento:
  1. Inicie com um neurônio na camada escondida, semelhante ao Perceptron de uma camada.
  2. Inicie o treinamento da rede.
  3. Se a rede falha em convergir para uma solução genérica depois de um tempo considerável, reinicie o treinamento da rede por até 10 vezes. Isto garante que a rede não caiu em um mínimo local.
  4. Se a rede neural ainda falha para convergir para uma solução genérica (ótima), adicione mais um neurônio na camada intermediária, e retorne ao passo 2.
  5. Se chegou aqui, significa que a rede convergiu. Note que o número de neurônios da camada escondida aqui encontrada, é armazenado como o número máximo necessário.
  6. Remova um neurônio da camada escondida e reinicie o treinamento.
  7. Repita o ciclo de treinamento (passos 02 e 03), até que a rede convirja para uma nova solução ou por algum critério de parada definido por você.
  8. Se a rede convergir, então você reduziu seu número máximo necessário. Armazene o número de neurônios da camada escondida e retorne ao passo 5.
Usando este processo descrito acima, descreveremos um exemplo de problema solucionado, indicando o número necessário de neurônios escondidos.

Problemas de classificação
Um dos problemas clássicos de classificação binária é o problema do XOR (ou paridade) . Neste tipo de problema estamos apenas interessados nas quinas do hiper-cubo, e não no espaço interno que o compõe. A tabela abaixo ilustra o conjunto de dados de entrada e saída para um problema XOR de 3 dimensões. Esses pontos podem ser mapeados em um cubo, conforme a figura abaixo.
xyzout
0000
0011
0101
0110
1001
1010
1100
1111

Usando um Perceptron de múltiplas camadas (como o apresentado no post passado), obtemos rapidamente o número de neurônios escondidos para solucionar o problema do XOR variando o numéro de bits de entrada de 1 a 8. Os resultados são ilustrados no gráfico abaixo:




Espero que essa breve explicação possa contribuir com algumas técnicas específicas meios de encontrar a estrutura apropriada para sua rede neural. Não há nada comprovado teoricamente, mas serve como um procedimento simples de achar a estrutura de rede que satisfaça os objetivos do problema a ser solucionado. De fato, é mais arte do que ciência!

3 comments:

  1. Embedded system training: Wiztech Automation Provides Excellent training in embedded system training in Chennai - IEEE Projects - Mechanical projects in Chennai. Wiztech provide 100% practical training, Individual focus, Free Accommodation, Placement for top companies. The study also includes standard microcontrollers such as Intel 8051, PIC, AVR, ARM, ARMCotex, Arduino, etc.

    Embedded system training in chennai
    Embedded system course in chennai
    VLSI trraining in chennai
    Final year projects in chennai

    ReplyDelete
  2. WIZTECH Automation, Anna Nagar, Chennai, has earned reputation offering the best automation training in Chennai in the field of industrial automation. Flexible timings, hands-on-experience, 100% practical. The candidates are given enhanced job oriented practical training in all major brands of PLCs (AB, Keyence, ABB, GE-FANUC, OMRON, DELTA, SIEMENS, MITSUBISHI, SCHNEIDER, and MESSUNG)

    PLC training in chennai
    Automation training in chennai
    Best plc training in chennai
    PLC SCADA training in chennai
    Process automation training in chennai
    Final year eee projects in chennai
    VLSI training in chennai

    ReplyDelete
  3. não dá pra achar o numero de neurodios e camadas escondidas através de uma outra rede neural específica pra isso?

    ReplyDelete