You are here

Aula 12 - LIDA 1: Entendendo a Arquitetura

Aula 12 - LIDA 1: Entendendo a Arquitetura

LIDA 1: Entendendo a Arquitetura



- 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:

  1. Entendimento

  2. Atenção (consciência)

  3. 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:

  1. Detalhamento das especificações dos módulos, processos e estrutura de dados fundamentais do Framework;

  2. Breve descrição de como é a arquitetura de um agente e como ela é declarada usando um arquivo XML;

  3. Descrição das implementações padrão dos módulos, processos e estrutura de dados do Framework;

  4. 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:

  1. Módulo: coleção de representações (dados) e os processos para operá-los;

  2. Tarefa (task): é um algoritmo curto que pode ser executado varias vezes, implementando um processo pequeno;

  3. Common internal representation: muitas estruturas implementam representações internas comuns;

  4. Task manager dedicado: suporta a execução em paralelo de tarefas;

  5. GUI configurável: apresenta o estado interno atual dos processos e da informação no sistema;

  6. Factory: é usado para criar estruturas de dados comuns e estratégias que agrupam algoritmos comuns;

  7. 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:

  1. A ideia genérica de módulo no Modelo é especificada pela interface FrameworkModule;

  2. Módulos particulares do modelo são especificados 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), que podem ser de vários 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 possuem: 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 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:

        1. Verificar e carregar todos os módulos;

        2. Executar todas as tarefas programadas para o tick atual e agradar o seu término;

        3. Atualizar o GUI, caso 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 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:

  1. 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);

  2. 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;

  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. Carrega o agente;

  5. 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:

  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 é reinicializado 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 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



Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer