sexta-feira, 17 de abril de 2015

C++ - Implementação de uma MLP (multilayer perceptron)

Olá pessoal, no post passado implementamos uma rede neural Perceptron que é a rede mais simples, pois possui uma camada e apenas um neurônio nesta camada.

Uma rede neural de uma única camada não consegue implementar o XOR, isso acontece porque o XOR não é linearmente separável, ou seja, você não consegue desenhar uma linha para separar os pontos (0,0) e (1,1) dos pontos (0,1) e (1,0).

A solução é usar uma MLP (rede perceptron com múltiplas camadas). Resultado de um trabalho em uma disciplina, foi implementado a rede MLP ou PMC (em português "perceptron multicamadas").

Esse tipo de rede é caracterizada pela presença de pelo menos uma camada intermediária (escondida) de neurônios. Essa camada escondida fica situada entre a camada de entrada e a camada de saída da rede. Isso quer dizer que as redes MLP possuem no mínimo duas camadas de neurônios.

Podemos resolver o problema do XOR com redes MLP, esse assunto é um pouco mais extenso do que a Perceptron, por isso aconselho a ler o capítulo 5 do livro do Ivan Nunes "Redes Neurais Artificiais para engenharia e ciências aplicadas".

A MLP possui uma arquitetura feedforward de camadas múltiplas e o treinamento é feito de forma supervisionada (treinamento supervisionado é quando você apresenta as amostras com suas respectivas saídas para a rede).

O treinamento de redes MLP utiliza o algoritmo backpropagation ou regra delta generalizada. Esse algoritmo é realizado através de duas fases: primeiro tempos a fase forward (propagação adiantada) onde os sinais de uma amostra do conjunto de treinamento são inseridos nas entradas da rede e propagados camada a camada até a produção das respectivas saídas. As saídas são comparadas com as respostas desejadas e produzem erros, esses erros são utilizados na segunda fase que é a backward (propagação reversa) onde as alterações (ajustes) dos pesos e limiares de todos os neurônios são executadas.

A implementação da MLP foi feita em C++, a tangente hiperbólica é utilizada como função de ativação. No endereço do projeto tem instruções de como proceder para executar, foi criado um formato de arquivo para facilitar a entrada dos dados.

Um dos testes feitos foi com o famoso dataset IRIS. Segue o link do projeto:


Quaisquer dúvidas deixem nos comentários, quaisquer contribuições para o projeto também serão bem vindas, até a próxima!


Nenhum comentário: