Você está na página 1de 12

Instituto Federal do Par

Programa de Ps-graduao, Pesquisa e Inovao


Especializao em Redes Eltricas Inteligentes

Disciplina: Inteligncia Computacional Aplicada


Ministrante: Professor Raimundo Nonato Machado

Rede Perceptron

Zaire de Assis Ferreira Souza 20173420025

Belm/PA, 17 de Maio de 2017.


Tarefa 1

Para a primeira tarefa foi proposta a implementao de uma funo lgica de


duas entradas usando o algoritmo de treinamento perceptron. Entendeu-se que o
objetivo real se familiarizar com a metodologia de treinamento do algoritmo
perceptron, por esse motivo, programou-se um circuito lgico combinacional simples
com trs entradas, conforme mostra a Figura 1.

Figura 1 Circuito lgico.

Aplicando a lgebra de Booleana fica claro que a relao entre as entradas (A, B
e C) e a sada (Se) dada pela equao 1.

= ( + ) (1)

A tabela verdade desse circuito mostrada na Tabela 1.

Tabela 1 Tabela verdade do circuito lgico mostrado na Figura 1.

A B C SE
0 0 0 0
0 0 1 0
0 1 0 0
1 0 0 1
0 1 1 0
1 1 0 0
1 0 1 1
1 1 1 0

Como o objetivo treinar uma arquitetura de Rede Neural Artificial (RNA) que
aprenda o padro de sada Se do circuito lgico dado os sinais de entrada A, B e C a
rede deve apresentar a seguinte arquitetura mostrada na Figura 2.
Figura 2 Arquitetura da RNA.

Pela anlise da rede, tambm fica claro que a funo de transferncia,


responsvel por relacionar os dados de entrada com a resposta da rede representada
pela equao 2.

= (1 + 2 + 3 + 0 ) (2)

Onde W1, W2 e W3 so os pesos sinpticos da rede, que podem ser iniciados


aleatoriamente com valores que normalmente variam entre 0,2 e 0,8; A, B e C so os
dados de entrada fornecidos pela rede conforme a Tabela 1; W0 o valor do bias,
tambm iniciado aleatoriamente e a funo de ativao da rede que dada pela
equao 3.

