Você está na página 1de 15

UNIVERSIDADE FEDERAL DO AMAZONAS

PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA

Disciplina: Controle e Sistemas Inteligentes


Aluno: Leandro Vieira

REDES PERCEPTRON MULTICAMADAS – BACKPROPAGATION


Introdução

O Perceptron de Múltiplas Camadas (PMC, ou MLP do inglês Multilayer Perceptron)

constituído por um conjunto de neurônios artificiais dispostos em varias camadas, de modo que
o sinal de entrada se propaga para frente através da rede, camada por camada. Dentre suas camadas
existe a camada de entrada que recebe os sinais de entrada, a camada de saída que entrega o
resultado obtido pela rede e no meio dessas podem existir quantas camadas forem necessárias. Essas
camadas são chamadas intermediárias ou ocultas (HAYKIN, 2001). Note que uma MLP é constituida de
pelo menos 2 camadas neurais, sendo uma camada de saída e pelo menos 1 camada escondida
(SILVA; SPATTI; FLAUZINO, 2010).

As MLPs são consideradas uma das arquiteturas mais versáteis quanto a aplicabilidade, sendo
utilizadas em diversas áreas do conhecimento. Dentre as utilizações da MLP estão: aproxi-mação
universal de funções, reconhecimento de padrões, identificação e controle de processos, previsão de
series temporais e otimização de sistemas (SILVA; SPATTI; FLAUZINO, 2010).

Silva, Spatti e Flauzino (2010) atribuem o início da grande popularidade e das extensas
aplicabilidades das MLPs ao final da década de 1980, em virtude da publicação do livro Parallel
distributed processing de Rumelhart et al. (1987). Nesse livro os autores explicitaram o algo-ritmo de
aprendizagem backpropagation, permitindo assim sua utilização no treinamento das MLPs (SILVA;
SPATTI; FLAUZINO, 2010).

A Figura 1 mostra a arquitetura da rede Perceptron Multicamadas.

Figura 1 – Rede Perceptron Multicamadas

Fonte: (SILVA; SPATTI; FLAUZINO, 2010).

Na Figura 1 é possível ver a camada de entrada, composta pelos sinais de entrada { 1, 2, 3, . . . ,


}, a primeira camada neural escondida da rede composta pelos neurônios {1, 2, 3, .. . , 1}, a segunda
camada neural escondida da rede composta pelos neurônios {1, 2, 3, . . . , 2} e por fim a camada neural
de saída composta pelos neurônios {1, 2, 3, . . . , }. Note que a primeira camada da rede, a camada de
entrada, não possui neurônios, apenas os sinais de entrada, os neurônios da MLP estão localizados nas
camadas escondidas e na camada de saída.
Projeto Prático 1 – Aproximação de Funções

Estudo de caso

O projeto prático 5.8 do livro Redes neurais artificias para engenharia e ciências aplica-das de
Silva, Spatti e Flauzino (2010), propõe o desenvolvimento de uma rede neural Perceptron Multicamadas
para ser usada como um aproximador universal de funções na confecção de um processador de
imagens de ressonância magnética. A partir da análise de 3 grandezas represen-tadas por { 1, 2 e 3} o
processador de imagens deve estimar a energia absorvida do sistema, denotada por .

O livro disponibiliza os conjuntos de treinamento e de teste para a implementação da rede, aqui


apresentados nos Anexos A e B respectivamente.

Também é descrita a arquitetura que a rede deve ter, a rede deve possuir 3 camadas, uma
camada de entrada contendo 3 sinais de entrada { 1, 2 e 3}, uma camada escondida contendo 10
neurônios e a camada de saída com apenas 1 neurônio. A Figura 2 mostra detalhadamente a arquitetura
que a MLP deve ter para a realização do Projeto prático.

Figura 2 – Arquitetura proposta rede Perceptron Multicamadas

Fonte: (SILVA; SPATTI; FLAUZINO, 2010).


Para o treinamento da MLP é especificado a utilização do algoritmo backpropagation.

Treinamento
1.1

1.2

%Solve an Input-Output Fitting problem with a Neural Network


%Script generated by Neural Fitting app
%
% dataTarget - datatarget.
% dataInput – datainput.

x = dataInput';
t = dataTarget';

% Choose a Training Function


% For a list of all training functions type: help nntrain
% 'trainlm' is usually fastest.
% 'trainbr' takes longer but may be better for challenging problems.

% 'trainscg' uses less memory. Suitable in low memory situations. trainFcn = 'trainlm'; %
Levenberg-Marquardt backpropagation.

% Create a Fitting Network


hiddenLayerSize = 10;
net = fitnet(hiddenLayerSize,trainFcn);
% Setup Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 80/100; net.divideParam.valRatio = 10/100;
net.divideParam.testRatio = 10/100;

% Train the Network

[net,tr] = train(net,x,t);

% Test the Network


y = net(x);

e = gsubtract(t,y);
performance = perform(net,t,y)

% View the Network


view(net)

% Plots

% Uncomment these lines to enable various plots. %figure,


plotperform(tr)

%figure, plottrainstate(tr)
%figure, ploterrhist(e) %figure,
plotregression(t,y) %figure, plotfit(net,x,t)

Treinamento Erro quadrático médio Número de épocas

T1 4,33E-06 46

T2 8,95E-06 43

T3 2,29E-06 101

T4 4,64E-06 81

T5 5,79E-06 18

Tabela 1 – Treinamento
1.3

Pelos dados da Tabela1 verifica-se que tanto o erro quadrático médio como o número total de
épocas variam de treinamento para treinamento. Isso se deve ao fato de que no início de cada
treinamento os pesos sinápticos de todos os neurônios de todas as camadas são iniciados de forma
aleatória, dessa forma o erro quadrático médio inicial da rede é sempre diferente em cada treinamento.
Partindo de uma configuração diferente de pesos sinápticos a cada treinamento chega-se também a um
erro quadrático médio e um número de épocas diferentes em cada treinamento.
1.5

function [dataByColumn1] = importfile(fileToRead1)

%IMPORTFILE(FILETOREAD1)
% Imports data from the specified file
% FILETOREAD1: file to read
% Import the file
sheetName='Plan1';

[numbers, strings, raw] = xlsread(fileToRead1, sheetName); if


~isempty(numbers)
newData1.data = numbers;

end

if ~isempty(strings) && ~isempty(numbers) [strRows,


strCols] = size(strings); [numRows, numCols] =
size(numbers); likelyRow = size(raw,1) - numRows;

% Break the data up into a new structure with one field per column.

if strCols == numCols && likelyRow > 0 && strRows >= likelyRow newData1.colheaders
= strings(likelyRow, :);
end
end
% Create output variables.
for i = 1:size(newData1.colheaders, 2)
dataByColumn1.(matlab.lang.makeValidName(newData1.colheaders{i}))

= newData1.data(:, i); end

Teste

Os resultados dos testes da MLP para cada um dos 5 treinamentos realizados juntamente como
erro relativo médio (%) de cada teste estão anotados na Tabela 2. A análise dos porcentuais de erro
relativo médio presentes na Tabela 2 possibilita dizer qual dos 5 treinamentos realizados da a MLP uma
maior capacidade de generalização, basta escolher aquele com a menor porcentagem de erro relativo
médio. Dessa forma, pelos dados da Tabela 2 a configuração da MLP obtida pelo treinamento T2 é a
mais adequada para o sistema de ressonância magnética, pois a porcentagem de erro relativo médio do
treinamento T2 é a menor dentre todos os treinamentos, com o valor de 1,22237%
3 Tabela 2 – Treinamento

Projeto Prático 2 – Classificação de Padrões

Estudo de caso

O projeto prático 5.9 do livro Redes neurais artificiais para engenharia e ciências aplicadas de
Silva, Spatti e Flauzino (2010), mostra que no processamento de bebidas, é aplicado um conservante à
bebida em função da analise de 4 características medidas em cada lote de bebida, definidas por x1 (teor
de água), x2 (grau de acidez), x3 (temperatura) e x4 (tensão interfacial). Existem apenas 3
possibilidades de conservantes para serem adicionados as bebidas, denotados por A, B e C. O objetivo
do projeto é o desenvolvimento, treinamento e teste de uma MLP que determine qual dos conservantes
deve ser adicionado a cada lote de bebida a partir da análise das 4 características medidas. É
determinada que a arquitetura da rede, que deve conter 4 sinais de entrada, 2 camadas neurais, sendo
15 neurônios na camada escondida e 3 neurônios na camada de saída. A Figura1 mostra
detalhadamente a arquitetura que a MLP deve ter para a realização do projeto. Analisando a arquitetura
proposta na Figura 1 nota-se que a MLP possuirá 3 sinais de saída, como a resposta da MLP deve ser o
tipo de conservante (A, B ou C) se faz necessário padronizar quais combinações de saída
representarão cada conservante. Essa padronização pode ser vista na Tabela 3.
Figura 3 – Arquitetura proposta rede Perceptron Multicamadas

Tipo de Conservante Y1 Y2 Y3
Tipo A 1 0 0
Tipo B 0 1 0
Tipo C 0 0 1
Tabela 3 – Tipo de conservantes

Pode-se perceber ainda a partir da figura 8, que a rede converge mais suavemente sem grandes
oscilações aproximadamente a partir da época 5.

Treinamento
% Solve a Pattern Recognition Problem with a Neural Network
% Script generated by Neural Pattern Recognition app
% This script assumes these variables are defined:
%
% dataInput - input data.
% dataTarget - target data.

x = dataInput';

t = dataTarget';

% Choose a Training Function

% For a list of all training functions type: help nntrain


% 'trainlm' is usually fastest.
% 'trainbr' takes longer but may be better for challenging problems.

% 'trainscg' uses less memory. Suitable in low memory situations. trainFcn = 'trainscg'; %
Scaled conjugate gradient backpropagation.

% Create a Pattern Recognition Network


hiddenLayerSize = 15;
net = patternnet(hiddenLayerSize, trainFcn);

% Setup Division of Data for Training, Validation, Testing


net.divideParam.trainRatio = 85/100; net.divideParam.valRatio = 5/100;
net.divideParam.testRatio = 10/100;

% Train the Network

[net,tr] = train(net,x,t);

% Test the Network y =


net(x);

e = gsubtract(t,y); performance =
perform(net,t,y) tind = vec2ind(t);
yind = vec2ind(y);

percentErrors = sum(tind ~= yind)/numel(tind);


% View the Network
view(net)

% Plots

% Uncomment these lines to enable various plots. %figure,


plotperform(tr)

%figure, plottrainstate(tr)
%figure, ploterrhist(e) %figure,
plotconfusion(t,y) %figure, plotroc(t,y)

2.2

% Solve a Pattern Recognition Problem with a Neural Network

% Script generated by Neural Pattern Recognition app


% This script assumes these variables are defined:
%

% dataInput - input data.


% dataTarget - target data.
x = dataInput';
t = dataTarget';

% Choose a Training Function


% For a list of all training functions type: help nntrain

% 'trainlm' is usually fastest.


% 'trainbr' takes longer but may be better for challenging problems.

% 'trainscg' uses less memory. Suitable in low memory situations. %trainFcn = 'trainscg'; %
Scaled conjugate gradient backpropagation. net.trainFcn = 'traingdm'

% Create a Pattern Recognition Network


hiddenLayerSize = 15;
net = patternnet(hiddenLayerSize, trainFcn);

% Setup Division of Data for Training, Validation, Testing


net.divideParam.trainRatio = 85/100; net.divideParam.valRatio = 5/100;
net.divideParam.testRatio = 10/100;

% Train the Network


[net,tr] = train(net,x,t);

% Test the Network y =


net(x);

e = gsubtract(t,y); performance =
perform(net,t,y) tind = vec2ind(t);
yind = vec2ind(y);
percentErrors = sum(tind ~= yind)/numel(tind);

% View the Network

view(net)

% Plots

% Uncomment these lines to enable various plots. %figure,


plotperform(tr)

%figure, plottrainstate(tr)
%figure, ploterrhist(e) %figure,
plotconfusion(t,y) %figure, plotroc(t,y)
2.3

5[s]

4[s]

2.4

> output = output';

> output2 = (output > 0.5)

output2 =
18×3 logical array
0 0 1
1 0 0
0 0 1
0 1 0
0 0 1
1 0 0
0 1 0
0 1 0
1 0 0
1 0 0
0 1 0
1 0 0
0 0 1
0 0 1
0 0 1
1 0 0
0 0 1
0 1 0

Teste

Amostra x1 x2 x3 x4 d1 d2 d3 y 1pós y 2pós y 3pós


01 0,8622 0,7101 0,6236 0,7894 0 0 1 0 0 1
02 0,2741 0,1552 0,1333 0,1516 1 0 0 1 0 0
03 0,6772 0,8516 0,6543 0,7573 0 0 1 0 0 1
04 0,2178 0,5039 0,6415 0,5039 0 1 0 0 1 0
05 0,7260 0,7500 0,7007 0,4953 0 0 1 0 0 1
06 0,2473 0,2941 0,4248 0,3087 1 0 0 1 0 0
07 0,5682 0,5683 0,5054 0,4426 0 1 0 0 1 0
08 0,6566 0,6715 0,4952 0,3961 0 1 0 0 1 0
09 0,0705 0,4717 0,2921 0,2954 1 0 0 1 0 0
10 0,1187 0,2568 0,3140 0,3037 1 0 0 1 0 0
11 0,5673 0,7011 0,4083 0,5552 0 1 0 0 1 0
12 0,3164 0,2251 0,3526 0,2560 1 0 0 1 0 0
13 0,7884 0,9568 0,6825 0,6398 0 0 1 0 0 1
14 0,9633 0,7850 0,6777 0,6059 0 0 1 0 0 1
15 0,7739 0,8505 0,7934 0,6626 0 0 1 0 0 1
16 0,4219 0,4136 0,1408 0,0940 1 0 0 1 0 0
17 0,6616 0,4365 0,6597 0,8129 0 0 1 0 0 1
18 0,7325 0,4761 0,3888 0,5683 0 1 0 0 1 0
Total de Acertos (%) 100 100 100

Tabela 4 – Resultado do teste


Conclusões e discussões

A partir dos dados obtidos e apresentados no desenvolvimento do trabalho, verifica-se que o


algoritmo backpropagation apresenta resultados satisfatórios para o objetivo o qual foi proposto que era
treinar uma rede neural a qual fosse responsável por aproximar uma função e outra classificasse
padrões.

Como conclusão têm-se que para aproximação de funções não lineares o processo do
backpropagation foi um método relativamente simples e apresentou valores muito satisfatórios para
pequenas quantidades de neurônios, assim como para a utilização deste algoritmo para a classificação
de padrões.

Referências Bibliográficas

DA SILVA, Ivan Nunes; SPATTI, Danilo Hernane; FLAUZINO, Rogério Andrade. Redes Neurais
Artificiais para engenharia e ciências aplicadas curso prático. São Paulo: Artliber, 2010.

DEMUTH, Howard B. et al. Neural network design. Martin Hagan, 2014.

HAYKIN, Simon. Redes neurais: princípios e prática. Bookman Editora, 2007.

Você também pode gostar