You are here

Aula 12 - LIDA 1: Entendendo a Arquitetura

LIDA 1: Entendendo a Arquitetura

Objetivo

O objetivo é iniciar o estudo da arquitetura cognitiva LIDA. A arquitetura LIDA foi desenvolvida pelo grupo do Prof. Stan Franklin, da University of Memphis, nos EUA, e talvez seja a mais sofisticada das três arquiteturas estudadas nesse curso. O primeiro passo é acompanhar um tutorial desenvolvido pelo grupo do Stan Franklin, para compreender o modelo teórico da arquitetura.

Relatório das Atividades

 

Atividade 1

Como o tutorial completo (Full Tutorial) é muito longo, o estudo foi iniciado pelo Ciclo Cognitivo.

O nome IDA significa Intelligent Distribution Agent e foi um projeto desenvolvido para a Marinha dos Estados Unidos, para automatizar o processo de encontrar uma nova alocação para os marinheiros.

A arquitetura LIDA (Learning IDA) foi originalmente derivada do IDA pela adição de vários estilos e modos de aprendizagem mas tem evoluído de forma a se tornar muito mais abrangente e geral.

O modelo IDA de cognição é um sistema cognitivo artificial totalmente integrado alcançando todo o espectro da cognição, da percepção/ação de baixo nível ao raciocínio de alto nível. Extensivamente baseada em dados empíricos, ela reflete com precisão toda a gama de processos cognitivos encontrados em sistemas cognitivos naturais. Foi concebida para ser uma teoria cognitiva de tudo. Como fonte de explicações plausíveis para muitos processos cognitivos, o modelo IDA fornece uma ferramenta ideal para pensar sobre como a mente funciona.

O ciclo cognitivo da arquitetura LIDA (Fig. 1.1) é o elemento fundamental do qual os processos cognitivos mais altos são constituídos.

Cada agente autônomo, seja humano, animal ou artificial, deve operar por meio de uma iteração contínua como um ciclo sentir-conhecer-agir. A hipótese do grupo do Prof. Stan Franklin é que os seres humanos funcionam por meio de algo como o ciclo cognitivo LIDA, iterando a um ritmo assíncrono de cerca de cinco a dez vezes por segundo.

Fig. 1.1 - O ciclo cognitivo da arquitetura LIDA

O ciclo cognitivo da arquitetura LIDA é constituído de quatro processos: percepção, recuperação de memórias, difusão consciente e ação.

Percepção ... envolve os módulos: memória sensorial, memória perceptual e área de trabalho.

Recuperação de memórias ... envolve os módulos: área de trabalho, memória episódica transiente e memória declarativa.

Transmissão consciente ... envolve os módulos: área de trabalho, codelets de atenção, área de trabalho global e memória procedural.

Ação ... envolve os módulos: memória procedural, seleção de ação e memória sensório-motora.

Atividade 2

O Tutorial da Arquitetura LIDA apresenta o seu modelo e seus análogos no framework de software que a implementa. O modelo é ao mesmo tempo um modelo conceitual de mentes e um modelo computacional que provê um projeto arquitetural para agentes autônomos. O framework é uma implementação parcial do modelo em software, usando a linguagem de programação Java.

O modelo e a arquitetura LIDA

É um modelo amplo, tanto concitual quanto computacional abrangendo uma grande parte da cognição humana. Com base, principalmente, na teoria Global Workspace proposta por Bernard Baars, em 1988, o modelo implementa uma série de teorias psicológicas e neuropsicológicas.

A arquitetura computacional deriva do modelo cognitivo, e ambos são baseados no ciclo cognitivo descrito na seção anterior e mostrado na Fig. 1.1.

Todo agente autônomo, seja humano, animal ou artificial, precisa "sentir" (percepção) o ambiente no qual está inserido e selecionar uma resposta apropriada (ação). Agentes mais sofisticados, como os seres humanos, processam essa percepção de forma a facilitar uma tomada de decisão. A vida do agente pode ser visualizada como consistindo de uma sequência contínua desses ciclos cognitivos. Cada ciclo é composto por unidades de percepção, atenção e ação. Um ciclo cognitivo pode ser considerado como um momento cognitivo.

