2.3 REDES NEURAIS ARTIFICIAIS
2.3.4 Perceptrons Multi-Camadas (MLP – Multi-Layer Perceptron)
Segundo Haykin (1999), Perceptrons de Múltiplas Camadas são uma importante classe das redes neurais, e consistem em um conjunto de unidades sensoriais (nós de fonte) que constituem a
“camada de entrada”, uma ou mais “camadas ocultas” de nós computacionais e uma “camada de
A aprendizagem por retro propagação (backpropagation) consiste em dois passos através das diferentes camadas da rede: um passo para frente, a “propagação”, e um passo para trás, a “retro propagação” (HAYKIN, 1999).
Haykin (1999) explica que
[...] no passo para frente, um padrão de atividade (vetor de entrada) é aplicado aos nós sensoriais da rede e seu efeito se propaga através da rede, camada por camada. Finalmente, um conjunto de saídas é produzido como a resposta real da rede. Durante o passo de propagação, os pesos sinápticos da rede são todos fixos. Durante o passo para trás, por outro lado, os pesos sinápticos são todos ajustados de acordo com uma regra de correção de erro. Especificamente, a resposta real da rede é subtraída de uma resposta desejada (alvo) para produzir um sinal de erro. Este sinal de erro é então propagado para trás através da rede, contra a direção das conexões sinápticas.
Haykin (1999) ainda explica que um perceptron de múltiplas camadas possui três características:
1. O modelo de cada neurônio da rede inclui uma “função de ativação não-linear”;
2. A rede contém uma ou mais camadas de neurônios ocultos que não fazem parte da entrada ou da saída da rede. Estes neurônios capacitam a rede a aprender tarefas complexas extraindo, progressivamente, as características mais significativas dos vetores de entrada; e
3. A rede exibe um alto grau de conectividade, determinado pelas sinapses da rede.
Qualquer modificação na conectividade da rede requer uma mudança na população das conexões sinápticas ou de seus pesos.
Segundo Haykin (1999), é através da combinação destas características, mais a habilidade de aprender da experiência através de treinamento, que o perceptron de múltiplas camadas deriva seu poder computacional.
A Figura 9 ilustra o grafo arquitetural de um perceptron de múltiplas camadas, contendo duas camadas ocultas e uma camada de saída. Nesta figura, a rede é totalmente conectada.
Figura 9. Grafo arquitetural de um perceptron de múltiplas camadas com duas camadas ocultas Fonte: Adaptado de Haykin (1999).
Haykin (1999) explica que, os neurônios de saída constituem a camada de saída da rede. Os neurônios restantes constituem as camadas ocultas da rede. Deste modo, as unidades ocultas não são parte da saída ou da entrada da rede. A primeira camada oculta da rede é alimentada pela camada de entrada (nós de fonte), suas saídas são, por sua vez, aplicadas à próxima camada oculta, e assim por diante, até o final da rede.
Haykin (1999) cita ainda que existam dois tipos de sinais na rede, que são: os sinais funcionais e os sinais de erro. Um sinal funcional, segundo o autor, é um sinal de entrada, um estímulo, que incide no terminal de entrada da rede, propagando-se para frente, neurônio por neurônio, surgindo no terminal de saída da rede como um sinal de saída. Esses sinais de entrada são chamados funcionais, pois se presume que realizem uma função útil na saída da rede e que em cada neurônio da rede, através do qual passem, o sinal seja calculado como uma função de sua entrada e peso associado, aplicados àquele neurônio.
Um sinal de erro, segundo Haykin (1999), origina-se em um neurônio da saída da rede e se propaga para trás, camada por camada. É chamado de sinal de erro porque sua computação, por cada neurônio da rede envolve uma função dependente do erro, de uma forma ou de outra.
Ainda, de acordo com Haykin (1999), cada neurônio oculto ou de saída de um perceptron de múltiplas-camadas é projetado para realizar dois cálculos:
1. O cálculo do sinal funcional que aparece na saída de um neurônio, que é expresso como uma função não-linear do sinal de entrada e dos pesos sinápticos associados com aquele neurônio; e
2. O cálculo de uma estimativa do vetor gradiente, que é necessário para a retro propagação através da rede.
2.3.4.1 Algoritmo de Retro propagação
Haykin (1999) define retro propagação como uma técnica específica para implementar a
“descida do gradiente” no espaço de pesos para uma rede de múltiplas camadas alimentada adiante.
A idéia básica, segundo o autor, é calcular eficientemente as derivadas parciais de uma função aproximativa realizada pela rede em relação a todos os elementos do vetor ajustável para um dado valor de um vetor de entrada.
Rich e Knight (1994 apud AZEVEDO, BRASIL e OLIVEIRA, 2000) descrevem sucintamente os passos de um algoritmo de retro propagação típico:
1. Seja A, o número de neurônios da camada de entrada, conforme determinado pelo comprimento dos vetores de entrada de treinamento, D, o número de neurônios da camada de saída. B e C compõem os neurônios da camada intermediária;
2. Inicializar os pesos da rede. Cada peso deve ser inicializado aleatoriamente;
3. Inicializar a(s) função(ões) de ativação dos neurônios;
4. Atribuir níveis de ativação aos neurônios da camada de entrada;
5. Propagar a ativação dos neurônios da camada de entrada para a camada intermediária, usando como sugestão a função sigmóide;
6. Propagar a ativação dos neurônios da camada intermediária para os da camada de saída;
7. Computar os erros dos neurônios da camada de saída;
8. Computar os erros dos neurônios da camada intermediária;
9. Ajustar os pesos entre a camada intermediária e a de saída;
10. Ajustar os pesos entre a camada de entrada e a intermediária; e
11. Voltar à etapa 4. Quando todos os pares de entrada-saída tiverem sidos apresentados à rede, terá sido completada uma época. Repetir quantas vezes forem necessárias as etapas de 4 a 10.
2.3.4.2 Os Dois Passos da Computação
Segundo Haykin (1999), distinguem-se dois passos distintos de computação, na aplicação do algoritmo de retropropação. O primeiro é conhecido como passo para frente, ou propagação, e o segundo como passo para trás, ou retro propagação.
Haykin (1999) explica que, no passo para frente, os pesos sinápticos se mantêm inalterados em toda a rede e os sinais funcionais da rede são calculados individualmente, neurônio por neurônio. Por outro lado, o passo de retro propagação, começa na camada de saída, passando-se os sinais de erro para a esquerda através da rede, camada por camada. Este processo recursivo permite que os pesos sinápticos sofram modificações.
2.3.4.3 Taxa de Aprendizagem
De acordo com Haykin (1999) o algoritmo de retro propagação fornece uma “aproximação”
para a trajetória no espaço de pesos calculada pelo método da descida mais íngreme. Quanto menor for o parâmetro da taxa de aprendizagem, menor serão as variações dos pesos sinápticos da rede, de uma iteração para outra, e mais suave será a trajetória no espaço de pesos. Esta melhoria, porém, torna a taxa de aprendizagem lenta. Já, se fizermos o parâmetro da taxa de aprendizagem muito grande, a fim de acelerar a taxa de aprendizagem, as grandes modificações nos pesos sinápticos resultantes podem tornar a rede instável. Um método simples de aumentar a taxa de aprendizagem, evitando o perigo de instabilidade é modificar a regra delta.
2.3.4.4 Critérios de Parada
De uma forma geral, não se pode demonstrar que o algoritmo de retro propagação convergiu e não existem critérios bem definidos para encerrar sua operação. Ao invés disso, existem alguns critérios razoáveis, que podem ser usados para encerrar o ajuste dos pesos (HAYKIN, 1999).
Kramer e Sangiovanni-Vicentelli (1989 apud HAYKIN, 1999) formularam um critério de convergência sensível para a aprendizagem por retro propagação que considera que o algoritmo de
limiar suficientemente pequeno. Porém, segundo Haykin (1999), este critério de convergência deixa a aprendizagem com um tempo muito longo.
O critério de convergência sugerido por Haykin (1999) é que um algoritmo de retro propagação é considerado convergido quando a taxa absoluta de variação do erro médio quadrado por época for suficientemente pequena. A taxa de variação do erro médio quadrado é considerada suficientemente pequena, normalmente, quando se encontra no intervalo 0,1 a 1 por cento, por época.
Haykin (1999) comenta ainda que, existe outro critério de convergência útil. Após cada iteração de aprendizagem, a rede é testada pelo seu desempenho de generalização, sendo o processo de aprendizagem encerrado quando o desempenho de generalização for adequado, ou quando ficar aparente que o desempenho de generalização atingiu o máximo.
2.3.4.5 Heurísticas para Melhorar o Desempenho do Algoritmo de Retro propagação
Segundo Haykin (1999), existem métodos que melhoram significativamente o desempenho do algoritmo de retro propagação. São eles:
1. Atualização seqüencial comparada à atualização por lote: o modo seqüencial da aprendizagem por retro propagação é computacionalmente mais rápido que o modo por lote.
2. Maximização do conteúdo de informação: de acordo com LeCun (1993 apud HAYKIN, 1999), de uma forma geral, todo exemplo de treinamento apresentado ao algoritmo de retro propagação deve ser escolhido de forma que o seu conteúdo seja o maior possível para a tarefa considerada. Existem dois modos para alcançar estes objetivos: o uso de um exemplo que resulte no maior erro de treinamento; e o uso de um exemplo que seja radicalmente diferente de todos os outros usados anteriormente.
3. Função de ativação: um perceptron de múltiplas-camadas, treinado com algoritmo de retro propagação, pode aprender mais rápido quando a função de ativação sigmóide incorporada no modelo do neurônio da rede for antissimétrica do que quando ela for não-simétrica.
4. Valores-alvo: é importante que os valores-alvo sejam escolhidos dentro do intervalo da função de ativação sigmóide.
5. Normalizar as entradas: LeCun (1993 apud HAYKIN, 1999) explica que, cada variável de entrada deve ser pré-processada de modo que o seu valor médio, calculado sobre todo o conjunto de treinamento, ou seja próximo de zero ou seja pequeno, comparado com o desvio padrão.
6. Inicialização: ao serem atribuídos valores iniciais grandes aos pesos sinápticos, muito provavelmente, os neurônios da rede serão levados à saturação. Caso isto aconteça, os gradientes locais no algoritmo de retro propagação assumem valores pequenos, ocasionando uma diminuição da velocidade do processo de aprendizagem. No entanto, se forem atribuídos valores iniciais pequenos aos pesos sinápticos, o algoritmo de retro propagação pode operar em uma área muito plana em torno da origem da superfície de erro. Por isso, o uso de valores grandes como de valores pequenos na inicialização dos pesos sinápticos deve ser evitado.
7. Aprendizagem por indícios: a aprendizagem, a partir de um conjunto de exemplos de treinamento, lida com uma função de mapeamento de entrada-saída. Segundo Abu- Mostafa (1995 apud HAYKIN , 1999), o processo de aprendizagem por exemplos pode ser generalizado para incluir aprendizagem por indícios, obtido ao se permitir que a informação prévia que se tenha sobre uma função seja incluída no processo de aprendizagem.
8. Taxas de aprendizagem: todos os neurônios de um perceptron de múltiplas-camadas devem aprender com a mesma taxa.
2.3.4.6 Detecção de Características
“Os neurônios ocultos desempenham um papel crucial na operação de um perceptron de múltiplas-camadas com aprendizagem por retro propagação porque agem como detectores de características” (HAYKIN, 1999).
Segundo Haykin (1999), os neurônios ocultos começam, gradualmente, a “descobrir” as características salientes que caracterizam os dados de treinamento, a medida que o processo de aprendizagem avança. Isto é feito realizando uma transformação não-linear dos dados de entrada para um novo espaço, conhecido como “espaço oculto”.
2.3.4.7 Generalização
Haykin (1999) cita que, uma Rede Neural é projetada para generalizar bem, produz um mapeamento de entrada-saída correto, mesmo quando a entrada for um pouco diferente dos exemplos usados para treinar a rede. Porém, quando uma Rede Neural aprende um número excessivo de exemplos de entrada-saída, a rede pode acabar memorizando os dados de treinamento.
Uma Rede Neural é capaz de fazer essa memorização pois pode encontrar um característica que esteja presente nos dados de treinamento, mas não na função subjacente que deve ser modelada, fenômeno conhecido como “excesso de treinamento” ou “excesso de ajuste”.
2.3.4.8 Virtudes e Limitações da aprendizagem por retro propagação
Segundo Haykin (1999), “o algoritmo de retro propagação se tornou o algoritmo mais popular para o treinamento supervisionado de Perceptrons de Múltiplas-Camadas”. O autor cita que, a retro propagação possui duas propriedades distintas: é simples de calcular localmente e realiza a descida estocástica do gradiente no espaço de pesos (para atualização de padrão em padrão dos pesos sinápticos). Para o autor, estas duas propriedades da aprendizagem por retro propagação no contexto de um perceptron de múltiplas camadas são responsáveis por suas vantagens e desvantagens.
Para Haykin (1999), o algoritmo de retro propagação é um exemplo de um “paradigma conexionista” que se baseia em cálculos locais para descobrir as capacidades de processamento de informação das Redes Neurais. Esta restrição computacional é referida como a restrição de localidade, no sentido de que a computação realizada pelo neurônio é influenciada apenas por aqueles neurônios que estão em contato físico com ele.
O autor cita ainda que, o uso de computação local no projeto de Redes Neurais artificiais é normalmente defendido por três razões principais:
1. As Redes Neurais artificiais que realizam computação local são freqüentemente tidas como metáforas para as Redes Neurais biológicas;
2. O uso de computação local permite uma degradação suave no desempenho devido a erros dos componentes físicos e, portanto, fornece a base para um projeto de rede tolerante a falhas; e
3. A computação local favorece a utilização de arquiteturas paralelas como método eficiente para a implementação de redes neurais artificiais.
Para Haykin (1999), a complexidade computacional de um algoritmo é normalmente medida em termos do número de multiplicações, adições e armazenamentos envolvidos na sua implementação. Um algoritmo de aprendizagem, segundo o autor, é computacionalmente eficiente quando a sua complexidade computacional é “polinomial” em relação ao número de parâmetros ajustáveis que devem ser atualizados de uma iteração para a seguinte.
Haykin (1999) cita como outro benefício computacional a maneira eficiente pela qual se pode realizar uma análise de sensibilidade do mapeamento de entrada-saída realizado pelo algoritmo.
3 DESENVOLVIMENTO
Este capítulo tem o intuito de descrever o desenvolvimento do projeto, e está estruturado em seções onde se descreve cada uma das partes do projeto.
Nas duas primeiras seções deste capítulo tem-se análises da metodologia DolphinSearch e análises das variáveis de entrada e saída da RNA, onde aborda-se a seleção do grupo de palavras a serem utilizadas e a organização dos textos referentes a cada palavra.
Na próxima seção, tem-se o detalhamento da implementação da RNA, além das especificações para a criação do conjunto de treinamento da RNA, do treinamento e dos testes realizados com a mesma.
Também neste capítulo, aborda-se a implementação da ferramenta de RI e a utilização dos pesos estabelecidos pela Rede Neural Artificial na ferramenta de Recuperação de Informação.
Ainda conta com a análise dos resultados obtidos pela ferramenta.