Se tivermos 10 autovetores, então podemos ter 10 nós neurais na camada de entrada. Se tivermos 5 classes de saída, então podemos ter 5 nós na camada de saída. Mas qual é o critério para escolher o número de camadas ocultas em um MLP e quantas nós em 1 camada oculta?
machine-learning
neural-network
deep-learning
perceptron
Abhishek Kumar
fonte
fonte
Respostas:
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:
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:
RoT baseado em componentes principais:
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.
fonte
É muito difícil escolher o número de neurônios em uma camada oculta e o número de camadas ocultas em sua rede neural.
Normalmente, para a maioria dos aplicativos, uma camada oculta é o suficiente. Além disso, o número de neurônios nessa camada oculta deve estar entre o número de entradas (10 em seu exemplo) e o número de saídas (5 em seu exemplo).
Mas a melhor maneira de escolher o número de neurônios e camadas ocultas é a experimentação. Treine várias redes neurais com diferentes números de camadas e neurônios ocultos e meça o desempenho dessas redes usando validação cruzada . Você pode ficar com o número que produz a rede de melhor desempenho.
fonte
Para automatizar a seleção do melhor número de camadas e melhor número de neurônios para cada uma das camadas, você pode usar a otimização genética .
As peças-chave seriam:
Você também pode considerar:
fonte
Recentemente, há um trabalho teórico sobre este https://arxiv.org/abs/1809.09953 . Supondo que você use um RELU MLP, todas as camadas ocultas têm o mesmo número de nós e sua função de perda e função verdadeira que você está aproximando com uma rede neural obedece a algumas propriedades técnicas (no papel), você pode escolher a profundidade a ser peça $ \ log (n) $ e a largura das camadas ocultas seja da ordem $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Aqui $ n $ é o tamanho da sua amostra, $ d $ é a dimensão do seu vetor de entrada e $ \ beta $ é um parâmetro de suavidade para sua verdadeira função. Como $ \ beta $ é desconhecido, provavelmente você desejará tratá-lo como um hiperparâmetro.
Fazendo isso, você pode garantir que, com probabilidade que converge para $ 1 $ em função do tamanho da amostra, seu erro de aproximação converge para $ 0 $ em função do tamanho da amostra. Eles dão a taxa. Observe que não há garantia de que essa seja a 'melhor' arquitetura, mas pode pelo menos ser um bom lugar para começar. Além disso, minha própria experiência sugere que coisas como o abandono escolar ainda podem ajudar na prática.
fonte