Você está na página 1de 23

Introdução ao Perceptron passo

a passo
Hoje teremos o primeiro contato com Redes Neurais Artificiais,
estudaremos o funcionamento do Perceptron e como treiná-lo.

Antes de mais nada é importante lembrar que existem várias


maneiras de se treinar um Perceptron. A mais popular entre elas é a
Delta Rule irei utilizá-la com alguns ajustes para tornar mais fácil a
interpretação de cada passo envolvido no treinamento de um
Perceptron.

O Perceptron é um classificador linear. Isso quer dizer que ele só irá


lidar com problemas de classificação onde o conjunto de dados
seja linearmente separável.

Apesar dessa limitação ele não é um algoritmo fraco. Pois por mais
que seja difícil achar um conjunto de dados linearmente separável
em aplicações reais, ele pode ser combinado com outros algoritmos
para se aumentar a precisão.

Anúncios
Denunciar este anúncio

E claro podemos analisar a relação entre as dimensões de um


conjunto de dados pois dependendo da forma em que agrupamos
as classes é possível que ele seja linearmente separável em uma
combinação específica das dimensões dadas.

Ele também pode ser adaptado para problemas de regressão,


nesse caso ele tem o mesmo efeito que uma regressão linear, como
veremos em futuros posts. Porém é importante lembrar aqui que o
resultado não será considerado um perceptron de acordo com a
teoria.

Com algumas alterações também é possível aplicá-lo em


problemas com mais de duas classes.

O Algoritmo
Antes de partirmos para o problema vamos analisar o algoritmo. 

Gostaria de lembrar aqui que em situações reais é adicionado um


bias ao resultado do somatório. Porém para nosso exemplo iremos
ignorar esse fato sem prejuízo do entendimento.

Anúncios
Denunciar este anúncio

Acima temos o algoritmo representado de forma esquemática,


onde e são os inputs e e são os respectivos pesos de cada
input.

E
é uma combinação linear desses inputs ponderada pelos pesos, ela
gera o output do node e é dada por:

Onde
é output desse Node. Depois disso ele é avaliado por uma função
de perda, para problemas de classificação binária é muito comum
o uso da 0-1 loss function:

Para uma melhor ideia de como o perceptron processa a


informação, vamos a um exemplo.
Suponha o seguinte:

Com isso, teremos o seguinte esquema:

Anúncios
Denunciar este anúncio

A ideia aqui é focar apenas no processamento da informação


realizado pelo perceptron. Na figura entre os inputs 2 e 4, eles são
multiplicados pelos seus respectivos pesos e depois somados, o
output dessa operação então é avaliado pela função de perda
que dá o output final.

A operação é bem simples. Mas a ideia é saber como o perceptron


chega nos valores ideais de cada peso fazendo assim com que
cada instância seja classificada de forma correta.

Para isso vamos partir para um exemplo.

 
Anúncios
Denunciar este anúncio

Classificação com duas classes.


Para o exemplo usarei um conjunto de quatro pontos no plano que
são Linearmente separáveis e treinaremos o perceptron para achar
um discriminante que divida o conjunto em duas partes.

Veja o gráfico abaixo:


Temos um conjunto de quatro pontos no gráfico acima, usaremos o
Perceptron para achar um discriminante que divida o plano em
duas áreas. Para assim podermos classificá-las de forma correta.

Anúncios
Denunciar este anúncio

Para esse exemplo não usaremos bias, pois fica claro que a reta que
divide os dois conjuntos de pontos passa na origem, e também o
intuito é te mostrar como funciona o processo de treinamento do
perceptron passo a passo.  Mas falaremos sobre bias em futuros
posts.

Para facilitar vamos representar o conjunto de dados em uma


tabela:
Para nosso exemplo defini Azul igual 1 e Vermelho igual a 0.

O procedimento para se treinar uma perceptron para classes


binárias não é complicado. Primeiro iremos definir pesos aleatórios
para os vetores e .

Logo teremos:

Feito isso temos que pensar em uma forma de atualizar os pesos.


Mas antes disso vamos definir alguns conceitos. O primeiro deles é a
taxa de aprendizado(Learning rate ou alpha.) ela dita qual a
proporção em que a rede irá propagar o erro  e assim realizar a
atualização dos pesos.

Anúncios
Denunciar este anúncio

Uma taxa de aprendizagem alta acelera o treino porém pode fazer


com a rede passe do ponto ótimo, uma taxa baixa diminui a
velocidade de treino mas aumenta a precisão da busca.

Representarei a taxa de aprendizado por e darei a ela o valor 0.5.

Logo temos:

Feito isso definiremos a regra de treino do perceptron.


Toda vez que ele gera um output ele compara com a classe
esperada e computa o erro. Para nosso caso e devido à
simplicidade do problema usaremos um limiar de -1 ou 1 para
atualizar os pesos.

Logo o erro pode ser representado pela seguinte equação:

Onde é classe esperada e o output gerado pelo perceptron.

Uma vez medido o erro iremos atualizar cada peso utilizando a


seguinte regra:

Onde é o elemento correspondente do vetor de input que gerou


o erro. Se juntarmos tudo teremos o seguintes modelo:

Anúncios
Denunciar este anúncio

Antes de começar o treino vamos plotar o gráfico da equação


inicial que divide o dataset, isso irá nos dar uma ideia de como o
perceptron funciona.
A reta ainda não se encontra no lugar ideal.

Usaremos o perceptron para encontrar esse lugar.

Anúncios
Denunciar este anúncio

Vamos a nossa primeira iteração.

Os inputs são:

Os pesos atuais são:

Com isso calculemos o primeiro output:

Avaliamos com a função de perda:

Classificado de forma errada é necessário ajustar os pesos.


Medimos o erro:

E agora atualizamos os pesos:

 
foi atualizado para 0.95

 
foi atualizado para -0.15

Antes de partir para a próxima iteração vamos dar uma olhada em


como fica o gráfico depois desse ajuste.

Repare que a reta começou a se deslocar para a posição ideal.

Vamos a nossa Segunda iteração.

Os inputs são:

Os pesos atuais são:


 

Com isso calculemos o primeiro output:

Avaliamos com a função de perda:

Classificado de forma correta não há necessidade de ajustar os


pesos.

Vamos a nossa terceira iteração.

Os inputs são:

Os pesos atuais são:

Com isso calculemos o primeiro output:

Avaliamos com a função de perda:

Classificado de forma errada é necessário ajustar os pesos.

Medimos o erro:

E agora atualizamos os pesos:

 
foi atualizado para 1

 
foi atualizado para 0.25
Vamos plotar o gráfico para conferir o que aconteceu.

Estamos quase lá!

Vamos a nossa Quarta iteração.

Os inputs são:

Os pesos atuais são:

Com isso calculemos o primeiro output:

Avaliamos com a função de perda:

Classificado de forma errada é necessário ajustar os pesos.


Medimos o erro:

E agora atualizamos os pesos:

 
foi atualizado para 1.05

 
foi atualizado para 0.025

Vamos plotar o gráfico para conferir o que aconteceu.

Finalmente chegamos em um ponto ideal, isso quer dizer que o


perceptron irá classificar todos os exemplos do conjunto de treino
de forma correta a partir de agora.

Vamos ver se isso é verdade, irei testá-lo em duas instâncias.


Como é um valor positivo a classe será 1. A classificação foi correta.

Como o valor é negativo a classe será igual a 0.

Deixo os outros valores para você conferir.

Bem, isso encerra o post de hoje. Mas antes de finalizar, gostaria de


dizer que apesar de simples e limitado em alguns aspectos. O
perceptron deve ser estudado em seus mínimos detalhes, ainda
mais por quem pretende lidar com Deep Learning,  pois ele é a
porta de entrada para se entender as redes neurais artificiais. como
o Multilayer perceptron por exemplo, e claro é um algoritmo que
pode ser combinado com outros para se construir um classificador
mais eficiente.

Como sempre. Qualquer sugestão ou crítica é sempre bem vindo


pois o meu intuito é trazer cada vez mais posts de qualidade para
você leitor.

Gostou do que viu?. Que tal se  aprofundar um pouco na teoria


matemática por trás dos algoritmos tradicionais e origens das redes
neurais e de quebra aplicar em Python.

 
 

 
 

 
 

Você também pode gostar