Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CONTROL INTELIGENTE
LABORATORIO N°2
REDES NEURONALES ADALINE
ALUMNOS:
Arteaga Aparicio, Alexander 1513240019
Chero Olazabal, Diego Alexander 1513210153
Ramírez Navarro, Jheral 1523220761
Tarazona Calixto, Hayrold Edison 1523210157
GRUPO:
90G
2021
REDES NEURONALES ADALINE
I. OBJETIVOS
Comprender sólidamente el funcionamiento de las redes que utilizan la arquitectura ADALINE.
Ser capaz de programar con éxito simulaciones de estas redes.
II. INTRODUCCION
Las redes ADALINE (ADAptive LINear Element) y MADALINE (Multiple ADALINE) fueron desarrolladas por
Bernie Widrow en la Universidad de Stanford poco después de que Rosenblatt desarrollara el
Perceptrón. Las arquitecturas de ADALINE y MADALINE son esencialmente las mismas que las del
Perceptron.
Ambas estructuras usan neuronas con funciones de transferencia escalón. La red ADALINE está limitada
a una única neurona de salida, mientras que MADALINE puede tener varias. La diferencia fundamental
respecto al Perceptron se refiere al mecanismo de aprendizaje. ADALINE y MADALINE utilizan la
denominada regla Delta de Hidrow-Hoff o regla del mínimo error cuadrado medio (LMS), basada en la
búsqueda del mínimo de una expresión del error entre la salida deseada y la salida lineal obtenida antes
de aplicarle la función de activación escalón (frente a la salida binaria utilizada en el caso del
Perceptron). Debido a esta nueva forma de evaluar el error, estas redes pueden procesar información
analógica, tanto de entrada como de salida, utilizando una función de activación lineal o sigmoidal.
IV. MATERIALES
Un computador personal.
Software matlab.
V. DESARROLLO
2. Cree un archivo-m con el nombre adaline1.m que obtenga una salida deseada para cada uno de los datos
a la entrada usando la arquitectura ADALINE:
Los datos de entrada son P = [+1.0 -1.2], las salidas deseadas son T = [+0.5 +1.0], el peso inicial de la entrada
es -0.9309, el peso de la entrada del umbral es -0.8931 y el error cuadrático medio debe ser menor o igual a
0.001.
5. Cree un archivo-m con el nombre adaline2.m que obtenga una salida deseada para cada uno de los datos
a la entrada usando la arquitectura ADALINE: Los datos de entrada son P = [+1.0 -1.2], las salidas deseadas
son T = [+0.5 +1.0], el peso inicial de la entrada es 1.6960, el peso de la entrada del umbral es -1.0052 y el
error cuadrático medio debe ser menor o igual a 0.001.
Corra el programa para una razón de aprendizaje de 0.9, 1.7 y 2.5 veces la máxima. Anote sus
conclusiones.
6. Cree un archivo-m con el nombre adaline3.m que obtenga una salida deseada para cada uno de los
datos a la entrada usando la arquitectura ADALINE:
Los datos de entrada son P = [+1.0, +1.5, +3.0, -1.2], las salidas deseadas son T = [+0.5, +1.1, +3.0, -1.0], el
peso inicial de la entrada es -0.2330, el peso de la entrada del umbral es 0.0388 y el error cuadrático
medio debe ser menor o igual a 0.001.
% EJEMPLO3: SOBREDETERMINADA
% Parte III de la guía del estudiante Redes Neuronales
%
% Una red, que consiste de 1 entrada alimentada a una sola
% neurona lineal, se entrena con la regla de aprendizaje
% de Widrow-Hoff para obtener el vector deseado correcto
% para cada uno de los cuatro vectores de entrada.
% La red está mas restringida (4 pares Entradas-Salidas deseadas)
% que sus 2 grados de libertad (peso y umbral). El
% resultado es que la solución de error mínimo tiene
% un error finito
help adaline3
clf reset
tiempopausa = 0.1;
% DEFINICIÓN DEL PROBLEMA
%========================
% Definición de los cuatro vectores de entrada de 1 elemento.
P = [+1.0 +1.5 +3.0 -1.2];
% Definición de los cuatro vectores deseaodos de 1 elemento asociados.
T = [+0.5 +1.1 +3.0 -1.0];
% GRÁFICA DE MALLA DEL ERROR
%===========================
disp('Calculado la superficie de error, por favor espere...'), disp('')
Wrango = -2:.2:2;
Brango = -2:.2:2;
SE = errsurf(P,T,Wrango,Brango,'purelin');
disp('Presione cualquier tecla para ver la superficie de error.'), disp(''), pause
plotes(Wrango,Brango,SE);
figura=gcf;
subplot(1,2,1)
title('Gráfica de la Superficie de Error')
xlabel('Peso W');
ylabel('-Umbral B');
zlabel('Error Cuadrado Medio');
subplot(1,2,2)
title('Gráfico de Contorno del Error')
xlabel('Peso W');
ylabel('Umbral B');
pause
% INICIALIZACIÓN DE LA ARQUITECTURA DE LA RED
%============================================
% Encuentra el tamaño del vector de entrada R, el tamaño de la capa S, el tamaño del lote Q.
[R,Q] = size(P); [S,Q] = size(T);
% DISEÑO DE LA RED
%=================
PR=[-2 2]; %rango del elemento de entrada.
ID=[0]; %Vector de Retraso de Entrada.
max_razon_aprendizaje = 0.9 * maxlinlr(P,'bias');
red=newlin(PR,S,ID,max_razon_aprendizaje);
% Inicialización de pesos y umbral.
z = menu('Inicializar Pesos y Umbral a:', ...
'Condiciones Iniciales en la guía del estudiante', ...
'Marcar Valores con el Ratón/Teclas de Desplazamiento sobre el graf. de contorno', ...
'Valores Aleatorios');
disp('');
if z == 1
red.IW{1,1} = [-0.2330]; red.b{1} = [0.0388];
elseif z == 3
red.inputweights{1,1}.initFcn = 'rands';
red.biases{1}.initFcn = 'rands';
red=init(red);
end
% GRÁFICA DE CONTORNO DEL ERROR, CONDICIONES INICIALES,SOLUCIÓN DISEÑADA
%========================================================================
figure(figura)
subplot(1,2,2)
axis('equal')
if z == 2
title('SELECIONE W y B AQUI')
[red.IW{1,1},red.b{1}] = ginput(1);
title('Gráfico de Contorno del Error')
end
% FASE DE PRESENTACIÓN:
A=sim(red,P);
E=T-A;
SSE=sumsqr(E);
punto=plotep(red.IW{1,1},red.b{1},SSE);
pause(tiempopausa);
% ENTRENAMIENTO DE LA RED
%========================
% ENTRENAMIENTO DE LOS PARÁMETROS
presenta_frec = 1;
max_iteracion = 40;
meta_error = 0.001;
red.trainParam.goal = meta_error;
LP.lr = max_razon_aprendizaje;
% NOTA: El resto del código de entrenamiento puede reemplazarse por:
%
% [red, tr]=train(red,P,T);
% iteracion = length(tr.epoch)-1;
% SSE = tr.perf(length(tr.perf));
%
% PARÁMETROS DE LA RED
W = red.IW{1,1};
B = red.b{1};
% REGISTRO DEL ENTRENAMIENTO
errores = [SSE];
for iteracion=1:max_iteracion
% FASE DE REVISIÓN:
if SSE < meta_error, iteracion=iteracion-1; break, end
LW = W; LB = B;
% FASE DE APRENDIZAJE:
dW = learnwh(W,P,[],[],[],[],E,[],[],[],LP,[]);
dB = learnwh(B,ones(1,Q),[],[],[],[],E,[],[],[],LP,[]);
W = W + dW; B = B + dB;
red.IW{1,1}=W;
red.b{1}=B;
% FASE DE PRESENTACIÓN
A=sim(red,P);
E = T-A;
SSE = sumsqr(E);
% REGISTRO DEL ENTRENAMIENTO
errores = [errores SSE];
% PRESENTACIÓN DEL PROGRESO
if rem(iteracion,presenta_frec) == 0
punto=plotep(W,B,SSE,punto);
pause(tiempopausa);
drawnow
end
end
red.IW{1,1} = W;
red.b{1} = B;
% GRÁFICA DE CLASIFICACIÓN FINAL
%===============================
punto=plotep(W,B,SSE,punto);
pause
set(gcf,'NextPlot','replace')
% GRÁFICA DE LA CURVA DE ERROR
%=============================
semilogy(0:iteracion,errores,0:iteracion,meta_error*ones(1,iteracion+1));
title('Error de la Red')
xlabel('iteraciones')
ylabel('error cuadrado medio')
pause;
% GRÁFICA DE LOS ERRORES ASOCIADOS A CADA VECTOR DE SALIDA
%=========================================================
bar(T-A);
title('Error de cada vector de salida')
xlabel('Salida')
ylabel('error de cada salida')
pause
% RESUMEN DE RESULTADOS
%======================
fprintf('\nVALORES DE LA RED ENTRENADA:\n')
W
B
fprintf('Entrenada en %.0f iteraciones.\n',iteracion)
fprintf('La meta del error cuadrático medio fue %g.\n',meta_error);
fprintf('Error cuadrático medio final de %g.\n',SSE);
fprintf('La red entrenada opera: ');
if SSE < meta_error
disp('Adecuadamente.')
else
disp('Adecuadamente.')
end
7. Cree un archivo-m con el nombre adaline4.m que obtenga una salida deseada para cada uno de los
datos a la entrada usando la arquitectura ADALINE:
El dato de entrada es P = [+1.0], la salida deseada es T = [+0.5], el peso inicial de la entrada es de [-1.2330],
el peso de la entrada del umbral es [0.0388] y el error cuadrático medio debe ser menor o igual a 0.001.
% EJEMPLO4: SUBDETERMINADA
% Parte III de la guía del estudiante Redes Neuronales
%
% Una red, que consiste de 2 entradas alimentadas a una sola
% neurona lineal, se entrena con la regla de aprendizaje
% de Widrow-Hoff para obtener el vector deseado correcto
% para el único vector de entrada.
% La red tiene menos restricción (1 par Entrada-Salida
%deseada)
% que sus 2 grados de libertad (peso y umbral). El
% resultado es que hay un infinito número de soluciones
% de error cero
help adaline4
clf reset
tiempopausa = 0.1;
% DEFINICIÓN DEL PROBLEMA
%========================
% Definición de los cuatro vectores de entrada de 1 elemento.
P = [+1.0];
% Definición de los cuatro vectores deseados de 1 elemento asociados.
T = [+0.5];
% GRÁFICA DE MALLA DEL ERROR
%===========================
disp('Calculado la superficie de error, por favor espere...'), disp('')
Wrango = -2:.2:2;
Brango = -2:.2:2;
SE = errsurf(P,T,Wrango,Brango,'purelin');
disp('Presione cualquier tecla para ver la superficie de error.'), disp(''),
pause
plotes(Wrango,Brango,SE);
figura=gcf;
subplot(1,2,1)
title('Gráfica de la Superficie de Error')
xlabel('Peso W');
ylabel('-Umbral B');
zlabel('Error Cuadrado Medio');
subplot(1,2,2)
title('Gráfico de Contorno del Error')
xlabel('Peso W');
ylabel('Umbral B');
pause
% INICIALIZACIÓN DE LA ARQUITECTURA DE LA RED
%============================================
% Encuentra el tamaño del vector de entrada R, el tamaño de la capa S, el tamaño
del lote Q.
[R,Q] = size(P); [S,Q] = size(T);
% DISEÑO DE LA RED
%=================
PR=[-2 2]; %rango del elemento de entrada.
ID=[0]; %Vector de Retraso de Entrada.
max_razon_aprendizaje = 0.9 * maxlinlr(P,'bias');
red=newlin(PR,S,ID,max_razon_aprendizaje);
% Inicialización de pesos y umbral.
z = menu('Inicializar Pesos y Umbral a:', ...
'Condiciones Iniciales en la guía del estudiante', ...
'Marcar Valores con el Ratón/Teclas de Desplazamiento sobre el graf. de
contorno', ...
'Valores Aleatorios');
disp('');
if z == 1
red.IW{1,1} = [-1.2330]; red.b{1} = [0.0388];
elseif z == 3
red.inputweights{1,1}.initFcn = 'rands';
red.biases{1}.initFcn = 'rands';
red=init(red);
end
% GRÁFICA DE CONTORNO DEL ERROR, CONDICIONES INICIALES,SOLUCIÓN DISEÑADA
%========================================================================
figure(figura)
subplot(1,2,2)
axis('equal')
if z == 2
title('SELECIONE W y B AQUI')
[red.IW{1,1},red.b{1}] = ginput(1);
title('Gráfico de Contorno del Error')
end
% FASE DE PRESENTACIÓN:
A=sim(red,P);
E=T-A;
SSE=sumsqr(E);
punto=plotep(red.IW{1,1},red.b{1},SSE);
pause(tiempopausa);
% ENTRENAMIENTO DE LA RED
%========================
% ENTRENAMIENTO DE LOS PARÁMETROS
presenta_frec = 1;
max_iteracion = 50;
meta_error = 0.001;
red.trainParam.goal = meta_error;
LP.lr = max_razon_aprendizaje;
% NOTA: El resto del código de entrenamiento puede reemplazarse por:
%
% [red, tr]=train(red,P,T);
% iteracion = length(tr.epoch)-1;
% SSE = tr.perf(length(tr.perf));
%
% PARÁMETROS DE LA RED
W = red.IW{1,1};
B = red.b{1};
% REGISTRO DEL ENTRENAMIENTO
errores = [SSE];
for iteracion=1:max_iteracion
% FASE DE REVISIÓN:
if SSE < meta_error, iteracion=iteracion-1; break, end
LW = W; LB = B;
% FASE DE APRENDIZAJE:
dW = learnwh(W,P,[],[],[],[],E,[],[],[],LP,[]);
dB = learnwh(B,ones(1,Q),[],[],[],[],E,[],[],[],LP,[]);
W = W + dW; B = B + dB;
red.IW{1,1}=W;
red.b{1}=B;
% FASE DE PRESENTACIÓN
A=sim(red,P);
E = T-A;
SSE = sumsqr(E);
% REGISTRO DEL ENTRENAMIENTO
errores = [errores SSE];
% PRESENTACIÓN DEL PROGRESO
if rem(iteracion,presenta_frec) == 0
punto=plotep(W,B,SSE,punto);
pause (tiempopausa);
drawnow
end
end
red.IW{1,1} = W;
red.b{1} = B;
% GRÁFICA DE CLASIFICACIÓN FINAL
%===============================
punto=plotep(W,B,SSE,punto);
pause
set(gcf,'NextPlot','replace')
% GRÁFICA DE LA CURVA DE ERROR
%=============================
semilogy(0:iteracion,errores,0:iteracion,meta_error*ones(1,iteracion+1));
title('Error de la Red')
xlabel('iteraciones')
ylabel('error cuadrado medio')
pause;
% GRÁFICA DE LOS ERRORES ASOCIADOS A CADA VECTOR DE SALIDA
%=========================================================
bar(T-A);
title('Error de cada vector de salida')
xlabel('Salida')
ylabel('error de cada salida')
pause
% RESUMEN DE RESULTADOS
%======================
fprintf('\nVALORES DE LA RED ENTRENADA:\n')
W
B
fprintf('Entrenada en %.0f iteraciones.\n',iteracion)
fprintf('La meta del error cuadrático medio fue %g.\n',meta_error);
fprintf('Error cuadrático medio final de %g.\n',SSE);
fprintf('La red entrenada opera: ');
if SSE < meta_error
disp('Adecuadamente.')
else
disp('Inadecuadamente.')
end
PARTE IV. ADALINE de varias neuronas.
8. Cree un archivo-m con el nombre adaline4.m que obtenga las salidas deseadas para cada uno de los
datos a la entrada usando la arquitectura ADALINE:
Los datos de entrada son P = [+1.0, +1.5, +1.2, -0.3; -1.0, +2.0, +3.0, -0.5; +2.0, +1.0, -1.6, +0.9], las salidas
deseadas son T= [+0.5, +3.0, -2.2, +1.4; +1.1, -1.2, +1.7, -0.4; +3.0, +0.2, -1.8, -0.4; -1.0, +0.1, -1.0, +0.6], los
pesos iniciales son W0 = [+1.9978, -0.5959, -0.3517; +1.5543, +0.0531, +1.3660; -1.0672, +0.3645, -0.9227;
-0.7747, +1.3839, -0.3384], los pesos de los umbrales son B0 = [+0.0746;-0.0642;-0.4256;-0.6433]; y el error
cuadrático medio debe ser menor o igual a 0.001.
Una red, consistente de 3 entradas alimentadas a una capa de 4 neuronas lineales, se entrena con la regla
de aprendizaje Widrow-Hoff para obtener el vector deseado correcto para cada uno de los 4 vectores de
entrada.
Una vez la red está entrenada, puede reproducir los vectores deseados bastante bien cuando se presentan
los vectores de entradas.
W=
-1.0224
1.1987
-0.4530
-0.3103
Entrenada en 198 iteraciones. La meta del error cuadrático medio fue 0.001.
VI. CONCLUSIONES
VII. BIBLIOGRAFIA
Redes Neuronales Artificiales. Fundamentos, modelos y aplicaciones, José Ramón Hilera González,
Víctor José Martínez Hernando. Biblioteca UDB.
Redes neuronales. Algoritmos, aplicaciones y técnicas de programación. James A. Freeman, David M.
Skapura. Biblioteca UDB.