Ferramentas de Python para Aprendizado de Máquina

Objetivo

O objetivo deste post é revisar os conceitos de redes neurais artificiais e aplicá-los em um conjunto de dados.

O que é aprender?

#  Do ponto de vista humano → Aprender através das experiências
#  Do ponto de vista das máquinas → Aprender através dos dados

…E quais são as partes importantes do aprendizado?

#  Lembrar e adaptar
#  Generalizar (tornar mais amplo; dar maior extensão a algo ou a alguma coisa)Aprendizado de Máquina (Machine Learning)

Computadores devem modificar ou adaptar suas ações para que sejam cada vez mais precisas. A precisão é medida pelo quão bem as ações escolhidas refletem as corretas

 A ideia de fazer o computador aprender surgiu de diversas áreas, como neurociência, biologia, estatística, matemática e física.

“Um programa de computador deve “aprender” a partir de experiências e com respeito a alguma classe de tarefas T e medida de desempenho P, se o desempenho de tarefas em T, medido por P, melhora com experiências E.” Definição bem formada por Tom Mitchell (1998)

Exemplo i:

Jogo de Computador

Tarefa T : Jogar Xadrez

Medida de desempenho P : Partidas ganhas contra oponentes X perdidas

Experiência de Treinamento E : Prática de jogo contra ele mesmo

Exemplo II

Suponha que seu programa de e-mail esteja analisando quais e-mails você marca ou não como SPAM, e baseado nisso, aprende como melhorar a filtragem de SPAM.

É um problema de aprendizado de máquina? Sim

Qual é a tarefa T ? : Classificar e-mails como spam e não spam.

Qual é a experiência E ? : Analisar a classificação de emails como spam ou não 

Qual é a medida de desempenho P ? : O número (fração) de emails corretamente                                                                  classificados como spam / não spam.


Aprendizado de máquina pode ser utilizado para:

#  Detecção de SPAM
#  Fraude em cartões de crédito
#  Diagnósticos médicos
#  Análise de sentimento
#  Sistemas de recomendação
#  Predições
#  Processamento de linguagem natural
#  Motores de busca
#  Bioinformática
#  Reconhecimento de fala e escrita
#  Locomoção de robôs
#  …e muito mais

O problema de aprendizado de máquina é que geralmente se considera um conjunto de n amostras e tenta prever dados de uma amostra desconhecida.

As características de uma amostra são geralmente chamada de features. 

Os tipos de aprendizado:

#  Aprendizado Supervisionada (Supervised Learning)

#  Aprendizado Não Supervisionada (Unsupervised Learning)

#  Aprendizado por Reforço (Reinforcement Learning)

#  Aprendizado Evolucionário (Evolutionary Learning)


Fluxo sobre tipos de aprendizagem de máquina

dinoMl1

dinoML2

 

Definições

#  Modelo (model) : coleção de parâmetros que você está tentando encaixar.

#  Dados (data) : o que você está utilizando para encaixa no modelo.

#  Alvo (target) : o valor que você está tentando prever com o seu modelo

#  Características (features) : atributos do seus dados que serão utilizados na predição

#  Métodos (methods) : algoritmos que usaram seus dados para encaixar em um modelo.


PyBrain

PyBrain (http://pybrain.org) é um biblioteca modular, seu objetivo é oferecer flexibilidade e simplicidade. PyBrain é um acrônimo para Python-Based Reinforcement Learning, Artificial Intelligence and Neural Networks.

Para instalar no python:
pip install –U pybrain 

Alguns algoritmos que estão disponíveis na biblioteca:

Aprendizado supervisionado

#  Back-Propagation
#  R-Prop
#  Support-Vector-Machines (SVM)

Aprendizado não supervisionado

#  K-means clustering
#  LSH for Hamming and Euclidean Spaces

Redes

#  Feed-forward networks
#  Recurrent networks (RNN), incluindo as arquiteturas de Long Short-Term Memory (LSTM)
#  Multi-Dimensional Recurrent Networks (MDRNN)
#  Self-Organizing Maps (Kohonen networks)

Outros algoritmos podem ser visualizados em: http://pybrain.org/pages/features


Fluxo PyBrain

dinoMl3

Números cérebro Humano:

#  10 bilhões de neurônios

#  1 neurônio tem até 10.000 sinapses

#  Se cada ligação == 1 bit
    >> Teríamos mais de 11 Terabytes de capacidade máxima de memória


Redes neurais artificiais – RNA

Combinando os neurônios em uma ou mais camadas, que podem conter um ou mais neurônios e interligando estes neurônios através das sinapses, pode-se formar uma RNA (Rede Neural Artificial).

dinoML4

Sinais de entrada:
w 1 x 1 , w 2 x 2 , … , w n x n

Bias : É incluída no somatório da função de ativação, com o intuito de aumentar o grau de liberdade desta função e, consequentemente, a capacidade de aproximação da rede.

Função de ativação:

Função de transferência:
Função Sigmoide:
Função gaussiana: 
Função tangente hiperbólica: 

Neurônios:

Peso sináptico:

Sinal de saída:

Em geral possuem as RNAs possuem:

dinoML5


Arquitetura:

#  Amplamente conectada
#  Realimentação (retroalimentação)
#  A arquitetura da rede neural é livre


Aprendizado Supervisionado

Apresenta-se o conjunto de dados de entrada e a saída desejada.  A rede retorna um conjunto de valores de saída, que é comparado ao conjunto de valores de saída desejado.

Os pesos sinápticos e níveis de bias são ajustados de forma a minimizar a diferença entre a saída apresentada pela rede e a saída desejada. O processo é repetido para todos os pares de entrada e saída que constituem o conjunto de treinamento da rede, até que a taxa de acerto seja considerada satisfatória.


Aprendizado Não Supervisionado

A rede não recebe informações sobre valores de entrada e organiza sua estrutura de modo a fazer a classificação deste valores em grupos. Os dados são classificados pelo reconhecimento de padrões, ou seja, detecção de características em comum entre conjuntos de dados. Processo de competição e cooperação entre os neurônios.

Rede Neural Perceptron

Tem um arquitetura simples com uma camada de entrada e uma camada de saída, utilizada apenas em estruturas de decisão simples.

#  Função de ativação – Faz a soma ponderada dos sinais de entrada
#  Função de transferência – Determina a saída do neurônio, em função da soma ponderada.

Os valores: w i j , representam os pesos sinápticos das ligações entre os neurônios: o elemento i da camada de entrada com o neurônio j da camada de saída, e simula a eficácia da sinapse entre os neurônios naturais

dinoML6

A função de ativação é representada pela letra v, e tem o formato:dinoML7

A função de transferência é representada pelo símbolo: φ e,normalmente, são utilizadas funções de limite ríspido como a função degrau, onde a função pode assumir dois valores, conforme

dinoML8

Perceptron, consegue aprender qualquer problema de classificação de dados
linearmente separáveis

dinoML9

O conhecimento do Perceptron, assim como o de qualquer RNA, está nos pesos das suas ligações

dinopML10

Exemplo:

Gênio Compositor Cientista
BACH x  
BEETHOVEN x  
EINSTEIN   x
KEPLER   x

Compositor = 0
Cientista = 1

Gênio Neurônio 1 Neurônio 2 Saída
BACH 0 0 0
BEETHOVEN 0 1 0
EINSTEIN 1 0 1
KEPLER 1 1 1

Como vimos, a rede Perceptron só resolvem problemas cujas classes sejam linearmente separáveis, o que não é o caso no problema do ou exclusivo ( XOR ).

#  Pode acontecer de não encontrar nenhuma solução.

#  Porém é possível adicionar novas camadas intermediária para resolver os problemas que não linearmente separáveis.

#  São chamadas de Multi Layer Perceptron.

Multi Layer Perceptron (MLP)

Redes de apenas uma camada só representam funções linearmente separáveis enquanto redes de múltiplas camadas solucionam essa restrição.

O desenvolvimento do algoritmo Backpropagation foi um dos motivos para o ressurgimento da área de redes neurais

dinoML12

O que cada uma das camadas fazem?

DinoMLP1

O objetivo do algoritmo Backpropagation é ajustar os pesos sinápticos a fim de minimizar a função de custo (erro). É uma generalização da rede Perceptron.

Requer funções de ativação diferenciáveis. O algoritmo pode ser dividido em duas fases:

01 – Propagação

#  FeedForward – As entradas se propagam, pela rede, da camada de entrada para a camada de saída

#  FeedBack – Os erros se propagam, na direção contrária ao fluxo de dados, indo da camada de saída até a primeira camada escondida.

02 – Atualização dos pesos

MLP – Características básicas

Regra de propagação:

dinoMLP2

#  Função de ativação: função não-linearmente diferençável em todos os pontos.
#  Topologia: múltiplas camadas
#  Algoritmo de aprendizado: supervisionado
#  Valor de entrada/saída: binários e/ou contínuos

MLP – Processo de Aprendizado

O ajuste dos pesos é dado pelo processo de minimização do erro quadrático pelo
método do gradiente descendente:

 dinoMLP3

Cada peso sináptico i do neurônio j é atualizado proporcionalmente ao negativo da
derivada parcial do erro deste neurônio com relação ao peso.

Em resumo, após o calculo da derivada, tem-se:

dinoMLP4.png

#  η é a taxa de aprendizagem
#  x i é o valor de entrada recebido pela conexão i
#  e j é o valor calculado do erro do neurônio

Pelo aprendizado supervisionado, só se conhece o erro na camada de saída. O neurônio j pertencente à camada de saída, e o erro é dado por: e j = ( t j − x i ) F′( y i )

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s