Sei sulla pagina 1di 14

UNIVERSIDAD DE FUERZAS ARMADAS ESPE

DEPARTAMENTO DE ELCTRICA Y ELECTRNICA


ASIGNATURA: CONTROL INTELIGENTE
Actividad No8. Aprendizaje del perceptrn multicapa mediante retropropagacin del error
Fecha: 14 de enero 2015
Nombre alumno: Fernando Villalba

1. Dibuje un perceptrn multicapa con 2 entradas, 2 neuronas escondidas y una neurona de


salida.

2. Escriba las frmulas de actualizacin de cada uno de los pesos de conexin entre las
neuronas de la capa oculta y la capa de salida. Utilice la nomenclatura del ejercicio 1.
= () () ( ) ( ) 1
= () () ( ) ( ) 2
= () () ( ) ( )

3. Escriba las frmulas de actualizacin de cada uno de los pesos de conexin entre las
entradas y las neuronas de la capa oculta. Utilice la nomenclatura del ejercicio 1.
= () () ( ) ( ) ( )
= () () ( ) ( ) ( )
= () () ( ) ( )
= () () ( ) ( ) ( )
= () () ( ) ( ) ( )
= () () ( ) ( ) ( )

Pgina 1

4. Escriba el programa para realizar el aprendizaje por retropropagacin del error para
que la red neuronal del ejercicio 1 aprenda a partir de los patrones de entrenamiento de
una compuerta XOR. Considere un factor de aprendizaje de 0.1; alfa=4. Grafique la
curva de aprendizaje. Considere aprendizaje en lnea (ejemplo por ejemplo).
Grafique las lneas de frontera de la red neuronal de acuerdo a lo realizado en la
actividad 7.
w1=rand();
w2=rand();
w3=rand();
w4=rand();
w5=rand();
w6=rand();
w7=rand();
w8=rand();
w9=rand();
%VALOR UMBRAL
in0=1;
%Factor de aprendizaje
n=0.1;
%Patrones de entrenamiento
in1=[0 0 1 1];
in2=[0 1 0 1];
targ=[0 1 1 0];
%Numero de epocas
numEpoca=1000;
errorVec=[];
epoca=[];
alpha=4;
for k=1:1:numEpoca
errorTot=0;
%Enceramiento de Variables
dw1Ac=0;
dw2Ac=0;
dw3Ac=0;
dw4Ac=0;
dw5Ac=0;
dw6Ac=0;
dw7Ac=0;
dw8Ac=0;
dw9Ac=0;
for i=1:1:4
%Estructura de la Red
net1=in0*w7+in1(i)*w1+in2(i)*w3;
net2=in0*w8+in1(i)*w2+in2(i)*w4;
out1 = 1/(1+exp(-alpha*net1));
out2 = 1/(1+exp(-alpha*net2));
net=in0*w9+out1*w5+out2*w6;
out= 1/(1+exp(-alpha*net));
%Calculo del error%
error = (0.5)*((targ(i)-out).^2);
errorTot=(errorTot+error);
%Regla de aprendizaje, por retropropagacin%
dw1=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w5*((alpha*out1*(1-out1))+0.1)*in1(i);
dw2=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w6*((alpha*out2*(1-out2))+0.1)*in1(i);
dw3=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w5*((alpha*out1*(1-out1))+0.1)*in2(i);
dw4=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w6*((alpha*out2*(1-out2))+0.1)*in2(i);
Pgina 2

dw5=-n*(-1)*(targ(i)-out)*((alpha*out*(1-out))+0.1)*out1;
dw6=-n*(-1)*(targ(i)-out)*((alpha*out*(1-out))+0.1)*out2;
dw7=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w5*((alpha*out1*(1-out1))+0.1)*in0;
dw8=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w6*((alpha*out2*(1-out2))+0.1)*in0;
dw9=-n*(-1)*(targ(i)-out)*((alpha*out*(1-out))+0.1)*in0;
%ACTUALIZACION DE PESOS
w1=(w1+dw1);
w2=(w2+dw2);
w3=(w3+dw3);
w4=(w4+dw4);
w5=(w5+dw5);
w6=(w6+dw6);
w7=(w7+dw7);
w8=(w8+dw8);
w9=(w9+dw9);
end
%Acumulacin de Error en vector
errorVec=[errorVec errorTot];
epoca=[epoca k];
end
%Grfica
[in1,in2] = meshgrid(0:.01:1, 0:.01:1);
net1=in0*w7+in1.*w1+in2.*w3;
net2=in0*w8+in1.*w2+in2.*w4;
out1 = 1./(1+exp(-alpha*net1));
out2 = 1./(1+exp(-alpha*net2));
net=in0*w9+out1.*w5+out2.*w6;
out= 1./(1+exp(-alpha*net));
subplot(3,1,1)
mesh(in1,in2,out)
aux = round(out); %Para graficar la linea de frontera
subplot(3,1,2)
mesh(in1,in2,aux)
view(0,90);xlabel('in1');ylabel('in2');
subplot(3,1,3)
plot(epoca, errorVec);

Pgina 3

5. Repita el numeral 4 pero con aprendizaje en paquete (batch). Grafique las lneas de
frontera de la red neuronal de acuerdo a lo realizado en la actividad 7.
w1=rand();
w2=rand();
w3=rand();
w4=rand();
w5=rand();
w6=rand();
w7=rand();
w8=rand();
w9=rand();
%Entrada umbral
in0=1;
%Factor de aprendizaje
n=0.1;
%Patrones de entrenamiento
in1=[0 0 1 1];
in2=[0 1 0 1];
targ=[0.1 0.9 0.9 0.1];
%Numero de epocas
numEpoca=1000;
errorVec=[];
epoca=[];
alpha=4;
for k=1:1:numEpoca
errorTot=0;
%Enceramiento de Variables
dw1Ac=0;
dw2Ac=0;
dw3Ac=0;
dw4Ac=0;
dw5Ac=0;
dw6Ac=0;
dw7Ac=0;
dw8Ac=0;
dw9Ac=0;
for i=1:1:4
%Estructura de la Red
net1=in0*w7+in1(i)*w1+in2(i)*w3;
net2=in0*w8+in1(i)*w2+in2(i)*w4;
out1 = 1/(1+exp(-alpha*net1));
out2 = 1/(1+exp(-alpha*net2));
net=in0*w9+out1*w5+out2*w6;
out= 1/(1+exp(-alpha*net));
%Calculo del error%
error = (0.5)*((targ(i)-out).^2);
errorTot=(errorTot+error);
%Regla de aprendizaje, por retropropagacin%
dw1=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w5*((alpha*out1*(1-out1))+0.1)*in1(i);
dw2=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w6*((alpha*out2*(1-out2))+0.1)*in1(i);
dw3=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w5*((alpha*out1*(1-out1))+0.1)*in2(i);
dw4=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w6*((alpha*out2*(1-out2))+0.1)*in2(i);
dw5=-n*(-1)*(targ(i)-out)*((alpha*out*(1-out))+0.1)*out1;
dw6=-n*(-1)*(targ(i)-out)*((alpha*out*(1-out))+0.1)*out2;

Pgina 4

dw7=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w5*((alpha*out1*(1-out1))+0.1)*in0;
dw8=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w6*((alpha*out2*(1-out2))+0.1)*in0;
dw9=-n*(-1)*(targ(i)-out)*((alpha*out*(1-out))+0.1)*in0;
%Acumulacin de Variaciones
dw1Ac=(dw1Ac+dw1);
dw2Ac=(dw2Ac+dw2);
dw3Ac=(dw3Ac+dw3);
dw4Ac=(dw4Ac+dw4);
dw5Ac=(dw5Ac+dw5);
dw6Ac=(dw6Ac+dw6);
dw7Ac=(dw7Ac+dw7);
dw8Ac=(dw8Ac+dw8);
dw9Ac=(dw9Ac+dw9);
end
%Actualizacin de valores
w1=(w1+dw1Ac);
w2=(w2+dw2Ac);
w3=(w3+dw3Ac);
w4=(w4+dw4Ac);
w5=(w5+dw5Ac);
w6=(w6+dw6Ac);
w7=(w7+dw7Ac);
w8=(w8+dw8Ac);
w9=(w9+dw9Ac);
%Acumulacin de Error en vector
errorVec=[errorVec errorTot];
epoca=[epoca k];
end
%Grfica
[in1,in2] = meshgrid(0:.01:1, 0:.01:1);
net1=in0*w7+in1.*w1+in2.*w3;
net2=in0*w8+in1.*w2+in2.*w4;
out1 = 1./(1+exp(-alpha*net1));
out2 = 1./(1+exp(-alpha*net2));
net=in0*w9+out1.*w5+out2.*w6;
out= 1./(1+exp(-alpha*net));
subplot(3,1,1)
mesh(in1,in2,out)
aux = round(out); %Para graficar la linea de frontera
subplot(3,1,2)
mesh(in1,in2,aux)
view(0,90);xlabel('in1');ylabel('in2');
subplot(3,1,3)
plot(epoca, errorVec);

