Visão geral de Redes Neurais

Este artigo foi originalmente publicado em https://infosimples.com/ por Isabel Gomes em Agosto de 2014. Ele foi importado para o Medium da Infosimples, a nova casa dos artigos da Infosimples.

A ideia do algoritmo de redes neurais surgiu como uma tentativa de imitar o cérebro e sua incrível capacidade de aprender. Apesar de ser uma ideia relativamente antiga (surgiu em torno dos anos 80–90), hoje em dia redes neurais são consideradas estado da arte em diversas aplicações.

O algoritmo de redes neurais se baseia na hipótese de que o cérebro possui apenas um algoritmo que consegue aprender todas as funcionalidades do corpo, ou seja, qualquer área de cérebro seria capaz de aprender a ver ou ouvir, se recebesse os estímulos apropriados.

Representação

No cérebro, cada neurônio recebe impulsos nervosos através dos dendritos, realiza um determinado “cálculo” no corpo celular e transmite a resposta através de outro impulso nervoso, utilizando o axônio. O algoritmo de redes neurais copia esse sistema, como mostram as Figuras 1 e 2 abaixo.

Figuras 1 e 2 — representação de um neurônio (à esquerda) e de uma unidade de rede neural (à direita).

Neste tipo de algoritmo, vários “neurônios” são conectados entre si de modo a formar uma rede. Essa rede é formada por 3 tipos de camadas, chamadas de camada de entrada (input), camada de saída (output) e camadas ocultas (hidden), como mostrado na Figura 3 abaixo.

Figura 3 — representação de uma rede neural.

A camada de entrada recebe os dados de entrada e o valor final é gerado na camada de saída. As camadas chamadas ocultas fazem cálculos intermediários que auxiliam a rede a encontrar os valores finais. Em redes mais complexas, pode-se utilizar várias camadas ocultas entre a camada de entrada e saída. Os valores dos neurônios em cada uma das camadas irá depender da quantidade de dados de entrada e do tipo de problema a ser resolvido. Por exemplo, se o algoritmo foi projetado para determinar se um paciente é ou não portador de uma determinada doença, tem-se como entrada os dados relevantes deste paciente e como saída apenas um valor, ou seja, um único neurônio na camada de saída.

Exemplo: propagação de valores

Em uma aplicação na área de saúde, deseja-se determinar se um determinado tumor é maligno ou benigno baseado em algumas de suas características. Para este problema, é necessário que a rede neural tenha apenas um neurônio na camada de saída, que irá retornar o valor 1 se o tumor for maligno ou 0 se for benigno. Um exemplo de rede que pode ser utilizada é mostrado na Figura 4 abaixo.

Figura 4 — exemplo de rede neural.

Neste caso, tem-se 3 características do tumor que são as entradas do algoritmo, além de um neurônio extra, chamado de “bias unit”, que sempre gera o valor 1. Este neurônio extra é adicionado em todas as camadas, com exceção da camada de saída e faz com que a rede se adapte melhor ao conjunto de entradas e saídas.

Este algoritmo visa encontrar o resultado, ou seja, o valor de

realizando uma propagação de valores desde a camada de entrada até a camada de saída. Para isso, é necessário definir variáveis

, onde l se refere a camada que está sendo tratada, também conhecidas como matrizes de pesos. Os valores contidos nessas matrizes são obtidos durante o treinamento do algoritmo e representam o peso de cada neurônio no valor do neurônio da próxima camada.

Como este exemplo refere-se a um problema de classificação com apenas dois possíveis valores de saída (0 ou 1), é possível utilizar a função sigmoidal como função de ativação. Esta função, cujo gráfico está representado na Figura 5 abaixo, gera o valor 0 quando os valores de entrada são muito negativos e 1 quando são muito positivos.

Figura 5 — gráfico da função sigmoidal.

O processo de propagação começa na camada de entrada, onde cada neurônio assume o valor de um dado do tumor, ou seja, eles assumem os valores x1, x2 e x3, sendo x um vetor com todos os valores de entrada.
 O segundo passo consiste em calcular os valores dos neurônios da camada oculta, usando, para isso, os valores da matriz

. Obtem-se:

onde a1(2), a2(2)e a3(2) são os valores dos neurônios na camada oculta.

Por fim, é necessário calcular o valor da camada de saída, ou seja,

.

Portanto, o valor

obtido será 0 ou 1, dependendo das características do tumor que foram especificadas nas variáveis de entrada x1, x2 e x3.

Treinamento do algoritmo

O objetivo do treinamento do algoritmo é encontrar os valores das matrizes

que fazem com que o algoritmo gere as saídas corretas. Para isso é necessário coletar vários exemplos de tumores, ou seja, é necessário saber não apenas suas características, como também se ele é benigno ou maligno.

Uma maneira de calcular as matrizes de peso de maneira eficiente é utilizar uma função chamada fmincg. Esta função tem como entrada os seguintes dados:

  • Função de custo -
  • ;
  • Derivada da função de custo;
  • Dados de entrada (dados dos exemplos do treinamento).

A função de custo é uma função que varia para cada problema e situação e seu objetivo é calcular o erro cometido pelo algoritmo. Várias funções de custo já foram determinadas por matemáticos e podem ser utilizadas para resolver diversos problemas.

Para calcular a derivada da função de custo, utiliza-se um processo chamado “back propagation”, cuja ideia é calcular o erro de cada neurônio da rede em cada exemplo do treinamento, ou seja, qual a diferença entre o valor calculado do neurônio e o valor correto que ele deveria assumir. Esse erro pode ser representado pela letra grega delta minúsculo

.

Primeiramente, é necessário inicializar as matrizes

com valores aleatórios, sendo que l varia de 1 a L — 1, onde L é o número total de camadas da rede neural. No exemplo utilizado é necessário inicializar duas matrizes:

e

.

Com as matrizes inicializadas, para cada exemplo do treinamento é necessário realizar alguns passos:

1. Propagação de valores

2. Cálculo dos erros de cada neurônio

Para a camada de saída, o erro corresponde a diferença do valor real e do valor calculado pela rede:

Para as camadas ocultas, esse erro corresponde a uma propagação do erro da camada de saída e pode ser calculado, neste exemplo, pela fórmula:

3. Cálculo da derivada da função de custo

Para cada exemplo do treinamento, é possível provar que a derivada da função de custo equivale a

.

Considerando que o treinamento possui vários exemplos, foi provado que a derivada total da função de custo é igual a média dos valores

calculados para cada exemplo.

Portanto, como todos os valores necessários à função fmincg foram encontrados, o próximo passo é aplicar a função e obter os valores de

e

.

Conclusão

Apesar de ser um modelo de algoritmo mais complexo e talvez de mais difícil compreensão, as redes neurais são extremamente úteis e versáteis. Mudando apenas os dados de entrada, a função de custo e a função de ativação é possível modelar diversos problemas diferentes, encontrando os valores adequados de

.


Originally published at infosimples.com.