Beruflich Dokumente
Kultur Dokumente
IN1
0
0
1
1
Donde la salida puede interpretarse as:
1
0
IN2
0
1
0
1
TARGET
0
1
1
0
Es la que debera cumplir con la solicitud del presente literal. Ahora se comparar la convergencia
entre uno y otro experimento. Se usar un error de 0.1. Para el primer experimento se obtuvo el
siguiente resultado:
Recopilando la informacin:
# Experimento
Converge?
# epocas
1
Si
3846
2
Si
7663
3
SI
4317
Observndose que para tres experimentos, el algoritmo parece converger.
3.2. Modifique el programa anterior de tal manera que la tasa de aprendizaje evolucione
con las pocas y verifique la convergencia.
El programa propuesto es
clc;clear all;
% entradas compuerta XOR (x1 y x2)
input = [0 0; 0 1; 1 0; 1 1];
% Salidas buscadas en la compuerta XOR (targets)
target = [0;1;1;0];
% Inicializando los thetas (W7, W8 y W9)
theta = [-1 -1 -1];
% Coeficiente de aprendizaje
n0 = 10;n=10;
alfa=1;
% Los pesos se incializan de forma ALEATORIA
% Asegurando que sean diferentes aleatorios para diferentes sesiones de
% MATLAB [ rand('state',sum(100*clock)) ]
rand('state',sum(100*clock));
pesos = 1*(-1 +2.*rand(3,3));
u=1;error=0;errorbuscado=0.1;epoca=0;
while(u==1)
out = zeros(4,1);
numIn = length (input(:,1));
epoca=epoca+1;
for j = 1:numIn
%-----------------------------------------------------------------------%
CAPA OCULTA
%-----------------------------------------------------------------------net1 = theta(1,1)*pesos(1,1)+ input(j,1)*pesos(1,2)+
input(j,2)*pesos(1,3);
%pesos(1,1)=-W7
%pesos(1,2)=W1
%pesos(1,3)=W4
x2(1) = (1/(1+exp(-alfa*net1))); %sigmoide(net1)
net2 =
theta(1,2)*pesos(2,1)+input(j,1)*pesos(2,2)+input(j,2)*pesos(2,3);
%pesos(2,1)=-W8
%pesos(2,2)=W4
%pesos(2,3)=W2
x2(2) = (1/(1+exp(-alfa*net2))); %sigmoide(net2)
%-----------------------------------------------------------------------%
CAPA SALIDA
%-----------------------------------------------------------------------net3 = alfa*alfa*theta(1,3)*pesos(3,1)+
x2(1)*pesos(3,2)+x2(2)*pesos(3,3);
%pesos(1,3)=-W9
%pesos(2,3)=W5
%pesos(3,3)=W6
out(j) =(1/(1+exp(-alfa*net3))); %sigmoide(net3)=salida red
neuronal
La lnea:
n=n0/(1+(epoca/10000))
Es la que hace que la tasa de aprendizaje vare con la poca. Para una prueba:
%-----------------------------------------------------------------------%
CAPA SALIDA
%-----------------------------------------------------------------------net3 = alfa*alfa*theta(1,3)*pesos(3,1)+
x2(1)*pesos(3,2)+x2(2)*pesos(3,3);
%pesos(1,3)=-W9
%pesos(2,3)=W5
%pesos(3,3)=W6
out(j) =(1/(1+exp(-alfa*net3))); %sigmoide(net3)=salida red
neuronal
% Ajuste de los incrementos para la capa de salida (net3)
% delta(wi) = xi*delta,
% delta = (1-salida actual)*(target - salida actual)
delta3_1 = alfa*alfa*out(j)*(1-out(j))*(target(j)-out(j));
% Ajuste de los incrementos para las capas ocultas
% El incremento final se obtiene al multiplicar deltas entre capas
% ocultas, y capa de salida (ver derivadas parciales)
delta2_1 = x2(1)*(1-x2(1))*pesos(3,2)*delta3_1;
delta2_2 = x2(2)*(1-x2(2))*pesos(3,3)*delta3_1;
%Pesos usados para el siguiente patrn de entrenamiento
for k = 1:3
if k == 1 % Casos de theta
pesos(1,k) = pesos(1,k) +
pesos(2,k) = pesos(2,k) +
pesos(3,k) = pesos(3,k) +
else % Cuando k=2 o 3, Casos
pesos(1,k) = pesos(1,k) +
pesos(2,k) = pesos(2,k) +
pesos(3,k) = pesos(3,k) +
end
n*theta(1,1)*delta2_1;
n*theta(1,2)*delta2_2;
n*theta(1,3)*delta3_1;
de entradas a las neuronas
n*input(j,1)*delta2_1;
n*input(j,2)*delta2_2;
n*x2(k-1)*delta3_1;
end
end
%ACTUALIZACIN DE PESOS FINALES FUERA DEL BUCLE
for k = 1:3
if k == 1 % Casos de theta
pesos(1,k) = pesos(1,k) +
pesos(2,k) = pesos(2,k) +
pesos(3,k) = pesos(3,k) +
else % Cuando k=2 o 3, Casos
pesos(1,k) = pesos(1,k) +
pesos(2,k) = pesos(2,k) +
pesos(3,k) = pesos(3,k) +
end
end
n*theta(1,1)*delta2_1;
n*theta(1,2)*delta2_2;
n*theta(1,3)*delta3_1;
de entradas a las neuronas
n*input(j,1)*delta2_1;
n*input(j,2)*delta2_2;
n*x2(k-1)*delta3_1;
MTODO DE ON LINE
clc;clear all;
% entradas compuerta XOR (x1 y x2)
input = [0 0; 0 1; 1 0; 1 1];
% Salidas buscadas en la compuerta XOR (targets)
target = [0;1;1;0];
% Inicializando los thetas (W7, W8 y W9)
theta = [-1 -1 -1];
% Coeficiente de aprendizaje
n0 = 10;n=10;
alfa=1;
% Los pesos se incializan de forma ALEATORIA
% Asegurando que sean diferentes aleatorios para diferentes sesiones de
% MATLAB [ rand('state',sum(100*clock)) ]
rand('state',sum(100*clock));
pesos = 1*(-1 +2.*rand(3,3));
u=1;error=0;errorbuscado=0.1;epoca=0;i=1;
deltas=zeros(3,length(input(:,1)))
delta3_1=0;delta2_1=0;delta2_2=0;
while(u==1)
out = zeros(4,1);
numIn = length (input(:,1));
epoca=epoca+1;
for j = 1:numIn
%-----------------------------------------------------------------------%
CAPA OCULTA
%-----------------------------------------------------------------------net1 = theta(1,1)*pesos(1,1)+ input(j,1)*pesos(1,2)+
input(j,2)*pesos(1,3);
%pesos(1,1)=-W7
%pesos(1,2)=W1
%pesos(1,3)=W4
x2(1) = (1/(1+exp(-alfa*net1))); %sigmoide(net1)
net2 =
theta(1,2)*pesos(2,1)+input(j,1)*pesos(2,2)+input(j,2)*pesos(2,3);
%pesos(2,1)=-W8
%pesos(2,2)=W4
%pesos(2,3)=W2
x2(2) = (1/(1+exp(-alfa*net2))); %sigmoide(net2)
%-----------------------------------------------------------------------%
CAPA SALIDA
%-----------------------------------------------------------------------net3 = alfa*alfa*theta(1,3)*pesos(3,1)+
x2(1)*pesos(3,2)+x2(2)*pesos(3,3);
%pesos(1,3)=-W9
%pesos(2,3)=W5
%pesos(3,3)=W6
out(j) =(1/(1+exp(-alfa*net3))); %sigmoide(net3)=salida red
neuronal
% Ajuste de los incrementos para la capa de salida (net3)
% delta(wi) = xi*delta,
% delta = (1-salida actual)*(target - salida actual)
delta3_1 = alfa*alfa*out(j)*(1-out(j))*(target(j)-out(j));
% Ajuste de los incrementos para las capas ocultas
% El incremento final se obtiene al multiplicar deltas entre capas
% ocultas, y capa de salida (ver derivadas parciales)
delta2_1 = x2(1)*(1-x2(1))*pesos(3,2)*delta3_1;
delta2_2 = x2(2)*(1-x2(2))*pesos(3,3)*delta3_1;
for k = 1:3
if k == 1 % Casos de theta
pesos(1,k) = pesos(1,k) +
pesos(2,k) = pesos(2,k) +
pesos(3,k) = pesos(3,k) +
else % Cuando k=2 o 3, Casos
pesos(1,k) = pesos(1,k) +
pesos(2,k) = pesos(2,k) +
pesos(3,k) = pesos(3,k) +
end
end
n*theta(1,1)*delta2_1;
n*theta(1,2)*delta2_2;
n*theta(1,3)*delta3_1;
de entradas a las neuronas
n*input(j,1)*delta2_1;
n*input(j,2)*delta2_2;
n*x2(k-1)*delta3_1;
end
% Verificacin de cumplimiento de la red neuronal: comparamos el
target
% con el output
for(m=1:4)
error=error+abs(target(m)-out(m))
end
x(epoca)=epoca;
y(epoca)=error;
% Clculo del error
if(error<errorbuscado)
u=0;
break;
else
error=0;
n=n0/(1+(epoca/10000));
end
end
target
out
epoca
plot(x,y)
3.4. Compare la convergencia del algoritmo con otro que use una funcin de transferencia
alternativa.
Cambiaremos la funcin sigma, por la funcin sugerida:
Es necesario considerar que dado que esta funcin es diferente a la funcin sigmoide, y
obviamente, su derivada tambin es diferente, ser necesario modificar algunos parmetros en el
programa original. El programa modificado que se propone es:
clc;clear all;
% entradas compuerta XOR (x1 y x2)
input = [0 0; 0 1; 1 0; 1 1];
% Salidas buscadas en la compuerta XOR (targets)
target = [0;1;1;0];
% Inicializando los thetas (W7, W8 y W9)
theta = [-1 -1 -1];
% Coeficiente de aprendizaje
n0 = 10;n = 0.2;alfa = 1;
% Los pesos se incializan de forma ALEATORIA
% Asegurando que sean diferentes aleatorios para diferentes sesiones de
% MATLAB [ rand('state',sum(100*clock)) ]
rand('state',sum(100*clock));
pesos = 1*(-1 +2.*rand(3,3));
u=1;error=0;errorbuscado=0.2;epoca=0;
while(u==1)
out = zeros(4,1);
numIn = length (input(:,1));
epoca=epoca+1;
for j = 1:numIn
%-----------------------------------------------------------------------%
CAPA OCULTA
%-----------------------------------------------------------------------net1 = theta(1,1)*pesos(1,1)+ input(j,1)*pesos(1,2)+
input(j,2)*pesos(1,3);
%pesos(1,1)=-W7
%pesos(1,2)=W1
%pesos(1,3)=W4
%
x2(1) = (1/(1+exp(-alfa*net1))); %sigmoide(net1)
x2(1) = tanh(net1);
%nueva funcin de activacin
net2 =
theta(1,2)*pesos(2,1)+input(j,1)*pesos(2,2)+input(j,2)*pesos(2,3);
%pesos(2,1)=-W8
%pesos(2,2)=W4
%pesos(2,3)=W2
%
x2(2) = (1/(1+exp(-alfa*net2))); %sigmoide(net2)
x2(2) = tanh(net2);
%nueva funcin de activacin
%-----------------------------------------------------------------------%
CAPA SALIDA
%-----------------------------------------------------------------------net3 = theta(1,3)*pesos(3,1)+ x2(1)*pesos(3,2)+x2(2)*pesos(3,3);
%pesos(1,3)=-W9
%pesos(2,3)=W5
%pesos(3,3)=W6
%
out(j) =(1/(1+exp(-alfa*net3))); %sigmoide(net3)=salida red
neuronal
out(j)=tanh(net3);
%nueva funcin de activacin
%
%
end
% Verificacin de cumplimiento de la red neuronal: comparamos el
target
% con el output
for(m=1:4)
error=error+abs(target(m)-out(m))
end
x(epoca)=epoca;
y(epoca)=error;
% Clculo del error
if(error<errorbuscado)
u=0;
break;
else
error=0;
%n=n0/(1+(epoca/10000));
end
end
target
out
epoca
plot(x,y)
Se han dejado comentadas las lneas que usaban las sigmoides, de manera que se pueda avisorar
en donde se han realizado la modificacin. Se harn tres pruebas para comparar resultados.
Para el primer experimento se obtuvo el siguiente resultado:
Converge?
Si
Si
SI
# epocas
1371
594
292
4. Conclusiones
Como resultado del primer literal de este experimento, se ha corroborado la consistencia y
robustez del algoritmo del perceptrn de dos capas con descenso de gradiente. En tres
experimentos realizados, la convergencia se produjo en las tres ocasiones.
El segundo literal del experimento, demuestra que mejorar el factor de aprendizaje, con
respecto a la poca, optimiza el nmero de pocas, disminuyndola al 10% del nmero
total de pocas del experimento anterior.
El tercer experimento, compara los mtodos on-line y batch-training. Los resultados
muestran que la evolucin en cuanto a pocas es mejor, a pesar de que no se puede
compara entre uno y otro mtodos, debido a la caracterstica aleatoria de los pesos, al
principio del programa.
El ltimo experimento indica que la variacin de la funcin de activacin, conlleva el
modificar al programa como tal. No obstante, los resultados obtenidos son comparables (y
de hecho, mejores en algunos casos) que los resultados obtenidos con la sigmoide como
seal de activacin.