Afinal, o que é uma Rede Neural Artificial?

Aprenda um pouco sobre essa interessante técnica de Aprendizado de Máquina

Arthur Oliveira
5 min readMay 29, 2019

Atualmente, um tópico muito comentado no tópico de Aprendizado de Máquina, pertencente à área de Inteligência Artificial, são as chamadas Redes Neurais Artificiais (do inglês, Artificial Neural Networks), comumente abordadas também quando falamos de Aprendizado Profundo (do inglês, Deep Learning).

As Redes Neurais Artificiais estão em alta no mundo acadêmico e empresarial nos últimos anos, possuindo aplicações no mercado financeiro para previsão de ações, em reconhecimento facial, em reconhecimento de áudio, em processamento de textos, dentre outros.

No entanto, antes de chegarmos ao Aprendizado Profundo de fato, ou seja, uma Rede Neural Artificial com múltiplas camadas e que podem pertencer a diferentes arquiteturas (como, por exemplo, Mutilayer Perceptron -MLP- , Recurrent Neural Netork -RNN-, Long Short-Term Memory -LSTM-, Convolutional Neural Network -CNN, etc.), é necessário que entendamos um dos neurônios artificiais mais simples: o Perceptron, criado por Rosenblatt, em 1957.

O Perceptron

O Perceptron corresponde a uma representação matemática de um neurônio biológico, conforme apresentado na Figura 1. Simplificadamente, seu funcionamento geral é: receber uma entrada (sinal), processá-la e definir uma saída, isto é, se haverá um sinal de saída e qual a sua intensidade.

Figura 1. Representação de um neurônio biológico

Na Figura 2, é possível ver a representação matemática do Perceptron de fato. Da esquerda para a direita, analogamente ao neurônio biológico apresentado na Figura 1, temos as seguintes atividades realizadas em sequência: (1) o sinal chega ao Perceptron por meio das entradas representadas por x1,…xn; (2) os pesos são aplicados às entradas com a finalidade de definir sua importância, sendo representados por w1,…,wn; (3) a somatória (Σ), é responsável por somar todos os pesos associados a todas as entradas, gerando um número que será avaliado; (4) a função de ativação, f(x), cujo objetivo é definir se ocorrerá a propagação do sinal adiante para a saída, y, além de qual a intensidade desse sinal.

Figura 2. Ilustração do funcionamento de um Perceptron

Do mesmo modo, formalmente, a saída de um Perceptron é definida pela seguinte equação:

Apenas nesta pequena introdução, temos várias perguntas que podem ser realizadas:

  1. Como se define a entrada de um Perceptron?
  2. Como se define os valores dos pesos de um Perceptron?
  3. Como se define a função de ativação de um Perceptron?
  4. Qual a relação de um Perceptron com uma Rede Neural Artificial (RNA)?

Respire fundo.

Algumas partes dessas perguntas serão respondidas a seguir. As outras partes ficarão para um futuro artigo, em que pretendo mostrar na prática como se programa uma Rede Neural Artificial. Este artigo não pretende de forma alguma substituir um trabalho acadêmico ou livro didático, e tampouco esgotar o assunto. De fato, é interessante misturar a leitura de teoria e vídeos sobre o assunto com atividades de implementação em linguagem Python.

Rede Neural Artificial

Afinal, como vamos unir os conceitos de Perceptron e uma Rede Neural Artificial (RNA)? Vamos começar com a seguinte definição.

Uma RNA é uma estrutura computacional inspirada na biologia, uma representação computacional da conexão de diversos neurônios artificiais. Ela é dividida em diversas camadas: camada de entrada, camadas ocultas ou intermediárias e camada de saída, conforme a Figura 3. Todas as camadas são compostas por neurônios, que são ligados por conexões cujo objetivo é simular uma conexão sináptica.

Figura 3. Exemplo de uma Rede Neural Artificial.

Como este artigo tem como objetivo ser de propósito geral, vamos simplificar algumas coisas. O primeiro ponto é que o Perceptron é uma representação muito simples de um neurônio biológico. Ele pode ser implementado com poucas linhas de código em uma linguagem de programação convencional. Da mesma forma, apesar de ter havido um grande interesse no momento de sua divulgação no mundo científico, logo foi descontinuado e abandonado devido às suas limitações.

Inicialmente, temos que saber que um dos propósitos do Perceptron era a classificação, ou seja, discriminar a classe a qual um objeto pertence (por exemplo: uma foto de animal é de um gato ou de um cachorro? o mercado financeiro vai subir ou vai descer?). Nesse sentido, foi provado que as capacidades de classificação do Perceptron era extremamente limitada.

Mas então, porque estamos tratando dele até agora?

Aqui vem o ponto mais interessante: quando juntamos vários perceptrons em camadas e ligados uns aos outros (ver Figura 3), temos um classificador extremamente poderoso. Ou seja, temos vários neurônios conectados entre si em uma disposição hierárquica. Enquanto um Perceptron é teoricamente fraco em termos de classificação, a junção deles em camadas é considerada, teoricamente, um aproximador universal de funções (aqui temos grandes desdobramentos dessa teoria, que pode também ficar para um futuro artigo :-)).

Chegamos, finalmente, a uma Rede Neural Artificial (ufa!), cuja organização (arquitetura) é chamada Multilayer Perceptron (ou Perpetron de Múltiplas Camadas). Veja na Figura 4 outra representação de uma rede MLP.

Figura 4. Ilustração de uma RNA do tipo MLP.

Uma RNA passa por um processo denominado treinamento, ou seja, é fornecido um conjunto de dados à Rede Neural. A Rede “aprende” os padrões por trás do conjunto de dados e partir daí é capaz de realizar previsões sobre esses dados por meio de um algoritmo chamado backpropagation. Por exemplo, caso eu crie uma RNA para ser alimentada por histórico de jogos de futebol, como fizemos anteriormente aqui, é capaz de prever o próximo resultado com base no padrão de Vitórias, Empates e Derrotas que ela aprendeu.

Vale destacar aqui que existem diferentes arquiteturas de RNAs, diferentes tipos de neurônios, diferentes parâmetros para treinarmos uma Rede Neural Artificial, enfim…

Este artigo, como dito anteriormente, é de caráter introdutório e geral. E nos dá a base para diversos artigos que irão decorrer daqui, de caráter teórico e prático. O próximo passo será como implementar uma RNA em Python.

Um abraço e até lá.

--

--

Arthur Oliveira
Arthur Oliveira

Written by Arthur Oliveira

Professor da área de computação. Doutor pela UNICAMP. Graduado em Ciências da Computação e mestre pela USP.

No responses yet