Stand by...

Perceptron em PERL

Neste documento, será apresentado de maneira sucinta a representação de um neurônio biológico em um neurônio artificial. E, logo após, um exemplo prático de uma rede neural artificial implementando um Perceptron em PERL.

Observe na figura abaixo, a ilustração de um neurônio biológico. Resumindo o seu funcionamento: o neurônio recebe informações de outros neurônios através dos dendritos, e de acordo com o estímulo recebido ele irá gerar um impulso para outros neurônios através do axônio. A sinapse é o efeito que ocorre quando um axônio de um neurônio libera substâncias para estimular os receptores dos dendritos de outros neurônios. Assim é feita a transmissão de um impulso nervoso de um neurônio ao outro.

neurônio

Em 1943, McCulloch e Pitts propuseram um modelo de neurônio artificial através de uma descrição matemática. Neste modelo existem n terminais de entrada (dendritos) que recebem os valores x, e apenas um terminal de saída y (axônio). Para representar o comportamento das sinapses, as entradas dos neurônios têm pesos w acoplados. Acompanhe na figura abaixo:

neurônio artificial

No caso do efeito de uma sinapse em um neurônio artificial a representação matemática é dada por x*w. Prosseguindo nessa comparação, o neurônio biológico só dispara um impulso nervoso quando a soma dos impulsos de entrada ultrapassa o seu limiar de excitação. Já em um neurônio artificial, a soma ponderada é representada pela função de soma e comparada à função de transferência/ativação para decidir se o neurônio deve ou não disparar (0 ou 1).

Em 1958, Frank Rosenblatt demonstrou em seu modelo chamado Perceptron, que a rede neural artificial poderia ter sinapses ajustáveis e ser treinada para classificar certos tipos de padrões. No Perceptron, a cada conjunto de entradas x, é possível definir uma saída desejada yd. Sendo assim, obtém-se o erro devido com a seguinte fórmula: e = ydy. Tornando possível o processo de reajuste de pesos através da fórmula w(n + 1) = w(n) + ηex(n), onde η é a taxa de aprendizado. Agora o próximo passo é testar o que foi abordado até aqui em um script PERL.

Perceptron em PERL:

Este script foi desenvolvido para representar um Perceptron que tem um neurônio com 3 entradas (uma  das entradas é sempre bias = 1), e com uma saída (0 ou 1). A cada iteração com o script, o usuário poderá observar todos os valores de entrada, pesos e saída. Para este primeiro treinamento, considerando a tabela abaixo:

Pessoa Valor Função Valor
Paulo 0,0 Analista 0
Joao 0,1 Analista 0
Tiago 1,0 Analista 0
Pedro 1,1 Tecnico 1

Agora baixe o script PERL: perceptron.txt. Renomeie o arquivo:

$ mv perceptron.txt perceptron.pl

Depois, basta executar o script:

$ perl perceptron.pl

Na iteração com o script, fique a vontade para treinar e consultar o neurônio. Pois assim fica fácil de enteder o que ele está fazendo. Use a tabela acima para treinar e chegar aos pesos ideais (convergência).

Primeira iteração:

----------------------------------------------------------
 Entrada           :   ( , )
 Resultado esperado:   ( )
 (1) -------> (BIAS) ---wb=0--------\        
 ( ) -------> (NRE1) ---w1=0-------- > (NRS1) ---=  -  
 ( ) -------> (NRE2) ---w2=0--------/    
----------------------------------------------------------
 1a iteracao!
 Digite o nome da pessoa de entrada (Paulo,Joao,Tiago,Pedro)..........: paulo
 Digite o resultado esperado (Analista,Tecnico,NaoSei)................: analista
---------------------------------------------------------

Quando o resultado não é o esperado, os pesos serão recalculados:

----------------------------------------------------------
 4a iteracao!
 Digite o nome da pessoa de entrada (Paulo,Joao,Tiago,Pedro)...........: pedro
 Digite o resultado esperado (Analista,Tecnico,NaoSei).................: tecnico
----------------------------------------------------------
 Entrada           : pedro (1,1)
 Resultado esperado: tecnico (1)
 (1) -------> (BIAS) ---wb=0--------\        
 (1) -------> (NRE1) ---w1=0-------- > (NRS1) ---=  -  
 (1) -------> (NRE2) ---w2=0--------/        
----------------------------------------------------------
Calculando ...
----------------------------------------------------------
 Entrada           : pedro (1,1)
 Resultado esperado: tecnico (1)
 (1) -------> (BIAS) ---wb=0--------\        
 (1) -------> (NRE1) ---w1=0-------- > (NRS1) ---= 0 - Analista
 (1) -------> (NRE2) ---w2=0--------/        
----------------------------------------------------------
Recalculando pesos (1a vez)...
----------------------------------------------------------

Depois de algumas iterações, neste exemplo, os pesos convergirão (observe logo abaixo). E a cada consulta de nome, o resultado deverá ser o esperado.

----------------------------------------------------------
 35a iteracao!
 Digite o nome da pessoa de entrada (Paulo,Joao,Tiago,Pedro)...........: pedro
 Digite o resultado esperado (Analista,Tecnico,NaoSei).................: naosei
----------------------------------------------------------
 Entrada           : pedro (1,1)
 Resultado esperado: naosei ( )
 (1) -------> (BIAS) ---wb=-0.1-----\        
 (1) -------> (NRE1) ---w1=0.1------ > (NRS1) ---=  -  
 (1) -------> (NRE2) ---w2=0.05-----/       
----------------------------------------------------------
Calculando ...
----------------------------------------------------------
 Entrada           : pedro (1,1)
 Resultado esperado: naosei ( )
 (1) -------> (BIAS) ---wb=-0.1-----\        
 (1) -------> (NRE1) ---w1=0.1------ > (NRS1) ---= 1 - Tecnico
 (1) -------> (NRE2) ---w2=0.05-----/
----------------------------------------------------------

O Perceptron simples possui limitações, onde redes neurais artificiais de uma única camada não são capazes de executar funções não-linearmente separáveis como o xor, (ou-exclusivo). Você pode testar isso neste mesmo exemplo mudando a função de Paulo de Analista (0) para Técnico (1), que representaria a operação lógica: not xor.

Este é o primeiro passo para aprender como funcionam as redes neurais artificiais. A partir daí é possível entrar em um universo de estudos dessa área onde a conexão entre neurônios formam diferentes topologias e diferentes métodos de aprendizagem para auxiliar na solução de problemas cada vez mais complexos. No próximo documento, será apresentada a implementação de uma rede neural artificial com MLP (Multilayer Perceptron) para executar funções não-linearmente separáveis.

MLP em PERL >>

Livros de referência:

Redes Neurais Artificiais: teoria e aplicações / Antônio de Pádua Braga, André Carlos Ponce de Leon Ferreira de Carvalho,Teresa Bernarda Ludemir. – 2.ed. -  LTC, 2007.

Redes Neurais – Fundamentos e Aplicações com Programas em C / Oswaldo Ludwig Junior, Eduardo Montgomery Meira Costa. Ciência Moderna, 2007.

Algumas leituras:

http://www.icmc.usp.br/~andre/…

http://www.eps.ufsc.br/dis…

http://www.scielo.br/scie…

http://www.filosofiaadistancia.com.br/gra…

0 Comment(s). Add a comment or Trackback

Comments are closed.