Durante cada ciclo cognitivo o agente primeiro percebe, da melhor forma possível, a sua situação corrente, através da atualização da sua representação dessa situação, tanto externa como interna.

Através de um processo competitivo, conforme especificado pela teoria Global Workspace, ele decide, então, que parte da situação representada é a que mais necessita de atenção. A difusão desta parte, o conteúdo atual da consciência, permite ao agente escolher e executar uma ação apropriada, completando o ciclo. O aprendizado também ocorre com a difusão.

O Framework LIDA

O Framework inclui implementações padrão para a maior parte dos módulos e diversas classes abstratas para as partes genéricas da arquitetura de um agente. Um módulo (module) é um conjunto coeso de representações (dados) e suas operações associadas. Uma tarefa (task) é um algoritmo simples que pode executar repetidamente implementando um pequeno processo. Várias estruturas de dados implementam representações internas comuns. Um gerenciador de tarefas dedicado (task manager) suporta a execução simultânea de tarefas. Uma interface grpafica (GUI) configurável mostra o estado atual interno dos processos e os dados no sistema. Uma "fábrica" (factory) é usada para criar estruturas de dados e estratégias comuns, que encapsulam algoritmos comuns. Finalmente um analisador (parser) XML é utilizado para carregar e criar um agente a partir de um arquivo XML declarativo.

O Framework permite uma fácil personalização da arquitetura de um agente. Cada elemento de código no Framework é encapsulado de modo que o seu funcionamento seja o minimamente acoplado com outros elementos de código. Assim, todos os módulos e os processos descritos no diagrama do modelo LIDA podem, mas não necessitam, ser implementados. Além disso, os módulos e os processos escolhidos podem ser implementados usando as implementações padrão fornecidas Framework, ou com código personalizado escrito pelo usuário.
Enquanto implementações padrão são fornecidas para vários módulos e processos, o usuário precisará desenvolver código específicos para o domínio do ambiente em o agente será inserido (ou pelo menos uma interface sensorial para esse ambiente), o seu módulo de memória sensorial e, provavelmente, o seu módulo de memória sensório-motora.

relação entre o Framework e o modelo pode ser resumida da seguinte foma:

  • A idéia genérica de um módulo no modelo é especificada pela interface FrameworkModule
  • Módulos específicos no modelo são normalmente especificados por uma interface, por exemplo, o módulo de memória de procedimento está especificado pela interface ProceduralMemory.
  • Processos de módulos no modelo são implementados usando as tarefas de vários tipos, que são elas próprias implementações da interface FrameworkTask
  • O tempo no modelo é representado pelo mecanismo de tempo interno do Framework medido numa unidade chamada de tick
  • Uma execução assíncrona no modelo é implementada pela execução simultânea de tarefas, que é gerenciada pelo TaskManager
  • A comunicação entre os módulos no modelo é implementada usando listeners (padrão de projeto Observer) que implementam a interface ModuleListener
  • Nós e links no modelo são implementados usando NodeStructures
  • A ativação de nós, links e outros elementos no modelo é realizada através da uma implementação da interface Activatible. Essa implementação inclui também estratégias que controlam o decaimento e a excitação desses elementos.
Considere o seguinte exemplo: no modelo LIDA, uma difusão consciente é enviada a partir do Global Workspace durante cada ciclo cognitivo. Esta difusão é enviada para a maioria dos módulos no modelo, tal como ilustrado pelas setas no diagrama da Fig. 1.1. No entanto, os módulos em um agente implementado com o Framework não receberão difusões conscientes a menos que implementem a interface BroadcastListener e registrem-se como listeners do módulo GlobalWorkspace.

Elementos do Framework

- Modules e Listeners

- Tasks, TaskSpawners, and the TaskManager

- Nodes, Links, and NodeStructures

- Activation and Strategies

- Framework Tools

Iniciação do Framework

