Como melhoro a estabilidade da minha rede neural?

11

Estou usando a rede neural em R para criar um NN com 14 entradas e uma saída. Eu construo / treino a rede várias vezes usando os mesmos dados de treinamento de entrada e a mesma arquitetura / configurações de rede.

Depois que cada rede é produzida, eu a uso em um conjunto autônomo de dados de teste para calcular alguns valores previstos. Estou descobrindo que há uma grande variação em cada iteração dos dados previstos, apesar de todas as entradas (os dados de treinamento e de teste) permanecerem as mesmas sempre que eu construo a rede.

Entendo que sempre haverá diferenças nas ponderações produzidas no NN e que não haverá duas redes neurais idênticas, mas o que posso tentar produzir redes mais consistentes em cada trem, dados dados idênticos?

tfb
fonte
Você pode nos dar um pouco mais de detalhes sobre o algoritmo e a arquitetura de aprendizado que você (ou o pacote R) usou? Quantas camadas o NN possui?
Lucas
Oi Lucas, eu estou usando o neuralnet pacote de R ligação que tem um bom artigo explicativo aqui ligação . Estou usando uma camada oculta de 8 neurônios. O algoritmo de aprendizado é uma retropropagação resiliente com retorno de peso.
TFB

Respostas:

8

Em geral, você obteria mais estabilidade aumentando o número de nós ocultos e usando uma redução de peso apropriada (também conhecida como penalidade na crista).

Especificamente, eu recomendaria o uso do caretpacote para entender melhor sua precisão (e até a incerteza em sua precisão.) Também no sinal de intercalação está o avNNetque torna um ensemble aprendiz de várias redes neurais para reduzir o efeito das sementes iniciais. Pessoalmente, não vi grandes melhorias usando, avNNetmas isso poderia resolver sua pergunta original.

Eu também me certificaria de que suas entradas fossem todas adequadamente condicionadas. Você ortogonalizou e redimensionou-os? A Caret também pode fazer esse pré-processamento por sua pcaNNetfunção.

Por fim, você pode considerar lançar algumas conexões da camada de salto. Você precisa se certificar de que não existem pontos de discrepância / alavancagem em seus dados para distorcer essas conexões.

Shea Parkes
fonte
Curiosamente, mudei o treinamento da rede para a função 'nnet' (disponível no pacote com o mesmo nome) e os resultados no conjunto de dados de teste tornaram-se muito mais estáveis ​​- talvez algo a ver com a maneira diferente como os pesos são inicializado entre os dois pacotes?
tfb 22/02/12
Nos nnetpesos iniciais, todos são inicializados com um número aleatório uniforme entre -0,7 e 0,7, se bem me lembro. E você pode controlar a magnitude em um parâmetro. Sinceramente, tive muita sorte com o nnetpacote e nunca tentei nenhuma das outras opções. Boa sorte!
Shea Parkes
1

Eu não trabalhei com R, então só posso dar dicas mais gerais.

Você verificou se o algoritmo convergiu? Uma explicação possível pode ser que os diferentes conjuntos de parâmetros estejam todos na metade do caminho para o mesmo ideal.

Se o algoritmo sempre convergir, mas para um ótimo local diferente, existem muitas heurísticas que você pode tentar evitá-las. Uma estratégia simples ao usar a descida do gradiente estocástico (SGD) seria usar lotes menores e maior momento . Os lotes menores introduzem efetivamente algum ruído no treinamento, o que pode ajudar a escapar de algumas ótimas locais. Uma estratégia muito mais sofisticada seria inicializar os pesos usando autoencoders .

Lucas
fonte
Assim como um fyi, desde que ele esteja usando o nnetda base R, ele usa o método de otimização BFGS dos R's optim. Na verdade, ele calcula os gradientes para obter uma imagem da superfície. Não há processamento em lote nem parâmetro de momento fixo em sua implementação. Dito tudo isso, pode facilmente não convergir; especialmente com lixo.
Shea Parkes
@SheaParkes, obrigado pelos comentários e respostas Shea. Na verdade, estou usando o pacote neuralnet - veja o comentário acima. Ele usa um algoritmo backpropagation resiliente com recuo de peso
TFB
Então, minhas desculpas, Lucas, eu perdi esse boato. Estou feliz que você tenha resolvido tfb.
Shea Parkes