Redes Neurais



Redes Neurais

Introdução

Como visto em um post anteiror, introduzimos um pouco sobre aprendizado de máquina e
falamos sobre diferentes variedades de algoritmos que existem para tais finalidades. Dando continuidade ao assunto, irei comentar brevemente sobre redes neurais.

Redes Neurais

RNA

Foi inspirado na arquitetura paralela do cerébro humano (mais especificamente no neurônio), logo pode ser considerada um paradigma "alternativo" da computação (já que envolvem fatores biológicos).

Para a computação, características simples como processamentos simples, alto grau de interconexao e adaptação entre elementos já
é suficiente para seu uso.

Falando assim parece até simples, mas não é. O funcionamento de um único neurônio é extremamente complexo, já o cérebro em si é
muito mais, tanto é que até hoje nao temos conhecimento suficiente para descrever o mesmo.


Mas se existe tamanha complexidade na própria teoria, por que utilizar uma rede neural? A resposta é simples.

  • O cérebro humano é bom em:
    • Reconhecer padroes
    • Associacao
    • Classificação

  • Já o computador:
    • Cálculos complexos
    • Precisão
    • Capacidade de armazenamento
    • Lógica

Combinando os dois, temos uma ótima ferramenta computacional para resolver diversos problemas de forma automatizada.

Formas de aprendizado com Redes Neurais

    Perceptron

    É um algoritmo de aprendizado simples, composta somente por uma camada. Em geral, mais simples de ser implementado.

    Backpropagation

    Pode ser vista como uma versao otimizada de um perceptron, utilizando-se de várias camadas a fim de resolver problemas mais complexos.

Perceptron

Rede

Para cada exemplos de treinamento temos uma unica saída. O objetivo do algoritmo em si é "aprender" os pesos sinápticos (geralmente classificado pelo supervisor),
ajustando-os a cada conjunto de exemplo de treinamento.



Para os que estão com o conceito de pesos um pouco nebuloso, devemos nos lembrar do funcionamento de um neurônio.

O neurônio realiza uma sinapse que carrega consigo um sinal (= peso) e que percorre por todos os outros neurônios conectados através dos dentritos.

Esses sinais sao acumulados no próprio corpo do neurônio. Ao realizar muitas sinapses, a quantidade de sinais aumenta e quando a soma desses sinais
atingir um certo limiar, o sinal é propagado pelo axônio. Chegando ao axonio, a saída é gerada.

Regra de aprendizado

w = w + delta w


delta w = n * (t - o) * x


onde w = peso; n = taxa de aprendizagem; t = saida desejada; o = saida esperada; x = entrada;



Caso o valor da saída seja maior que um determinado valor (dito pelo supervisor), deixamos ela passar como uma saída esperada. Essa função de verificação de w*x é chamada de função de ativação.
Para perceptrons de única camada usamos simplesmente a função "degrau", que é basicamente if(w*x > valor): w*x é saida esperada.



A primeira equação (do aprendizado em si), diz que o novo peso deve ser a soma do peso atual com uma quantidade proporcional a diferenca entra a saida desejada e a saida atual


O algoritmo irá repetir esse procedimento enquanto a saída do perceptron não estiver correta.


Porém nem sempre o algoritmo encontrará a saída correta. Somente casos onde o problema é linarmente separável será possível encontrar solução. Um exemplo simples mas que o perceptron não consegue resolver é o operador lógico XOR.


Obs.: O valor da taxa de aprendizagem também deve ser de acordo com o problema. Um número muito elevado para datasets muito pequenos fará com que o algoritmo nunca encontre a saída esperada.

Linearmente


Redes multicamadas

Como dito anteriormente, para problemas não linearmente separáveis o perceptron de única camada nao consegue gerar um hiperplano para separar os dados.

Para isso temos entao as redes neurais de várias camadas. Uma das formas de fazer isso é logicamente é combinar vários perceptrons.


Essa camada adicional que inserimos chamamos de camada oculta. A simples adição dessa camada permite que a rede produza muitas
outras linhas para separar o problema. A maioria dos problemas do nosso cotidiano consiste em problemas nao linearmente separáveis.
ConvexHull



As funções de ativação para redes multicadas são inúmeras:
  • Sigmoidal
  • Radial(Gausiana)

Backpropagation

Um dos algoritmos de aprendizado para redes multicamadas, o algoritmo do Backpropagation realiza um cálculo chamada de descida de gradiente a fim de se minimizar o erro quadrático entra a saída atual e a esperada.


A descida de gradiente nao é nenhuma novidade. Procura buscar um vetor de pesos a minimizar tal erro. Inicia-se com valores randômicos e entao modifica-os em direção que possui maior queda ao longo da superfície do erro.


Erro = saida desejada - saida atual.


Algumas considerações sobre o backpropagation: não é um algoritmo ótimo (nao garante a melhor resposta sempre), pode ficar preso em mínimos locais, podem existir melhores dependendo do problema.

Comentários

Postagens mais visitadas deste blog

Emulador de Nintendo DS para pc: DesMuMe

NirCmd um plugin poderoso para seu cmd

PPSSPP O emulador de PSP