# Perceptron multicamadas

A perceptron multicamadas (MLP) é uma rede neural semelhante à perceptron, mas com mais de uma camada de neurônios em alimentação direta. Tal tipo de rede é composta por camadas de neurônios ligadas entre si por sinapses com pesos. O aprendizado nesse tipo de rede é geralmente feito através do algoritmo de retro-propagação do erro, mas existem outros algoritmos para este fim, como a Rprop.

## Modelo de Neurônio Artificial

Um neurônio artificial é a unidade fundamental de processamento de informação de uma rede neural artificial. Podemos destacar três elementos básicos de um neurônio (conexões de entrada, combinador linear e função de ativação):
As conexões de entrada são ponderadas por um peso sináptico. Cada sinal de entrada Xi, é multiplicado pelo peso sináptico Wi, e posteriormente é conectado ao neurônio. A entrada tem um valor fixo, diferente de zero, denominada limiar de ativação.
O combinador linear é responsável pela soma dos valores de entrada (x$_1$ * w$_1$ + x$_2$ * w$_2$ + ... + x$_n$ * w$_n$ + ), gerando o potencial de ativação U.
A função de ativação avalia o potencial de ativação U e através de uma função g(u), calcula o sinal de saída do neurônio.

### Combinador Linear

O combinador linear é responsável pela soma da multiplicação dos sinais de entrada multiplicados aos seus receptivos pesos (x$_1$ * w$_1$ + x$_2$ * w$_2$ + ... + x$_n$ * w$_n$ ) e do limiar de ativação (-$\theta$ ), resultando no potencial de ativação (u):
$u=\sum _{i=1}^{N}Wi*Xi-\theta$
Se o potencial de ativação (u) for maior ou igual ao limiar de ativação, a saída será 1 e 0 caso contrário.

### Função de ativação

A função de ativação g é responsável por definir a ativação de saída do neurônio em termos do seu nível de ativação interna. Normalmente o sinal de ativação do neurônio pertence ao intervalo (0, 1) ou (-1, 1).

#### Função Degrau

A função degrau é uma das funções mais utilizadas em Perceptron, e determinada por:
$g(u)={\begin{cases}1,{\text{ se u}}\geq {\text{0}}\\0,{\text{ se u}}<{\text{0}}\end{cases}}$

#### Função Sigmoidal

A função sigmoidal é a função de ativação não-linear utilizada em Perceptron Multicamadas. Ela é definida como uma função crescente que apresenta propriedades assintóticas e de suavidade. Um exemplo de função sigmoidal é a chamada função logística, definida por:
$g(u)=1/(1+e^{-u})$
Onde u é a soma ponderada das entradas mais o limiar de ativação.

### Camadas

O perceptron multicamada consiste em três ou mais camadas (uma camada de entrada e uma camada de saída com um ou mais camadas ocultas). Uma vez que um MLP é uma rede totalmente conectada, cada nó em uma camada se conecta, com um certo peso, em um nó da camada seguinte. Algumas pessoas não incluem a camada de entrada ao contar o número de camadas.

## Perceptron

O perceptron é um algoritmo de aprendizado de classificadores binários. Ele é capaz de resolver apenas problemas linearmente separáveis. Por meio do processo de treinamento, o algoritmo aprende a classificar as entradas em dois grupos diferentes.
O Perceptron só é capaz de solucionar problemas que se são linearmente separáveis.

## Perceptron Multicamadas

O perceptron multicamadas (MLP) é uma rede neural semelhante ao perceptron simples, porém possui mais de uma camada de neurônios. Em casos em que não há a possibilidade de uma única reta separar os elementos, há o uso da MLP que, gera mais de uma reta classificadora.
O aprendizado nesse tipo de rede é geralmente feito através do algoritmo de retropropagação do erro, mas existem outros algoritmos para este fim.
Cada camada da rede tem uma função específica. A camada de saída recebe os estímulos da camada intermediária e constrói a resposta.

## Retropropagação de erro ( Backpropagation )
### Pesos Sinapticos

O primeiro passo do algoritmo de retropropagação é a inicialização dos pesos da rede. Como normalmente não temos nenhuma informação sobre os pesos da rede, um método muito utilizado é inicializar os pesos aleatoriamente, com distribuição uniforme sobre um pequeno intervalo em torno do zero.

### Algoritmo de retropropagação

O algoritmo de retropropagação de erro, é um algoritmo utilizado no treinamento de redes neurais multicamadas, e consiste em dois passos de computação: o processamento direto e o processamento reverso.
No processamento direto, uma entrada é aplicada à rede neural e seu efeito é propagado pela rede, camada a camada. Durante o processamento direto, os pesos da rede permanecem fixos.
No processamento reverso, um sinal de erro calculado na saída da rede é propagado no sentido reverso, camada a camada, e ao final deste processo os pesos são ajustados de acordo com uma regra de correção de erro.
O algoritmo de retropropagação segue os seguintes passos:
1. Inicialização. Inicialize os pesos da rede aleatoriamente ou segundo algum método.
2. Processamento direto. Apresente um padrão à rede. Compute as ativações de todos os neurônios da rede e então calcule o erro.
3. Passo reverso. Calcule os novos pesos para cada neurônio da rede, no sentido retroativo (isto é, da saída para a entrada), camada a camada.
4. Teste de parada. Teste o critério de parada adotado. Se satisfeito, termine o algoritmo;
5. senão volte ao passo 2.
O treinamento das redes MLP com backpropagation pode demandar um tempo de treinamento longo.

## Aprendizado

Uma rede neural aprende através de um processo iterativo de ajuste de seus pesos sinápticos. O processo de aprendizagem segue a seguinte sequência:
1. a rede neural é estimulada pelo ambiente de informação;
2. a estrutura interna da rede é alterada como resultado do estímulo;
3. devido às alterações que ocorreram em sua estrutura interna, a rede tem modificada sua resposta aos estímulos do ambiente.

#### Aprendizado Supervisionado

Este tipo de aprendizado é caracterizado pela presença de um “professor” externo, que tem a função de fornecer a resposta desejada durante o processo de aprendizado. A diferença entre a resposta desejada e a resposta observada na saída é denominada sinal de erro, e de acordo com esse erro, os parâmetros da rede são ajustados.
O objetivo do procedimento de aprendizado por correção de erro é ajustar os parâmetros da rede de modo que a resposta observada se aproxime da resposta desejada.

## Terminologia

O termo "perceptron multicamadas" muitas vezes causa confusão. Argumenta-se que o modelo não é o único perceptron que tem várias camadas. Em vez disso, ele contém muitos perceptrons que são organizados em camadas, levando alguns a acreditar que um termo mais adequado poderia, portanto, ser "rede perceptron multicamadas". Além disso, esses "perceptrons" não são realmente perceptrons em sentido mais estrito, como verdadeiros perceptrons são um caso especial de neurônios artificiais que usam uma função de ativação limite, como a função de Heaviside, ao passo que os neurônios artificiais em um perceptron multicamadas são livres para assumir qualquer função de ativação arbitrária. Consequentemente, ao passo que um verdadeiro perceptron executa classificação binária, um neurônio em um perceptron multicamadas é livre de a efetuar classificação ou de regressão, dependendo de sua função de ativação.
Os dois argumentos apresentados acima pode ser conciliada com o nome de "perceptron multicamadas" se "perceptron" é simplesmente interpretado como significando um classificador binário, independente da aplicação mecanicista específica de um perceptron clássica. Neste caso, a totalidade da rede pode, efetivamente, ser considerado como um classificador binário com múltiplas camadas. Além disso, o termo "perceptron multicamadas" agora não especifica a natureza das camadas; As camadas são livres para ser composta por neurônio artificiai geral e não especificamente perceptron. Esta interpretação do termo "perceptron multicamadas" evita o afrouxamento da definição de "perceptron" para significar um neurônio artificial em geral.

## Aplicações

Perceptrons multicamadas usando um algoritmo backpropagation, é o algoritmo padrão para qualquer aprendizado supervisionado, processo de reconhecimento de padrões e objeto de investigação em cursos de neurociência computacional e processamento distribuído em paralelo . Eles são úteis na pesquisa em termos de sua capacidade de resolver problemas estocásticos, que muitas vezes permite obter soluções aproximadas para extremamente complexos problemas como aproximação de fitness .
MLPs são funções de aproximação universal como mostrou o teorema de Cybenko, para que eles possam ser usados para criar modelos matemáticos por análise de regressão.Como a classificação é um caso particular de regressão quando a variável resposta é categórica , MLPs também são bons algoritmos classificadores.
MLPs foram uma solução de aprendizagem de máquina popular na década de 1980, encontrando aplicações em diversos campos, como reconhecimento de voz ,reconhecimento de imagem e de tradução automática de software, mas desde a década de 1990 enfrentou forte concorrência do muito mais simples (e relacionados ) apoiar máquinas de vetores . Mais recentemente, tem havido algum interesse renovado em redes de retropropagação devido aos sucessos de aprendizagem profunda .

## Limitações

As redes neurais que utilizam backpropagation, assim como muitos outros tipos de redes neurais artificiais, podem ser vistas como "caixas pretas", na qual quase não se sabe porque a rede chega a um determinado resultado, uma vez que os modelos não apresentam justificativas para suas respostas. Neste sentido, muitas pesquisas vêm sendo realizadas visando a extração de conhecimento de redes neurais artificiais, e na criação de procedimentos explicativos, onde se tenta justificar o comportamento da rede em determinadas situações.
Uma outra limitação refere-se ao tempo de treinamento de redes neurais utilizando backpropagation, que tende a ser muito lento. Algumas vezes são necessários milhares de ciclos para se chegar à níveis de erros aceitáveis, principalmente se estiver sendo simulado em computadores seriais, pois a CPU deve calcular as funções para cada unidade e suas conexões separadamente, o que pode ser problemático em redes muito grandes, ou com grande quantidade de dados. Muitos estudos estão sendo realizados para implementação de redes neurais em computadores paralelos, além de construção de chips neurais como Intel 80170NX Eletronically Trainable ANN ou placas aceleradoras como BrainMaker Accelerator Board CNAPS$^[$.
É muito difícil definir a arquitetura ideal da rede de forma que ela seja tão grande quanto o necessário para conseguir obter as representações necessárias, ao mesmo tempo pequena o suficiente para se ter um treinamento mais rápido. Não existem regras claras para se definir quantas unidades devem existir nas camadas intermediárias, quantas camadas, ou como devem ser as conexões entre essas unidades. Para resolver este tipo de problema, Algoritmos Genéticos poderiam ser utilizados para encontrar automaticamente boas arquiteturas de redes neurais, eliminando muitas armadilhas associadas às abordagens de engenharia humana$^[$.