Rede Neural Perceptron Multicamadas

Crie sua própria multilayer perceptron (MLP) do zero usando TensorFlow

Perceptron Multicamadas (PMC ou MLP — Multi Layer Perceptron) é uma rede neural com uma ou mais camadas ocultas com um número indeterminado de neurônios. A camada oculta possui esse nome porque não é possível prever a saída desejada nas camadas intermediárias.

Para treinar a rede MLP, o algoritmo comumente utilizado é o de retropropagação (Backpropagation)

Diagrama do Perceptron Multicamadas

Diferentemente do Perceptron e Adaline, onde existe apenas um único neurônio de saída {y}, a MLP pode relacionar o conhecimento a vários neurônios de saída.

O algoritmo de aprendizado da MLP é chamado backpropagation é composto de 4 passos:

1º Passo: Inicialização
- Atribuir valores aleatórios para os pesos e limites
- Escolha dos valores iniciais influencia o comportamento da rede
- Na ausência de conhecimento prévio os pesos e limites devem ter valores iniciais aleatórios e pequenos uniformemente distribuídos

2º Passo: Ativação
- Calcular os valores dos neurônios da camada oculta
- Calcular os valores dos neurônios da camada de saída

3º Passo: Treinar os Pesos
- Calcular os erros dos neurônios das camadas de saída e oculta
- Calcular a correção dos pesos
- Atualizar os pesos dos neurônios das camadas de saída e oculta

4º Passo: Iteração
- Repetir o processo a partir do passo 2 até que satisfaça o critério de erro

Construindo uma Rede MLP

Faremos aqui uma rede MLP para separar as classes de flores Iris (Setosa, Virginica e Versicolor), utilizamos o mesmo dataset utilizado no post sobre a Rede Adaline, mas ela só conseguia separar em duas classes.

Classes das Flores Iris
Diagrama da MLP com uma camada oculta (5 neurônios) e 3 neurônios de saída

Observe que nossa rede terá 3 neurônios de saída (y) e como entrada (x) os valores de largura e comprimento das pétalas e sépalas. Teremos 1 camada oculta com 10 neurônios (você pode criar quantas camadas e neurônios quiser).

Dataset para Treinamento: 
https://raw.githubusercontent.com/smoreira/MultiLayerPerceptron/master/iris.train

Dataset para Validação:
https://raw.githubusercontent.com/smoreira/MultiLayerPerceptron/master/iris.test

Exemplo em Python de TensorFlow:

Dica: Aumentar o número de camadas e neurônios nem sempre é a melhor solução para uma melhoria de performance/acurácia.

Na verdade uma das limitações da rede MLP é que ao se aumentar muito o número de camadas e neurônios ela tende a ficar com um número de parâmetros muito grande e com isso tão pesada ao ponto do hardware não conseguir processar e ela não convergir (chegar a um resultado), talvez por essa razão, até a evolução do hardware ela tenha ficado um pouco estagnada.

Referência

Silva, IN da, Danilo Hernane Spatti, and Rogério Andrade Flauzino. “Redes neurais artificiais para engenharia e ciências aplicadas.” São Paulo: Artliber (2010).