You are here

Parte 06 - Setting Up & Using NACS

Este tutorial  apresenta um uso básico do NACS, com muitas ressalvas indicando que as funcionalidades hoje disponíveis nesse subsistema estão ainda em intenso desenvolvimento e, portanto, podem ser modificadas.
 
 
 

Apresentação do programa exemplo

 
O tutorial percorre o funcionamento do código exemplo "Reasoner - Simple.cs"; nesse sentido, primeiramente é informada a funcionalidade que ele realiza que, embora simples, serve para ilustrar uma utilização do NACS:
 
  1. Utiliza um "HopfieldNetwork" como "Associative Memory Network", armazenada no nível inferior do NACS.
  2. Armazena como nós dessa rede 30 pares dimensão/valor, criados a partir da sequência de números de 1 a 30.
  3. Possui 5 padrões de 9 números de 1 a 30 que são utilizados para criar CHUNKS declarativos que são armazenados no "General Knowledge Store" (GKS).
  4. Esses 5 CHUNKS declarativos são codificados na "HopfieldNetwork".
  5. Cria 4 regras associativas com o seguinte formato:

Dado um CHUNK X, faça a inferência do CHUNK X + 1

  1. Por fim executa a consulta de cada um dos padrões, acrescentando um RUÍDO em 40% dos valores - ZERANDO os 3 últimos. O objetivo é que o agente seja capaz de reconhecer o CHUNK de entrada e retornar o CHUNK de saída definido pelas regras.
 
 

Uso de CHUNKs declarativos e do General Knowledge Store

 
Para armazenar os 5 padrões de 9 números são utilizados CHUNKS declarativos, criados a partir do método "World.NewDeclarativeChunk()"; esses CHUNKs são então armazenados no General Knowledge Store - GKS - através do método:
 
Agent.AddKnowledge()
 
Está claro no tutorial que TODO chunk que deve ser utilizado no processo de raciocíonio DEVE ser ADICIONADO ao GKS e, depois de incluído, um CHUNK não deve sofrer alterações - como por exemplo ter um par DV removido ou adicionado - sob pena de quebra da consistência do GKS.
 
 
 

Inicialização da rede da memória associativa

 
O agente exemplo utiliza uma rede Hopfield, criada no nível inferior do NACS, dentro da memória associativa. Embora indique que outros tipos de redes possam ser utilizadas, no tutorial está a informação que redes Hopfield, por sua característica de AUTO-CODIFICAÇÃO, são particularmente interessantes para uso na memória associativa.
 
Uma característica importante para a inicialização da rede Hopfield é o fato de que ela não está organizada em camadas de ENTRADA e SAÍDA, sendo que seus nós representam uma coleção geral. Sua inicialização consiste num processo de treinamento, para que ela possa executar sua característica de RECONSTRUÇÃO de um conhecimento codificado, a partir de uma entrada com ruídos.
 
 
No exemplo, o processo de treinamento está codificado na função "EncodeHopfieldNetwork()":
 
 
 
Como pode ser verificado, o treinamento é realizado essencialmente pela classe "ImplicitComponentInitializer", via seu método "Encode()". Ciclos podem ser utilizados para aumentar a precisão das respostas.
 
 
 

Inicialização das regras associativas

 
Para que sejam produzidas as saídas desejadas, são utilizadas regras associativas "RefineableAssociativeRule", criadas a partir de cada um dos chunks declarativos dentro da função "SetupRules()":
 
 
 
Pelo construtor da class "RefineableAssociativeRule" é possível verificar que ela recebe como parâmetro o CHUNK que deve ser produzido como resultado; dessa forma - para implementar o comportamento desejado - no exemplo é colocado como condição de ativação da regra - através do membro "RefineableAssociativeRule.GeneralizedCondition" - o CHUNK(i), para que seja produzido como resposta o CHUNK(i + 1):
 
 
 
Dessa forma está completo do ciclo cognitivo desejado: a rede Hopfield reconstrói o CHUNK de entrada a partir do padrão parcialmente ruidoso, ativando-o; a regra associativa que tem esse CHUNK como condição é ativada, produzindo como saída o CHUNK + 1.
 
 
 

Execução do raciocínio

 
A execução do processo de raciocínio ocorre por meio de métodos particulares para o NACS:
 
ActivationCollection si = ImplicitComponentInitializer.NewDataSet();
 
<Inclusão dos elementos de entrada>
 
var o = reasoner.NACS.PerformReasoning(si);
 
 
No tutorial está indicado que um "SensoryInformation" também pode ser fornecido como entrada.
 
 
São ainda apresentados no tutorial 2 parâmetros de configuração para o processo de raciocínio do NACS:
 
 
Os comentários presentes no código já indicam a funcionalidade controlada por eles.
 
 
 
 

Comentários finais

 
Nesta parte 6 do tutorial ainda existem "placeholders" para o uso de memória episódica, mas não foram incluídos detalhes, uma vez que essa funcionalidade ainda está em desenvolvimento.
 
O uso do NACS parece ainda estar bastante inicial no Clarion; entretanto, mais uma vez fica provada a necessidade de uma base teória para o uso intenso desse framework.
 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer