Entendendo o funcionamento de uma Rede Neural Artificial

Murillo Grübler
aibrasil
Published in
8 min readJun 11, 2018

Rede Neural Artificial (RNA) pode ser definida como uma estrutura complexa interligada por elementos de processamento simples (neurônios), que possuem a capacidade de realizar operações como cálculos em paralelo, para processamento de dados e representação de conhecimento. Seu primeiro conceito foi introduzido em 1943, mas ganhou popularidade algumas décadas depois com a introdução de algoritmos de treinamento como o backpropagation, que permite a realização de um treinamento posterior para aperfeiçoar os resultados do modelo.

Desde que foi desenvolvida, essa técnica vem sendo amplamente utilizada e validada por diversas áreas de pesquisa que pretendem antever acontecimentos e auxiliar na tomada de decisão. Atualmente, há diversas topologias das RNA’s que buscam resolver diferentes tipos de problemas, tais como:

  • Processamento de linguagem natural;
  • Reconhecimento de fala e imagens;
  • Previsão de valores.

Contudo, antes de compreender o funcionamento de uma rede neural artificial, é importante entender no que essa técnica está baseada.

Rede neural artificial é uma abstração da rede neural biológica. Seu objetivo não é replicar, mas sim servir de modelo para o aprendizado e resoluções de problemas complexos. Essa inspiração só foi possível, segundo Rojas, porque nos últimos 100 anos, a medicina avançou na compreensão da complexidade do cérebro humano, premiando aproximadamente 10% dos prêmios Nobel de fisiologia e medicina com estudos relacionados a essa area. Através desses estudos, a RNA foi moldada, herdando características biológicas, como alto paralelismo, robustez, tolerância a falhas e aprendizado através de padrões.

Neurônio biológico

O sistema nervoso biológico possui arquiteturas das mais diversas complexidades. Esses sistemas complexos são compostos por células neurais ou neurônios, que desempenham funções diferentes. Tais células nervosas possuem um corpo celular com dois tipos de ramos, os dendritos e axônios, podendo ser visualizado na seção a da próxima imagem.

O corpo celular carrega informações vitais sobre suas características, além de um plasma que possui as substâncias moleculares necessárias para o funcionamento da célula. A comunicação entre os neurônios ocorre através de impulsos captados pelos dendritos, responsáveis por receber a informação e repassar para o corpo da célula através do axônio. O axônio, que se divide em colaterais, recebe sinais a partir do corpo da célula e os transporta para os dendritos que vão repassar para os dendritos de outros neurônios vizinhos através da sinapse, representada na seção b da imagem abaixo.

Biologia de uma célula nervosa e seu mecanismo de comunicação.

A relação entre as redes artificiais e biológica é que ambas possuem axônio e dendrito e comunicam-se por sinapses. A representação dessa relação é exibida na imagem abaixo, onde a letra x representa os sinais recebidos e a força sináptica recebida é simbolizada por w. Ambas as redes possuem a capacidade de ajustar a amplitude das sinapses em uma série de camadas interligadas. O modelo artificial apresentado na imagem abaixo representa a mais simples rede neural artificial, chamada de perceptron.

Relação entre uma rede neural biológica e artificial.

Perceptron

Em 1958, a Rede Neural Artificial Perceptron foi introduzida por Frank Rosenblatt, inspirado nos trabalhos de Walter Pitts e Warren Sturgis McCulloch. Esse modelo é um dos mais antigos e lida com um único neurônio, classificando o resultado de forma linear. Na figura abaixo, o neurônio artificial é um Perceptron que recebe diversos valores de entradas y(n). Essas entradas multiplicam-se pelo peso da sinapse w e, no final, somam-se formando um conjunto de entrada ξ = ∑ w * y(n). Esse resultado passa por uma função de ativação linear (que será explicada detalhadamente mais à frente desse artigo) e transmite a saída v. Quando o valor ξ exceder o limite da função de ativação, o neurônio será ativado e retornará um valor.

Visão geral do funcionamento de uma Rede Neural Artificial.

Multilayer Perceptron

Com o intuito de lidar com os problemas não linearmente separáveis, foram adicionadas camadas de neurônio ocultas no modelo de Rosenblatt, formando então a Rede Neural Artificial Multilayer Perceptron (MLP).

Modelo de uma Rede Neural Artificial MLP.

Essa nova topologia funciona como uma rede feedforward (rede progressiva, a saída de um neurônio se conecta com outro neurônio da próxima camada, no sentido esquerda/direita), formada por um conjunto de neurônios denominados “nós”, como demonstrado na imagem ao lado. A rede possui uma camada de entrada (sem função computacional), uma ou mais camadas ocultas e uma camada de saída. A complexidade da rede MLP se dá pela quantidade de camadas ocultas que houver e a quantidade de neurônios que essas camadas possuírem.

A equação da figura realiza o somatório ponderado entre as sinapses de cada neurônio.

O funcionamento geral de uma rede MLP está representada na figura acima. Cada neurônio recebe todos os valores das entradas, representadas pelo símbolo y, que são multiplicadas pelos pesos sinápticos simbolizados pelo w e somadas entre si junto com uma constante chamada de polarização ou bias, representada pelo símbolo b. Essa constante possui o papel de centralizar a curva da função de ativação em um valor conveniente. Caso seja positivo, o movimento do gráfico é realizado para a esquerda, diminuindo o valor do eixo x. Porém, caso seja negativo, o movimento do gráfico é feito para a direita, aumentando o valor do eixo x. A soma ponderada apresentada na equação da imagem acima gera o potencial de ativação que é utilizado para determinar seu valor e propagar para outros neurônios da próxima camada.

Deslocamento do gráfico através da constante bias.
Diferentes tipos de funções para diferentes tipos de redes neurais.

Função de Ativação

Logo após o somatório ponderado dos neurônios, o valor obtido passa por mais um cálculo, chamado de função de ativação ou transferência. Seu objetivo é limitar a amplitude de saída do neurônio, ou seja, o valor obtido no somatório é normalizado dentro de um intervalo fechado, como [0,1], podendo ser interpretado também como a probabilidade do resultado.

Existem diversas funções lineares como a função degrau e identidade e não lineares como a gaussiana, tangente hiperbólica, sigmoide, entre outras, que testam o potencial de ativação através de sua fórmula. Em funções lineares, uma das técnicas mais populares é a função degrau, que determina, através de condições, o resultado final. Ou seja, é possível determinar que se o resultado da soma ponderada for menor ou igual zero, o algoritmo entregará um resultado, caso seja maior, ele entregará outro valor final. As condições dependem do que está se classificando.

Já em funções não lineares, a técnica logística sigmoidal é uma das mais populares em redes MLP e sua fórmula pode ser visualizada na imagem ao lado, no qual o símbolo x representa o valor obtido na soma ponderada do neurônio.

Backpropagation

Quando uma rede neural artificial é inicializada, os pesos sinápticos recebem valores aleatórios que, quando multiplicados pelos valores recebidos, algumas vezes da camada de entrada e outras de neurônios da camada anterior, não atingem os valores desejados no momento do treinamento. Para corrigir os pesos sinápticos, uma das técnicas populares é a retropropagação, conhecido também como backpropagation, que corrige os valores dos pesos pela diferença entre o valor obtido e o esperado (recebido no treinamento) pelo algoritmo, propagando para todas as células nervosas.

Funcionamento do backpropagation.

Em 1986, David Rumelhart e seus colegas introduziram o algoritmo backpropagation, possibilitando o treinamento das redes neurais com diversas camadas através da retropropagação. O processo de correção ocorre em dois passos. No primeiro passo, chamado de feedforward, é introduzido um valor na camada de entrada e outro na camada de saída. O resultado flui dentro das camadas internas até que a resposta seja reproduzida na camada de saída. Já no segundo passo, ocorre o aprendizado da rede, comparando o valor obtido com o valor desejado, através da equação (1), que subtrai o valor esperado (rr) do valor obtido (ro) do neurônio j e, caso o resultado não esteja no padrão aceitável, a rede calcula o erro e propaga a correção para as demais camadas internas até a entrada, ajustando os seus pesos sinápticos.

A técnica backpropagation propaga os sinais de erro na direção oposta ao feedforward, camada a camada, computando os gradientes locais de cada neurônio, visualizado na imagem acima. Esse processo permite que sejam executadas correções nos pesos sinápticos através da equação (2). Nessa equação, o símbolo Δwji representa o novo valor do peso sináptico i do neurônio j, já y simboliza o sinal de entrada da célula nervosa j, pertencente ao neurônio i, η é a razão de aprendizado (um valor definido no momento da configuração da rede)e o δ é o gradiente local.

Para utilizar a equação (2) de ajuste dos pesos e propagar as correções entre as sinapses, é necessário calcular o gradiente local. Nos neurônios da camada de saída, o gradiente local é o sinal de erro da equação (1), multiplicado pela derivada de sua função de ativação, simbolizada por φ(v), conforme a equação (3). Após a correção na camada de saída, utiliza-se a equação (4)para obter o gradiente local dos neurônios predecessores, escondidos na estrutura da rede. Esse processo de correção é recursivo e termina apenas quando o algoritmo de treinamento chega à primeira camada, a de entrada.

Na equação (4), que visa obter os gradientes locais de neurônios internos da rede, a derivada da função de ativação (função logística sigmoidal, tangente hiperbólica , ou outras) representada pelo símbolo φ(v), é multiplicada pelo somatório de outro gradiente local, simbolizado pelo δ, obtido através da retropropagação advinda dos neurônios posteriores ao j, sendo, nesse exemplo, o neurônio k vezes os pesos sinápticos w entre os neurônios j e k.

Implementações

Existem diversas implementações dessa técnica de aprendizado de máquina na internet. Em muitos casos, a técnica é abstraída em uma biblioteca, facilitando a sua utilização em muitos softwares. Contudo, aprender a técnica lendo códigos de bibliotecas já estabelecidas no mercado não é uma tarefa muito fácil. Tendo isso em vista, eu criei um projeto no GitHub com algumas implantações dessa técnica em Python e Java. Bons estudos!

Outros artigos relacionados com Aprendizado de Máquina:

  1. Analisando imagens com Computer Vision API da Microsoft
  2. Classificando imagens com o Custom Vision da Microsoft

Referências

--

--

Murillo Grübler
aibrasil

Software Engineer passionate about Data Science and Deep Learning