-
O que é o LIDA?
O
LIDA (Learning Intelligent Distribution Agent) é um sistema
cognitivo computacional integrado que modela alguns aspetos
cognitivos de sistemas biológicos. Está baseada na ciência
cognitiva e na neurociência cognitiva.
Estrutura
básica de funcionamento do LIDA se baseia nos seguintes aspectos:
a.)
A maior parte das funções cognitivas humanas são baseadas ciclos
cognitivos,
b.)
Estes ciclos cognitivos servem como base para a cognição, onde os
processos cognitivos de maior nível são realizados.
O Ciclo
cognitivo no LIDA:
O ciclo
cognitivo do LIDA pode ser dividido em três fases:
Entendimento
Atenção
(consciência)
Seleção
da ação e de aprendizagem
Atividade
1
Ciclo
cognitivo
O
ciclo cognitivo está dividido em:
Perception
Busca
de sentido à uma cena atual. Este processo envolve o
reconhecimento de objetos, a identificação de indivíduos,
categorização, o reconhecimento de relações, situações, ações
sentimentos e eventos. A percepção de baixo nível inclui a
detecção de características (cor, textura, forma, movimento,
etc) e ocorre na memoria associativa perceptual (perceptual
associative memory),
já as percepções de alto nível são o resultado da criação de
estruturas operando no workspace
e recuperando informação da perceptual
associative memory e
da memoria sensorial.
A
figura 1 ilustra esse processo.
Figura
1
Memory
Retrieval
As
memórias utilizadas pelo LIDA são: episódica e de eventos.
A
episódica é dividida em duas: transitória, que pode durar uma
hora ou um dia, e declarativa, que pode durar a vida toda.
O
conteúdo do workspace
serve como dica das memorias episódicas de conteúdo direcionado,
a qual retorna para o workspace
uma associação local. Por exemplo, a imagem de um rosto no
workspace
pode
dar uma associação local como um nome, e a imagem de você
falando com essa pessoa em um restaurante algumas semanas atrás.
A
figura 2 ilustra esse processo.
Figura
2
Concious
Broadcast (Transmissão da consciência)
A
função da transmissão da consciência é recrutar recursos para
lidar com a situação atual. Vários tipos de recursos podem ser
recrutados, porém a transmissão de consciência é dirigida
principalmente à memoria de procedimentos.
A
figura 3 ilustra esse processo.
Figura
3
Action
O
sensorial-motor, que foi inicializado em função da ação
escolhida, possui a ação selecionada. Carregar essa informação
requer a informação sensorial que é obtida diretamente da
memoria sensorial. Os ciclos contínuos de sense-act-sense-act...
ocorrem a uma velocidade muito mais alta do que os ciclos
cognitivos mais complexos.
As
ações podem produzir efeitos internos, externos ou em ambos para
o ambiente e com isso o ciclo cognitivo encerra. Após isso se
inicia um novo ciclo cognitivo.
A
figura 4 ilustra esse processo.
Figura
4
Atividade
2
Introduction:
A
utilização do Framework LIDA pode ser feita após um entendimento
básico do modelo. Esse modelo é conceptual da mente e um modelo
computacional que proveem uma arquitetura para agentes autônomos.
A implementação do modelo resulta no Framework,
mas o modelo ainda não está completamente implementado e pode ter
conceitos ainda não disponíveis em sua implementação
(Framework).
O tutorial apresenta as bases do design e a implementação de
agentes baseados no modelo LIDA utilizando o LIDA Framework.
O tutorial foi estruturado da seguinte forma:
Detalhamento das especificações dos
módulos, processos e estrutura de dados fundamentais do
Framework;
Breve descrição de como é a arquitetura
de um agente e como ela é declarada usando um arquivo XML;
Descrição das implementações padrão dos
módulos, processos e estrutura de dados do Framework;
Apêndices com detalhes adicionais sobre o
Framework.
a)
The LIDA Model
O modelo LIDA é conceptual, amplo e
computacional que abrange uma grande parte da cognição humana. O
modelo é baseado principalmente na teoria do Global Workspace
(Baars 1988, 2002) que implementa um bom número de teorias
psicológicas e neuropsicológicas. A arquitetura computacional de
LIDA é derivada do modelo cognitivo LIDA.
Cada agente autônomo, seja humano, animal ou
artificial, deve frequentemente tomar amostras (sense) de seu
ambiente e selecionar uma resposta apropriada (act). Agentes mais
sofisticados como os humanos processam (dão um sentido) à
entradas para facilitar sua descrição. A vida de um agente pode
ser vista como a sequencia continua de estes ciclos cognitivos.
Cada ciclo é composto por unidades de detecção, decisão e ação.
Durante cada ciclo cognitivo o agente LIDA
primeiro faz a verificação de sua situação atual, a melhor
possível, assim ele atualiza sua situação interna e externa.
Através do processo competitivo, especificado na teoria do Global
Workspace, ele decide que parte da representação da situação
requer mais atenção. Essa porção é transmitida, e o conteúdo
atual de consciência possibilita ao agente uma tomada de ação
apropriada e assim a executa, completando um ciclo. O aprendizagem
acontece durante a transmissão da porção mais importante da
informação.
A figura 5 ilustra esse processo.
Figura
5
b)
LIDA Framework
O Framework é o esqueleto de uma aplicação,
tendo umas funcionalidades genéricas. Trazendo como vantagens a
simplificação no desenvolvimento de uma aplicação.
A seguir serão apresentados os conceitos
básicos da arquitetura:
Módulo: coleção de representações
(dados) e os processos para operá-los;
Tarefa (task): é um algoritmo curto que
pode ser executado varias vezes, implementando um processo
pequeno;
Common internal representation: muitas
estruturas implementam representações internas comuns;
Task manager dedicado: suporta a execução
em paralelo de tarefas;
GUI configurável: apresenta o estado
interno atual dos processos e da informação no sistema;
Factory: é usado para criar estruturas de
dados comuns e estratégias que agrupam algoritmos comuns;
XML Parser: é usado para carregar e criar
um agente a partir de um arquivo XML.
Relationship
between the LIDA Framework and the LIDA Model
O frameworks permite uma fácil adaptação
da arquitetura do agente. A relação entre o Framework e o modelo
podem ser resumidos nos seguintes itens:
A ideia genérica de módulo no Modelo é
especificada pela interface FrameworkModule;
Módulos
particulares do modelo são especificados por uma interface. Por
exemplo o módulo de Procedural Memory
é especificado pela interface ProceduralMemory;
Os processos nos módulos no Modelo são
implementados usando tarefas (task), que podem ser de vários
tipos;
Tempo no
Modelo é representado pelo mecanismo interno de medida de tempo
do Frameworks e tem como unidade o tick;
Asynchronous
execution no modelo é implementado usando a interface
ModuleListener;
Nodes
e Links no modelo são implementados usando NodeStructures as
quais possuem: Nodes e Links;
A
activation de Nodes, Links e outros elementos no modelo LIDA é
obtida através da implementação da interface Activatible.
II. Basics of the LIDA Framework
Os agentes
criados com o Framework são compostos por módulos, listeners, e
tasks. As Tasks
são executadas usando o TaskSpawners
que trabalha com o TaskManager.
a)
Modules and Listeners
Modules:
O Framework do LIDA provê algumas
implementações padrão para os módulos que são independentes do
domínio, e são facilmente modificáveis. Aqueles módulos que são
dependentes do domínio são implementados como abstratos.
Muitos módulos podem conter submódulos.
Cada submódulo é, por si só, um módulo.
No
Framework os módulos são geralmente especificados pela interface
FrameworkModule.
A classe abstrata FrameworkModuleImpl
é uma implementação padrão que é criada no framework.
FrameworkModuleImpl
define um modo padrão para adicionar listeners.
Cada módulo no modelo LIDA tem seu
correspondente interface no Framework que especificam os métodos
requeridos por cada módulo.
Listeners:
É
necessário que os módulos compartilhem as informações entre
eles para obter uma correlação do sistema. Estes canais de
comunicação são indicados como setas no diagrama do modelo LIDA.
O Framework utiliza um padrão de programação chamado: Observer
Pattern,
para implementar as comunicações entre os módulos. Por isso
muitos módulos no Frameworks tem interfaces de Listeners.
Qualquer módulo que queira receber alguma informação enviada por
outro módulo deve implementar essa mesma interface, ou seja, deve
implementar todos os métodos na interface Listener
e se registrar a ele próprio e ao módulo que envia.
Por
exemplo: O módulo GlobalWorkspace
tem que se comunicar com muitos outros módulos, para isso é
utilizada a interface BroadcastListener.
Todos os módulos que recebem a informação do GlobalWorkspace
devem implementar a interface BroadcastListener.
Cada módulo receptor deve registrar-se com o módulo
GlobalWorkspace
usando o método addBroadcastListener.
Assim quando o GlobalWorkspace
precisa enviar uma transmissão ele simplesmente chama o método
receiveBroadcast
de cada listener
registrado.
Os
listeners
não são o único mecanismo para criar relações entre módulos.
Cada módulo pode ter um ou mais módulos associados. Os módulos
são associados usando o método addAssociatedModule
na interface FrameworkModule.
Esta forma permite um relacionamento mais próximo.
b)
Tasks, TaskSpawners, and the TaskManager
Tasks
São as
ações que devem ser realizadas pelo agente. Cada agente tem um
TaskManager
que é a estrutura da simulação no Framework.
Os módulos não usam diretamente o TaskManager,
eles usam um TasikSpawner
que trabalha com o TaskManager.
O TaskManager
controla o tempo interno da aplicação. A unidade de tempo é
chamada tick.
Todas as task
estão programadas para serem executadas em um tick
especifico. O current
tick
é um número inteiro que inicia em zero e vai aumentando durante a
execução da simulação.
Cada task
tem um algoritmo no método runThisFrameworkTask,
um tick
programado (aquele tick
onde ele será executado) e o status.
The TaskManager
É o
encargado da execução das tarefas e do tempo interno da
aplicação. Ele recebe as tarefas que deve executar do
TaskSpawners.
Ele ordena as tarefas a realizar uma cópia chamada task
queue.
A task
queue
está ordenada por tick
e cada posição dentro da cópia contém as tarefas que serão
executadas durante esse tick.
Segue a
seguir o ciclo do TaskManager:
Verificar e carregar todos os módulos;
Executar
todas as tarefas programadas para o tick
atual e agradar o seu término;
Atualizar o GUI, caso necessário;
Incrementar
o tick.
O
TaskManager
possui métodos para iniciar, parar e reiniciar a execução da
sequencia de tarefas.
O tick
duration
é o menor valor de tempo real que requer só um tick
para acontecer. Isto pode ser estabelecido pelo usuário para
controlar a velocidade da simulação. A execução de uma tarefa
dura exatamente um tick.
O TaskManager
pode ser configurado usando dois parâmetros: tickDuration
e maxNumberOfThreads.
c) Nodes, Links, and NodeStructures
Os nodes e os links são as maiores estrutura
de dados da arquitetura LIDA. Os dois tem ativação, que é uma
medida da prioridade, pode ser ativada em muitas situações e pode
diminuir ao longo do tempo.
Um Node pode representar características,
objetos, eventos, conceitos, sentimentos, ações etc. Cada Node
está unido a só um nó PAM chamado PamNode. Cada nó tem uma
referência a seu PamNode e seu id.
Um link
conecta um nó a outro nó ou a outro link. O link que conecta dois
nós é chamado um link simples. Por outro lado um link complexo
conecta um nó com um link simples. Os links tem um atributo
chamado LinkCategory
que especifica a natureza da relação representada pelo Link. Por
exemplo, uma bola vermelha pode ser representada pelo nó "Bola"
que está conectado a outro nó "Vermelha" por meio de um
link com LinkCategory
chamado "característica". Os Nodes e os Links
implementam uma interface chamada Linkable.
A
NodeStructure
é uma estrutura em forma de grafo composta por Nodes e Links. A
implementação NodeStructureImpl
provê métodos para adicionar, remover, recuperar e administrar os
Nodes e Links.
d) Activation and Strategies
Muitos
elementos dentro da Arquitetura tem Ativation.
A ativation
é um número real entre 0.0 e 1.0. A ativação representa a
prioridade do elemento. As interfaces Activatible
e Learnable
são implementadas no Framework para assinar a ativação de um
elemento.
Um elemento
Activatible
tem dois métodos para administrar a sua ativação: excite
e decay.
Os elementos que tenham um nível de ativação menor do que um
certo removal
threshold
são eliminados. O Activatible
deve especificar dois Strategies
para determinar quando o nível de ativação muda.
Um elemento
Learnable
implementa uma interface Learnable,
é uma extensão de Activatible.
Porque além do nível de ativação também tem um nível de
ativação base que é usado para o learning.
O Framwork
de LIDA usa um padrão de projeto chamado Strategy
para implementar a ativação e o decaimento (decay) dos elementos
Activatible
e) Framework Tools
ElementFactory
As novas
instancias de muitos dos elementos em LIDA e devem ser criadas a
partir de ElementFactory.
Tem a vantagem que prove um encapsulamento dos construtores dos
elementos. Os tipos de elementos que podem ser produzidos por
ElementFactory
podem ser configurados no arquivo factoryData.xml.
The Graphical User Interface (GUI)
O Framework de LIDA tem uma interface de
usuário que pode ser adotada e que permite uma visualização em
tempo real do conteúdo dos módulos, parâmetros, tarefas que
estão sendo executadas e outras variáveis.
III. Framework Initialization
O
pacote de inicialização chamado initialization
package
contém as classes utilizadas na configuração do tempo de
execução do agente. A classe AgentStarter
provê métodos para executar o agente. Também provê o método
main
que pode se executar a partir da linha de comandos com um parâmetro
especificando o endereço do primary
configuration file.
O método start
do AgentStarter
executa as seguintes ações:
Carrega as
definições dos tipos de elementos em um arquivo de configuração
secundário conhecido como o factory
data file.
Este arquivo é especificado na propriedade
lida.elementfactory.data
no arquivo de configuração primário (o nome padrão deste
arquivo é lidaConfig.properties);
Cria uma
instancia da classe Agent
com base ao conteúdo do arquivo de declaração do agente. Este
arquivo é especificado na propriedade lida.agentdata
no arquivo de configuração primário;
Se a
propriedade lida.gui.enable
do arquivo de configuração primário está estabelecida em true,
então é criada a interface gráfica do usuário usando a
informação do arquivo de configuração do GUI que está
especificado nas propriedades lida.gui.panel
e lida.gui.commands
no arquivo de configuração primário;
Carrega o agente;
Apresenta a GUI ao usuário.
a) The Agent Declaration File
O arquivo
de declaração do agente está especificado na propriedade
lida.agentdata
no arquivo de configuração primário, é um arquivo XML com root
tag <lida>
e
possui as seguintes tags:
-
<globalparams>
-
Contém parâmetros que serão usados durante o processo de
inicialização do módulo (Opcional)
- <taskmanager>
-
Contém parâmetros para configurar o TaskManager
-
<taskspawners>
-
Contém subtags <taskspawner>
que
declaram os tipos TaskSpawner
disponíveis.
-
<submodules>
-
Contém subtags <module>
que
especificam as classes e os parâmetros necessários para criar os
módulos do agente.
- <listeners>
-
Contém subtags <listener>
que
declaram as conexões entre os módulos do agente
b)
AgentXMLFactory
A classe
AgentXMLFactory
carrega o arquivo da declaração do Agente. O método getAgent
realiza as seguintes ações:
Se existe
algum parâmetro global, ele é lido e adicionado à classe
GlobalInitializer;
É criado
o TaskManager;
É criado
o TaskSpawners;
São
criados os módulos, o método init
de cada modulo é chamado;
As
conexões do ModuleListener
são estabelecidas;
Se foi especificado na declaração dos
módulos, eles são associados;
Cada módulo que especifica uma classe
inicializadora é reinicializado usando a classe especifica;
Se existe
uma tarefa de inicialização no módulo ela é criada e o
TaskSpawner
do módulo programa ela para sua execução.
c) The Factory Data Definition File
O arquivo
especificado na propriedade lida.elementfactory.data
do arquivo primário de configuração contem a definição das
Strategy,
Node,
Link,
e tipo de tarefas que serão adicionadas ao ElementFactory.
O ElementFactory
internamente define vários tipos padrão que não são incluídos
neste arquivo como: “NodeImpl”, “PamNodeImpl”,
“noDecayPamNode”, “LinkImpl”, “PamLinkImpl”,
“noDecayPamLink”, “defaultDecay”, “defaultExcite”,
“noDecay”, “noExcite”. Este arquivo em XML contém como
root tag <LidaFactories>,
e tem as seguintes subtags:
-
<strategies>
--
Contém subtags <strategy>
que
define o tipo de Strategy
que
será carregada dentro do ElementFactory
-
<nodes>
-
Contém as subtags <node>
que
define os tipos de Nodes
que
serão carregada dentro do ElementFactory
-
<links>
-
Contém as subtags <link>
que
define os tipos de Link
que
serão carregada dentro do ElementFactory
-
<tasks>
-
Contém as subtags <task>
que
define os tipos de Task
que
serão carregada dentro do ElementFactory
d) The Initializable Interface
Muitos
elementos dentro do Framework implementam a interface Initializable
incluído a implementação padrão de Node,
Link,
e Strategy.
Esta interface provê uma forma uniforme de inicializar elementos
com parâmetros. Para criar uma inicialização personalizada basta
reescrever o método init.
A interface
FullyInitializable
estende à interface Initializable
e adicionalmente permite a associação de módulos usando o método
setAssociatedModule.
FrameworkModule
e FrameworkTask,
esses
métodos
são exemplos de elementos FullyInitializable.
IV. Default Implementations of LIDA
Modules
A versão atual inclui implementações
padrão para os seguintes módulos:
Environment (abstract)
Sensory Memory (abstract)
Perceptual Associative Memory
Transient Episodic Memory
Declarative Memory
Workspace
Structure-Building Codelets
Attention Codelets
Global Workspace
Procedural Memory
Action Selection
Sensory-Motor Memory
O módulo
Environment
está projetado para ser criado pelo usuário. O Framework
provê uma classe básica abstrata chamada EnvironmentImpl,
que deve ser extensamente implementada pelo usuário. O módulo
Environment
deve, no mínimo, implementar os métodos getState
e processAction
que permite adquirir informação do ambiente, assim como processar
as ações do agente.
O módulo
Sensory
Memory
é atualmente uma classe abstrata. O usuário deve estender a
implementação padrão, SensoryMemoryImpl.
Muitos dos algoritmos de aprendizagem
especificados no modelo LIDA ainda não são implementados em
nenhum módulo desta versão.
Atividade
3
Arquitetura baseada em Codelets (o que é
isso ?):
Um Codelet é uma um conjunto pequeno de
código, que cumpre uma função especifica. É utilizado em
paralelismo para subdividir uma tarefa em varias porções menores
que possam ser executadas em paralelo, cada subtarefa é chamada
de codelet. No modelo de LIDA, um codelet é uma função que é
representada em poucas linhas de código executável;
PAM - Perceptual Associative Memory:
É um tipo de memoria, segundo (Bitterman
1965), é a habilidade de interpretar estímulos de entrada,
reconhecendo-os individualmente. Por exemplo, animais de todos os
tipos são capasses de identificar fontes de alimento e
pontenciais predadores;
Behavior Network (rede de comportamentos):
É uma rede onde vários comportamentos
competem para ser escolhidos. A informação da memória
procedural é a entrada da rede de comportamentos, aqui somente um
dos comportamentos será escolhido. Após ser escolhido o
comportamento ganhador é executado realizando sua tarefa;
Global Workspace Theory (mecanismo de
consciência do LIDA):
É uma
arquitetura cognitiva simples, que foi desenvolvido para explicar
qualitativamente um grande conjunto de pares de processos
consciente e inconsciente, foi desenvolvida por Baars em 1983
(http://en.wikipedia.org/wiki/Global_Workspace_Theory).
Outros tópicos importantes:
Como a arquitetura LIDA implementa a
percepção do ambiente?
O ambiente
é definido pelo usuário, o usuário é responsável pelas
entradas do agente, e também por informar os valores do sensores.
O Framework
provê uma classe básica abstrata chamada EnvironmentImpl,
que deve ser extensamente implementada pelo usuário. O módulo
Environment
deve, no mínimo, implementar os métodos getState
e processAction
que permite adquirir informação do ambiente, assim como
processar as ações do agente.
Como a arquitetura LIDA seleciona as ações
que serão implementadas no ambiente?
As ações
são selecionadas no modulo Action
Selection (Behavior Network)
A figura 6 ilustra esses processos.
Figura
6
O módulo seleciona a ação mais apropriada
a ser tomada nesse momento em resposta à situação atual, ou
seja, ao conteúdo da consciência. Esta seleção é feita baseada
em vários esquemas que foram inicializados e ainda não estão em:
"decayed". A escolha da ação depende fortemente do
estado atual do ambiente. Por exemplo, não faz sentido escolher
pegar um objeto se não tem nenhum objeto próximo. Os objetivos
atuais também afetam a seleção da ação. Uma ação é
selecionada a cada momento, ou seja, durante cada ciclo cognitivo.
Como a arquitetura LIDA executa a ação
selecionada no ambiente?
O modulo
responsável por executar as ações é o Sensory-Motor-Memory,
nele
é que ocorre a
avaliação das informações dos sensores e a informação da
ação selecionada. Na arquitetura LIDA ela é implementada usando
uma lista de tarefas que serão realizadas em cada ciclo
cognitivo. O TaskManager
contem
uma lista de tarefas a ser realizadas, e a cada tick a tarefa com
maior prioridade é executada, quando a tarefa termina o tick
termina e o programa está pronto para iniciar um novo ciclo
cognitivo.
A figura 7 ilustra esses processos.
Figura
7