Visão geral de Redes Neurais

Gravatar publicou em

Ciência de Dados

Ideia geral

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.

     neuronioartificial neurons

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.

network

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.

network binary

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 h_theta.png realizando uma propagação de valores desde a camada de entrada até a camada de saída. Para isso, é necessário definir variáveis theta, 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.

sigmoid    sigmoid function

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 theta1. Obtem-se:

formulas redes neurais

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, h_theta.png.

formula4.png

Portanto, o valor h_theta.png 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 theta.png 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 - j_theta.png;
  • 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 delta.png.

Primeiramente, é necessário inicializar as matrizes theta.png 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: theta1.png e theta2.png.

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

1. Propagação de valores

formula propagacao redes neurais

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: 

formula erro 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:

formula3.png

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 formula derivada redes.

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 formula deltas a 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 theta1.png e theta2.png.

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 theta.png.





Leia mais sobre: