universidade federal de santa catarina estudo e ... · 5.1 parte do log gerado para análise do...
TRANSCRIPT
UNIVERSIDADE FEDERAL DE SANTA CATARINA
Estudo e Implementação de Redes Neurais para Aprendizado por Reforço
ANDRÉ CHINVELSKI
Florianópolis - SC
2005/2
ANDRÉ CHINVELSKI
Estudo e Implementação de Redes Neurais para Aprendizado por Reforço
Trabalho de conclusão de curso apresentado como parte dos requisitos
para obtenção do grau de Bacharel em Ciências da Computação
Orientador
____________________________________Mauro Roisenberg, Dr.
Banca examinadora
____________________________________Jovelino Falqueto, Dr.
____________________________________Raul Sidnei Wazlawick, Dr.
Agradecimentos
Agradeço acima de tudo a meus pais: Casemiro Damasio Chinvelski e Maria Inês Chinvelski
que não mediram esforços para conseguir me dar condições de estar aqui e que sempre acre-
ditaram em mim e me apoiaram, e a meu irmão Tiago Chinvelski que me deu muita força,
principalmente no meio da correria final dos últimos meses.
Minha namorada Rafaela Fernanda Macário, que me aguentou nesses últimos meses, mesmo
com todas as dificuldades, sempre me apoiando e me dando forças.
Ao professor Mauro Roisenberg, Dr. que foi sempre muito atencioso, ajudando sempre
que podia. Teve muita paciência comigo e sempre me manteve motivado. Também agradeço
a Luciene de Oliveira Marin, Msc. que esteve participando do projeto, dando idéias para se
chegar a um bom resultado e ajudando na parte de implementação do projeto.
Agradeço a banca por ter aceitado o meu convite e por todas as crítica e sugestões, que
contribuiram para a melhora deste trabalho.
3
Sumário
Introdução 1
1 Inteligência Artificial (IA) 4
1.1 Definição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Breve histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 IA Conexionista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.1 Redes Neurais Artificiais (RNA) . . . . . . . . . . . . . . . . . . . . . 5
1.4.2 Aprendizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.3 Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Agentes 14
2.1 Propriedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Agentes e a Robótica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 Ferramentas Utilizadas 18
3.1 WSU Khepera Robot Simulator . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Desenvolvimento 21
4.1 A arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
i
4.1.1 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1.2 Motivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.1.3 O sistema de RNA proposto . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.4 Configurações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2 O aprendizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2.1 Comportamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3 Etapas do Projeto e Respectivas Metodologias no Desenvolvimento . . . . . . 27
4.3.1 Simulador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3.2 Rede ART1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3.3 O Sistema de Punição (SP) . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4 Implementação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.1 O Sistema de Redes Neurais (SRN) . . . . . . . . . . . . . . . . . . . 30
4.4.2 Simulador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.3 Simulador versus RNA . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.5 Funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5 Resultados 33
Conclusão 39
Bibliografia 40
ii
Lista de Figuras
1.1 Visualização de um neurônio e suas partes . . . . . . . . . . . . . . . . . . . . 6
1.2 Exemplo de topologia de redes diretas . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Exemplo de topologia de redes cíclicas, com retroalimentação da camada de
saída para a intermediária . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 Estrutura da RNA ART1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1 Um agente interagindo com seu mundo . . . . . . . . . . . . . . . . . . . . . 14
3.1 Ambiente Khepera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1 Visão geral, estrutura de RNAs . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2 Visão geral de propagação dos sinais no sistema . . . . . . . . . . . . . . . . . 24
4.3 Khepera em um labirinto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1 Parte do log gerado para análise do sistema . . . . . . . . . . . . . . . . . . . 34
5.2 Resultado simulação, parte 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3 Resultado simulação, parte 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.4 Resultado simulação, parte 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
iii
Resumo
Neste trabalho é proposto um modelo de Redes Neurais Artificiais, juntamente com um sis-
tema de aprendizado por reforço do tipo punição/recompensa que, por permitir adaptatividade,
implementando um sistema que pode ser autônomo, tem aplicação na área da robótica.
No primeiro capítulo são mostrados conceitos básicos de Inteligência Artificial, mais espe-
cificamente sobre Redes Neurais Artificais, dando-se enfoque nas áreas mais importantes para
o entendimento e desenvolvimento deste trabalho. No segundo capítulo são abordadas as Redes
Neurais Artificias e o sistema de aprendizado construído. É dada uma explicação sobre cada
um desses ítens, falando-se de detalhes de implementação e funcionamento geral do sistema.
No último capítulo é feita uma abordagem sobre os resultados obtidos.
Introdução
O aprendizado por reforço, juntamente com arquiteturas de redes neurais artificiais que permi-
tem adaptatividade, são atualmente pesquisadas para o desenvolvimento de agentes autônomos
[21][1][3]. Segundo autores como Barreto [3] e [24], pesquisas envolvendo agentes autôno-
mos estão na sua infância e muitos desses sistemas devem ser construídos e testados para se
consolidar os resultados obtidos [3].
Na robótica, atualmente tem-se o desafio de construir robôs cada vez mais inteligentes.
Para isso, uma parte de suas pesquisas está voltada à Inteligência Artificial[3][21]. Entre os
subcampos utilizados para a criação de agentes autônomos, tem-se: IA Simbólica, Computação
Evolucionária, Lógica Nebulosa e Redes Neurais Artificiais.
No presente trabalho é dado enfoque a modelos de redes neurais artificais adaptativas que
permitem a utilização de aprendizado por reforço e que podem ser utilizadas para aprendizado
em tempo real. Esta pesquisa, portanto, interessa o campo da robótica, na parte da construção
de robôs autônomos, pois no que diz respeito a IA,"robôs autônomos podem ser implementados
por agentes autônomos"[3].
Problematização
Redes neurais artificiais diretas, como a Multilayer Perceptron, com algoritmo de treinamento
backpropagation tem sido usados para uma ampla gama de aplicações como: reconhecimento
da fala, identificação de sinais de radar, diagnóstico médico e na economia (na parte de análise
de investimentos) [7], pois, possuem grande eficácia como aproximadoras universais de funções
[4].
No entanto, não são apropriadas para aplicações com agentes autônomos, como na área
da robótica, por exemplo, onde existem processos dinâmicos que necessitam treinamento não
supervisionado.
1
2
Ambientes para aplicações reais costumam ser apenas parcialmente observáveis e, por isso,
o pré treinamento supervisionado da rede neural pode ser impossível devido a dificuldade de se
conseguir um conjunto de treinamento ideal. Pois, se em tempo de execução do agente aparecer
um valor fora dos limites esperados no treinamento da rede, esta não terá como adaptar-se.
Segundo Carpenter e Grossberg [8] cai-se no dilema da plasticidade/estabilidade, não conseguir
manter a capacidade de aprender(plasticidade) e, ao mesmo tempo, não esquecer o que já foi
aprendido (estabilidade) sem ter que retreinar toda a rede.
Outra limitação para redes diretas seria, por exemplo, aplicações com agentes dinâmicos
onde, para cada ambiente em que o mesmo é inserido as características físicas do meio são
diferentes. Pois para cada estado do ambiente uma rede desse tipo pode ter apenas uma reação,
ou seja, se treinada para um ambiente não poderá ser utilizada em outro que exija comporta-
mento diferente. Como exemplo, podemos citar o uso de um robô que tem por funcionalidade
aprender a locomover-se em labirintos. Quando este tem suas redes neurais artificiais treinadas
para andar em um dado labirinto e depois é colocado em outro diferente, onde os caminhos que
este deve seguir são também diferentes, o robô não mais consegue cumprir seu objetivo, porque
seu comportamento, obtido através do aprendizado, foi feito para outro ambiente. Neste caso, a
solução seria usar um outro tipo de rede neural artificial que pudesse se modificar, fazendo com
que o robô se adaptesse ao novo ambiente da maneira mais eficiente possível.
Sistemas do mundo real, podem possuir um ambiente hostil, mutável e com presença de
ruídos, o que para o agente é um problema, já que este terá que estar observando o mundo ao
mesmo tempo em que toma decisões[6] e, além disso, pode ser necessário respostas rápidas a
cada novo estímulo recebido, portanto, pode ser inviável ter que treinar toda uma rede neural
artificial para cada novo padrão inesperado que apareça, pois este é um processo que exige
grande esforço computacional, o que para sistemas embutidos, por exemplo, pode ser incabível,
ainda mais levando-se em consideração questões como consumo de potência, que é atulamente
um dos grandes problemas para projetistas desse tipo de hardware [20].
Contudo, para um sistema ser adaptativo, é necessário que o mesmo altere seus valores
internos (pesos de uma rede neural) parcialmente, até chegar a um comportamento aceitável. E
para que o agente aprenda em tempo real e de forma autônoma, deve possuir uma arquitetura
de redes neurais, bem como, um sistema de treinamento que permitam a rede ter estabilidade e
plasiticidade e que possa sofrer uma adaptação dos pesos de suas conexões.
3
Objetivos
Estudo de arquiteturas e sistemas (entenda-se como estruturas de redes neurais artificiais com
uso de mais de uma arquitetura) de redes neurais artificiais, entre estas, redes ART por possui-
rem a capacidade de estabilidade e plasticidade e portanto serem importantes para solucionar
problemas que exigem aprendizado em tempo real (ou aprendizado online).
Implementação de um sistema de redes neurais artificiais, utilizando a arquitetura ART1 e
redes MLP, com aprendizado não supervisionado e por reforço, para contornar os problemas
descritos na seção acima.
Validar o sistema implementado, simulando seu funcionamento para avaliar seu compor-
tamento. Para isso o agente autônomo implementado, sem treinamento prévio, deverá obter
sucesso através do aprendizado online (em tempo real), adaptando-se a qualquer ambiente ao
qual seja submetido.
O agente e o ambiente são emulados via software (WSU Khepera Robot Simulator)[23].
Este tem a capacidade de simular ambientes reais. No programa o agente é representado por
um robô com objetivo de movimentar-se em ambientes, os quais possuem obstáculos e podem
ser, inclusive, labirintos. O robô deve conseguir, sozinho, desviar-se dos obstáculos ao mesmo
tempo que é treinado (adaptado ao ambiente).
Capítulo 1
Inteligência Artificial (IA)
1.1 Definição
No mundo acadêmico existem várias definições, dentre as quais: "O estudo das faculdades
mentais pelo uso de modelos computacionais"(Charniak e McDermott, 1985), "O estudo das
computações que tornam possível perceber, raciocinar e agir."(Winston, 1992), "A inteligência
computacional é o estudo do projeto de agentes inteligentes."(Poole et al., 1998), "Automati-
zação de atividades que associamos ao pensamento humano, atividades comum a tomada de
decisões, a resolução de problemas, o aprendizado..."(Bellman, 1978).
1.2 Breve histórico
Formalmente a área foi criada em 1956 em um seminário organizado por John McCarthy reali-
zado no Darthmouth College, reunindo os primeiros pesquisadores da área.
Naquela época haviam muitas expectativas sobre as potencialidades dessa área. Modelos
neurais artificiais baseados em neurônios de seres humanos foram criados, sendo o primeiro
criado por Rosenblatt, e chamado Perceptron. No entanto, em um livro lançado em 1968,
por Minsky e Papert, chamado "Perceptrons: An Introduction to Computational Geometry",
provou-se matematicamente que o Perceptron era limitado, não podendo aprender funções que
fossem não linearmente separáveis, como por exemplo, a fução XOR. Com isso a IA ficou
desacreditada e as pesquisas na área foram abandonadas. Somente na década de 80, as pesquisas
voltaram com força. Um dos motivos foi o surgimento de computadores mais potentes capazes
de rodar modelos de redes neurais mais complexos. Nesta década surgiram as redes de Hopfield,
multilayer perceptron, Kohonen e ART.
4
5
Desde aquela época até os tempos atuais houveram grandes evoluções e a IA se tornou um
vasto campo [24], pois suas aplicações tem trazido soluções a outras áreas, como: robótica,
medicina, prospecção de petróleo, entre outras.
1.3 Estudo
Existem duas linhas de estudo em que se pode dividir a IA, conexionista e cognitiva. Basi-
camente a linha conexionista, também denominada biológica ou ascendente, tenta modelar a
inteligência humana através do estudo e modelagem dos componentes do cérebro, ou seja, os
neurônios e conexões neurais, enquanto que a cognitiva, também denominada simbolista ou
descendente, está focada na forma como o ser humano raciocina, se baseia em símbolos e con-
juntos de regras para modelar sistemas inteligentes. No escopo deste trabalho o aspecto cone-
xionista será mais abordado, no entanto, devido ao fato de redes ART possuírem características
simbólicas, o sistema de redes neurais implementado é híbrido, ou sub-simbólico.
1.4 IA Conexionista
1.4.1 Redes Neurais Artificiais (RNA)
São modelos de redes neurais construídos baseados no estudo da estrutura de neurônios bioló-
gicos e do cérebro humano, com o intuito de obter um sistema artificial de neurônios com o
mesmo comportamento do modelo biológico.
Em geral sistemas artificiais possuem camadas de neurônios artificiais, sendo que estes são
conectados a neurônios de outras camadas, onde entre estas conexões existe um valor agregado,
este valor é chamado peso da conexão. Dessa forma, em RNAs o aprendizado se dá quando
esses pesos são alterados até se obter o resultado esperado.
Atualmente existem várias arquiteturas de RNAs diferentes, cada uma com suas caracterís-
ticas, que serão discutidas.
Fundamentos Biológicos
O cérebro humano é considerado o mais fascinante processador baseado em carbono existente,
sendo composto por aproximadamente 10 bilhões de neurônios. Todas as funções e movimen-
6
tos do organismo estão relacionados ao funcionamento destas pequenas células. Os neurônios
comunicam-se através de sinapses, e juntos formam uma grande rede, chamada REDE NEU-
RAL. As sinapses transmitem estímulos através de diferentes concentrações de Na+ (Sódio)
e K+ (Potássio). Esta grande rede proporciona uma fabulosa capacidade de processamento e
armazenamento de informação (texto extraído de [15]).
O sistema nervoso é formado por um conjunto extremamente complexo de neurônios. Neles
a comunicação é realizada através de impulsos, que quando recebidos são processados. Passado
um limite de ação, dispara um segundo impulso que produz uma substância neurotransmissora
o qual flui do corpo celular para o axônio (que por sua vez pode ou não estar conectado a um
dendrito de outra célula). O neurônio que transmite o pulso pode controlar a freqüência de
pulsos aumentando ou diminuindo a polaridade na membrana pós sináptica. Eles tem um papel
essencial na determinação do funcionamento, comportamento e do raciocínio do ser humano
(texto extraído de [15]).
Os principais componentes dos neurônios biológicos são:
Os dendritos, que tem por função, receber os estímulos transmitidos pelos outros neurô-
nios;
O corpo, também chamado de soma, que é responsável por coletar e combinar informa-
ções vindas de outros neurônios;
E finalmente o axônio, que é constituído de uma fibra tubular que pode alcançar até
alguns metros, e é responsável por transmitir os estímulos para outras células.
(Figura 1.1)
Figura 1.1: Visualização de um neurônio e suas partes
7
Topologias
RNAs são representadas por neurônios e conexões, normalmente agrupados em camadas. Onde
os neurônios de cada camada tem a característica em comum de receberem os sinais propagados
da mesma camada e propagarem esse sinal para a próxima. Topologia diz respeito a forma como
a conexão entre os neurônios é feita. Existem basicamente duas: direta e recorrente(cíclica).
Redes diretas São modelos de redes neurais, onde os sinais são propagados através das cama-
das de neurônios, de forma acíclica, e no grafo das conexões dos neurônios não possui ciclo[3].
Ou seja, existe um único fluxo de dados através da rede, sem realimentação. Como exemplo
podemos citar as redes multilayer perceptron. "Estas redes são atualmente as mais populares
por existirem métodos de aprendizado fáceis de usar"[22]. Um dos algoritmos usados para trei-
namento é o backpropagation, muitas vezes é tão relacionado com essas redes que iniciantes
costumam confundir o termo redes diretas com o nome desse algoritmo de treinamento [3].
Redes diretas tem uma dinâmica limitada não sendo muito convenientes para sistemas di-
nâmicos [22]. Por esse motivo neste trabalho as mesmas serão utilizadas associadas com uma
arquitetura de RNA recorrente, de forma a unir as potencialidades desta, importantes para o
sistema dinâmico, com características de aprendizado da rede direta.
(Figura 1.2)
Figura 1.2: Exemplo de topologia de redes diretas
Redes Recorrentes São modelos de redes neurais, que possuem ciclos no grafo das conexões
entre os neurônios, ou seja com realimentação entre camadas. A realimentação pode ser para a
mesma camada ou para anteriores[3].
8
Esse tipo de rede permite aprendizado não-supervisionado, importante para sistemas autô-
nomos, bem como quando associada com neurônios dinâmicos se torna adequada para repre-
sentar sistemas em tempo real.
(Figura 1.3)
Figura 1.3: Exemplo de topologia de redes cíclicas, com retroalimentação da camada de saídapara a intermediária
1.4.2 Aprendizado
RNAs representam o conhecimento, guardando o valor do peso das conexões entre os neurônios
da rede. O aprendizado em redes neurais ocorre quando esses pesos são alterados para se obter
algum conhecimento. A forma pela qual os pesos das conexões são modificados é determinado
pelo tipo de treinamento da rede.
Aprendizado Supervisionado Nesse tipo de aprendizado ocorre treinamento da rede. É gui-
ado por meio de instruções, ou seja, para treinar a rede apresenta-se a ela um conjunto de
exemplos, onde para cada exemplo há um par de padrões, entrada e saída esperada, onde o
primeiro deve ser aplicado na entrada da rede, e o segundo, comparado com a saída da rede,
afim de verificar a taxa de erro do sinal de saída obtido , para que seja possível modificar o peso
das conexões fazendo com que haja uma adaptação em relação a função que se deseja aprender.
Exemplo desse treinamento é o backpropagation.
Aprendizado Não Supervisionado Não requer valor desejado de saída da rede, o aprendi-
zado se dá pela clusterização dos padrões apresentados, baseado em sua semelhança. Não
9
existe um instrutor e nem qualquer regra que possa guiar o aprendizado. Exemplo: treinamento
de redes competitivas.
Aprendizado por Reforço (semi-supervisionado) É uma forma de aprendizado aplicada em
sistemas dinâmicos. Nesta o agente recebe estímulos do meio e a partir desses tem uma ação.
Se esta for inadequada traz um estímulo negativo do meio como resposta, ou seja, uma punição,
o que faz com que o agente não repita a ação para o mesmo estímulo em um evento futuro.
De forma contrária pode-se, também, aplicar uma recompensa para cada decisão tomada pelo
agente que tenha correspondido em uma resposta adequada do meio. Como pode-se observar,
nesse sistema o aprendizado ocorre na tentativa e erro e por isso pode ser um treinamento um
pouco lento, dependendo da complexidade do ambiente e de quão guiado o aprendizado é.
Depende do objetivo do agente, esse sistema é chamado de semi-supervisionado, pois embora
não haja um professor, como no treinamento supervisionado, é preciso ter um sistemas de regras
que auxilie o agente, ou seja, que não diga o que este deve fazer necessariamente, mas que puna
caso tome alguma atitude que não é adequada, fazendo com que se obtenha um determinado
comportamento. Na prática o aprendizado se dá quando ao sofrer punição/recompensa a rede
tem modificada o valor de algum dos pesos de um dos neurônios. Neste trabalho a mudança
dos pesos se dá de forma aleatória.
Com raízes históricas no estudo de reflexos condicionados, o aprendizado por reforço logo
atraiu o interesse de engenheiros e cientistas da computação por sua relevância teórica e apli-
cações em campos como pesquisa operacional e robótica [6] e por isso também é alvo desse
trabalho.
1.4.3 Modelos
Perceptron
Um dos primeiros modelos de RNA, foi proposto por Frank Rosenblat em 1959 [15]. É uma
rede direta, composta por 2 camadas de neurônios, uma de entrada e outra de saída, onde entre
os neurônios existem conexões. Cada uma dessas conexões possui um peso. A saída desta rede
é binária. Pode ser utilizada para representar funções linearmente separáveis, como AND e OR
[3].
10
Redes Multilayer Perceptron (MLP)
É uma evolução do modelo Perceptron que foi criado por Rosenblatt em 1957. Nesta arqui-
tetura, no entanto, para contornar as limitações do modelo Perceptron, foi inserida uma nova
camada de neurônios, a camada oculta, ou escondida. Isso tornou possível que a rede apren-
desse funções mais complexas. A arquitetura dessa rede é composta de uma camada de entrada
de dados, uma ou várias intermediárias, e uma de saída para o meio.
Rede Competitiva Simples
Rede recorrente, que tem seu nome caracterizado pela forma como ocorre o treinamento. Neste
ao ser apresentado um padrão na entrada da rede, inicia-se uma competição entre os neurônios
para ver qual melhor o representa, ou seja, qual é o neurônio mais parecido com o padrão apre-
sentado. Ao ser escolhido, o neurônio vencedor é adaptado tendo seus pesos ajustados para se
representar melhor a entrada recebida. Esse processo de aprendizado é conhecido como:"winner
take all", o vencedor leva tudo.
Kohonen
Rede recorrente semelhante com a rede competitiva simples, no entanto, nesta, os neurônios
semelhantes são próximos fisicamente e o neurônio vencedor tem seus pesos atualizados bem
como o de seus vizinhos. Uma grande utilidade dessa rede está na forma como clusteriza pa-
drões, mapeando vetores com várias dimensões em duas dimensões, facilitando a visualização
dos dados classificados.
BAM
Memória bi-direcional associativa. Esta é uma rede recorrente heteroassociativa de conteúdo
endereçavel, onde na etapa de treinamento busca-se a estabilização da rede achando um estado
estável. Possui duas camadas de neurônios, cada um ligado consigo e com todos outros de outras
camada. O sinal se propaga de uma camada a outra na procura de informações. A entrada ou
saída da rede depende da direção atual da propagação[22]. É utilizada no processamento de
imagens e para operações na área de finanças[2].
11
Hopfield
Proposta por Hopfield em um artigo publicado em 1982, o qual demonstrava propriedades asso-
ciativas de uma classe de redes neurais[22]. "Seu treinamento visa encontrar o estado de maior
estabilidade possível"[19]. É baseada no conceito de energia da rede, onde esta é proporcional
à troca de estados da rede. Isto é, quanto maior for a oscilação entre um estado e outro na
saída, maior será a energia. É uma rede bináira, com auto-aprendizado e recorrente, utilizada
no reconhecimento de padrões.
Counterpropagation
A rede de Conterpropagation foi proposta por Robert Nielsen em 1987. Esse modelo mistura
duas arquiteturas de redes neurais, uma rede competitiva, que fica na camada intermediária, e
a Outstar proposta por Grossberg [22]. Nesta rede o padrão é apresentado, calcula-se o net e
depois é feita uma competição entre os neurônios para ver qual irá transmitir o sinal para a
camada Outstar.
Essa rede costuma ser eficiente no entanto pouco precisa [22].
"É muito utilizada em classificação de padrões, aproximação de funções, análise e aplica-
ções que requerem compressão de dados"[2].
Redes ART - Adaptive Ressonance Theory (Teoria da Ressonância Adaptativa)
Tem como desenvolvedores, Stephen Grossberg e Gail A. Carpenter em meados da década de
1980. O nome origina-se da forma como o aprendizado e a recuperação da informação ocorrem
na rede. Na física, a ressonância ocorre quando uma vibração de pequena amplitude em uma
frequência apropriada gera uma grande amplitude em um sistema elétrico ou mecânico [25].
Na ART, quando um sinal surge na entrada da rede, este entra em um estágio de reverberação
entre as camadas da rede, na tentativa de se adaptar. Se já é conhecido, a adaptação é rápida,
caso contrário pode haver um longo período de "vai e vem"entre as camadas até que finalmente
seja aprendido. Este processo é caracterizado como ressonância na rede neural.
Existem vários tipos de redes ART, entre estes, ART1, ART2, ART3, FUZZY ART e ART-
MAP. No entanto, dado o escopo deste trabalho vamos abordar apenas a ART1, que foi uma das
RNAs utilizadas.
12
Inspiração Biológica Baseada na memória humana, que tem a habilidade de aprender coisas
novas sem esquecer as que já foram aprendidas no passado. Como exemplo dessa memória
podemos citar nossa capacidade de reconhecer pessoas. Alguém que vá morar longe de seus
pais, mesmo ficando um longo período de tempo sem vê-los e conhecendo pessoas diferentes
nesse meio tempo, ainda sim continuará a reconhecê-los ao voltar.
Dilema da estabilidade-plasticidade Grossberg e Carpenter criaram as redes ART com o
objetivo de contornar o problema existente nas redes neurais de estabilidade/plasticidade. Ou
seja, a capacidade de um sistema poder aprender coisas novas (plasticidade), sem esquecer o
que já foi aprendido (estabilidade)[8].
As redes ART são baseadas em redes competitivas simples, onde para obter as características
desejadas usou-se um mecanismo de realimentação entre suas camadas, junto com um sistema
de controle para informar se a rede está em um processo adaptativo(plastico) ou estável[25].
ART1 Utilizada na clusterização de padrões, possui aprendizado não-supervisionado. Caracteriza-
se por possuir entrada binária.
Topologia Rede recorrente, com duas camadas, F1 e F2, onde a primeira é uma camada
característica de rede direta e a segunda é uma rede competitiva simples.
Funcionamento Quando um padrão é apresentado para a ART1, este é processado em
F1 e propagado para F2, onde ocorre uma competição entre os neurônios para ver qual melhor
representa o padrão apresentado. Após escolhido o neurônio, ocorre uma propagação de F2
para F1 e é analisado se o neurônio escolhido realmente representa a entrada recebida. Neste
ponto, existe uma constante que indica qual o grau de semelhança que deve haver entre os
padrões, de forma que se o neurônio escolhido é apto a representar o padrão de entrada, ele
tem seus pesos adaptados, caso contrário, uma nova competição ocorrerá na camada F2, onde
o ganhador anteriormente analisado estará excluso da competição. Se nenhum dos neurônios
conseguiu "casar"com o padrão apresentado, um novo neurônio será criado para representá-lo.
Ao final, todos os neurônios da camada F2 ficam novamente aptos a participar da competição
para um novo padrão.
(Figura 1.4)
Capítulo 2
Agentes
Agentes são sistemas, também conhecidos como sistemas embutidos, onde estes podem estar
fisicamente embarcados, como em um robô, por exemplo, ou podem ser simplesmente com-
putacionais estando apenas em sistemas de software de computadores[14]. Segundo Kaelbling
[14] o conceito de agente surgiu como uma forma de aproximar as diversas áreas em que se
desenvolviam pesquisas em IA na década de 80, como uma forma de unir conceitos permitindo
mais iteração e troca de conhecimentos entre estas entre estas.
Esses sistemas tem como característica estarem inseridos em um ambiente, e através de
sensores e atuadores interagirem com este. Segundo Russel e Norvig [24], um agente é tudo o
que pode ser considerado capaz de perceber seu ambiente por meio de sensores e de agir sobre
esse ambiente por intermédio de atuadores. (Figura 2.1)
Figura 2.1: Um agente interagindo com seu mundo[14]
14
15
2.1 Propriedades
Os termos agente e ambiente, são usados nos mais diferentes contextos (agentes de soft-
ware ou de hardware, por exemplo), servindo como uma forma de abstração quando se fala em
construção de sistemas. Existem alguns conceitos extras para caracterizar melhor um agente
específico:
Agente reativo simples Não possuem conhecimento global do meio onde estão, suas ações
são reativas, ou seja, baseadas apenas no estado atual do ambiente. Um exemplo desse tipo de
agente seriam os robôs de segunda geração, que são meramente reativos, não possuindo sistema
de aprendizado.
Agente reativo baseado em modelo Guardam informações sobre estados anteriores do am-
biente e podem basear suas ações futuras com base nas ações passadas. Em redes neurais
artificiais esse tipo de comportamento é obtido colocando-se recorrência entre as camadas na
rede, dessa forma a resposta da rede é baseada também no estado anterior.
Agente autonomo Quando a decisão sobre as ações parte do próprio agente e não de quem
o criou. Esse agente é o buscado nesse trabalho. Segundo [14],[21], [3], são díficeis de serem
obtidos. Aqui se procura resolver um problema simples baseado em apenas um aspecto do
ambiente, que são as paredes do labirinto.
Agente racional Ao se construir um agente, é dado um objetivo ao mesmo, então este tem
que contornar as adversidades do ambiente em que está de forma a obter o maior grau de
proximidade possível com o objetivo. Nesse caso se fala também em desempenho do agente,
ou seja, o quão eficaz/eficiente é para determinada função. Segundo Russel e Norvig [24] "É
aquele que age para alcançar o melhor resultado ou, quando há incerteza, o melhor resultado
esperado".
Racionalidade Para cada seqüência de percepções possível, um agente racional deve seleci-
onar uma ação que se espera venha maximizar sua medida de desempenho, dada a evidência
fornecida pela seqüencia de percepções e por qualquer conhecimento interno do agente [24].
16
Na IA geralmente espera-se que um agente seja o mais racional possível, autonomo e que
consiga se adaptar ao ambiente (RUSSEL, NORVIG, 2004). No entanto, para poder medir o
desempenho de um agente é necessário também considerar o seu ambiente e a complexidade
deste. Vejamos alguns aspectos de ambientes:
Grau de visualização Um ambiente pode ter os aspectos relevantes para a tomada de ação do
agente, completamente percebidos ou não pelos sensores. Quando não é totalmente percebido é
preciso dotar o agente de capacidade de adaptatividade, o agente deve ter a capacidade de tomar
decisões, ou seja, ser autônomo, e possuir uma forma de aprendizado de forma a minimizar
o número de ações erradas. Essa forma de aprendizado utilizada em RNAs é chamada de
aprendizado por reforço e consiste em punir ou recompensar o agente a cada decisão tomada
por ele.
Estático e dinâmico[24] O ambiente pode ser dinâmico, ou seja, sofrer alteração em seu
estado enquanto o agente esta tomando alguma ação, ou estático, mantendo-se imutável durante
todo o processo. Ambientes dinâmicos são mais dificeis de serem tratados, por serem mutáveis
exigem maior adaptividade por parte dos agentes, sendo que estes devem estar percebendo o
mundo o tempo todo, diminuindo o tempo de intervalo entre as percepções ou mesmo tentar
fazer uma predição do que irá ocorrer no mundo [14].
Discreto e contínuo Segundo Russel e Norvig [24] a distinção entre discreto e contínuo pode
se aplicar ao estado do ambiente, ao modo como o tempo é tratado, e ainda às percepções e
ações do agente. Ou seja se refere na forma como são vistos as informações do ambiente. Nos
ambientes reais a análise de tempo e distância podem possuir intervalo contínuo de dados.
2.2 Agentes e a Robótica
Segundo Barreto [3], a construção de robôs autônomos é um dos desafios que a IA está enfren-
tando com sucesso nos últimos anos. Pode-se também observar que em congressos de robótica
atuais, como o ARAS 2005 (Automation, robotics and Autonomous Systems)[1] foca-se aspec-
tos experimentais e teóricos dessa área, envolvendo, entre outras, utilização de redes neurais
aritificais, sistemas evolutivos e lógica nebulosa para obtenção de sistemas autônomos inteli-
17
gentes eficientes.
Inteligência Articial e robótica são campos diferentes, no entanto, "agentes autônomos im-
plementam robôs autônomos"[3], por isso para modelar sistemas robóticos inteligentes, pesqui-
sadores tem utilizado os estudos de IA na área de sistemas autônomos.
Capítulo 3
Ferramentas Utilizadas
Todo o projeto foi implementado utilizando-se apenas ferramentas livres, mostrando que ferra-
mentes de software livre podem ser suficientes e eficientes para implementação de projetos.
O sistema operacional utilizado foi Debian Gnu/Linux 3.1 [10], kernel 2.6.8-1-386. Esta é
a última versão estável do debian possuindo tantas facilidades quanto o sistema proprietário da
Microsoft. Possui interface gráfica amigável, auto configurável e de fácil instalação.
A linguagem de programação escolhida foi Java [13] versão 5.0, pois o software usado para
emular o robô é escrito em código Java, portanto para integra-lo com o modelo implementado
houve necessidade dessa linguagem. Sem contar que o Java por ser uma linguagem alto ní-
vel, bem documentada e com suporte a orientação a objetos facilita e agiliza o processo de
programação.
Foi usado ambiente de desenvolvimento Eclipse 3.1 [11], por ser uma excelente ferramenta,
que facilita a criação de código em Java. Através da instalação de pluguins é possível obter
facilidades como automatização da geração de código para interface gráfica. Essa ferramenta é
bastante completa, ajudando programadores na parte de "debug"do código, facilidades na nave-
gação pelos arquivos do projeto a ser desenvolvido, identação do texto, compilação e geração
de código executável automático.
Para o emulador do ambiente e robô, foi usado um sistema pronto, é o WSU Khepera Robot
Simulator [23], desenvolvido na Wright State University.
18
19
3.1 WSU Khepera Robot Simulator
Tenta simular um ambiente real para robô. O simulador é composto de uma arena onde é
possível colocar objetos, como: paredes, pontos de luz, bola e o robô. Este possui 8 sensores de
distância distribuidos ao longo de sua circunferência e duas rodas, roda direita e roda esquerda,
com velocidades que podem variar entre +10 e -10 unidades. A direção e sentido em que o
robô se move é baseado na velocidade das suas rodas. Estas podem ter velocidades negativas
o que faz o robô andar para trás, podem ter as duas velocidades positivas e então andar para
frente, sendo que se as velocidades tiverem mesmo módulo e mesmo sentido o robô descreve
um movimento em linha reta ou, caso contrário, se as velocidades das rodas tiverem módulo ou
sinais diferentes o robô descreve um movimento curvilíneo. Se as velocidades tiverem mesma
intensidade e sinais diferentes o robô gira em torno do próprio eixo.
(Figura 3.1)
Figura 3.1: Ambiente Khepera[23]
Quando o robô se move pela arena, ocorre um leve escorregamento em suas rodas pois,assim
como no mundo real, onde os agentes estão sujeitos a ruidos provenientes do ambiente, o emu-
lador também tenta simular irregularidades, fazendo com que o robô não descreva trajetórias
totalmente regurales. Além disso, os sensores de distância do robô captam distâncias de 0 a
1023 para caracterizar uma entrada contínua, já que assim é o mundo real. Por estes motivos,
e por se tratar de um emulador conhecido no meio acadêmico, sendo referenciado em vários
Capítulo 4
Desenvolvimento
A evolução do projeto pode ser vista por dois aspectos, a criação e desenvolvimento da arqui-
tetura de RNAs e a do sistema para o aprendizado. A arquitetura, em si, já existia, bastando
implementá-la. O sistema de regras para o aprendizado foi desenvolvido ao longo do projeto,
conforme os problemas no aprendizado do agente apareciam. Outra parte do trabalho consistiu
no estudo do simulador bem como alterações do seu código fonte para adaptá-lo as necessidades
do projeto.
4.1 A arquitetura
Sistemas robóticos em tempo real necessitam de redes neurais adaptativas e que permitam serem
treinadas sem supervisionamento. A rede ART1 satisfaz essa condição e por isso foi utilizada.
O modelo utilizado, consiste de um sistema de RNAs que une uma rede ART a várias redes
MLP. Onde, dentre as redes ART, optou-se pela rede ART1. Esta é um pouco menos complexa
que outros modelos ART, no entanto é adequada para a solução do problema proposto.
A arquitetura utilizada nesse trabalho foi proposta pelo professor Mauro Roisenberg, Dr., e
sua co-orientanda de doutorado Luciene de Oliveira Marin. (Figura 4.1)
Na imagem podemos observar o modelo descrito para as redes neurais.
4.1.1 Descrição
Com o objetivo de obter-se um agente autônomo para resolver o problema do robô locomover-se
em um labirinto, com aprendizado em tempo de execução, utilizou-se uma arquitetura recor-
rente, entre as RNAs, onde a camada de saída da segunda rede neural é ligada a entrada da
21
22
Figura 4.1: Visão geral, estrutura de RNAs
primeira (ver figura 4.2). A recorrência é necessária para permitir certo grau de memória, se ba-
seando no estado anterior do comportamento obtido nos atuadores, para gerar uma nova saída,
caso contrário teria-se apenas um comportamento reativo, explicado a seguir (em 4.2.1).
Com isso, obtém-se um sistema capaz de reconhecer vários estados diferentes do ambiente
e para cada uma ou mais respostas possíveis.
O comportamento é ditado pelas MLPs (saída para atuadores), enquanto que a ART é res-
ponsável pelo mapeamento entre o estado do ambiente (sensores) e uma rede MLP referente ao
mesmo.
4.1.2 Motivo
Na robótica um dos desafios atuais é a obtenção de robôs autônomos[3], e é onde entra a IA.
Nesta existem estudos de modelos de redes neurais artificiais capazes de propor soluções. En-
tre estas, destacam-se as redes recorrentes, as quais possuem neurônios dinâmicos [21], como
exemplo pode-se citar as redes ART.
O presente trabalho propõe um modelo de RNA capaz de solucionar o problema de criar
um agente autônomo, representado por um robô, capaz de andar por ambientes na forma de
labirinto consistindo que este não se choque com obstáculos.
Como solução, procurou-se modelar uma rede que pudesse ser adaptativa, com neurônios
que têm seus pesos modificados gradativamente a cada novo estado apresentado.
Levando-se em consideração obter uma rede autônoma, a utilização de redes MLP, unica-
mente, treinadas previamente, com algoritmo backpropagation, por exemplo, não conseguiria
23
resolver . Pois, dessa forma, o agente estaria limitado a dar respostas compatíveis com o con-
junto de dados para o qual recebeu treinamento (supervisionado) e não poderia aprender nada
novo em tempo de operação, sem condenar a estabilidade da rede [25].
A autonomia é importante, pois, para o caso de o ambiente ser um labirinto, se por alguma
ação do meio, o robô sofresse um pequeno desvio de sua rota, este poderia ficar desorientado e
não conseguiria mais sair. Outro problema seria a colocação do robô em um labirinto diferente
daquele para o qual foi treinado, assim o robô também possivelmente teria problemas, pois
poderia tomar ações indevidas a cada obstáculo, como, por exemplo, mudar a direção para
a direita em um determinado estado, levando em consideração que para outro labirinto para o
qual foi treinado essa deveria ser a solução. Sendo assim, torna-se um equívoco já que tratam-se
de labirintos diferentes.
Situações inesperadas, como as citadas, não podem ser resolvidas usando-se apenas redes
MLP, pois estas, sozinhas, não são adaptativas[25], sendo que, adaptatividade é uma caracte-
rística que deve existir para se ter autonomia. Também, não daria para aplicar um treinamento
semi-supervisionado, como o aprendizado por reforço, devido a instabilidade dessa rede.
A alternativa encontrada foi aplicar o uso de uma rede recorrente com saída mapeada para
redes diretas. Assim é possível que a rede esteja em constante treinamento, onde estados des-
conhecidos apresentados a rede, podem ser aprendidos, adaptados ou simplesmente ignorados,
sem que para isso toda a rede precise ser retreinada.
4.1.3 O sistema de RNA proposto
Descrição
Como visto, consiste de uma rede ART1 e várias redes MLP, cada uma ligada a um neurônio
de saída da ART1. Posteriormente foi colocada uma recorrência (ciclo), das saídas da MLP até
a entrada da ART1.
Na figura a seguir, pode-se observar um visão geral do fluxo do sistema.
(Figura 4.2)
O sinal dos sensores é recebido no sistema de RNAs pela camada de entrada da ART1, que
recebe também o sinal de saída anterior da rede. Cada sinal diferente recebido pela ART1 ativa
um neurônio na camada F2(ou camada de saída) dessa rede , criando dinamicamente um novo
24
Figura 4.2: Visão geral de propagação dos sinais no sistema
neurônio caso nenhum dos atuais o represente.
Esse efeito descrito gera uma clusterização dos padrões recebidos, cada um destes é "cha-
veado"agora com uma rede MLP, ligando cada neurônio da camada F2 da ART1 para uma rede
MLP. Nessa etapa pode ser definido um grau de semelhança (pertencente a estrutura da ART)
que vai dizer o quão parecido os padrões devem ser, para serem representados pelo mesmo
neurônio.
Analisando em termos práticos, para o caso do robô no labirinto, por exemplo, essa estrutura
permite que cada estado do ambiente em que o robô esteja, seja mapeado para uma rede MLP,
permitindo que se use um processo de treinamento por reforço nesta até que se obtenha a saída
desejada, ou seja, para cada estado é alterada apenas uma MLP.
4.1.4 Configurações
A ART1 é iniciada com 8 neurônios em sua camada de entrada, 4 para o estado atual de percep-
ção das paredes em relação aos sensores e 4 para a realimentação. Os neurônios da camada de
saída são gerados dinamicamente conforme seja necessário, com pesos top-down e bottom-up
na rede definidos pelas fórmulas da ART1:
top-down: Zij > (B-1)/D, bottom-up: Zji < L/(L-1+M),
onde B, D e L são constantes da ART1 com os respectivos valores (definidos para este
25
trabalho): 1.5, 0.9 e 3.
Já as redes MLP possuem um neurônio na entrada, 3 na intermediária e 4 na saída. O sinal
recebido por esta é sempre o mesmo quando é ativada, de forma que tenha sempre a mesma
saída. Sendo que a saída só irá mudar quando a rede for reconfigurada durante o processo de
aprendizado por reforço.
4.2 O aprendizado
Com o objetivo de ter um sistema autônomo onde o aprendizado pudesse ocorrer em tempo real,
optou-se pelo aprendizado por reforço. Um agente, dessa forma, aprende através da tentativa e
erro [6][21]. Quando uma atitude tomada gera uma ação indesejada o agente é punido. Com
isso o agente tenderá a não mais tomar aquela ação.
As punições são aplicadas após ser feita uma análise do comportamento para uma dada
ação. Para isso é criado um conjunto de regras, chamado sistema de punição. Primeiramente
definiu-se os objetivos para o agente, depois foi feita uma análise do comportamento do mesmo,
com o intuito de verificar se estava sendo obtido o resultado esperado. Definiu-se como objetivo
para o robô do simulador não chocar-se com as paredes do ambiente, e se possível desviá-las
pegando uma rota ainda inexplorada.
De forma a minimizar a dificuldade, inicialmente criou-se um agente autônomo apenas re-
ativo, ou seja, que simplesmente evitava a colisão. Para isso uma base com poucas regras foi
necessária. Como exemplo de regra utilizada, pode citar-se uma que punia o robô quando o
mesmo não variava suas coordenadas por um certo tempo (pois estava parado enquanto devia
estar se locomovendo).
As regras servem apenas para apontar se uma ação tomada pelo agente está errada, posteri-
ormente conforme este vai ganhando experiência essa ação tomada pode se manter ou não, ou
seja, é uma espécie de "instinto"para este.
Com o sistema inicial de aprendizado por reforço colocado, com as regras, "não gire"e "não
fique parado"por muito tempo, no agente, observou-se que, apesar da pouca eficiência, de fato o
agente ficava reativo e com o passar do tempo o número de punições diminuia. No entanto, esse
processo de aprendizado era muito demorado porque o agente muitas vezes estagnava em um
mesmo movimento de ficar andando uma posição para frente e uma para trás, incessantemente,
26
o que não estava errado, segundo as regras que o robô seguia, até que devido ao escorregamento
que ele ia sofrendo em suas rodas acabava chocando-se e sendo punido. Para contornar o
problema, foi feita uma regra de punição a "longo prazo", que estabelecia que se o agente
repetisse por um determinado tempo a mesma ação, este seria punido.
O sistema melhorou, mas ainda assim, estava complexo para ser analisado, com um processo
de aprendizado lento e não estava chegando ao comportamento adequado.
Para simplificar o sistema de regras, a análise do comportamento do robô e facilitar seu
aprendizado, substituiu-se as 8 entradas do agente provenientes dos sensores. Foram criadas
coordenadas geográficas (norte, sul, leste, oeste) e estas passaram a ser as entradas do agente,
4 coordenadas geográficas atuais indicando onde existe parede e 4 referentes ao último movi-
mento realizado.
A entrada da rede ART é binária, portanto, simbolizou-se 1 quando ativo e 0 inativo, ou
seja, parede ao leste, então a entrada da rede referente à leste era ativada com 1. Assim, para
uma configuração do ambiente onde houvesse parede a norte e sul, por exemplo, o vetor binário
recebido na entrada da rede seria 0101, onde se tem, respectivamente, um bit para leste, norte,
oeste e o último para sul.
Esse novo sistema funcionou, e fez o agente adaptar-se rapidamente a ambientes e labirintos
e tornou mais fácil a análise humana. Ficando apenas uma restrição: caso o robô seja colocado
em um labirinto com uma bifurcação, não garantirá sucesso na tomada de sua decisão.
4.2.1 Comportamento
Evoluiu de uma etapa inicial em que o sistema, aplicado na prática, aprendeu a não colidir com
obstáculos, demonstrando comportamento reativo. Nesta fase, ainda não estava sendo capaz de
desviar-se de um obstáculo e prosseguir a busca por novos caminhos, ou percorrer um labirinto,
por exemplo. Posteriormente para que isso fosse possível foi aplicada a realimentação, para
basear o comportamento atual no anterior, na hora de tentar pegar um novo caminho.
A realimentação, ou recorrência, é quando ocorre uma seqüência de propagação do sinal
pela rede de forma cíclica, ou seja, o sinal se propaga até a última camada e é reenviado, após,
para uma camada anterior. Para que o sistema não fosse meramente reativo, foi colocada uma
recursão entre a saída da MLP e entrada da ART1 (ver figura 4.2) . Com isso conseguiu-se
diferenciar mais estados, pois foi possível decidir através do estado atual dos sensores e da
27
saída da rede anterior.
(Figura 4.3)
Figura 4.3: Khepera em um labirinto
Na seguinte figura, observa-se o robô em um ambiente na forma de labirinto. Devido a
existência da recorrência, depois de o robô ter aprendido a andar pelo labirinto em um sentido,
neste caso no sentido horário, sem prejuízos ao aprendizado obtido pela rede, poderia-se fazer
o robô andar em sentido anti-horário. Pois apesar de os estados, referentes as paredes, serem os
mesmos, em relação ao comportamento anterior (recorrência) seriam diferentes, fazendo com
que mapeamentos para redes diretas diferentes fossem feitos.
4.3 Etapas do Projeto e Respectivas Metodologias no Desen-volvimento
Esta sessão trata da metodologia utilizada em cada etapa do projeto. Expõem-se as técnicas
e ferramentas utilizadas para facilitar o desenvolvimento e solucionar problemas encontrados.
A ordem em que aparece cada uma das subsessões é cronológica, caracterizando as principais
etapas do projeto.
4.3.1 Simulador
O primeiro passo do projeto consistiu em avaliar o simulador, ou seja, estuda-lo e testa-lo. Para
isso foi implementada e utilizada uma rede MLP, pré-treinada com o algoritmo de aprendizado
backpropagation, utilizando alguns exemplos de ações esperadas do robô quanto a presença
de obstáculos no seu caminho. Como exemplos de ações esperadas, que foram incluídas no
treinamento, pode-se citar: caso parede a esquerda e a frente, vire a direita; caso paredes nas
28
laterais, ande para frente... e assim por diante para vários casos imaginados. Posteriormente foi
aplicado no robô a RNA treinada com esses casos.
O resultado obtido foi satisfatório, o robô desviou-se de obstáculos para os quais sua rede
neural havia sido treinada, demonstrando boa iteração entre as percepções do Khepera, proces-
samento da RNA e posterior atuação das rodas.
É importante observar, que o simulador, além de funcionar como especificado, mostrou-se
fácil de usar, bem documentado e com código aberto e muito legível, devido principalmente
a sua implementação com paradigma de programação Orientada a Objetos (usando Java [13]),
bem organizada utilizando estrutura de classes com herança e polimorfismo, bem como utili-
zando nomenclatura padrão.
As RNAs implementadas, também em Java [13], foram adicionadas como um módulo do
software simulador Khepera. O acesso a essas, pelo software, se dá por meio de uma interface
disponibilizada no Khepera para implementar rotinas de controle.
4.3.2 Rede ART1
A rede ART1 possui um fluxo complexo de propagação de sinal. Por isso, com o objetivo
de ter uma implementação clara e com fácil manutenção, foi necessário um estudo detalhado
da rede para poder se fazer uma boa modelagem, antes de começar a construção do código,
caso contrário, este poderia ficar mal estruturado tornando muito difícil analisar a seqüência de
propagação do sinal na rede e eventualmente a parte de depuração de erros.
O paradigma de programação orientado a objetos, pode facilitar a parte de criação e manu-
tenção do código, já que permite uma maior clareza e estruturação deste, tornando mais fácil
modificá-lo ou mesmo estendê-lo.
De modo a facilitar e agilizar o processo de implementação, pode ser conveniente o uso de
metodologias. Entre estas, existem as ágeis, onde atualmente se encontra muito em evidência a
"Extreme Programming"[16]. Nesta, testes são feitos para validar cada etapa da implementação,
permitindo a correção de erros, tanto de código quanto de lógica, na medida em que aparecem. É
possível que sua utilização tenha sido responsável pela pequena quantidade de erros no código
ao final da implementação, sem contar que o sistema de testes facilitou significativamente o
trabalho tornando-o empolgante em todas as etapas, pois neste tem-se o desenvolvimento em
pequenos módulos onde sempre há uma parte operante do sistema.
29
As redes ART são ainda pouco usadas [3]. É difícil encontrar pesquisas explorando o seu
potencial. Para sua implementação foram feitos estudos utilizando o livro do Skapura [25] ,
o qual faz uma análise detalhada encima da ART1, bem como dos artigos [12], [18] (estes
como forma complementar) para entender o funcionamento e algoritmo da rede. A estrutura do
modelo multi-camadas teve sua implementação baseada na descrição de [24] e de [22].
4.3.3 O Sistema de Punição (SP)
Para que o aprendizado por reforço ocorra, um sistema de regras deve ser criado como forma
de avaliar as ações do robô no ambiente e em resposta puni-lo ou não. Esse sistema é chamado
Sistema de Punição.
Achar um SP adequado depende, além de conhecimento do tipo do ambiente, do agente e
objetivos, certa criatividade e, posteriormente, muitos testes com análise do comportamento do
agente, de forma a, com base nas observações feitas, fazer um refinamento do sistema de regras.
Ferramentas gráficas e logs mostrando o estado do sistema a cada instante, são importantes na
análise do comportamento do agente ao receber punição (como pode ser visto nos gráficos da
simulação no capítulo Resultados). É preciso ver se está sendo recebida punição no momento
certo, pois pode haver erro lógico ou de código, ou as regras estarem mal formuladas. Por isso
um gerador de gráfico dinâmico, bem como uma tela de status foram implementados com o
intuito de possibilitar visualizar os eventos na hora da simulação, o que tornou mais rápida a
verificação do processo de aprendizagem.
A construção das regras do SP, foi um processo feito em etapas, onde buscou-se inicialmente
definir metas com níveis de complexidade pequenos e, com isso, também um SP simples. No
início, por exemplo, a única regra, para o sistema em questão, era que o agente não deveria
ficar parado, o que não necessariamente faria ele conseguir andar por um labirinto, nem mesmo
o impediria de ficar girando em torno de si. Com a evolução e aprimoramento das técnicas
de punição estes problemas vão sendo resolvidos. Esta foi uma etapa caracterizada por muita
tentativa e erro.
30
4.4 Implementação
4.4.1 O Sistema de Redes Neurais (SRN)
A implementação, em particular, das redes, foi feita seguindo-se o algoritmo proposto em [25]
para ART1 e em [22] para MLP. Aqui será tratado apenas alguns detalhes e como foi feita a
união das duas estruturas em uma.
No sistema, cada neurônio da saída da ART (F2) está associado a uma rede direta através
de um "hashmap". Como os neurônios da camada F2 da ART internamente são guardados em
um vetor, sempre quando uma saída da ART é selecionada, é possível saber o valor do índice
do vetor do qual ela veio, e este valor é o usado como chave do hashmap. A rede MLP é o valor
guardado correspondente a essa chave.
A estrutura de dados utilizada para guardar os neurônios da F2 da ART é uma lista enca-
deada, para permitir que sejam adicionados dinamicamente. Quando um neurônio é gerado
dinamicamente, uma MLP também surge, com seus pesos aleatórios.
A ART foi configurada com oito neurônios na camada de entrada. Quatro correspondentes
ao estado atual do ambiente e quatro correspondentes ao último movimento realizado (norte,
sul, leste ou oeste), o grau de semelhança para padrões apresentados foi setado para um. As
redes MLP, possuem dois neurônios na entrada, três na intermediária e dois na saída. O valor
do sinal disparado quando uma MLP é sempre o mesmo, 0.5.
4.4.2 Simulador
O simulador Khepera é um software implementado em Java, possuindo seu código fonte dispo-
nível. Para implementar o controle do robô, existe uma classe, chamada "RobotControler"que
deve ser estendida. Esta dispõe de métodos para mudar a velocidade das rodas, bem como para
pegar o valor dos 8 sensores de distância. A classe possui um método responsável pela rotina de
controle, ou seja, que é iniciado por uma thread no começo da simulação. Como para o sistema
de punição necessitamos saber as coordenadas geográficas do robô, foi preciso entrar no código
fonte do simulador para dar acesso, através da rotina principal, da posição do robô e seu ângulo.
Um problema também foi acertar o tempo de dormida da rotina que controla o robô (sleep).
Pois o robô leva um tempo médio de 130 milissegundos para mudar sua posição, quando a
velocidade das rodas está no intervalo [-1,1], que foi à usada. Isso é muito importante saber,
31
pois quando se está analisando se o robô está se movendo ou não, é preciso fazer isso baseando-
se em um intervalo de tempo.
Para conseguir isso foram feitas algumas simulações para pegar o tempo que o robô levou
para se locomover e então pegou-se o valor de tempo mais alto obtido. Então garante-se que o
robô vai ter tempo de se movimentar nesse tempo.
4.4.3 Simulador versus RNA
Como a rede ART possui entrada de dados binária, e os sensores do simulador tem valores de
0 a 1023, criou-se uma função "treshold", ou seja, para transformar esses valores para binário
convencionou-se uma distância limite que o robô poderia chegar em relação a um obstáculo,
a partir do qual seu estado (para a ART) passa de 0 (não possui obstáculo) para 1 (possui
obstáculo).
A saída das RNAs também precisou de um treshold. Estas são responsáveis pela velocidade
das rodas e podem ter o valor igual a 1 ou -1.
4.5 Funcionamento
O sistema feito possui a seguinte seqüência de funcionamento para o exemplo do robô Khepera:
1) robô percebe ambiente através de sensores
2) a rede ART processa a informação obtida nos sensores e cria um novo neurônio (na
camada F2) para representá-la.
3) a este neurônio criado é associada uma rede MLP, a qual será responsável pelo compor-
tamento do robô, ou seja, agirá sobre os atuadores desse agente.
4) a rede MLP criada gera uma saída. Caso esta seja satisfatória, a rede é recompensada,
nada acontece, esta rede já está mapeada com um neurônio da ART. Se a saída é inválida, ou
seja, o robô bateu em uma parede, esta rede é punida, alterando-se aleatoriamente o peso de
algum neurônio de uma das camadas da MLP, até que o robô tenha uma ação que gere um
movimento válido.
Como pode-se observar, está sendo mexido em apenas uma rede MLP, a modificação dos
seus pesos não irá alterar a resposta gerada pelas outras MLPs associadas a outros neurônios do
Capítulo 5
Resultados
O projeto seguiu uma linha evolutiva de desenvolvimento, sendo construído a pequenos passos,
onde sempre que eram conseguidos resultados adequados passava-se a uma nova etapa.
Na implementação das RNAs, obteve-se bons resultados nos testes realizados para analisar
o comportamento das mesmas. A maior parte do tempo foi despendido no sistema de punição
do agente que precisou contornar deficiências da ART1.
A princípio esperava-se ter a ART1 como "chaveador"único para cada entrada da rede. No
entanto, foi constatado que, mesmo ajustando as constantes de semelhança para padrões de
entrada do sistema iguais a 1, ou seja, em teoria seria o máximo de semelhança possível, não
alcançou-se 100% de semelhança de início, para o mapeamento de entradas da rede ART1 com
os neurônios de saída. Isso torna mais lento o processo de aprendizado do agente, pois quando
uma mesma sabida da rede é utilizada para mais padrões, onde esses deveriam gerar saídas
diferentes, um altera a rede MLP treinada para o outro.
Outro problema foi o escorregamento das rodas fazer com que o robô recebesse punição em
situações indevidas. Com isso é sempre possível receber punição, mesmo após longo treina-
mento.
Para solucionar tais problemas e tornar mais fácil a criação de regras para o robô, estabele-
cemos um processo de punição baseado em coordenadas, norte, sul, leste e oeste, onde o robô
anda sempre para frente com exceção das vezes em que o mesmo choca-se em um obstáculo
e precisa recuar para conseguir analisar a situação e tomar a trajetória correta. Com isso a
recorrência da rede ficou não mais em função do antigo movimento das rodas, mas sim da úl-
tima trajetória dele em termos de coordenada geográfica. A partir dai foi feito refinamento das
técnicas de punição e através da análise do comportamento do robô e dos dados de log sobre
33
34
o sistema de punição percebeu-se que o objetivo havia sido alcançado. O fato do robô parar
e analisar o ambiente antes de tomar uma ação sanou o problema com o escorregamento nas
rodas.
(Figura 5.1)
Figura 5.1: Parte do log gerado para análise do sistema
Na figura acima, é possível analisar momento a momento, durante a simulação, o estado
do sistema. Nos 4 primeiros sinais tem-se o estado atual captado pelos sensores, ou seja, o
primeiro bit indica obstáculo a oeste, o segundo a norte, o terceiro leste e o quarto, sul. Após
temos 4 bits correspondentes ao movimento anterior, também no sentido oeste, norte, leste e
sul. A ação corresponde a saída da rede MLP em função da entrada recebida pela ART. Como o
robô só pode andar para uma direção, recebe punição se a rede MLP disser que o mesmo deve
andar em mais de uma direção ao mesmo tempo. Isso pode ser observado no arquivo de log,
onde "P"indica que o agente está sendo punido e em seguida vem o status da punição. Por fim
é dito o ângulo do robô para permitir analisar se a conversão dos sinais obtidos nos sensores de
distância para coordenadas geográficas não esta tendo problemas.
O robô como visto, teve seus movimentos restritos a norte, sul, leste ou oeste. Sempre
que precisar mudar a direção ele pára, gira 90 graus em torno do próprio eixo e volta a se
movimentar. Foi uma escolha feita para agilizar o trabalho, mas em nada restringe o objetivo
final do mesmo.
A seguir é mostrada uma simulação, através dos gráficos, onde pode-se observar a conver-
gência do número de punições a zero, demonstrando o aprendizado da rede. Na telas a seguir
podemos observar 3 partes diferentes: 1) o robô no labirinto. 2) log do sistema, onde é possível
analisar o comportamento do robô. 3) gráfico que indica o número de punições e recompensas.
A linha azul indica o número de recompensas e a vermelha o número de punições.
(Figura 5.2)
Nessa primeira figura o robô está andando pela primeira vez no labirinto. Nesse momento
ele reconhece os obstáculos. Fazendo uma análise do gráfico (3) é possível ver que se está
recebendo punições devido a ações inadequadas que o mesmo está tomando. Podemos dizer
35
Figura 5.2: Resultado simulação, parte 1
que esta é a etapa de aprendizado.
(Figura 5.3)
Nesse momento o robô já percorreu todo o labirinto mais de uma vez, observa-se que não
está mais recebendo punição, apenas recompensa. E como podemos ver na última imagem
(abaixo) notamos que com o passar do tempo recebe-se apenas recompensa pois o robô já está
perfeitamente adaptado para o dado ambiente (labirinto).
(Figura 5.4)
Por fim, foi observado que conseguiu-se chegar a um agente inteligente com aprendizado
autônomo em tempo de execução, usando o modelo proposto na descrição do projeto. No emu-
lador khepera ao ser colocado em labirintos o robô tem mostrado bons resultados, se adaptando
36
Figura 5.3: Resultado simulação, parte 2
rapidamente as configurações do ambiente, para casos onde não existam bifurcações e quando
as paredes do corredor do labirinto não estão muito distantes, pois os sensores do robô precisam
perceber as paredes para conseguir andar sem ter problemas. Um exemplo de ambiente labirinto
podemos ver na imagem a seguir.
Conclusão
Ao se estudar a fundo um campo da inteligência artificial, como as Redes Neurais Artificiais,
percebe-se que assim como dito por autores como [3] e [24], em IA muito ainda tem a se
descobrir. Na área estudada para o presente trabalho, existe uma grande gama de modelos
diferentes propostos. Entre estas, como em [26], tem se feito uso também de estruturas neurais
com sistemas evolucionários. Todos estes trabalhos realizados são importantes pois ajudam
a construir e solidificar resultados, aumentando os estudos que podem ser feitos nessa área e
facilitando o trabalho de outros pesquisadores que podem se valer desses.
Neste trabalho foi abordado o uso de uma estrutara de redes neurais com aprendizado por
reforço, para modelar um agente inteligente de forma que esse aprendesse a mover-se por um
labirinto. No final do trabalho obteve-se o resultado esperado. Ocorreram alguns problemas du-
rante o desenvolvimento do projeto devido a imprevistos no comportamento do Khepera, como
o escorregamento nas rodas, por exemplo, e o cálculo do tempo aproximado que o robô levava
para mudar a posição(x,y). Não estava havendo uma boa convergência para o aprendizado ideal
do robô, com isso um sistema de punição diferente foi construido nas etapas finais do projeto,
este constituido de coordeandas geográficas, não permitindo o robô andar para trás (a menos
que fosse necessário para conseguir girar em torno do próprio eixo) e parando para analisar
o ambiente na hora de decidir por uma nova ação (no caso da troca de estado). Emulando o
agente no simulador Khepera, percebeu-se que ao coloca-lo em um labirinto o mesmo conse-
guiu aprender a deslocar-se através deste, sendo que o número de punições tendeu a zero com
o passar do tempo, demonstrando que estava havendo aprendizado. Isso indica que o trabalho
realizado é válido para construção de agentes autônomos.
Além de redes MLP levou-se em consideração as redes ART1 e ART2, sendo que a primeira
foi escolhida por ser suficiente para validar o modelo proposto. A segunda poderia ter sido feita
com regras de punição diferentes, por ser determinística se aplicada ao problema proposto,
devido a sua capacidade de entrada de dados de forma analógica, conseguindo representar de
38
39
forma ideal o ambiente real. Devido a escolha da ART1 foram utilizados "thresholds"para
trabalhar com entradas não binárias, transformando dessa forma entradas analógicas em digitais.
Em trabalhos futuros seria interessante a implementação da ART2 e com isso uma mudança
no sistema de punição atual. Bem como implementar uma proposta para garantir o correto
funcionamento da rede mesmo em um ambiente com bifurcações
Referências Bibliográficas
[1] ARAS 2005 "The International Conference on Automation, Robotics
and Autonomous Systems ARAS 2005”, site acessado em 23/10/2005:
"http://www.icgst.com/ARAS05/conference/index.html"
[2] ALMEIDA, M. A. F., BARRETO, S. "Introdução as redes neurais artificiais”,
site acessado em 17/10/2005: "www.eps.ufsc.br/disciplinas/fialho/aprenant/grupo_6/
grupo_61.html".
[3] BARRETO, JORGE MUNIZ"Inteligência Artificial no Limiar do Século XXI”, Impresso
por Duplic - Prestação de Serviços, Florianópolis (1999).
[4] BASSO, D.M., ENGEL, P.M."Uma Abordagem Conexionista para Geração de Padrões”,
XXV Congresso da Sociedade Brasileira de Computação, São Leopoldo, RS (2005).
[5] BITTENCOURT, GUILHERME"Breve história da Inteligência Artificial”, site acessado
em 26/09/2005: "www.das.ufsc.br/gia/history/", Florianópolis.
[6] CARLOS H. C. R."Aprendizado por reforço”, Instituto Tecnológico de Aeronáutica, São
José dos Campos(1999).
[7] CARDON, A., MÜLLER, N. D."Introdução as redes neurais artificiais”, site acessado em
17/10/2005: "http://www.ulbra.tche.br/ danielnm/ia/rna/rna.html".
[8] CARPENTER, A. GAIL , GROSSBERG, STEPHEN"Invariant Pattern Recognitin and
Recall by an Attentive Self-Organizing ART Architecture in a Nonstationry World”, IEEE
First International Conference on Neural Networks, San Diego, CA (Junho de 1987).
[9] CARPENTER, A. GAIL , GROSSBERG, STEPHEN"A Massively Parallel Architecture
for a Self-Organizing Neural Patten Recognition Machine”, Computer Vision, Graphics,
and Image Processing, 37:54-115, 1987
40
41
[10] www.debian.org"Site do Sistema Operacional GNU/Linux Debian”, Site acessado em:
24/10/2005..
[11] www.eclipse.org"Site da plataforma Eclipse”, Site acessado em: 24/10/2005..
[12] HEILEMAN G.L., GEORGIOPOULOS M., ABDALLAH C."A Dynamical Adaptive
Resonance Architecture”, IEEE.
[13] java.sun.com"Site da Tecnologia Java”, Site acessado em: 24/10/2005.
[14] KAELBLING, LESLIE PACK "Learning in Embedded Systems”, A Bradford Book, Mas-
sachusetts (1993).
[15] KAETSU, DEISI Y., TATIBANA, CASSIA Y."Redes Neurais”, site do departa-
mento de informática da Universidade Estadual de Maringá. Acessado em 05/10/2005:
"http://www.din.uem.br/ia/intelige/neurais2/".
[16] KENT BECK "Programação Extrema ( XP ) Explicada: Acolha as Mudanças”, Editora
Bookman (2004).
[17] KOVÁCS, ZOLT LÁSZIO "O Cérebro e a sua mente: uma introdução a neurociência
computacional”, Edição Acadêmica, São Paulo (1997).
[18] MARTIN E. "Visualisation of processes in ART neural networks”, Technical Report. Vic-
toria University of Wellington, Department of Computer Science. (1993).
[19] Souza, M., Silva, H. M."Redes Neurais com Aprendizado por Reforço:Estudos e Aplica-
ções”, Trabalho de conclusão de curso, UFSC (2002).
[20] MARWEDEL, P."Embedded System Design”,2nd edition, Kluwer Academic Publishers
(2003).
[21] ROISENBERG MAURO"Emergência da Inteligência em Agentes Autônomos através de
Modelos Inspirados na Natureza”, Tese de doutorado submetida a Universidade Federal
de Santa Cataria, Florianópolis (1998).
[22] ROISENBERG MAURO"Curso de Redes Neurais”, site com curso de Re-
des Neurais do professor Dr. Mauro Roisenberg. Acessado em 29/10/2005:
"http://www.inf.ufsc.br/ mauro/ine6103/slide/cursoredesneurais/".
42
[23] PERRETTA S. J., GALLAGHER J. C."WSU Khepera Robot Simulator Manual”, 2003.
[24] NORVIG, P., RUSSEL, S."Inteligência Artificial”, Editora Campus (2004).
[25] FREEMAN J.A., SKAPURA D.M."Neural networks, algorithms, applications, and pro-
gramming techniques”, Addison-Wesley Publishing Company, (1991).
[26] XIN L., VADAKKEPAT, P., LEE, T. H., PENG, X., KIM, P.K."Comparasion of Khe-
pera Robot Navigation by Evolutionary Neural Networks and Pain-based Algorithm”,
Department of Electrical and Computer Engineering , National University of Singapure,
IEEE(2002).