Uma breve introdução a Redes neurais e “Deep Learning”

Fonte da imagem: http://www.opennn.net

Nos últimos dias publiquei nas redes sociais um certificado do curso de “Neural Networks and Deep Learning” do coursera e com isso algumas pessoas vieram me peguntar o que é “Deep Learning”. Com isso eu percebi que por mais que algumas pessoas da área de tecnologia conheçam os termos, muitos ainda não sabem como funciona, qual a utilidade e como fazer.

Talvez se você for da área de tecnologia como eu, você se depare com o termo I.A (Inteligencia artificial) ocasionalmente em algum artigo, ou por algum colega que diz estar aprendendo, ou porque o seu chefe diz querer utilizar I.A para resolver algum problema, às vezes mesmo sem entender como funciona.

Então vamos lá!

Antes de entrar nos conceitos de Deep Learning e redes neurais alguns conceitos precisam ser definidos:

I.A (Inteligencia Artificial): Inteligencia artificial seria a capacidade de maquinas pensarem e realizarem ações que até então só os humanos conseguem executar.

Machine Learning (Apendizado de maquina): O aprendizado de maquina é uma subárea de inteligência artificial que consiste em fazer com que as máquinas consigam aprender com base em suas ações, e assim ir se aprimorando ao executar certa tarefa. Isso pode ser através de “Supervised Learning” ou “Unsupervised Learning”, onde no primeiro você fornece uma grande quantidade de dados para a maquina como input e as respostas esperadas para esses dados após o processamento, e no segundo os dados não são estruturados, ficando por conta da maquina fazer a classificação dos dados de forma lógica e aprender em cima deles.

Agora sim, Deep Learning!

Tendo esses conceitos definidos podemos partir para entender o que é Deep Learning e como funciona.

Deep Learning é um dos métodos de Machine Learning que temos hoje, ele consiste em treinar uma I.A para prever qual o resultado(Output) para determinados dados(Input) que serão processados. Como exemplo podemos ter:

  • Classificação de imagens

Aqui temos de input uma imagem, a I.A após o processamento da imagem, fornece de output a descrição da imagem, no caso "Um cachorro preto e branco pulando por uma barra."

Fonte da imagem: https://cs.stanford.edu/people/karpathy/deepimagesent/
  • Carros autônomos (Self driving car)

Um dos exemplos mais citados quando falamos de Deep Learning, Machine Learning e I.A são os famosos carros autônomos. Que são fortemente estudados e fabricados por empresas como Google, Tesla e Uber.

Redes Neurais

A rede neural é o cérebro da I.A, é onde ocorre todo o processamento necessário para o aprendizado de máquina e tomada de decisões.

Uma rede neural apresenta a seguinte estrutura:

Fonte da imagem: http://neuralnetworksanddeeplearning.com/chap6.html

Na imagem podemos ver toda a estrutura de uma rede neural:

  1. Input layer: É a camada de entrada da rede neural, onde inserimos os dados que serão utilizados para a predição e aprendizado de máquina.
  2. Hidden layers: Os hidden layers são as camadas ocultas de uma rede neural onde são feitas as operações matemáticas que são utilizadas na rede neural, normalmente uma transformação linear seguida de uma função de arredondamento, tendo como principal função transformar os dados de entrada em algo que o output layer possa utilizar. Um dos desafios ao trabalhar com redes neurais é definir qual a quantidade de hidden layers que serão utilizados na rede neural, esse número pode variar de problema para problema e ainda não temos uma forma concreta de definir qual o melhor número a ser utilizado, então precisamos fazer testes com múltiplas camadas e ver qual chega mais perto do resultado esperado. Outro ponto é que se os dados de entrada podem ser separados de forma linear, então não temos a necessidade de ter hidden layers na rede neural, podendo trabalhar apenas com o input layer e com o output layer.
  3. Output layer: É a camada que coleta todos os valores processados pela rede e devolve o resultado final.

Quando falamos sobre as camadas e as estruturas de uma rede neural são muitas características a serem abordadas, então vamos ver como a rede neural funciona em um caso real.

Comportamento de usuários utilizando deep learning

Vamos supor que temos um serviço de video por assinatura e queremos poder dizer se um usuário pretende cancelar a assinatura dele nos próximos meses, e para isso vamos implementar uma rede neural e utilizar Supervised Learning, ou seja, vamos treinar essa rede neural com dataset pré determinado e validar em cima das respostas que temos para aquele dataset e assim validar a precisão do nosso algoritmo.

Para isso temos alguns passos a seguir:

1) Aquisição dos dados

O primeiro passo para isso seria extrairmos da nossa base as informações relacionadas a um grupo de clientes, dos quais podem ou não já ter cancelado a sua assinatura, quanto maior o dataset que conseguirmos, mais preciso o nosso algoritmo pode ser.

2) Preparar os dados (model)

Nessa fase de preparação dos dados precisamos transformar esses dados de forma que nossa rede neural possa utiliza-los para os cálculos necessários, aqui entra o processo de análise de dados onde varremos o dataset e extraímos as features que são mais importantes para o nosso caso de uso, como tempo de assinatura, idade, local, frequência de acesso, etc. Para isso fazemos o processo de data cleaning e normalização dos dados e então definimos o peso que cada feature vai ter, por exemplo, podemos dizer que a frequência de acesso tem mais peso para nós do que o tempo de assinatura para esse caso específico. Com isso conseguimos definir o nosso model.

Obs: Uma forma de definir os pesos é iniciar todos com valores aleatórios, pois nem sempre o peso que achamos ser o mais relevante é de fato o mais relevante, assim deixamos para a própria rede neural fazer a calibragem desses pesos durante o processo de treino.

Após a preparação dos dados eles normalmente são divididos em 3 datasets, o de treino, o de dev e o de teste. Mas isso não é lei, tudo depende da quantidade de dados a disposição, dependendo do caso podemos remover o dataset de test e dividir apenas em treino e dev, e fazemos a validação em cima do próprio dataset de dev.

Dos 3 datasets o de treino leva entre 70%-80% dos dados extraídos no primeiro passo, isso por que é a partir dele que extraímos a “inteligência” que a nossa rede neural vai ter para fazer as previsões futuras.

3) Escolher o algoritmo de machine learning a ser utilizado

Para cada problema temos um algoritmo que pode alcançar uma precisão melhor, por isso nessa fase precisamos decidir qual algoritmo iremos utilizar, e como estamos falando sobre deep learning, vamos de redes neurais 🙂

Alguns outros algoritmos de machine learning são: árvores de decisões, regressão e máquinas de vetores de suporte (SVM).

4) Treinar os dados

Aqui é onde inserimos o model na nossa rede neural para obter um resultado, que no nosso caso seria 0 ou 1, 0 caso o não usuário fosse cancelar a assinatura nos próximos meses, e 1 caso ele fosse. Nessa primeira iteração, como a rede ainda não está treinada, a % de acerto provavelmente não será muito boa.

Para resolver isso, temos a chamada função de custo, essa função compara o valor obtido pela rede neural com o valor real que temos para dizer o quão precisa foi a previsão, com isso podemos utilizar de um método para diminuir a função de custo e trazer os nossos valores mais perto do resultado real, e isso pode ser feito utilizando o Gradient descent, que é uma forma de encontrar o minimo de uma função. Então, utilizando do gradient descent vamos reduzindo o custo a cada iteração que nossa rede executa em cima dos dados de treino, e com isso tornando o resultado final mais preciso.

Obs: Nem sempre mais iterações quer dizer um algoritmo mais preciso.

5) Testar em cima de novos datasets

Após o treino da rede neural, podemos testar em cima dos datasets de dev e de teste, e comparar os resultados para dizer o quão precisa a nossa rede neural é.

Considerações finais

É muito difícil falar de redes neurais e não abordar todas as características técnicas e funções matemáticas que estão envolvidas (Eu nem falei de derivadas, sigmoid e função de ativação), por isso eu decidi explicar de uma maneira mais ampla e simples como uma rede neural funciona.

Para quem se interessou pelo assunto e busca aprender mais, existe muito material na internet e vários produtores de conteúdo de qualidade como Siraj Raval, Trask e Andrew Ng.

Sobre o curso que mencionei no começo, é a especialização em deep learning da deeplearning.ai que é ministrado pelo Andrew Ng e possui um ótimo conteúdo e é muito bem explicado, além de ter um preço bem acessível para todos.

Por enquanto é só, logo mais estarei publicando uma implementação de rede neural onde poderemos ver bastante código. Qualquer dúvida ou correção só deixar nos comentários.

Também pretendo começar a utilizar o twitter, então pra quem gostou segue lá.

Source: Deep Learning on Medium