You are here

Aula 12 - LIDA 1: Entendendo a Arquitetura

 

LIDA 1: Entendendo a Arquitetura


 

O que é LIDA?

LIDA (Learning Intelligent Distribution Agent) é um sistema cognitivo artificial integrado que tenta modelar aspetos cognitivos de um amplio conjunto de sistemas biológicos. Ela esta fundamentada empiricamente na ciência cognitiva e neurociencia cognitiva.

LIDA é baseados em dois pilares:

1) Muitas das funções cognitivas humanas são baseadas em iterações em frequência, chamadas ciclos cognitivos,

2) Estes ciclos cognitivos servem como "átomos" da cognição, onde 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,

  1. A fase de entendimento
  2. A fase de atenção (consciência)
  3. A fase de seleção da ação e de aprendizagem

 


Atividade 1


 

Ciclo cognitivo

O ciclo cognitivo está dividido em:

Perception

Por percepção se entende o processo de dar sentido a 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. 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). As percepções de alto nível resultam de criar estruturas operando no workspace e recuperando informação da perceptual associative memory e da memoria sensorial.

Memory Retrieval

No LIDA são utilizados vários tipos de memoria: memoria episódica, memoria de eventos, o que, o onde, e o quando. A memoria episódica é dividida em duas: a memoria transitória, que pode durar uma hora ou um dia, e a memoria 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 rostro no workspace pode dar uma associação local como um nome, e a imagem de você falando com essa pessoa numa festa duas semanas atrás. 

 

Concious Broadcast (Transmissão da consciência)

O propósito da transmissão da consciência é recrutar apropriadamente recursos com os quais lidar com a situação atual. A pesar de que vários tipos de recursos podem, teoricamente ser recrutados, a transmissão de consciência é dirigida principalmente à memoria de procedimentos. 

Action

O automatismo sensorial-motor, que foi inicializado em resposta à ação escolhida, agora leva consigo a ação selecionada. Levar esta informação requer informação sensorial que chega diretamente da memoria sensorial. Os contínuos ciclos de senso-ato-senso-ato...acorrem a uma velocidade muito mais alta do que ciclos cognitivos mais complexos.

As ações produzem efeitos no ambiente de forma interna, externa ou ambas, e o ciclo cognitivo finaliza. Agora pode-se começar um novo ciclo cognitivo.


Atividade 2


Introduction:

Para poder utilizar o Framework LIDA é necessário ter um entendimento básico do modelo LIDA. O modelo LIDA é um 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 tudo ainda não esta implementado e pode ter conceitos no modelo que não sejam a mesma coisa na 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 está dividido assim:

  1. São detalhadas algumas especificações dos módulos, processos e estrutura de dados fundamentais do Framework.
  2. Uma breve descrição de como é a arquitetura de um agente e como ela é declarada usando um arquivo XML.
  3. É dada uma descrição no nível alto das implementações padrão dos módulos, processos e estrutura de dados do Framework
  4. Finalmente são apresentados os apêndices com detalhes adicional sobre o Framework
a) The LIDA Model

O modelo LIDA é um modelo conceptual, amplio e computacional que atinge uma grande parte da cognição humana. O modelo é baseado principalmente na teoria do Global Workspace (Baars 1988, 2002 ) que implementa um bom numero 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 (senso) de seu ambiente e selecionar uma resposta apropriada (ação). Agentes mais sofisticados como os humanos processam (dão 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, participando e ação.

Durante cada ciclo cognitivo o agente LIDA primeiro faz o senso da sua situação atual, a melhor que ele possa, assim ele atualiza sua situação interna e externa. Por 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 de tomar uma ação apropriada e executa-la, completando um ciclo. O aprendizagem acontece durante a transmissão da porção mais importante da informação.

b) The LIDA Framework

O Framework constitui o esqueleto de uma aplicação, tendo umas funcionalidades genéricas. Trazendo como vantagens a redução do esforço necessário para desenvolver uma aplicação.

A seguir são apresentados conceitos básicos dentro da arquitetura:

  1. Módulo: Um módulo é uma coleção de representações (dados) e os processos para operar eles.
  2. Uma Tarefa (Task): Uma tarefa é um algoritmo curto que pode ser executado varias vesses implementando um pequeno processo.
  3. Common internal representation: muitas estruturas implementam representações internas comuns.
  4. Um task manager dedicado suporta a execução em paralelo de tarefas.
  5. Uma GUI configurável apresenta o estado interno atual dos processos e da informação no sistema.
  6.  Um factory, é usado para criar estruturas de dados comuns e estrategias que agrupam algoritmos comuns.
  7. Finalmente um XML Parser é usado para carregar e criar um agente desde um arquivo XML declarativo.
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 estão resumidos nos seguintes itens

  1. A ideia genérica de módulo no Modelo é especificada pela interface FrameworkModule
  2. Módulos particulares do modelo são especificados tipicamente por uma interface. Por exemplo o módulo de Procedural Memory é especificado pela interface ProceduralMemory.
  3. Os processos nos módulos no Modelo são implementados usando tarefas (task) de varios tipos.
  4. Tempo no Modelo é representado pelo mecanismo interno de medida de tempo do Frameworks e tem como unidade o tick
  5. Asynchronous execution no modelo é implementado usando a interface ModuleListener
  6. Nodes e Links no modelo são implementados usando NodeStructures as quais estão constituídas de Nodes e Links
  7. 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 estão compostos por módulos, listeners, e tasks. As Tasks são executadas usando o TaskSpawners que trabalha da mão com TaskManager.

a) Modules and Listeners

  • Modules:

O Framework do LIDA provê 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 contem submódulos. Cada submódulo é, por si próprio, 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 é provista no framwork. 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 compartam informações entre eles para obter um sistema conetado. Estes canais de comunicação são indicados como setas no diagrama do modelo LIDA. O Framework utiliza um padrão de programação chamada de Observer Pattern como uma maneira genérica de implementar as comunicações entre os módulos. Por isso muitos módulos no Frameworks tem interfaces de Listeners. Qualquer módulo que quera receber informação enviada por outro módulo deve implementar essa mesma interface ou seja deve implementar todos os métodos la interface Listener e se registrar a ele mesmo como o 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-se registrar 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 perto.

b) Tasks, TaskSpawners, and the TaskManager

  • Tasks

As tarefas são as ações que devem ser realizadas pelo agente. Cada agente tem um TaskManager que é o coração 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 num tick especifico. O current tick é um número inteiro que começa com zero e vai aumentando durante a execução da simulação.

Cada task tem um algoritmo contido no método runThisFrameworkTask, um tick programado (aquele tick onde ele será executado) e o status.

  • The TaskManager

O 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 numa cola chamada task queue. A task queue está ordenada por tick e cada posição dentro da cola contem as tarefas que serão executadas durante esse tick.

O ciclo do TaskManager é o seguinte:

  1. Decadência de todos os módulos
  2. Executar todas as tarefas programadas para o tick atual e espere a que elas terminem
  3. Atualizar o GUI, se for necessário
  4. Incrementar o tick

O TaskManager possui métodos para iniciar, parar e reiniciar a execução da sequencia de tarefas.

O tick duration é o minimo 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 toma 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 importância, a qual pode ser excitada em muitas situações e pode cair durante o tempo.

Um Node pode representar características, objetos, eventos, conceitos, sentimentos, ações etc. Cada Node está unido a um nó PAM chamado PamNode. Cada nó tem uma referencia a seu PamNode assim como uma id.

Um link coneta um nó a outro nó ou a outro link. O link que coneta 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 chamdo "característica". Os Nodes e os Liks 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 importância do elemento. As interfaces Activatible e Learnable são implementadas no Framework para assignar 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 excitação e o decaimento dos elementos Activatible

e) Framework Tools

  • ElementFactory

Novas instancias de muitos dos elementos em LIDA devem ser criados a partir de ElementFactory. Tem a vantagem que proveem 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 se executando e outras variáveis.

 

III. Framework Initialization


O pacote de inicialização chamado initialization package contem as classes utilizadas na configuração no 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 desde a linha de comandos com um parâmetro especificando o endereço do primary configuration file. O método start do AgentStarter realiza as seguintes ações:

  1. São carregadas as definições dos tipos de elementos num 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)
  2. Uma instancia da classe Agent é criada 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
  3. 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
  4. O agente é carregado
  5. A GUI é criada e apresentada 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 e ele é um arquivo XML com root tag <lida> e tem as seguintes tags:

- <globalparams> - Contem parâmetros que serão usados durante o processo de inicialização do módulo (Opcional)
- <taskmanager> - Contem parâmetros para configurar o TaskManager
- <taskspawners> - Contem subtags <taskspawner> que declaram os tipos TaskSpawner disponíveis.
- <submodules> - Contem subtags <module> que especificam as classes e os parâmetros necessários para criar os módulos do agente.
- <listeners> - Contem 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:

  1. Se existe algum parâmetro global, ele é lido e adicionado à classe GlobalInitializer
  2. É criado o TaskManager
  3. É criado o TaskSpawners
  4. São criados os módulos, o método init de cada modulo é chamado.
  5. As conexões do ModuleListener são estabelecidas
  6. Se foi especificado na declaração dos módulos, eles são associados
  7. Cada módulo que especifica uma classe inicializadora é re inicializado usando a classe especifica.
  8. 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 contem como root tag <LidaFactories>, e tem as seguintes subtags:

- <strategies> -- Comtem subtags <strategy> que define o tipo de Strategy que será carregada dentro do ElementFactory
- <nodes> - Contem as subtags <node> que define os tipos de Nodes que serão carregada dentro do ElementFactory
- <links> - Contem as subtags <link> que define os tipos de Link que serão carregada dentro do ElementFactory
- <tasks> - Contem 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 própria é só 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 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 que seja o usuário quem crie. 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 entorno 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 porção de código pequena, que cumpre uma função especifica. Ela é utilizada em paralelismo para subdividir uma tarefa em varias porções mais pequenas que possam ser executadas em paralelo, cada sub-tarefa é 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 los reconhecendo individualmente, ao categoriza-los sem existir nenhuma relação entre o individuo e a categoria. Por exemplo, animais de todos os tipos são capasses de identificar fontes de alimento, predadores potenciais etc.

  •  Behavior Network:  A rede de comportamento é uma rede onde vários comportamentos competem para ser escolhidos. A informação da memoria procedural é a entrada da rede de comportamentos, aqui somente um dos comportamentos é escolhido. Apos ser escolhido o comportamento ganhador é executado realizando sua tarefa  

  • Global Workspace Theory: é uma arquitetura cognitiva simples, que foi desenvolvido para explicar qualitativamente um grande conjunto de pares de processe consciente e inconsciente, foi desenvolvida por Baars em 1983 (http://en.wikipedia.org/wiki/Global_Workspace_Theory)

  • Como a arquitetura LIDA implementa a percepção do ambiente ? O ambiente é definido pelo usuário, o usuário é responsável das entradas do agente, e dizer, dos 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 entorno 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)

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 "decayed". A escolha da ação depende grandemente do estado atual do entorno. Por exemplo, não faz sentido escolher montar bicicleta se não tem bicicleta nenhuma. Os objetivos atuais também afetam grandemente 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 encargado de executar as ações é o Sensory-Motor-Memory aqui é avaliada a informação 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 pila 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á listo para iniciar um novo ciclo cognitivo

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer