Neuroevolução com Crescimento Topológico

Propaganda
Neuroevolução com Crescimento Topológico
Ivan Medeiros Monteiro
Instituto de Informática – Universidade Federal do Rio Grande do Sul (UFRGS)
Caixa Postal 15.064 – 91.501-970 – Porto Alegre – RS – Brazil
{immonteiro}@inf.ufrgs.br
Resumo. Este trabalho apresenta a neuroevolução com crescimento topológico
baseando-se no funcionamento do NEAT (NeuroEvolution of Augmenting
Topologies) e do rtNEAT, sua variante utilizada para evolução em tempo-real.
1- Introdução
A evolução das redes neurais artificiais usando algoritmos genéticos tem se mostrado
bastante promissora em problemas complexos de aprendizagem por reforço (Floreano
and Mondada 1994; Gomez 2003). Nesta abordagem os algoritmos genéticos realizam
uma busca em direção à configuração dos parâmetros ótimos da rede, inspirados na
genética e no mecanismo de seleção natural.
As abordagens convencionais de neuroevolução utilizam algoritmos genéticos
para ajustar os pesos sinápticos da rede neural. Esses métodos fazem uso de topologia
fixa, ou seja, assume-se que a topologia da rede é adequada, realizando apenas busca no
espaço de pesos. Entretanto, os pesos não são os únicos parâmetros de uma rede neural
que contribui com o seu comportamento, pois sua estrutura topológica também afeta
como a mesma funciona.
Neste trabalho são apresentados o NEAT e sua variante para tempo real, o
rtNEAT, como métodos utilizados para neuroevolução com ajustes na estrutura
topológica da rede neural juntamente com os pesos. Para isto, uma breve revisão de
algoritmos genéticos é vista na sessão 2 e a citação de alguns outros métodos de
neuroevolução aparecem na sessão 3. O NEAT e o rtNEAT são apresentados nas sessões
4 e 5 respectivamente, na sessão 6 é vista uma aplicação para o rtNEAT e as
considerações finais são feitas na sessão 7.
2 - Algoritmos Genéticos
Algoritmos genéticos são algoritmos de otimização global, baseados nos mecanismos de
seleção natural e da genética. Eles empregam uma estratégia de busca paralela e
estruturada, embora aleatória, direcionada à busca de pontos de 'alta aptidão', ou seja,
pontos nos quais a função a ser minimizada ou maximizada tem valores relativamente
baixos ou altos (Rezende 2002). A busca é feita por meio de processos interativos, onde
cada interação é chamada de geração. Para cada geração, os princípios da seleção natural
e da reprodução são aplicados a uma população. A seleção determina os indivíduos da
população que irão se reproduzir, criando descendentes para a próxima geração.
Os algoritmos genéticos processam indivíduos de uma população através da
representação genômica desse indivíduo. Em geral, são utilizados nos algoritmos
genéticos os genomas contendo apenas um cromossomo. O cromossomo representa o
conjunto de parâmetros da função objetivo que se deseja otimizar e o conjunto de todas
as formas que o cromossomo pode assumir constitui o seu espaço de busca.
Para identificar os indivíduos mais aptos dentro da população, cada genoma é
avaliado por uma função de fitness. Esta função recebe os genes do cromossomo e
atribui um valor de aptidão a este indivíduo. Uma vez associada uma nota a cada
indivíduo, o processo de seleção escolhe, então, um subconjunto de indivíduos da
população atual, gerando uma população intermediária. Diversos métodos podem ser
utilizados para a seleção como o método da roleta, o método do torneio e o método da
amostragem universal.
Utilizando da inspiração genética, um indivíduo pode ser visto de duas formas.
Através do seu genótipo, que é toda a codificação genética do indivíduo que define quais
serão suas características, e pelo seu fenótipo, que são as características do indivíduo já
traduzidas do genótipo. A avaliação do indivíduo é feita sobre seu genótipo, mas
normalmente o que se busca é alcançar um determinado fenótipo.
A geração sucessiva de populações que melhoram a aptidão com o tempo é feita
através de operadores genéticos. Estes operadores são: crossover e mutação. O operador
de mutação é necessário para a introdução e manutenção da diversidade genética da
população, alterando arbitrariamente um ou mais componentes de uma estrutura
escolhida. O crossover é o operador responsável pela recombinação de características dos
pais, permitindo que as próximas gerações herdem essas características.
3 – Neuroevolução
Neuroevolução é a combinação de redes neurais e algoritmos genéticos onde as redes são
os fenótipos a serem alcançados. Os cromossomos na neuroevolução podem representar
qualquer parâmetro da rede, desde pesos, passando por função de ativação, até a
topologia.
A maioria dos sistemas de neuroevolução envolve topologia fixa, ou seja, eles
aperfeiçoam apenas os pesos das conexões. Neste modelo é necessário chegar
inicialmente a uma topologia adequada, para só então aplicar o método. Três desses
sistemas se destacam por seu desempenho em comparação a outros, são eles: SANE
(Moriarty 1997), ESP (Gomez and Miikkulainem 1997; Gomez 2003) e CMA-ES (Igel
2003).
Os métodos que consideram a evolução topológica são conhecidos como
TWEANNs (Topology and Weight Evolving Neural Networks). Neles o genoma codifica
tanto a topologia como os pesos das conexões de uma rede. Estes métodos podem
descobrir sozinhos a topologia adequada para a rede. Assim a evolução da topologia pode
ser usada para aumentar a eficiência, deixando a rede menor possível.
4 – NEAT
NEAT (NeuroEvolution of Augmenting Topologies) é uma técnica que utiliza algoritmo
evolutivo para definir as configurações de uma rede neural. Esta técnica combina a usual
busca por pesos da rede com o crescimento da topologia. Ela é formada pela solução de
três desafios fundamentais envolvendo evolução topologia em redes neurais, que são:
Como fazer crossover de topologias diferentes? Que é solucionado com registro histórico
das inovações para permitir o alinhamento dos genes. Como proteger inovações ainda
não otimizadas? Que é solucionado com a separação de cada inovação em diferentes
espécies. Como obter uma topologia minimizada? Que é conseguido a partir da evolução
incremental, adicionando nodos e conexões a uma estrutura mínima.
4.1 - Codificação genética
A representação da codificação genética da rede precisa ser flexível para permitir o
crescimento da sua estrutura. No NEAT o genoma é representado como uma lista de
genes de conexão, onde cada gene refere-se a uma conexão entre dois nodos direcionada,
com um peso, um número de inovação (innovation number) e um marcador de ativo ou
não, como visto na figura 1.
Figure 1: Codificação Genética
O aumento da complexidade da estrutura topológica da rede ocorre através de
mutações de duas maneiras. A primeira é adicionando conexões, onde uma nova conexão
liga dois nodos não conectados. A segunda forma é adicionando um nodo entre dois
nodos conectados, neste caso uma conexão existente é desativada e um novo nodo é
colocado no lugar da conexão desativada. Duas novas conexões ligam o novo nodo aos
nodos que participam da conexão desativada. É dado o peso um para a conexão entre a
origem e novo nodo e passado o peso da conexão desabilitada para a conexão que vai do
novo nodo ao destino, como visto na figura 2. Cada mutação expande o tamanho de
genoma adicionando genes. A adição de um novo nodo acrescenta não linearidade (ex.
função sigmóide) em relação a conexão desativada, entretanto essa não linearidade,
inicialmente, modifica pouco a função anterior, mantendo qualitativamente o mesmo
comportamento e permitindo o desenvolvimento de um comportamento original.
Figure 2: Mutação com adição de conexão e nodo.
4.2 - Seguindo genes através de marcos históricos
A origem histórica de cada gene pode ser usada para alinhar os genes de qualquer
indivíduo na população. Assim, dois genes de mesma origem histórica representam a
mesma estrutura (possivelmente com diferentes pesos), uma vez que eles tenham sido
herdados do mesmo ancestral em algum momento no passado. Quando uma mutação
estrutural gera um novo gene, um innovation number global é incrementado e atribuído
ao gene. Assim, este innovation number representa uma cronologia de todo gene na
população, o que leva ao conhecimento da origem histórica de todos os genes ao longo da
evolução.
No momento da operação de crossover são conhecidos quais genes se alinham
através de seus innovation number, como pode ser visto na figura 3. Os genes que não
estão alinhados são chamados de disjoint ou de excess. Os genes disjoint são aqueles que
não existem no segundo pai, mas sua ordem cronológica se encaixa entre os genes deste
segundo. Já os genes excess, são aqueles que não existe no segundo pai e sua ordem
cronológica é maior que a de todos os genes do segundo.
No momento do crossover os genes com os mesmos innovation numbers são
alinhados para a geração da prole. No NEAT a prole pode ser gerada de duas formas. A
primeira é através de crossover uniforme, onde os genes alinhados são escolhidos
aleatoriamente dos pais. A segunda forma é o blended crossover, onde são calculadas as
médias dos pesos das conexões para os genes alinhados. Os genes disjoint e excess são
herdados do pai mais ajustado, caso ambos os pais tenham o mesmo desempenho, são
herdados dos dois pais.
Figure 3: Crossover usando innovation number para alinhar os cromossomos.
4.3 - Protegendo novas gerações
No NEAT as espécies competem inicialmente dentro do seu próprio nicho ao invés de
com toda a população. Desta forma, as inovações topológicas são protegidas e têm tempo
de aperfeiçoarem seus parâmetros antes de competir com outros nichos. A idéia por trás
disso é que novas estruturas necessitam de tempo para alcançar seu potencial para só
então poderem ser eliminadas. Genomas mais simples vivem tanto o quanto competitivo
seja seu desempenho, isto garante que redes menores não sejam trocadas por redes
maiores desnecessariamente.
A classificação da população em espécies é baseada na similaridade topológica.
Esta similaridade é definida por uma função de distância d que é expressa abaixo.
Nesta função, E representa o número de excess, D o número de disjoint, W a
diferença média de pesos, N o número de genes no maior genoma e c1,c2,c3 coeficientes
de ajuste que pondera cada um dos parâmetros. Para a verificação de pertinência de um
genoma no grupo é verificada a distância dele a um membro aleatório do grupo, caso essa
distância seja menor que um δt, que é um limiar de compatibilidade, o indivíduo é
colocado no grupo. Caso um genoma não seja alocado em nenhuma espécie, uma nova
espécie é criada.
No NEAT, organismos de uma mesma espécie possuem um fitness compartilhado
que é usado para calcular o desempenho do seu nicho. Isso evita que um nicho cresça
muito caso muitos dos seus indivíduos estejam com bom desempenho. Assim, é
calculado um fitness ajustado f' para cada genoma de acordo com sua distância para os
restantes no grupo.
Onde sh(δ(i,j)) é 1 caso j seja da mesma espécie que i e 0 caso contrário. Ou seja,
o denominador representa o número de indivíduos de uma espécie. Assim, para cada
espécie é atribuído um número de prole diferente, que é proporcional a soma dos fitness
ajustados de cada membro. A média do fitness ajustado da população é dado por Fk ,
sendo k uma espécie. A soma de todas as médias é dada por Ftot. Com isto, é expresso
quantitativamente o número de indivíduo da prole para uma espécie k como:
Como principal efeito da divisão da população em espécies tem-se a proteção das
inovações topológicas da rede, que tem um período para evoluir antes de ser avaliada
com o restante da população.
5 - Real-time NEAT (rtNEAT)
O NEAT foi projetado inicialmente para executar offline, entretanto, algumas aplicações
necessitam interagir com indivíduos (agentes) enquanto eles evoluem. O NEAT avalia
toda uma geração de indivíduos antes de criar uma nova, isto torna inviável a aplicação
dele em tempo-real. Uma alternativa para isso seria executar toda a população ao mesmo
tempo, coletando constantemente estatísticas de desempenho enquanto os indivíduos
executam. Nesse princípio que se baseia o rtNEAT (Real Time NeuroEvolution of
Augmenting Topologies). Ele modifica o clico de reprodução produzindo apenas uma
nova prole por vez. Abaixo são descritos os passos do algoritmo.
Passo 1 - Cálulo do fitness ajustado
- Como visto na sessão anterior, o fitness ajustado fi’ é dado por fi/|S|, onde S é a
quantidade de indivíduos no nicho.
Passo 2 - Removendo o pior indivíduo:
- Um indivíduo com um desempenho ruim é removido na esperança de que um melhor
o substitua. Entretanto, os indivíduos só são removidos a partir de uma quantidade
especificada de tempo.
Passo 3 - Re-estimando F:
- F precisa ser mantido atualizado para que seja usado na escolha dos pais da espécie
no próximo passo.
Passo 4 - Criando prole:
- Como só é criada uma prole por ciclo, a equação do número de prole não pode ser
utilizada. Neste caso, a probabilidade de escolher a espécie para gerar prole é
proporcional ao fitness médio da espécie comparado com o fitness médio total.
Passo 5 - Reatribuindo agentes para espécies:
- Toda a população precisa ser reatribuída para uma espécie existente baseado no novo
δ t.
Passo 6 - Substituição de um agente antigo por um novo
O algoritmo do rtNEAT é uma adaptação do NEAT original para atender
requisitos de tempo-real. Ele prevê que todo o loop seja executado em intervalos
regulares, ou seja, a cada n ciclos de simulação.
6 - Aplicando rtNEAT ao NERO
O NERO(NeuroEvolving Roboctic Operatives) é um jogo que representa um novo gênero
voltado à aprendizagem de máquina. Seu objetivo é colocar o jogador como um treinador
que ensina comportamentos para times de agentes para que eles atuem em combate
militar. Os agentes, que são os personagens do jogo, começam apenas com habilidade de
aprender, e para se prepararem para combater o jogador deve projetar uma seqüência de
exercícios de treinamento.
O jogador cria os exercícios de treinamento colocando objetos no ambiente e
especificando os objetivos que devem ser atingidos. Esses objetos podem ser inimigos
estáticos, torres inimigas, tanques, bandeiras e paredes. Para determinar os objetivos os
jogadores podem premiar ou punir os agentes por diversos fatores: atacar o alvo, ser
atingido, seguir um amigo, dispersar, abordar o inimigo, etc. Assim, o jogador cria os
exercícios de treinamento e especifica o comportamento desejado.
Cada rede neural controla um agente tanto no treinamento quanto na batalha. No
modo de treinamento, o processo de evolução dos indivíduos ocorrem em tempo-real,
com indivíduo menos aptos sendo substituídos por indivíduos melhor ajustados, como
visto na figura 4.
Figure 4: Evolução dos agentes.
O agente possui diversos tipos de sensores como é visto na figura 5. Os radares de
inimigos são dispostos ao redor do agente e ativam com intensidade proporcional a
distância do inimigo. O sensor identificador de alvo em mira é ativado quando existe um
inimigo na linha de tiro do agente. Os sensores de tamanho do objeto identificam objetos
longos e contínuos, diferente do radar de inimigo que identifica objetos discretos. Já
sensor de linha de fogo detecta o percurso de um projétil e possibilita que o agente evite
ser atingido.
Figure 5: Sensores dos agentes.
No NERO, o jogador pode salvar o estado de seu time em arquivo. Isso possibilita
que um mesmo time seja testado com diversos exercícios, sempre gravando o time atual
quando ele atinge um desempenho satisfatório naquele exercício.
No modo de batalha, quando o jogador inicia o jogo, as redes neurais passam a
controlar os agentes, que atuam conforme o treinamento. Em batalha, diferente do
treinamento, quando um agente é atingido ele leva dano e após ser atingido algumas
vezes o agente é removido do campo de batalha. O jogo termina quando ou um time
destrói todos os agentes do outro time ou quando os dois times chegam do lado oposto,
neste último caso vence a equipe com maior número de personagens no campo de
batalha.
7 – Considerações Finais
A neuroevolução com crescimento topológico baseado no NEAT mostra-se bastante
promissora como técnica de aprendizagem por reforço, visto que soluciona desafios da
área e permite utilização em problemas complexos do mundo real. O registro de marcos
históricos nos genes, a divisão em espécies para proteção de inovações e a evolução
topológica a partir de estruturas singulares são inovações introduzidas pelo NEAT que o
torna um método rápido e eficiente. Este método também é bastante expansível, como é
visto em sua variante de tempo-real, onde populações inteiras evoluem e são avaliadas
simultaneamente de forma assíncrona. O rtNEAT torna possível a construção de jogos
eletrônicos e simuladores sobre o paradigma da aprendizagem de máquina, onde o
personagem pode se adaptar, em tempo-real, em resposta as ações do jogador. O NERO
já é um jogo construído sobre esse paradigma, possibilitando uma co-evolução
massivamente paralela de uma população inteira, e onde o jogador exerce a função de
treinador, criando cenários de treino para times de agentes. Assim, a neuroevolução, além
de promissora para a solução de problemas difíceis do mundo real, dá mais um passo para
a expansão dos domínios de aplicações para o paradigma de aprendizagem de máquina.
Referências
Floreano, D., and Mondada, F. (1994). "Automatic creation of an autonomous agent:
Genetic evolution of a neural-network driven robot". In From Animals to Animals 3:
Proceeding of the Third International Conference on Simulation of Adaptive Behavior.
Gomez, F. and Miikkulainen, R (1997). "Incremental evolution of complex general
behavior". Adaptive Behavior, 5:317-342
Gomez, F. J. (2003). "Robust non-linear control through neuroevolution". PhD thesis,
Department of Computer Sciences, The University of Texas at Austin. Technical
Report AI-TR-03-303.
Igel, C. (2003). Neuroevolution for reinforcement learning using evolution strategies. In
Sarker, R., Reynolds, R., Abbass, H., Tan, K.C., McKay, B., Essam, D., and Gedeon,
T., editors, Congress on Evolutionary Computation 2003 (CEC 2003), 2588-2595.
Piscataway, NJ: IEEE Press.
Moriaty, D. E. (1997). Symbolic Evolution of Neural Networks in Sequential Decision
Tasks. PhD thesis, Department of Computer Sciences, The University of Texas as
Autin. Technical Report UT-AI97-257.
Rezende, S. O, (2002). “Sistemas Inteligentes – Fundamentos e Aplicações”, Ed. Manole.
Stanley, K. O. , Bryant, B.D., Miikkulainen, R.(2005) "Real-Time Neuroevolution in the
NERO Video Game". in IEEE Transactions on Evolutionary Computation, Vol. 9, No.
6.
Stanley, K. O. (2004) "Efficient Evolution of Neural Networks
Complexification", PhD thesis, The University of Texas at Austin
through
Download