quantas camadas ocultas ?
um modelo com zero camadas ocultas resolverá dados separáveis linearmente . Portanto, a menos que você já saiba que seus dados não são linearmente separáveis, não custa verificar isso - por que usar um modelo mais complexo do que o exigido pela tarefa? Se for linearmente separável, uma técnica mais simples funcionará, mas um Perceptron também fará o trabalho.
Supondo que seus dados exijam separação por uma técnica não linear, sempre comece com uma camada oculta . Quase certamente, isso é tudo de que você precisa. Se seus dados são separáveis usando um MLP, então esse MLP provavelmente só precisa de uma única camada oculta. Há uma justificativa teórica para isso, mas meu motivo é puramente empírico: muitos problemas difíceis de classificação / regressão são resolvidos usando MLPs de camada oculta única, mas não me lembro de ter encontrado nenhuma MLPs de camada oculta múltipla usada para modelar dados com sucesso. -se em quadros de avisos de ML, livros didáticos de ML, trabalhos acadêmicos, etc. Eles existem, certamente, mas as circunstâncias que justificam seu uso são empiricamente muito raras.
Quantos nós na camada oculta?
Da literatura acadêmica do MLP. minha própria experiência, etc., eu reuni e frequentemente confio em várias regras práticas ( RoT ), e que também descobri serem guias confiáveis (ou seja, a orientação era precisa e, mesmo quando não era, era geralmente estava claro o que fazer a seguir):
RoT com base na melhoria da convergência:
Ao começar a construção do modelo, prefira usar mais nós na camada oculta.
Por quê? Primeiro, alguns nós extras na camada oculta provavelmente não farão nenhum dano - seu MLP ainda convergirá. Por outro lado, poucos nós na camada oculta podem impedir a convergência. Pense nisso desta forma, nós adicionais fornecem algum excesso de capacidade - pesos adicionais para armazenar / liberar sinal para a rede durante a iteração (treinamento ou construção de modelo). Em segundo lugar, se você começar com nós adicionais em sua camada oculta, será fácil removê-los posteriormente (durante o andamento da iteração). Isso é comum e existem técnicas de diagnóstico para ajudá-lo (por exemplo, Diagrama de Hinton, que é apenas uma representação visual das matrizes de peso, um 'mapa de calor' dos valores de peso).
RoTs com base no tamanho da camada de entrada e tamanho da camada de saída:
Uma regra geral é que o tamanho desta camada [oculta] esteja entre o tamanho da camada de entrada ... e o tamanho da camada de saída ....
Para calcular o número de nós ocultos, usamos uma regra geral de: (Número de entradas + saídas) x 2/3
RoT baseado em componentes principais:
Normalmente, especificamos tantos nós ocultos quanto as dimensões [componentes principais] necessários para capturar 70-90% da variância do conjunto de dados de entrada .
E ainda o NN FAQ autor do chama essas regras de "absurdas" (literalmente) porque elas: ignoram o número de instâncias de treinamento, o ruído nos alvos (valores das variáveis de resposta) e a complexidade do espaço de recursos.
Na opinião dele (e sempre me pareceu que ele sabe do que está falando), escolha o número de neurônios na camada oculta com base no fato de o seu MLP incluir alguma forma de regularização ou parada precoce .
A única técnica válida para otimizar o número de neurônios na camada oculta:
Durante a construção do modelo, teste obsessivamente; o teste revelará as assinaturas da arquitetura de rede "incorreta". Por exemplo, se você começar com um MLP com uma camada oculta composta por um pequeno número de nós (que você aumentará gradualmente conforme necessário, com base nos resultados do teste), o erro de treinamento e generalização será alto causado por viés e ajuste insuficiente.
Em seguida, aumente o número de nós na camada oculta, um de cada vez, até que o erro de generalização comece a aumentar, desta vez devido ao overfitting e à alta variância.
Na prática, faço desta forma:
camada de entrada : o tamanho do meu vator de dados (o número de recursos em meu modelo) + 1 para o nó de polarização e não incluindo a variável de resposta, é claro
camada de saída : determinado apenas pelo meu modelo: regressão (um nó) versus classificação (número de nós equivalente ao número de classes, assumindo softmax)
camada oculta : para começar , uma camada oculta com um número de nós igual ao tamanho da camada de entrada. O tamanho "ideal" é mais provável de ser menor (ou seja, algum número de nós entre o número na camada de entrada e o número na camada de saída) em vez de maior - novamente, esta é apenas uma observação empírica e o volume desta observação é minha própria experiência. Se o projeto justificar o tempo adicional necessário, eu começo com uma única camada oculta composta por um pequeno número de nós, então (como expliquei acima) adiciono nós à Camada Oculta, um de cada vez, enquanto calculo a generalização erro, erro de treinamento, viés e variância. Quando o erro de generalização diminuir e um pouco antes de começar a aumentar novamente, o número de nós nesse ponto é minha escolha. Veja a figura abaixo.