0, < 0
() = { (3)
1, 0

Para cada entrada calculado o erro (E) que dado pela diferena entre a
resposta desejada, que a resposta natural do circuito lgico (SE) e a resposta da rede
(ST) como mostra a equao 4.

= (4)

Enquanto existir erro de estimao, ou enquanto este erro for menor que
determinada tolerncia, o algoritmo deve atualizar os pesos sinpticos para melhor
adequar a rede ao problema concluindo uma poca de treinamento a cada vez que todas
as entradas da Tabela 1 forem testadas. A atualizao dos pesos sinpticos ocorre
conforme as equaes 5, 6 e 7. O bias atualizado conforme a equao 8.

1 = 1 + (5)

2 = 2 + (6)

3 = 3 + (7)

0 = 0 + (8)
Onde representa os valores atualizados e os valores anteriores
atualizao. Os resultados sero apresentados na seo seguinte, o os cdigos que
levaram aos resultados obtidos esto em anexo.

Resultados

Primeiramente analisou-se graficamente o circuito lgico mostrado na Figura 1,


as entradas utilizadas no teste, bem como as sadas podem ser vistas na Figura 3.

1
0.5
A

0
1 2 3 4 5 6 7 8
(a)
1
0.5
B

0
1 2 3 4 5 6 7 8
(b)
1
0.5
C

0
1 2 3 4 5 6 7 8
(c)
1
Saida

0.5
0
1 2 3 4 5 6 7 8
(d)

Figura 3 (a) entrada A; (b) entrada B; (c) entrada C e (d) sada do circuito lgico, conforme a equao 1.

A resposta aps a realizao do treinamento da rede est mostrada na Figura 4.


Note que a Figura 4 (a) que mostra a resposta do circuito lgico idntica a Figura 4 (b)
que mostra a resposta da rede. Esse aspecto enfatizado pela Figura 4 (c) onde
possvel verificar o erro de estimao nulo, mostrando que a rede se adequo
perfeitamente ao problema.

Como o problema sempre iniciado aleatoriamente, os valores finais nos pesos


sinpticos e dos bias no so necessariamente os mesmos, para confirmar essa
afirmao a Tabela 2 e a Figura 5 mostram o desempenho de cada simulao, sendo
realizadas 4 simulaes.

Tabela 2 Arquitetura final da rede para cada simulao.

Simulao W1 W2 W3 Wo
1 1,9575 -1,0351 -0,8424 -1,0294
2 1,9571 -1,5146 -0,1997 -0,8581
3 1,4217 -1,0842 -0,2078 -1,0405
4 1,6557 -1,9643 -0,1509 -0,066
Saida do Circuito
1

0.5

0
1 2 3 4 5 6 7 8
(a)

1
Saida da RNA

0.5

0
1 2 3 4 5 6 7 8
(b)

1
Erro de Estimao

-1
1 2 3 4 5 6 7 8
(c)

Figura 4 (a) resposta do circuito lgico; (b) resposta da rede neural; (c) erro de estimao.

1
simulao 1
0.9 simulao 2
simulao 3
0.8
simulao 4

0.7

0.6
Erro Mdio

0.5

0.4

0.3

0.2

0.1

0
1 1.5 2 2.5 3 3.5 4
Epocas

Figura 5 Relao entre pocas e o erro mdio por simulao.


Tarefa 2

Com o mesmo sistema mostrado na tarefa 1, deve-se mostrar o uso dos


comandos listados abaixo;

Plotpv

Este comando plota as entradas da rede perceptron, pelo vetor objetivo, no


exemplo os valores de A, B e C e a sada, como mostra a Figura 6 e as Tabelas de 3 a 5.

Vectors to be Classified

1
P(3)

0.5

1.5
1 1.5
0.5 1
0.5
0 0
P(2) -0.5 -0.5
P(1)

Figura 6 Utilizao do comando plotpv.

Tabela 3 Dados de entrada e dados de sada

% Teste da funo lgica


in = [...
%A B C
0 0 0
0 0 1
0 1 0
1 0 0
0 1 1
1 1 0
1 0 1
1 1 1
];

for i = 1:length(in)
saida(i,:) = circuito_logico(in(i,:));
end
Tabela 4 Circuito lgico cuja resposta est a equao 1.

function s = circuito_logico(x)
% x(1) = A
% x(2) = B
% x(3) = C

s = x(1)&(~x(2)) & ((~x(2))|x(3));

Tabela 5 Utilizao do comando plotpv.

plotpv(in',saida')

Newp

Esta funo cria uma arquitetura de uma rede perceptron de mltiplas camadas
ou de camada nica, neste caso utilizou-se uma rede de camada nica, devem ser
considerados como argumento de entrada: os limites inferior e superior dos dados de
entrada e o numero de neurnios. Aps a criao de uma arquitetura de rede,
conveniente alimentar os dados de entrada na nova arquitetura criada antes de se
realizar o treinamento, como mostra a Tabela 6. A Figura 7 ilustra a arquitetura criada.

Tabela 6 Utilizao do comando newp.

net = newp(minmax(in'),1);
y = net(in');

Figura 7 Arquitetura da rede criada por Newp.


Train

J a funo train vai treinar a rede criada anteriormente, a utilizao da funo


train esta na Tabela 7 e o resultado do desempenho do treinamento pode ser observado
na Figura 8. Os argumentos de entrada da funo so: dados de entrada, sada e a rede
montada;

Tabela 7 - Utilizao do comando train.

net = train(net,in',saida');

Figura 8 Interface de resultados do treinamento.


Plotpc

Plota uma linha de classificao no mesmo espao de plotpv. Como o problema


proposto apresenta trs entradas, no foi possvel delimitar a linha de classificao, mas
para melhor esclarecer a funcionalidade do comando plotpc, realizou-se a em um novo
problema, conforme a Figura 9. Vale ressaltar que a utilizao da funo plotpc dever
ser realizada aps a montagem da rede e seu traimento, pois s assim possvel obter o
valor dos pesos sinpticos finais e dos bias.

Tabela 8 Utilizao da funo plotpc.

plotpc(net.iw{1,1},net.b{1})

Vectors to be Classified Vectors to be Classified


1.5 1.5

1 1
P(2)

P(2)

0.5 0.5

0 0

-0.5 -0.5
-0.5 0 0.5 1 1.5 -0.5 0 0.5 1 1.5
P(1) P(1)

Figura 9 Utilizao do comando plotpc em comparao ao plotpv.

Sim

Por fim, o comando sim usado para simular uma resposta da rede j treinada a
fim de avaliar seu desempenho. conveniente comparar graficamente a resposta da
rede aps a utilizao do comando sim com a resposta desejada, como foi feito na
Figura 10. A utilizao do comando sim mostrada na Tabela 9.

Tabela 9 Utilizao do comando sim.

saidan = sim(net,in');
1

Saida do Circuito
0.5

0
1 2 3 4 5 6 7 8
(a)

1
Saida da RNA

0.5

0
1 2 3 4 5 6 7 8
(b)

Figura 10 Comparao entre (a) a resposta do circuito e (b) a resposta da RNA.

Anexo

%% Autor: Zaire de Assis Ferreira Souza


% Teste da funo lgica
in = [...
%A B C
0 0 0
0 0 1
0 1 0
1 0 0
0 1 1
1 1 0
1 0 1
1 1 1
];

for i = 1:length(in)
saida(i,:) = circuito_logico(in(i,:));
end

figure
subplot(411)
stem(in(:,1),'k','linewidth',2)
axis([1 8 -0.1 1.1])
ylabel('A')
xlabel('(a)')

subplot(412)
stem(in(:,2),'k','linewidth',2)
axis([1 8 -0.1 1.1])
ylabel('B')
xlabel('(b)')

subplot(413)
stem(in(:,3),'k','linewidth',2)
axis([1 8 -0.1 1.1])
ylabel('C')
xlabel('(c)')

subplot(414)
stem(saida,'r','linewidth',2)
axis([1 8 -0.1 1.1])
ylabel('Saida')
xlabel('(d)')

% Inicio do Perceptron

w1 = rand(1);
w2 = rand(1);
w3 = rand(1);

wo = rand(1);

er = 1;
ite = 1;

while (er(ite) >= 0.025) | ite>10

for i = 1:length(in)

ya(i) = (w1*in(i,1) + w2*in(i,2) + w3*in(i,3) + wo);

% Funo de ativao

if ya(i)>=0
y(i) = 1;
else
y(i) = 0;
end

erro(i) = saida(i) - y(i);

if erro(i) ~= 0

w1 = w1 + erro(i)*in(i,1);
w2 = w2 + erro(i)*in(i,2);
w3 = w3 + erro(i)*in(i,3);

wo = wo + erro(i);
end

end

epoca(ite) = ite;
ite = ite + 1;
er(ite) = mean(abs(erro));
end

figure
subplot(311)
plot(saida,'k','linewidth',2)
xlabel('(a)')
ylabel('Saida do Circuito')
axis([1 8 -0.1 1.1])
subplot(312)
plot(y,'r','linewidth',2)
xlabel('(b)')
ylabel('Saida da RNA')
axis([1 8 -0.1 1.1])

subplot(313)
plot(erro,'b','linewidth',2)
xlabel('(c)')
ylabel('Erro de Estimao')

figure
plot(er,'k','linewidth',2)
ylabel('Erro Mdio')
xlabel('Epocas')
grid

disp('A rede trainada apresenta os seguintes parametros:')


fprintf('W1 = %f\n',w1)
fprintf('W2 = %f\n',w2)
fprintf('W3 = %f\n',w3)
fprintf('Wo = %f\n',wo)

pause
close all