Pergunta

É um algoritmo genético a forma mais eficiente para otimizar o número de nós escondidos e a quantidade de treinamento feito em uma rede neural artificial?

Estou codificação redes neurais usando o NNToolbox em Matlab. Estou aberto a quaisquer outras sugestões de técnicas de otimização, mas eu estou mais familiarizado com GA do.

Foi útil?

Solução

Na verdade, existem várias coisas que você pode otimizar usando GA sobre NN. É possível optimizar a estrutura (o número de nós, camadas, a função de activação, etc.). Você também pode treinar utilizando GA, que significa definir os pesos.

Os algoritmos genéticos nunca mais será a mais eficiente, mas eles geralmente usado quando você tem pouca idéia do que números para uso.

Para o treinamento, você pode usar outros algoritmos incluindo backpropagation, Nelder-Mead etc. .

Você disse que queria para otimizar número escondido nós, por isso, algoritmo genético pode ser suficiente, embora longe de ser "ótima". O espaço que você está procurando é provavelmente muito pequena para usar algoritmos genéticos, mas eles podem trabalhar ainda e afaik, eles já estão implementados em Matlab, por isso, nada demais.

O que quer dizer, otimizando quantidade de treinamento feito? Se você média do número de épocas, então tudo bem, basta lembrar que a formação é de alguma forma dependente começando pesos e eles são geralmente aleatória, então a função de aptidão utilizada para GA não vai ser realmente uma função.

Outras dicas

Um exemplo bom de redes neurais e programação genética é a arquitetura NEAT (Neuro-Evolução de aumentar Topologias). Este é um algoritmo genético que se encontra num ponto óptimo de topologia. Ele também é conhecido por ser bom em manter o número de nós escondidos para baixo.

Eles também fizeram um jogo usando este chamado Nero. Bastante original e muito surpreendentes resultados tangíveis.

Dr. homepage de Stanley:

http://www.cs.ucf.edu/~kstanley/

Aqui você vai encontrar praticamente tudo o NEAT relacionados como ele é aquele que inventou isso.

Os algoritmos genéticos podem ser utilmente aplicadas à otimização de redes neurais, mas você tem que pensar um pouco sobre o que você quer fazer.

A maioria dos algoritmos de treinamento NN "clássicos", como o Back-Propagation, apenas a otimizar os pesos dos neurônios. algoritmos genéticos podem optimizar os pesos, mas isso irá tipicamente ser ineficiente. No entanto, como você estava perguntando, eles podem otimizar a topologia da rede e também os parâmetros para o seu algoritmo de treinamento. Você vai ter que ser especialmente cautelosos com a criação de redes que estão "over-treinados" embora.

Uma técnica ainda mais com uma algoritmos genéticos modificados pode ser útil para superar um problema com Back-Propagation. Back-Propagation geralmente encontra mínimos locais, mas encontra-los com precisão e rapidez. Combinando um algoritmo genético com Back-Propagation, por exemplo, em um lamarckiano GA, dá as vantagens de ambos. Esta técnica é descrita brevemente durante o GAUL tutorial

Às vezes é útil usar um algoritmo genético para treinar uma rede neural quando a sua função objetivo não é contínua.

Eu não tenho certeza se você deve usar um algoritmo genético para isso.

Suponho que a população solução inicial para o seu algoritmo genético consistiria em conjuntos de treinamento para a sua rede neural (dado um método de treinamento específico). Normalmente a população solução inicial consiste de soluções aleatórias para o seu problema. No entanto, conjuntos de treinamento aleatórios realmente não iria treinar sua rede neural.

O algoritmo de avaliação para o seu algoritmo genético seria um pesava média da quantidade de treinamento necessário, a qualidade da rede neural na resolução de um problema específico e o numer de nós escondidos.

Então, se você executar isso, você iria receber o conjunto de treinamento que entregou o melhor resultado em termos de qualidade de rede neural (= tempo de treinamento, número escondido nós, capacidades de resolução de problemas da rede).

Ou você está considerando uma abordagem completamente diferente?

Eu não sou inteiramente certo que tipo de problema que você está trabalhando, mas os sons GA como um pouco de exagero aqui. Dependendo da gama de parâmetros que você está trabalhando, uma busca exaustiva (ou de outra maneira não inteligente) pode funcionar. Tente traçando o desempenho do seu NN em relação ao número de nós escondidos para uma primeira alguns valores, começando em pequena escala e salto em incrementos cada vez maiores. Na minha experiência, muitos NNs planalto no desempenho surpreendentemente cedo; você pode ser capaz de obter uma boa imagem do que variam de números de nós escondidos faz mais sentido.

O mesmo acontece muitas vezes, para iterações de formação NNS. Mais treinamento ajuda redes até certo ponto, mas logo deixa de ter muito efeito.

Na maioria dos casos, estes parâmetros NN não afetam o desempenho de uma forma muito complexa. Geralmente, aumentando-lhes aumenta o desempenho por um tempo, mas retorna em seguida, diminuindo chutar GA não é realmente necessário para encontrar um valor bom sobre este tipo de simples curva.; se o número de nós escondidos (ou iterações de formação) realmente faz com que o desempenho a flutuar de uma forma complicada, então metaheurísticas como GA pode ser apt. Mas dar a abordagem de força bruta uma tentativa antes de tomar esse caminho.

Eu tenderia a dizer que os algoritmos genéticos é uma boa idéia, pois você pode começar com uma solução mínima e crescer o número de neurônios. É muito provável que a "função de qualidade" para o qual você deseja encontrar o ponto ótimo é suave e tem apenas alguns solavancos.

Se você tem que encontrar esse ideal NN freqüentemente eu recomendo usar algoritmos de otimização e no seu caso quasi newton como descrito em receitas numéricas, que é ideal para problemas onde a função é caro para avaliar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top