Pgina 5

Pgina 6

UNIVERSIDAD DE FUERZAS ARMADAS ESPE


DEPARTAMENTO DE ELCTRICA Y ELECTRNICA
ASIGNATURA: CONTROL INTELIGENTE
Actividad No10. Mejoras al aprendizaje del perceptrn multicapa mediante
retropropagacin. Aprendizaje por descenso ms pronunciado. Entrenamiento de una red
neuronal con patrones de XOR.
Fecha: 12-01-2015
Nombre alumno: Fernando Villalba
NRC:

Introduccin. El mtodo de descenso ms pronunciado consiste en el siguiente procedimiento:


El factor de aprendizaje es el mismo para todos los pesos. Iniciar el factor de aprendizaje con un
valor y doblarlo cada poca. Esto conduce a una actualizacin preliminar de los pesos. El Error
medio cuadrtico MSE se calcula para los pesos actualizados que corresponden a la tasa de
aprendizaje actual. Si el MSE no decrece con esta tasa de aprendizaje, los pesos retornan a sus
valores originales, la tasa de aprendizaje se reduce a la mitad y se contina el entrenamiento. Si
el MSE todava no decrece, se parte el factor de aprendizaje a la mitad repetidamente hasta
encontrar una tasa de aprendizaje que reduzca el MSE. En este punto el factor de aprendizaje es
doblado otra vez y se inicia un nuevo paso. El proceso se repite una y otra vez. La bsqueda
contina en esta forma y termina dentro de un nmero predefinido de pocas de entrenamiento.
Si la disminucin en el error con respecto al paso previo es ms pequea que un nivel especificado
o si el valor del factor de aprendizaje cae bajo un lmite especificado el proceso se
detiene.
( )( )
( )

< ; <

, son especificados por el usuario

Pgina 7

1. De acuerdo al enunciado, dibuje un diagrama de flujo que resuelva el aprendizaje de una red
neuronal por descenso ms pronunciado.
Inicio
1

Definir patrones
de entrenamiento

Actualizacin preliminar de los


pesos
Inicio con pesos
Aleatorios
Recalcular MSE_N con pesos
actualizados
Parmetros iniciales: n, nmin
Emin, nmero de pocas

NO
Epoca++

N=2n

MSE_N<MSE

Formar un patrn de
entrenamiento

SI

Calcular la salida de la Red


neuronal

Recuperamos Pesos

n=n/2
Calcular la actualizacin de
pesos, el error medio cuadrtico

Ultimo patron de
entrenamiento?

NO
SI
NO

NO
n<nmin
?

MSE<Emin

SI
SI
FIN

Pgina 8

2. Transcriba el cdigo para considerar que El Error medio cuadrtico MSE se calcula para
los pesos actualizados que corresponden a la tasa de aprendizaje actual. Indique como su
cdigo considera la idea de que si el MSE no decrece los pesos deben retornar a sus valores
iniciales.

