Redes Neurais Artificiais

O cérebro humano é considerado o mais fascinante processador existente. Ele é composto por aproximadamente 10 bilhões de neurônios, que são responsáveis por todas as funções e movimentos do nosso organismo. Os neurônios estão conectados uns aos outros através de sinapses, e juntos formam uma grande rede, denominada Rede Neural, que proporciona uma fabulosa capacidade de processamento e armazenamento de informação.

Há algumas décadas, surgiu a ideia de modelar, computacionalmente, as conexões neurais do cérebro humano, com intuito de emergir comportamentos inteligentes em máquinas. Neste contexto, surgiu as Redes Neurais Artificiais (RNA’s), inspiradas na própria natureza das redes de neurônios cerebrais e sinapses biológicas.

Fig1. Rede neural humana: o melhor processador de informações existente

Uma rede neural artificial é um um sistema de processamento paralelo de informações constituído pela interconexão de unidades básicas de processamento, denominadas neurônios artificiais, que tem a propensão natural para armazenar conhecimento experimental e torná-lo disponível para o uso (Haykin, 1998). Todo conhecimento adquirido pela rede se da através de um algoritmo de aprendizagem, cuja função é modificar os pesos de conexões entre os neurônios da rede, conhecidos como pesos sinápticos, de forma ordenada a fim de alcançar o mapeamento desejado.

O neurônio artificial é a menor unidade de processamento de uma rede neural, que recebe sinais de entrada e produzem sinais de saída. O modelo de neurônio mais utilizado é o perceptron, representado na Fig. 2, que é composto por: m entradas (x1, … ,xm), m pesos sinápticos (w1, … ,wm), uma variável de deslocamento linear b (do inglês: bias) e uma saída y, que é descrita por:

Fig 2. Modelo de neurônio artificial

A função θ é conhecida como função de ativação ou função de transferência. Dentre as funções de ativação mais utilizadas estão a sigmóide e a tangente hiberbólica, definidas pelas equações abaixo, respectivamente:

A arquitetura de uma rede neural está relacionada com a maneira pela qual os neurônios da mesma estão organizados. Para isso, a rede é dividida em três tipos de camadas: a de entrada, a escondida e a de saída. As camadas de entrada e saída são intuitivas e representam o número de entradas e saídas do problema em questão. Já a escondida é a camada que fará a maior parte do processo de aprendizagem da rede. Normalmente uma rede neural possui uma camada de entrada, uma camada de saída e k camadas escondidas, no qual k é definido empiricamente e varia de acordo com o problema. Com isso forma-se uma rede de múltiplas camadas.

Redes neurais do tipo Feedforward (em português costumam traduzir como alimentação direta ou avante) são redes de múltiplas camadas no qual a informação só propaga em um sentido. No caso, os sinais provenientes dos neurônios de uma camada só podem estimular os neurônios da camada seguinte, não existindo realimentação. A Fig. 3 mostra uma rede neural de múltiplas camadas do tipo Feedforward, com uma camada de entrada, com m entradas, k camadas escondidas e uma camada de saída com n saídas.

redeFeed

Fig 3: exemplo de rede neural artificial do tipo feedforward com k camadas escondidas

Após projetada a arquitetura da rede (determinar número de entradas, saídas, camadas escondidas e número de neurônios), é necessário um algoritmo de treinamento para realizar a aprendizagem da mesma. No processo de treinamento a rede ‘aprende’ através de exemplos que relacionam as entradas e saídas do problema a ser solucionado. Essa abordagem é conhecida como aprendizado supervisionado. Dentre os algoritmos conhecidos, para solucionar esse tipo de problema, o mais utilizado é o backpropagation (Rumelhart, Hinton, e Willians, 1986). A ideia do algoritmo é estimar os valores dos pesos e bias minimizando o erro entre a entrada e a saída desejada usando o gradiente descendente. O erro E cometido pela rede é calculado por:

no qual, p é o número exemplos a ser utilizados no treinamento, n é o número de saídas da rede e, finalmente, d e y são as saídas desejadas e obtidas, respectivamente, para a entrada em curso.
A regra de atualização de cada peso sináptico da rede é calculado pela seguinte equação:

onde, α é conhecido como taxa de aprendizado, que, resumidamente, indica o ‘tamanho do passo’ do gradiente rumo a minimização. O sinal negativo indica a busca por uma alteração no peso que reduza E.

 

Utilizando RNA no MATLAB

Implementar um RNA do zero não é uma tarefa tão complicada, mas sugiro que utilize uma linguagem que forneça ferramenta para manipulação de matrizes. Alias, na minha visão, implementar um algoritmo é primordial para uma melhor compreensão do mesmo (eu mesmo já implementei minha RNA lá nos primordios rs). Todavia, se o intuito é obter resultados mais rápido com uma ferramenta já validada, sugiro fortemente a toolbox do MATLAB para RNA, que é um ambiente todo preparado para prototipação com redes neurais.Se você está iniciando ou não conhece a toolbox sugiro a leitura do tutorial abaixo que mostra o básico de como utilizar a redes neurais no MATLAB

Por fim, deixo um código de uma predição de uma série temporal utilizando a toolbox. A série representa a demanda mensal de energia na Austrália, entre determinado período de tempo, e a rede neural é utilizado como preditor da mesma. É utilizado 70% da série para treinar a rede e 30% para executar e checar se o resultado que a rede obteve é compatível com a realidade. Com o código sugiro que varie o número de neurônios, camadas e função de ativação para observar a influência de cada um deles no resultado final. Do mais, faça bom uso =)

Links

Tutorial de RNA utilizando MATLAB

Predição de uma série temporal com RNA

 

Referências

[1] Haykin, S., Neural Networks: A Comprehensive Foundation, Prentice Hall, 2º edition, 1998

[2] Rumelhart, D. E., Hinton, G. E. e Willians, R. J. Learning representations by backpropagating errors, Nature, v. 323, p. 533-536, 1986.

 

Gostou? Então compartilhe!