O pacote de iniciação do Framework contém as classes envolvidas na configuração da simulação de um agente, em tempo de execução. A classe AgentStarter provê métodos para executar a simulação de um agente provendo, também, um método principal (Main) que pode ser executado em linha de comando com um parâmetro especificando a localização do arquivo primário de configuração. O método start da classe AgentStarter executa os seguintes passos:

  1. Carrega as definições dos tipos de elementos contidos em arquivo secundário de configuração conhecido como factory data. Esse arquivo é especificado na propriedade lida.elementfactory.data no arquivo primário de configuração, cujo nome padrão é lidaConfig.properties.
  2. Cria uma instância da classe Agent com base no conteúdo do arquivo de declaração do agente. Esse arquivo é especificado na propriedade lida.agentdata do arquivo primário de configuração.
  3. Se o valor da propriedade lida.gui.enable no arquivo primário de configuração for true, cria a interface gráfica de usuário do Framework usando as informações contidas nos arquivos de configuração da interface gráfica (GUI), especificados pelos parâmetros lida.gui.panel e lida.gui.commands no arquivo primário de configuração.
  4. Carrega o agente.
  5. Se for o caso, carrega e apresenta a GUI.

Alguns detalhes desse processo são:

  • Arquivo de declaração do agente
    O arquivo especificado na propriedade lida.agentdata do arquivo primário de configuração, conhecido como arquivo de declaração do agente, contém a declaração dos componentes do agente. Esse é um documento XML contendo a root tag <lida> seguida das seguintes tags de primeiro nível aninhadas:
    <gobalparams> – contém parâmetros a serem usados durante o processo de iniciação do módulo (opcional)
    <taskmanager> – contém parâmetros para a configuração do TaskManager
    <taskspawners> – contém subtags do tipo <taskspawner> que declaram os tipos TaskSpawner disponíveis para os módulos do agente
    <submodules> – contém subtags do tipo <module> que especificamas classes e parâmetros necessários para a criação dos módulos do agente; opcionalmente, as subtags <module> podem conter tags aninhadas do tipo <associatedmodule>, <initialtasks>, <initializerclass> ou mesmo <submodules>, essa última permitindo declarações de módulos aninhados
    <listeners> – contém subtags do tipo <listener> que declaram as conexões de listener entre os módulos do agente
    A especificação formal dessas tags está contida no arquivo LidaXMLSchema.xsd.
     
  • AgentXMLFactory
    A classe AgentXMLFactory carrega o arquivo de declaração do agente, o analisa (parsers it), cria os componentes declarados nesse arquivo e os inclui em um objeto Agent. O método getAgent executa as seguintes ações:
  1. Os parâmetros globais, se existirem, são lidos e adicionados na classe GlobalInitializer
  2. O TaskManager é criado
  3. Os TaskSpawners são criados
  4. Os módulos são criados (nesse momento os métodos init de cada módulo é chamado)
  5. As conexões ModuleListener são estabelecidas
  6. Opcionalmente, os módulos são associados, se isso estiver especificado nas declarações de módulo
  7. Cada módulo que especifica uma classe initializer em sua declaração é reiniciada usando a classe especificada
  8. Para cada módulo que possuir tarefas iniciais (initial tasks) especificadas em sua declaração, essas tarefas são criadas e agendadas para execução pelo TaskSpawner do módulo
     
  • The Factory Data Definition File
    O arquivo especificado na propriedade lida.elementfactory.data do arquivo primário de configuração contém as definições de Strategy, Node, Link e tipos de tarefa que devem ser adicionados a ElementFactory na iniciação e é conhecido como the factory data definition file. Notar que a ElementFactory define, internamente, diversos tipos padrão que não estão especificados nesse arquivo, incluindo NodeImpl, PamNodeImpl, noDecayPamNode, LinkImpl, PamLinkImplnoDecayPamLink, defaultDecay, defaultExcite, noDecay, noExcite. Esse é um documento XML contendo a root tag <LidaFactories> seguida das seguintes tags de primeiro nível aninhadas:
    <strategies> – contém subtags do tipo <strategy> que definem os tipos Strategy a serem carregados em ElementFactory
    <nodes> – contém subtags do tipo <node> que definem os tipos Node a serem carregados em ElementFactory
    <links> – contém subtags do tipo <link> que definem os tipos Link a serem carregados em ElementFactory
    <tasks> – contém subtags do tipo <task> que definem os tipos task (FrameworkTaskque devem ser carregados em ElementFactory

     
  • The Initializable Interface
    Diversos elementos no Framework implementam a interface Initializable, incluindo as implementações padrão de Node, Link e Strategy. Essa interface provê uma forma uniforme de iniciar elementos com parâmetros. As subclasses com as quais os usuários tipicamente trabalharão necessitarão apenas sobrescrever o método init espcecificado por essa interface de forma a executar uma iniciação personalizada do elemento. Ao sobrescrever o método init, o método getParam deve ser usado para obter os parâmetros definidos nos arquivos de configuração.
    A interface FullyInitializable estende Initializable e adicionalmente permite a associação de módulos usando o método setAssociatedModule. FrameworkModule e FrameworkTask são exemplos de elementos FullyInitializable.

Implementações padrão dos módulos

A versão corrente do Framework inclui implementações padrão para os seguintes módulos do modelo:

  • Environment (abstrata)
  • Sensory Mempory (abstrata)
  • Perceptual Associative Memory
  • Transient Episodic Memory
  • Declarative Memory
  • Workspace
  • Structure-Building Codelets
  • Attention Codelets
  • Global Workspace
  • Procedural Memory
  • Action Selection
  • Sensory-Motor Memory
Alguns detalhes sobre as implementações padrão dos módulos:
  • O módulo Environment foi concebido para ser um dos que deve ser provido pelo usuário. O Framework provê uma classe abstrata básica, EnvironmentImpl, que deve ser estendida para implementar tanto um ambiente para o agente em Java quanto para servir de interface entre uma implementação não-Java do ambiente e o agente. As implementações do usuário para o módulo Environment devem, no mínimo, implementar os métodos getState e processAction, que permitem que o ambiente seja percebido e as ações dos agentes sejam processadas, respectivamente.
  • O módulo Sensory Memory é provido, atualmente, na forma de uma classe abstrata, porque memórias sensoriais normalmente variam muito de domínio para domínio. Assim, os usuários devem se estender a implementação padrão, SensoryMemoryImpl, e implementar as partes específicas do domínio. Existem planos para a implementação da memória sensorial com algoritmos de reconhecimento de objetos em futuras versões do Framework.
  • A implementação padrão para o módulo Action Selection fornecido na versão atual não implementa todas as funcionalidades descritas pelo Modelo LIDA. Uma Rede de Comportamento avançada (Maes, P., 1989; How to do the right thing, Connection Science, 1:291-323) implementando essas funcionalidades adicionais está prevista para a próxima versão do Framework.
  • As duas memórias episódicas descritas pelo Modelo LIDA, Transient Episodic Memory e Declarative Memory, foram implementadas usando uma memória distribuída esparsa (Kanerva, P., 1988; Sparse Distributed Memory, Cambridge MA: The MIT Press).

 

Atividade 3

Procure na página do grupo do Stan Franklin, no Google Scholar e também na internet em geral, informações sobre o funcionamento dos seguintes módulos operados pela arquitetura:

  • Arquitetura baseada em Codelets (o que é isso ?)
  • PAM - Perceptual Associative Memory
  • Behavior Network (Rede de Comportamentos)
  • Global Workspace Theory (Mecanismo de Consciência do LIDA)

Coloque em seu relatório sua compreensão sobre esses tópicos, levando em consideração principalmente as seguintes questões:

  • Como a arquitetura LIDA implementa a percepção do ambiente ?
  • Como a arquitetura LIDA guarda/armazena informações de memória ?
  • Como a arquitetura LIDA seleciona as ações que serão implementadas no ambiente ?
  • Como a arquitetura LIDA executa a ação selecionada no ambiente ?

 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer