novembro 6, 2009
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.

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:

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 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:
