Freud e as Redes Neurais

Autor: Pedro Luis Kantek Garcia Navarro- GAC

FREUD E AS REDES NEURAIS(OU, MICRO TAMBÉM TEM MÃE) PARTE I

Vem a seguir uma peregrinação pelos caminhos tortuosos e meio enrolados da informática e de suas aplicações. Vai-se falar sobre uma descoberta, já velha até, mas que demorou e demora a se disseminar. A informática é tão pródiga em novidades que às vezes elas tem que, rigorosamente, disputar espaço a tapas, para chamar a atenção de nós, pobres mortais.

Peço, de antemão, desculpas para um possível tom deslumbrado na descrição. É quase cacoete do ofício. Confesso que de uns tempos para cá (coisa bem recente) tenho sido assaltado por uma dúvida ou desconfiança: "Não seria bem mais feliz a vida na face da terra sem a onipresença dos computadores?" Ou, pelo menos se os computadores não fossem tão metidos a besta?

O título do artigo é - como não poderia deixar de ser - uma brincadeira, que só encontrará explicação nos últimos parágrafos do (longuíssimo) texto. Fiz o possível para deixá-lo menor, mas isso me é difícil, quem sabe um dia ainda aprendo a escrever pouco.1[ Isso lembra uma anedota do escritor Mark Twain. Um correspondente seu, reclamou do tamanho enorme de uma carta, ao que ele respondeu: "Me desculpe, não tive tempo de escrever uma carta curta, por isso ela foi longa mesmo".]

Redes Neurais

Então, vamos lá: imagine um programa de computador capaz de olhar para uma fotografia, localizar uma pessoa aí e dizer se esta pessoa está sorrindo ou está séria. Ou um outro programa capaz de ler um garrancho qualquer e decifrar o que o autor do garrancho quis dizer. Para ser mais genérico, imagine um programa capaz de ouvir, falar e ver.

Imaginou isso tudo? Agora imagine que não são vários programas e sim um só apenas. Finalmente imagine que esse tal programa já existe, e se ainda não consegue fazer todas essas coisas satisfatoriamente, isso pode ser apenas uma questão de tempo...

Esse programa atende pelo nome de rede neural. Trata-se de uma teoria que já tem cerca de 40 anos desde as suas primeiras experiências, e hoje está próximo da sua aceitação como uma ferramenta legítima de negócios. Deixa, assim, as salas escuras dos laboratórios de pesquisa e de universidades e chega ao grande público.

Se o programa chegará a fazer essas coisas e muitas outras de maneira satisfatória ou não, é questão aberta. O futuro dirá. Não sabemos se se trata de questão quantitativa (isto é programas maiores, mais memória e mais processador), ou se, ao contrário, é questão qualitativa, ou seja, este programa não serve, outra idéia salvadora, se existir, vai ter que aparecer. Mas, por enquanto, vamos com o que temos.

Antes de entrar na definição, veja-se uma comparação que informe mais sobre as redes neurais. A quem, de resto, dora em diante chamaremos RNA (redes neurais artificiais, em contraposição à natural que é a que habita o interior de nossos crânios).

Programa Convencional X RNA

Um programa de computador convencional tem no mínimo 2 fases: A primeira, chamada de design & teste, precisa para ser construída de 3 coisas:

  • um algoritmo correto, confiável e conhecido em todas as suas nuanças;
  • um conjunto de dados de entrada;
  • correspondente conjunto de dados de saída, equivalente àqueles de entrada, devidamente processados pelo algoritmo.

Quando este programa entrar em produção, o que seria a segunda fase, das três coisas acima, apenas duas continuam sendo conhecidas: o algoritmo (que não muda) e as entradas que são geradas. Neste caso a entrada em produção do programa passa a sinalizar a sua capacidade de gerar saídas corretas.

Nas RNAs, a coisa é um pouco diferente. Estes programas também têm duas fases, que recebem nomes diferentes do caso convencional. A fase 1 é conhecida como treinamento e nesta, apenas duas coisas são conhecidas: a entrada e a saída esperada. O algoritmo é desconhecido e assim permanecerá, e este é o grande apelo das RNAs. Isto é, resolvem-se problemas para os quais não se conhece a solução.

Na fase dois, aqui também chamada produção, apenas a entrada é conhecida. A saída gerada pela rede devidamente treinada está correta e pode ser usada.

Comportamento Emergente

Toda vez que um programa de computador exibe um comportamento para o qual não foi explícita e declaradamente programado, estamos diante de um fenômeno conhecido na informática e na cibernética como "comportamento emergente", o qual alguns autores citam ser característica de sistemas inteligentes. Não é por outra razão que a parte da informática que trata do comportamento emergente é a "inteligência artificial".

Não há nenhuma concordância sobre o que seja ou faça parte da inteligência artificial. Na verdade, até hoje os autores sequer chegaram a um consenso do que seja inteligência. Mas não enrosquemos nisso. Vamos pontificar e seguir em frente. Assim, a divisão da ciência, para efeito deste trabalho, pode ser:

  • Computação
  • Inteligência Artificial.

- Processamento simbólico.

- Computação evolutiva.

-Sistemas conexionistas (ou redes neurais).

Alguém pode estar se perguntando: Como é possível fazer um programa (o mesmo) fazer coisas tão díspares como reconhecer imagens, ouvir e entender falas e falar? A resposta é uma só: fazendo uma desavergonhada, limitada, enjambrada, mas ainda assim proveitosa, engenharia reversa do cérebro animal. Antes de prosseguir, um alerta: a ciência conhece muito, muito pouco, do que seja e de como funcione o cérebro animal. Embora progressos tenham sido feitos nos últimos 50 anos, há mais perguntas do que respostas disponíveis. E quanto mais se fuça na coisa, mais coisas aparecem para serem fuçadas.

Feitas essas ressalvas, vamos ao (pouco) que se conhece dessa maquininha de cerca de 1,5Kg, o cérebro humano.

Cérebro Humano

Um aglomerado meio feio até, de cerca de 10.000.000.000 de células nervosas. Parece ser o ápice do desenvolvimento biológico da espécie humana. Ao estar correto Darwin, parece que os animais nossos ancestrais só chegaram até o homo sapiens através de uma série de "invenções" bem sucedidas. Algumas delas poderiam ser:

  • hereditariedade e reprodução (p. ex.: sexo e DNA);
  • sistema de locomoção e esqueleto (músculos, ossos, pêlos, colunas vertebral e espinhal, braços, dedos e, muito importante, o dedão – é ele que permite apreender coisas);
  • aquisição de energia e seu transporte interno (ATP, sangue, enzimas digestivas, trato intestinal);
  • sistemas para auto-regulação e manutenção (sistema imunológico, controle de temperatura, coração e fluxo sangüíneo, sede, fome, emoções).

O elemento centralizador e controlador dessa verdadeira máquina animal é o cérebro, ao qual se podem atribuir as seguintes características:

 

Figura 1: Algumas partes componentes do cérebro humano e sua disposição dentro da cabeça humana.

 

Tabela 1: Algumas características do cérebro humano.

Tipos de elementos de processamento

O neurônio. Conhecem-se cerca de 100 tipos de neurônio, embora não se conheça a diferença funcional entre eles.

Número de elementos

10.000.000.000 a 1.000.000.000.000 neurônios.

Tamanho/volume

Volume no homem: 1500 cc, diâmetro do neurônio: cerca de 0,004 polegadas. Comprimento máximo do axônio: cerca de 1 m.

Peso

1450 gramas.

Potência elétrica

10 Watts.

Velocidade de transmissão e chaveamento

De 10 a 100 m/seg. Chaveamento máximo: 500/Seg.

Interconexão de neurônios

200.000 conexões / neurônio (nas células de Purkinje). Estas conexões são conhecidas como sinapses.

Confiabilidade

Confiabilidade do neurônio: baixa (neurônios morrem continuamente). Confiabilidade do sistema: alta. Expectativa de funcionamento: cerca de 70 anos.

Codificação da informação

Digital, com modulação em freqüência.

O Olho Humano

O olho humano é a estrutura mais maravilhosamente especializada do nosso corpo. Segundo Kóvacz, numa proporção direta de sua importância, o sistema visual é o mais complexo, o mais estudado e o menos entendido entre os sistemas sensórios. Sua importância transcende à própria visão. É por isso que visualizamos situações, enxergamos soluções para problemas que muitas vezes não têm sua origem no sistema sensório da visão. Também é por isso que quando um filho nos pede algo meio chato de fazer, a resposta pode ser: "vamos ver...".

A retina é o elemento ativo básico do olho. É onde as imagens se formam (após um fantástico processamento mecânico realizado pelo olho, como se fosse uma aperfeiçoada máquina fotográfica). Formam a retina 2 tipos de células: os cones e os bastonetes. Os cones enxergam as cores e têm resolução menor do que os bastonetes. Estes enxergam de maneira absoluta, não distinguem cores, mas têm acuidade visual várias ordens de grandeza maior que os cones.

Um bastonete responde a uma ativação de um único quanta, mostrando que o olho humano atingiu o limite físico máximo de excitação. O fotopigmento responsável pela ativação dos bastonetes é a rodopsina, com resposta espectral de 400 a 600 nm. (Já se projeta construir uma memória de computador com base biológica usando a rodopsina. Veja artigo na Scientific American, vol. 272, número 3, de março de 1995: uma leitura fascinante).

As células nervosas (neurônios) da visão se dispõem em diversas camadas,como podemos ver no desenho a seguir:

Figura 2: A disposição das células nervosas responsáveis pela visão. É um corte da retina humana.

Note-se como as células se dispõem em camadas. Qualquer semelhança futura com as redes neurais NÃO será mera coincidência.

O Neurônio

Trata-se de uma célula, cujo formato é característico na forma de uma estrela. O núcleo da célula se encontra em uma das extremidades, e inúmeros braços saem do núcleo em todas as direções possíveis. Um dos braços é mais extenso, e é único. Recebe o nome de axônio, enquanto os demais braços são chamados dendritos. A regra básica de processamento do neurônio é que os sinais entram na célula através dos dendritos. Dependendo das entradas, por meio de um mecanismo elétrico conhecido como disparo, o axônio pode ou não disparar.

Figura 3: Um desenho esquemático de um neurônio. Seus braços podem chegar a milhares, distribuídos espacialmente.

 

Os dendritos se interligam através das sinapses a outros dendritos, a axônios e diretamente a neurônios, inclusive o próprio. A sinapse tem funcionamento mal conhecido, e sobretudo desconhece-se qual o seu papel no raciocínio e na memória. Há evidências de que o conhecimento reside nas sinapses, uma vez que um bebê de 6 meses de idade tem 100% dos neurônios que terá ao longo de toda a vida, mas apenas 50% das sinapses que terá quando adulto.

Cada neurônio tem em média cerca de 10.000 sinapses, e estas ao contrário dos neurônios são criadas a todo momento. Os neurônios morrem (cerca de 1.000 ao dia), mas as sinapses que vão sendo criadas parecem compensar com folga estas mortes.

 

Figura 4: O funcionamento elétrico (mal conhecido ainda) da sinapse.

 

Existem sinapses excitatórias e inibitórias. Nas primeiras, quando há o pulso de um lado, ele atravessa a fenda sináptica e prossegue do outro lado. Nas inibitórias, ao contrário, o pulso só é gerado de um lado quando falta do outro. De qualquer maneira, o que circula entre as sinapses é apenas corrente elétrica, nada além disso.

O neurônio, como vimos, recebe inúmeras correntes das sinapses às quais se liga. O processamento é na base do tudo ou nada, ou, em linguagem mais formal, é digital e binário. Isolando-se um único neurônio e olhando seu interior vemos que as cargas que entram se somam algebricamente e se um determinado valor (conhecido como limiar do neurônio) é ultrapassado, este dispara e um pulso de 85 mV é ejetado pelo axônio.

Figura 5: Entradas e saídas em um neurônio natural.

A velocidade de propagação em tais dutos é originalmente da ordem de 20 m/Seg, se bem que a evolução parece Ter (maldito Word) descoberto que recobrindo o axônio por mielina, há um aumento na velocidade do pulso de no mínimo uma ordem decimal de grandeza. De fato, todos os animais evoluídos têm células nervosas recobertas de mielina.

Um Neurônio Artificial

De posse de todas essas informações a respeito do cérebro animal natural, os pesquisadores puseram-se a buscar como simular essa coisa toda em computador. A partida foi a consideração de que o neurônio individual é conceitualmente bastante simples, restando a complexidade do comportamento do cérebro por conta da quantidade enorme de processamento paralelo de que ele é capaz.

Isto posto, um neurônio artificial é uma função matemática.

Figura 6: Um desenho esquemático representando um neurônio artificial, com leve semelhança (apenas artística) com um natural.

 

Onde:

ou

Note-se que se a sinapse é excitatória temos

< 0.

Um neurônio qualquer, denotado ui recebe as diversas entradas (denotadas por xj) que são multiplicadas por seus pesos wij. Entra na soma também um input específico, denominado autopolarização. A diferença deste último, é que ele não vem de lugar algum, surge do nada, e sempre a entrada tem valor igual a 1. O único fator que se altera nesta entrada é o seu peso, denotado por bi. A finalidade desta entrada é jogar o valor de limiar do neurônio para zero. Por exemplo, se o limiar de um neurônio era 0,6, faz-se o fator b valer -0,6 e com isso o teste do disparo se resume a perguntar se a soma foi positiva e negativa.

Exemplificando, suponhamos um neurônio com 3 entradas: as duas primeiras, valendo 0.5 e a última valendo zero. Suponhamos ainda que os pesos sejam 0.2, 0.3 e 0.7. Mais ainda, que o valor do autopolarizador é de -0.6. A saída v do neurônio seria uma função de u, e u teria o seguinte valor:

 

 

Este valor -0.35, seria jogado agora na função

 

image117.gif (972 bytes)
, e finalmente teremos o valor de saída daquele neurônio.

Função de Ativação

Esta é a função que converte o somatório das entradas, devidamente ponderado pelos pesos, na saída do neurônio. Pode ser utilizada qualquer função matemática, mas algumas têm sido mais estudadas.

 

Figura 7: Várias funções matemáticas candidatas à função de ativação.

 

No eixo horizontal tem-se u (resultado do somatório ponderada) e no vertical, v (saída no neurônio).

Uma primeira abordagem seria fazer v = u, com isso ter-se-ia uma função linear (relembrando da geometria analítica, do 2o. colegial, u=v é a reta que passa pela origem fazendo 45 graus com os dois eixos).

A crítica aqui, é que nada na natureza é linear.

Uma função que pode ser usada com sucesso é a função v = sign(u). Apesar do nome estranho, a função sign (signal, ou em português, sinal) é bastante simples. Nela, v = 1 se u > 0 e v = -1 se u £ 0.

Entretanto, a função comumente usada é a função v = tgh(u). A função tangente hiperbólica tem vantagens sobre a função sign. Uma delas é que é contínua, não sofre descontinuidade, o que ocorre na sign quando u=0. A continuidade de funções é bem vista, pois garante a derivação delas, e a derivada é sempre coisa rica, que não se pode desperdiçar.

Mais ainda, embora a tg h tenha uma fórmula meio feia 2 ela não deve assustar: é computacionalmente simples para qualquer computador. Esta função tem intervalo de existência entre –1 e 1, sendo assintótica nos dois ramos. Isto é, embora ela tenda a –1 e a 1, tais valores não são alcançados nunca.

2 eis a fórmula da tangente hiperbólica:

Em resumo, o papel desta função de ativação é simplesmente converter uma entrada qualquer em uma saída (bem comportada) entre –1 e 1.

Visto o funcionamento de um único neurônio, agora vamos imaginar uma rede deles. Os neurônios se dispõem na rede na forma de camadas, sendo que as entradas da primeira camada sofrem os inputs do ambiente (seriam os órgãos dos sentidos, deste Frankstein que se está a construir), calculam seus valores, acham suas saídas, e passam os valores para a segunda camada, que faz o mesmo e passa para a terceira,... e, assim por diante, até a saída da última camada. Esta efetivamente dá a resposta para a qual a rede foi desenhada.

Arquiteturas de RNA

Existem dezenas de tipos de redes, sempre variando a maneira como organizam as camadas dos neurônios e de como os interligam entre si. As 3 mais famosas (os nomes variam, estes são de minha escolha) são:

  • feedforward, também chamada de perceptron multicamadas;
  • associativas, conhecidas como redes de Hopfield ou redes realimentadas;
  • redes de aprendizado competitivo, ou Redes de Kohonen.

Este texto vai se concentrar na primeira, a mais simples, conceitualmente falando. Nas redes de feedforward, temos duas etapas de operação: o treinamento e a produção. Na fase de treinamento são fornecidos à rede os valores de entrada e os valores de saída esperados. Da diferença entre ambos, a rede tira suas conclusões e vai aprendendo o comportamento que é dela esperado. Após inúmeros ciclos de treinamento a rede já "sabe" (as aspas são importantes!) e pode ser usada em produção. Agora que já se conhece a anatomia de um neurônio, fica claro de se dizer que o treinamento é o simples ajuste dos pesos

dos neurônios da rede. No início do treinamento os pesos recebem valores aleatórios entre –1 e 1, e tais valores vão sendo corrigidos à medida que o treinamento decorre.

Um Exemplo Prático

Um exemplo de treinamento em uma rede de feedforward:

Seja uma rede em 2 camadas, contendo 3 neurônios na primeira e 2 na segunda. A rede receberá 2 entradas e gerará 2 saídas.

Figura 8: Uma rede bem simples, com duas entradas (x1 e x2) e duas saídas (y1 e y2).

Suponhamos que num determinado ciclo de treinamento, a rede receba como entradas x1=0.1 e x2=0.7. Para estes valores de entrada, a resposta esperada é y1=0.2 e y2=1.0. Tudo isto é sabido de antemão.

Suponhamos ainda que os pesos da camada 1 são:

wij b x1 x2
N1 -0.1 0.2  
N2 0.3 -0.1  
N3 0.1 0.1 0.9

 

E os da camada 2 são:

wij

b

N1

N2

N3

N4

0.2

0.1

-0.1

-0.1

N5

-0.1

0.5

0.2

1.1

 

Cálculo da primeira camada:

U1 = -0.1 + (0.2)(0.1) + (0.2)(0.7) = 0.06 v1 = tgh 0.06 = 0.06

U2 = 0.3 + (-0.1)(0.1) + (0.3)(0.7) = 0.5 v2 = tgh 0.5 = 0.46

U3 = 0.1 + (0.1)(0.1) + (0.9)(0.7) = 0.74 v3 = tgh 0.74 = 0.63

 

Cálculo da segunda camada:

U4 = 0.2 + (0.1)(0.06) + (-0.1)(0.46) + (-0.1)(0.63) = 0.97

v4 = 0.97 (note que o neurônio 4 tem função de ativação linear, isto é u = v)

U5 = -0.1 + (0.5)(0.06) + (0.2)(0.46) + (1.1)(0.63) = 0.715

v5 = tgh 0.715 = 0.614

 

Com estes valores a saída produzida é:

y’1 = v4 = 0.97

y’2 = v5 = 0.614

 

Conseqüentemente, os erros produzidos neste ciclo, são:

e 1 = 0.2 – 0.97 = 0.103

e 2 = 1 – 0.614 = 0.386

 

Aguardem na próxima edição a Parte II, deste artigo.