for i=1:4
net1=in0*w7+in1(i)*w1+in2(i)*w3;
net2=in0*w8+in1(i)*w2+in2(i)*w4;
out1 = 1/(1+exp(-alpha*net1));
out2 = 1/(1+exp(-alpha*net2));
net=in0*w9+out1*w5+out2*w6;
out= 1/(1+exp(-alpha*net));
error = (0.5)*((targ(i)-out).^2);
errorTot1=(errorTot1+error);
end
% Si el MSE no decrece los pesos deben
%retornar a sus valores iniciales,
%por lo que se resta a cada peso actualizado
%su valor de actualizacin.
if errorTot>errorTot1
n=n*2;
else
w1=(w1-dw1);
w2=(w2-dw2);
w3=(w3-dw3);
w4=(w4-dw4);
w5=(w5-dw5);
w6=(w6-dw6);
w7=(w7-dw7);
w8=(w8-dw8);
w9=(w9-dw9);

3. Escriba las lneas de cdigo que toman en cuenta la idea de que: Si el MSE no decrece con
esta tasa de aprendizaje, los pesos retornan a sus valores originales, la tasa de aprendizaje se
reduce a la mitad y se contina el entrenamiento. Si el MSE todava no decrece, se parte el
factor de aprendizaje a la mitad repetidamente hasta encontrar una tasa de aprendizaje que
reduzca el MSE. En este punto el factor de aprendizaje es doblado otra vez y se inicia un
nuevo paso
if errorTot>errorTot1
n=n*2;
else
w1=(w1-dw1);
w2=(w2-dw2);
w3=(w3-dw3);
w4=(w4-dw4);
w5=(w5-dw5);
w6=(w6-dw6);
w7=(w7-dw7);
w8=(w8-dw8);
w9=(w9-dw9);
if n>nmin
n=n*0.5; % tasa de aprendizaje reducida a la mitad
end
errorTot=errorTot1;
end

Pgina 9

4. Escriba el cdigo que resuelve la idea final del enunciado:


La bsqueda contina en esta forma y termina dentro de un nmero predefinido de pocas de
entrenamiento. Si la disminucin en el error con respecto al paso previo es ms pequea que un
nivel especificado o si el valor del factor de aprendizaje cae bajo un lmite especificado
el proceso se detiene.
( )( )
( )

< ; <

, son especificados por el usuario


w1=rand();
w2=rand();
w3=rand();
w4=rand();
w5=rand();
w6=rand();
w7=rand();
w8=rand();
w9=rand();
%entrada umbral
in0=1;
%Factor de aprendizaje
n=0.1;
%Patrones de entrenamiento
in1=[0 0 1 1];
in2=[0 1 0 1];
targ=[0.1 0.9 0.9 0.1];
%Numero de epocas
numEpoca=1000;
errorVec=[];
epoca=[];
alpha=4;
%Variables
Emin=0.01;
nmin=0.01;
errorTot=1;errorTot1=0;
for k=1:1:numEpoca
if errorTot>Emin
errorTot=0;
%Enceramiento de Variables
dw1Ac=0;
dw2Ac=0;
dw3Ac=0;
dw4Ac=0;
dw5Ac=0;
dw6Ac=0;
dw7Ac=0;
dw8Ac=0;
dw9Ac=0;

Pgina 10

for i=1:1:4
%Estructura de la Red
net1=in0*w7+in1(i)*w1+in2(i)*w3;
net2=in0*w8+in1(i)*w2+in2(i)*w4;
out1 = 1/(1+exp(-alpha*net1));
out2 = 1/(1+exp(-alpha*net2));
net=in0*w9+out1*w5+out2*w6;
out= 1/(1+exp(-alpha*net));
%Calculo del error%
error = (0.5)*((targ(i)-out).^2);
errorTot=(errorTot+error);
%Regla de aprendizaje, por retropropagacin%
dw1=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w5*((alpha*out1*(1-out1))+0.1)*in1(i);
dw2=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w6*((alpha*out2*(1-out2))+0.1)*in1(i);
dw3=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w5*((alpha*out1*(1-out1))+0.1)*in2(i);
dw4=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w6*((alpha*out2*(1-out2))+0.1)*in2(i);
dw5=-n*(-1)*(targ(i)-out)*((alpha*out*(1-out))+0.1)*out1;
dw6=-n*(-1)*(targ(i)-out)*((alpha*out*(1-out))+0.1)*out2;
dw7=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w5*((alpha*out1*(1-out1))+0.1)*in0;
dw8=-n*(-1)*(targ(i)-out)*((alpha*out*(1out))+0.1)*w6*((alpha*out2*(1-out2))+0.1)*in0;
dw9=-n*(-1)*(targ(i)-out)*((alpha*out*(1-out))+0.1)*in0;
%Acumulacin de Variaciones
dw1Ac=(dw1Ac+dw1);
dw2Ac=(dw2Ac+dw2);
dw3Ac=(dw3Ac+dw3);
dw4Ac=(dw4Ac+dw4);
dw5Ac=(dw5Ac+dw5);
dw6Ac=(dw6Ac+dw6);
dw7Ac=(dw7Ac+dw7);
dw8Ac=(dw8Ac+dw8);
dw9Ac=(dw9Ac+dw9);
end
%Actualizacin de valores
w1=(w1+dw1Ac);
w2=(w2+dw2Ac);
w3=(w3+dw3Ac);
w4=(w4+dw4Ac);
w5=(w5+dw5Ac);
w6=(w6+dw6Ac);
w7=(w7+dw7Ac);
w8=(w8+dw8Ac);
w9=(w9+dw9Ac);
errorVec=[errorVec errorTot];
epoca=[epoca k];
for i=1:4
net1=in0*w7+in1(i)*w1+in2(i)*w3;
net2=in0*w8+in1(i)*w2+in2(i)*w4;
out1 = 1/(1+exp(-alpha*net1));
out2 = 1/(1+exp(-alpha*net2));
net=in0*w9+out1*w5+out2*w6;
out= 1/(1+exp(-alpha*net));
error = (0.5)*((targ(i)-out).^2);
errorTot1=(errorTot1+error);
end
% Si el MSE no decrece los pesos deben

Pgina 11

%retornar a sus valores iniciales,


%por lo que se resta a cada peso actualizado
%su valor de actualizacin.
if errorTot>errorTot1
n=n*2;
else
w1=(w1-dw1);
w2=(w2-dw2);
w3=(w3-dw3);
w4=(w4-dw4);
w5=(w5-dw5);
w6=(w6-dw6);
w7=(w7-dw7);
w8=(w8-dw8);
w9=(w9-dw9);
if n>nmin
n=n*0.5; % tasa de aprendizaje reducida a la mitad
end
errorTot=errorTot1;
end
end
end
[in1,in2] = meshgrid(0:.01:1, 0:.01:1);
net1=in0*w7+in1.*w1+in2.*w3;
net2=in0*w8+in1.*w2+in2.*w4;
out1 = 1./(1+exp(-alpha*net1));
out2 = 1./(1+exp(-alpha*net2));
net=in0*w9+out1.*w5+out2.*w6;
out= 1./(1+exp(-alpha*net));
subplot(3,1,1)
mesh(in1,in2,out)
aux = round(out); %Para graficar la linea de frontera
subplot(3,1,2)
mesh(in1,in2,aux)
view(0,90);xlabel('in1');ylabel('in2');
subplot(3,1,3)
plot(epoca, errorVec);

5. Presente los resultados obtenidos en dos grficos: el error en cada poca y la funcin de la
red neuronal versus las entradas. Realice la corrida del programa por varias veces y
determine la efectividad de la convergencia: Nmero de veces que converge/Nmero de
corridas

Pgina 12

Para determinar la efectividad de la convergencia se realiz la siguiente frmula



3
=
= 0.15

20
Se puede afirmar por cada 6 veces aproximadamente que se ejecute el programa se
obtiene una convergencia
Yo
Fernando
Villalba
afirmo
actividad es de cada
mi autora
y establezco
queuna
para la
Gracias
a esto
se puede
decirque
queesta
aproximadamente
diez corridas
se tiene
elaboracin de la misma he seguido los lineamientos del Cdigo de tica de la Universidad de
lasconvergencia
Fuerzas Armadas
ESPE
en el algoritmo.

Pgina 13

Yo Fernando Villalba afirmo que esta actividad es de mi autora y establezco que para la
elaboracin de la misma he seguido los lineamientos del Cdigo de tica de la Universidad de
las Fuerzas Armadas ESPE

Pgina 14