Redes Neurais Artificiais: Uma introdução com implementação – Parte 1

Descrição: Gif animado de algo semelhante a uma rede interconectada de pontos. Ao centro, algo semelhante a uma nebulosa, em cor lilás, é circundado por uma aparente rede de pontos que pulsam em cores azuis, semelhante a uma corrente elétrica.

Os recentes anos foram povoados de grandes avanços na área de inteligência artificial. Desafios e problemas com os mais diferentes escopos e enfoques vêm sendo explorados e (parcialmente) solucionados utilizando técnicas de aprendizado de máquina. Modelos como as redes neurais artificiais ilustram muito bem estes avanços, podendo ser consideradas como protagonistas atuais em diversos campos.

Este artigo tem como objetivo oferecer uma introdução as redes neurais artificiais (RNAs). Contudo, pretendo fazê-lo com um nível de aprofundamento um pouco maior, dado que acredito haver pouco conteúdo sobre o assunto em língua portuguesa. Adicionalmente, iremos ao longo deste texto implementar uma rede neural simples para resolver problemas com algumas bases de dados introdutórias.

Mas antes, um breve histórico das RNAs!

As redes neurais artificiais foram propostas como uma tentativa de construir um modelo computacional semelhante ao cérebro humano e os seus neurônios. Sua base está no modelo do neurônio proposto em seus primórdios por Warren McCulloch e Walter Pitts em 1943 [1]. No trabalho publicado A Logical Calculus of the Ideias Immanent In Nervous Activity, os autores utilizaram circuitos elétricos para simular um neurônio cerebral e suas sinapses, em um processo onde um sinal elétrico de entrada é atenuado ou acentuado por “válvulas”, posteriormente somadas, resultando finalmente em um sinal de saída. Neste modelo, os ajustes das válvulas era realizado manualmente por um agente humano.

O modelo de neurônios de Warren McCulloch e Walter Pitts foi aprimorado ao longo dos anos, sendo reproduzido em código e acrescido com fórmulas de ajuste automático. Mas como de fato ocorre o treinamento de um neurônio? Como este aprende a classificar ou predizer valores ao ser apresentado a um novo exemplo?

Aprendendo a partir de exemplos

O aprendizado de um neurônio (e redes inteiras) pode ocorrer de maneira supervisionada, semi-supervisionada ou não-supervisionada. Durante estes artigos iremos tratar apenas com a abordagem de aprendizado supervisionado.

Ao treinar uma rede neural, buscamos extrair um modelo de conhecimento que descreva genericamente um conjunto de dados, de maneira tal que o modelo seja capaz de reconhecer adequadamente novos exemplos não apresentados durante o seu treinamento.

As primeiras abordagens contavam com modelos compostos por apenas um neurônio artificial (o Perceptron), os quais possuíam uma grande limitação: eles apenas conseguiam resolver problemas linearmente separáveis. Um problema linearmente separável significa a capacidade de podermos realizar uma separação dos elementos presentes neste problema utilizando apenas um hiperplano. No entanto, os problemas que enfrentamos comumente são muito mais complexos e não-linearmente separáveis, fazendo com que o perceptron possuísse uma enorme limitação de aplicabilidade e valor prático.

Posteriormente, um modelo composto por mais de um perceptron fora proposto. As MultiLayer Perceptrons (MLPs) são redes com uma ou mais camadas escondidas, compostas por N Perceptrons. Estas redes mostravam-se capazes de resolver problemas não-linearmente separáveis, tendo maior aplicabilidade prática. É esse modelo que iremos explorar ao longo deste artigo.

Como dito anteriormente, a estrutura e funcionamento dos Perceptrons tem inspiração na maneira como funcionam os neurônios biológicos, compostos, de maneira resumida, por dendritos, núcleo da célula, axônios, e as sinapses. Informações são propagadas entre os neurônios por meio de sinapses químicas ou elétricas, que são conexões existentes nos extremos de um neurônio com neurônios vizinhos. Um neurônio recebe impulsos de um outro neurônio por meio dos seus dendritos. Os impulsos geram um sinal elétrico, que pode ser inibidor ou excitador, e pode ser posteriormente repassado para outro neurônio vizinho por meio do axônio. Essa mecanismo de troca de informações pode ser efetuado por uma rede de neurônios conectados (chamados de circuitos neurais), em alguns casos podendo chegar a dezenas de milhares de conexões em um único neurônio.

Perceptrons recebem informações de entrada, as quais são inibidas ou excitadas por um conjunto de pesos, sendo o somatório destas informações processados em seu núcleo e, posteriormente, sendo oferecidas como saída na forma de sinal. Este processo é produto do caráter bioinspirado dos neurônios artificiais nos neurônios biológicos.

Durante o treinamento, diversos exemplos são oferecidos ao conjunto de neurônios que compõem a rede neural. Em um método de aprendizado supervisionado, esses exemplos possuem 2 elementos essenciais:

  1. Um conjunto de atributos descritivos, isto é, informações que nos dizem respeito às características daquele exemplo;
  2. E uma informação que indica uma classe-alvo ou valor-alvo para este exemplo.

Por exemplo, imagine que queiramos um modelo que nos preveja o valor de venda de uma determinada residência. O número de quartos, banheiros, tamanho desses cômodos, possuir ou não garagem, quintal, material do piso ou área externa total, são os tipos de informações que compõem os atributos descritivos dos exemplos. Por meio deles, fazemos inferências sobre o provável valor de compra/venda desta casa, nosso valor-alvo. Ao longo do treinamento, o nosso modelo é apresentando a diversos exemplos, buscando prever ou classificar o valor/classe alvo de maneira correta.

Quando o modelo erra a classe/valor alvo de um exemplo, ele é ajustado de acordo com o quão errada foi a resposta. A repetição deste processo de apresentação a exemplos, estimativa de uma classe/valor alvo, e ajuste de acordo com o erro cometido, compõem o processo de treinamento. Julgamos que o modelo aprendeu quando ele apresenta um baixo valor de erro entre os valores reais e os valores preditos. Ainda, o modelo deve prever bem novos exemplos, não presentes no conjunto de treinamento, ao que chamamos de capacidade de generalização.

Em linhas gerais, o processo de aprendizado de uma rede neural artificial busca aprender um modelo de conhecimento interno que sumarize, de maneira correta e generalista, um conjunto maior de informações (nossa base de dados de treino e, consequentemente, o nosso problema real).

De maneira formal, uma rede neural artificial busca aprender uma função paramétrica que descreva bem um conjunto de dados. Durante o aprendizado, é apresentada a um espaço de busca do problema, e almeja-se encontrar valores para parâmetros que, quando aplicados a está função, dê como resultado valores de saída que avaliem corretamente o problema.

Feita essa breve introdução sobre alguns pontos chaves, daremos continuidade em um próximo artigo a explicação em detalhes da estrutura e funcionamento de um neurônio, conjuntamente com inicio da implementação da nossa rede neural.

Referências

[1] – MCCULLOCH, Warren S.; PITTS, Walter. A logical calculus of the ideas immanent in nervous activity. Bulletin of mathematical biology, v. 52, n. 1-2, p. 99-115, 1990.

[2] – HAYKIN, Simon. Neural networks and learning machines, 3/E. Pearson Education India, 2010.

Redes Neurais Artificiais: Uma introdução com implementação – Parte 1