54.236.58.220@hermano.com.br:~$ ls ./estudos/redes_neurais/Perceptron

..   00-leia.txt   neuronio-artificial.jpg   neuronio.jpg   perceptron.txt  

54.236.58.220@hermano.com.br:~$ cat ./estudos/redes_neurais/Perceptron/00-leia.txt

Perceptron em PERL
06 de Novembro de 2009.

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.

Em 1943, McCulloch e Pitts propuseram um  modelo de neurônio artificial através de uma descrição matemática. Nesse 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:



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 = yd - y. 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 à vontade para treinar e consultar o neurônio, pois assim fica fácil de entender 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  ú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.

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/...
http://www.eps.ufsc.br/...
http://www.scielo.br/...
http://www.filosofiaadistancia.com.br/...

54.236.58.220@hermano.com.br:~$ clear_