Redes Neurais

O campo de estudo das redes neurais, em inglês também conhecido como Neural Networks ou Multilayer Perceptrons, tem como objetivo investigar como modelos biológicos simples do nosso cérebro podem ser usados para resolver problemas computacionais complexos (por exemplo, prever a ocorrência de um evento). Na prática, este campo tem como objetivo criar algoritmos e estruturas de dados capazes de resolver estes desafios.

O termo Perceptron foi o precursor das grandes redes neurais utilizadas em deep learning e refere-se a um modelo simples com um único neurônio.

As redes neurais têm a capacidade de aprender uma função de mapeamento dos dados, pela qual é possível relacionar variáveis independentes da variável resposta. Esta função de mapeamento é aprendida por meio da criação de um sistema de multicamadas.

Neurônios

Neurônios são unidades computacionais que recebem valores de entrada, atribuem pesos para estes valores e depois retornar os valores de saída com o auxílio de uma função de ativação.

neuronio

Fonte: MachineLearningMastery.com

Os pesos atribuídos aos parâmetros de entrada são parecidos com os coeficientes existentes em uma regressão linear, caso você já esteja acostumado com este assunto. Cada neurônio possui um viés (em inglês, bias) que pode ser entendido como um valor constante que também deve possuir um peso. Portanto, para um neurônio com N valores de entrada, são atribuídos N+1 pesos.

Assim como nos modelos de regressão linear, quanto menos os valores dos pesos, mais simples e melhor o modelo.

Os valores de entrada, juntamente com os seus respectivos pesos, são somados e passados para uma função de ativação (também chamada de função de transferência). Esta função faz a conexão entre os valores de entrada e os valores de saída do neurônio.

Por exemplo, a função de ativação pode controlar se a soma dos valores de entrada do neurônio é maior ou igual a um determinado valor (threshold) e retornar 0 (caso negativo) ou 1 (caso positivo). Exemplos de funções de ativação são sigmoid (logistic function, retorna valores entre 0 e 1), Tanh (hyperbolic tangent, retorna valores entre -1 e +1) e rectifier.

Rede de neurônios

Os neurônios são organizados em uma rede composta por diferentes camadas (em inglês, layer). Podemos considerar uma camada como uma linha com um ou vários neurônios. Existem alguns tipos diferentes de camadas:

  • Input layer: Esta camada é considerada uma camada visível porque expõe parte da rede. La é responsável por capturar os dados e transmiti-los para as próximas camadas da rede. Geralmente esta camada possui um neurônio para cada input (variável) do conjunto de dados de entrada.
  • Hidden layers: Um rede pode ter várias camadas invisíveis, ou hidden layers. A rede neural mais simples terá apenas um neurônio nesta camada, que será responsável por transmitir o resultado para a última camada.
  • Output layer: Esta também é um camada invisível e é responsável por mostrar o resultado do modelo. A escolha da função de ativação desta camada esta intimamente ligado ao domínio do problema em questão.

Um problema de regressão pode ter um único neurônio de saída e nenhuma função de ativação. Um problema de classificação binária pode ter um único neurônio de saída que utiliza uma função de ativação sigmoid para retornar 0 ou 1, de acordo com um determinado threshold. Um problema de classificação múltipla pode ter vários neurônios na camada de saída, um para cada tipo de classe.

camadas.png

Fonte: MachineLearningMastery.com

Treinando a rede neural

Depois de configurar as camadas da rede, devemos treinar o modelo. Um rede neural espera que todas as variáveis do conjunto de dados de entrada sejam numéricas. Portando, considere criar variáveis dummies (também chamadas de one hot encoding) para transformar dados categóricos. Por exemplo, ao invés de usar os valores “homem” e “mulher” para a variável sexo, usar 0 ou 1.

A forma mais comum para se treinar uma rede neural é conhecida como Stochastic Gradient Descent. Esta abordagem não é utilizada apenas em redes neurais, na verdade, é bastante comum em casos em que existem grandes quantidades de dados nos quais métodos mais tradicionais (como batch) podem demandar muito tempo para execução. Stochastic Gradient Descent expõe uma linha por vez como entrada à rede neural.

Os pesos da rede neural podem ser atualizados conforme os dados são processados e os erros são calculados (abordagem conhecida como online learning) ou ao final do processo (abordagem conhecida como batch learning). Esta segunda abordagem é geralmente mais estável.

Para otimizar o processamento da rede (muitas vezes devido a grande quantidade de dados) o tamanho do batch que possui os dados para atualização dos pesos é reduzido.

O principal parâmetro que controla a atualização dos pesos é conhecido como learning rate. Geralmente se utiliza-se taxas pequenas, como 0.1 ou 0.01 para este parâmetro. Dois parâmetros adicionais ainda podem ser usados na equação responsável pela atualização dos pesos:

  • Momentum, incorpora as propriedades da atualização de pesos anterior e faz com que os pesos continuem sendo atualizados na mesma direção mesmo quando o erro diminui
  • Learning rate decay, é usado para diminuir o valor do learning rate conforme os erros diminuem.

Acesse a parte prática: https://anaconda.org/weslleymoura/keras_first_model/notebook

Abraços.
Weslley Moura

Referência: http://machinelearningmastery.com/tutorial-first-neural-network-python-keras/

Anúncios