Nesta aula, iniciaremos o estudo da arquitetura Clarion, desenvolvida pelo grupo do Prof. Ron Sun na Universidade de Michigan. Para tanto, será necessário um pequeno estudo teórico do funcionamento da arquitetura, antes do desenvolvimento das atividades práticas. A arquitetura conta com uma home-page onde a grande maioria do material necessário pode ser obtido. Essa home-page pode ser encontrada aqui: Clarion Cognitive Architecture.
Infelizmente, a página de links para artigos desse site está com problemas, apontando os links para lugares errados. Felizmente, os links corretos dos artigos podem ser obtidos aqui.
Existem diversas fontes de informação que são importantes. A mais importante é um texto relativamente antigo, mas que é bastante detalhado nas especificações do Clarion, e que eu recomendo que vocês consultem. É o "R. Sun, A Detailed Specification of CLARION 5.0 . Technical report. 2003". Apesar dele citar o Clarion 5.0, o detalhamento é similar para a versão 6.1.0.7, que utilizaremos em nossas aulas. Uma versão local desse documento, sem as imensas bordas em branco que existem no documento original, e que dificultam a leitura, pode ser encontrada aqui.
Nesta aula, seguiremos o tutorial do Clarion, utilizando o material disponibilizado pelos autores da arquitetura. Para tanto, devemos fazer o download da versão mais recente do Clarion no site dos autores: Downloads: Clarion Cognitive Architecture. A versão mais recente até o momento é a versão 6.1.0.7, que utilizaremos nesse curso. Caso a página dos autores apresente algum problema, uma cópia do mesmo pode ser obtida também aqui. Efetue o download da arquitetura e instale os arquivos em sua máquina.
O tutorial está dividido em várias pastas, com diversos arquivos PDF, dentro do diretório Tutorials. Uma versão compactada com todos os tutoriais em um mesmo documento pode ser encontrada aqui.
A versão 6.1.0.7 do Clarion foi desenvolvida em C# em .NET. Em nosso laboratório, utilizaremos o mono, que é uma implementação do .NET para Linux, e o monodevelop, uma ferramenta semelhante ao Netbeans, para desenvolvimento em C#.
Após a instalação da arquitetura, execute o monodevelop no Linux e procure ambientar-se a ele. Para tanto, vamos iniciar executando um Hello World da arquitetura Clarion, utilizando o mono. Os demos estão no diretório Samples.
A idéia é seguirmos todos os tutoriais na aula de hoje. Pode parecer muita coisa, a princípio, mas a maioria dos tutoriais correspondem a apenas pequenos trechos de código. Muitas partes da arquitetura ainda não foram implementadas no Clarion, e correspondem somente a templates pré-preparados para quando essas partes ficarem disponíveis. Existem diversas maneiras de se seguir os tutoriais. Poderíamos pegar um dos sub-sistemas, por exemplo, o ACS, e ir do básico, passando pelo intermediário e depois o avançado, e depois passar para outro subsistema, como MS e MCS. Sugiro que sigam a sequência da versão compactada disponibilizada acima. Entretanto, caso prefiram uma outra sequência, não há problemas.
Durante a leitura do tutorial, haverão vários pontos que podem ficar pouco claros. Para dirimir essas dúvidas, o texto da especificação detalhada, também disponibilizada anteriormente, será o contraponto perfeito. Caso as dúvidas não se solucionem com essa leitura, não hesite em chamar o professor para ajudá-lo.
Durante as atividades, não se esqueçam de irem documentando os avanços no relatório.
Ao final das atividades do dia, mais ou menos por volta das 17:45, faremos uma avaliação dos avanços de todos, e caso seja necessário mais um dia para a continuidade das atividades, poderemos negociar essa questão durante a aula.
O CLARION é uma plataforma formada por um número de subsistemas funcionais subdivididos em duas camadas onde uma primeira é representada de maneira ímplicita e outra de maneira explícita. Esses subsistemas se interagem constatemente. Isso se faz necessário para que a plataforma possa alcançar o processamento cognitivo.
Os quatro subsistemas que compõe o CLARION podem ser notados na figura abaixo.
Figura1: Arquitetura do Clarion
O Papel do subsistema Action Centered Subsystem (ACS) é o de controle de acões, não importando se elas estão relacionadas a movimentos externos físicos ou operações mentais internas. Já o Non Action Centered Subsystem (NACS) mantém o conhecimento geral, tanto implícito quanto explícito. O Motivational Subsystem (MS) é responsável pela motivação das percepções, ações e cognições, provendo retroalimentação (por exemplo indicando se uma saída é satisfatória ou não). o Meta-Cognitive Subsystem (MCS) monitora, direciona e modifica as operações do ACS dinamicamente e também as operaçoes dos demais subsistemas.
Figura2: ACS e NACS
Top Level - Regras explicitas
Bottom Level - Regras implicitas... conhecimentos adquiridos internamente
Inicialmente, regras Top Level sao usadas para gerar conhecimento para o Bottom Level (top down learning). Com o passar do tempo e conhecimentos obtidos implicitamente, as ações passam a ser consideradas utilizando regras do bottom level.
O ciclo de vida desse modulo consiste em escolher ações que supram os critérios do top level e bottom level, e estocásticamente uma delas é escolhida e executada. O resultado é observado e o conhecimento adquirido é reforçado no bottom level (QLearning). RER é utilizado para gerar conhecimentos explicitos baseados nos conhecimentos implicitos (aumento de conhecimento do top level por bottom up learning)
Top Level - Conhecimentos explicitos, regras associadas
Bottom Level - Conhecimentos Implicitos, memórias associadas.
Os conhecimentos representados nesse subsistema são utilizados nas inferencias sobre o ambiente e estão sob controle do ACS.
Figura3: Motivacional
O subsistema motivacional esta relacionado aos drives e suas interações, ou seja, no mecanismo dos porques o agente faz o que ele faz. Simplificando isso, podemos dizer que o agente será motivado a fazer ações que aumentem o ganho, recompensas e pagamentos
Figura4: Metacognitivo
O MCS monitora, controla e regula processos cognitivos de forma a melhorar a performance cognitiva do processo. Isso pode acontecer ajustando metas no ACS, ou interrompendo e mudando os processos correntes no ACS e NACS, setando parametros essenciais no ACS e NACS, entre outros.
Durante a execução do tutorial, pudemos ver alguns detalhes da implementação seguindo os seguitest tópicos:
A instalação da plataforma é bem simples. A arquitetura foi gerada e distribuída em uma biblioteca de sistema DLL. Sua implementação é em C# logo tivemos que utilizar um ambiente de desenvolvimento preparado para essa linguagem. Em nosso estudo foi utilizado o Mono em uma distribuição Ubuntu.
Utilizando um dos exemplos do tutorial, pudemos compilar e fazer o link do programa com a biblioteca CLARION.
Após criar um projeto de exemplo e uma vez o link de referencia a DLL estabelecido, nosso ambiente ja esta pronto para utilizar as APIs do CLARION para desenvolvimento.
Os namespaces da biblioteca estão organizados da seguinte maneira:
Nesse tópico também foi visto o relacionamento entre objetos descritivos e funcionais:
O primneiro exemplo visto, SimpleHelloWorld é uma implementação puramente ACS. A idéia é treinar um agente para quando saudado com Oi, responder Oi, quando Tchau, responder Tchau.
Para isso iniciamos o nosso World para conhecer essas informações:
DimensionValuePair hi = World.NewDimensionValuePair("Salutation", "Hello");
DimensionValuePair bye = World.NewDimensionValuePair("Salutation", "Goodbye");
O segundo passo é definir as ações que o agente irá executar:
ExternalActionChunk sayHi = World.NewExternalActionChunk("Hello");
ExternalActionChunk sayBye = World.NewExternalActionChunk("Goodbye");
Em seguida, iniciamos nosso agente selecionando o funcionamento por Simplified Q Learning backpropagation e definimos os nós de entrada e saída com as informações sensoriais e ações, respectivamente:
SimplifiedQBPNetwork net = AgentInitializer.InitializeImplicitDecisionNetwork(John, SimplifiedQBPNetwork.Factory);
net.Input.Add(hi);
net.Input.Add(bye);
net.Output.Add(sayHi);
net.Output.Add(sayBye);
Uma vez nosso agente criado, o exemplo consiste em gratificar e penalizar o agente mediante repostas certas e erradas. De tal forma, uma opção aleatória é enviada para o agente e mediante resposta, damos o feedback,
Exercutando vemos que o agente demora algumas rodadas para aprender, porém a partir de um determinado momento, o agente passa a responder precisamente.
Reporting Results for the Simple Hello World Task John got 9721 correct out of 10000 trials (97%) At the end of the task, John had learned the following rules: Condition: (Dimension = Salutation, Value = Hello), Setting = False (Dimension = Salutation, Value = Goodbye), Setting = True Action: ExternalActionChunk Goodbye: DimensionValuePairs: (Dimension = SemanticLabel, Value = Goodbye) Condition: (Dimension = Salutation, Value = Hello), Setting = True (Dimension = Salutation, Value = Goodbye), Setting = False Action: ExternalActionChunk Hello: DimensionValuePairs: (Dimension = SemanticLabel, Value = Hello)
No segundo tópico, adicionamos Goal em nossa lógica, que faz parte do top level do módulo de MS.
No primeiro momento vimos como podemos ver as informações dos Goals de um agente:
Como ações, Goals são representados como chunks e inicializados usando a classe World.
Podemos setar dois parametros para ajuste do Goal:
Exemplificando com código:
John.MS.Parameters.CURRENT_GOAL_ACTIVATION_OPTION = MotivationalSubsystem.CurrentGoalActivationOptions.FULL;
Para inserir esse Goal no nosso agente, devemos considerar que Goals são parte do SensoryInformation.
Agora basta ativar nosso Goal. A forma de se fazer isso é pelo método SetGoal, passando por parametro o Goal e o nível de ativação. Por exemplo John.SetGoal(g, 1).
A desativação do nosso Goal é feita pelo método ResetGoal (John.ResetGoal(g))
Nesse tutorial vemos a utilização pelo módulo ACS. Para tal, devemos utilizar um objeto da classe GoalStructureUpdateActionChunk.
Por exemplo no código abaixo, implementamos um actionChunk que seta o Goal g GoalStructureUpdateActionChunk
A classe RefineableActionRule contém, dentre outros métodos, métodos para especialização e generalização. Os parametros alterados no código acima alteram a forma como esses métodos irão atuar de forma a ser mais eficiente em nosso cenário.
Outro exemplo presente no código abaixo desativa vários métodos de aprendizado presentes no module de ACS.
Alguns pontos a serem notados é que as mudanças em parametros globais devem ser feitas antes da inicialização dos objetos (caso sejam feitos depois não são aplicados aos objetos anteriores). Outro ponto é que esses parametros respeitam as hierarquias das classes do Clarion. Por exemplo, RefineableActionRule, IRLRule, AssociativeRule, etc são derivados da classe Rule. Caso queira que um parametro tenha efeito em todas as classes, basta mudar o parametro apenas na classe Rule, de outra forma, pode ser alterado apenas nas classes que queiramos.
O exemplo acima é referente a mudanças globais de parametros. Nos casos de mudanças locais, podemos fazer somente durante a instancia do objeto que queremos essa alteração.
John.ACS.Parameters.PERFORM_RER_REFINEMENT = false;
Por fim vimos como lidar com elementos de Working Memory. No Clarion, WM pode conter qualquer tipo de Chunk e suas interações são feitas pela classe Agent.
Pudemos ver como pedar as informações, setar/adicionar e remover elementos conforme demostrado abaixo.
Nesse exemplo estudamos principalmente o mecanismo de Drives. No Clarion, os Drives usam fatores das informações dos estados internos e externos para definir a "força" do drive, utilizado para sua ativação. Essas informação são recebidas pelo objeto SensoryInformation. As ativações dos drives irão direcionar nosso sistema meta cognitivo a tomar ações que irão direcionar o processamento.
O Clarion ja possui uma implementação para todos os drives primários. O primeiro passo é a inicialização dos drives.
FoodDrive food = AgentInitializer.InitializeDrive(John, FoodDrive.Factory, .5);
Para esse modulo estudamos um Simple Reasoner. A lógica consiste no seguinte:
Exemplificando, temos os 5 padrões abaixo:
Com isso podemos ver a execução e seu resultado com 100% de precisão nas telas abaixo.
Referencias:
Material do Professor Gudwin: http://faculty.dca.fee.unicamp.br/gudwin/sites/faculty.dca.fee.unicamp.br.gudwin/files/ia006/Clarion.pdf
R. Sun, The motivational and metacognitive control in CLARION. In: W. Gray (ed.), Modeling Integrated Cognitive Systems. Oxford University Press, New York. 2007.
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer