Red neuronal para aprendizaje por descenso de gradiente
1. Página 1
UNIVERSIDAD DE FUERZAS ARMADAS “ESPE”
DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA
ASIGNATURA: CONTROL INTELIGENTE
Actividad No9. Lectura 6
Fecha: Lunes, 28 de Abril del 2014.
Nombre alumno: Evelyn Gabriela Lema Vinueza.
NRC: 2055.
1. Describa en detalle el aprendizaje por descenso de gradiente.
2. Describa el procedimiento para entrenar una red neuronal de una capa.
Para efectuar el aprendizaje por descenso de gradiente se efectúan los siguientes pasos:
1. El propósito del aprendizaje y entrenamiento de una red neuronal es minimizar el
error a la salida en un determinado conjunto de datos de entrenamiento mediante el
ajuste de los pesos de la red.
2. Se define una función de error que mide que tan lejos están la red actualmente de lo
deseado
3. Las derivadas parciales de la función error nos dicen en qué dirección nos debemos
mover en el espacio de pesos para reducir el error.
4. La tasa de aprendizaje especifica los tamaños de pasos que damos en el espacio de
peso para cada interacción en la ecuación de actualización de pesos.
5. Nos mantenemos dando pasos a través del espacio de peso hasta que los errores sean
lo suficientemente pequeños.
6. La actualización de los pesos se vuelve eficiente si escogemos funciones de
activación de la neurona que tengan derivadas de forma simple.
Para efectuar el procedimiento para entrenar una red neuronal se debe efectuar los
siguientes pasos:
1. Tomar el conjunto de patrones de entrenamiento que desee que la red aprenda.
2. Configurar su red neuronal con n unidades de entradas conectadas a n unidades de
salidas mediante conexiones ponderadas.
3. Generar pesos aleatorios en un rango
4. Seleccionar una función de error apropiada y una tasa de aprendizaje n
5. Aplicar una actualización de pesos a cada peso para cada patrón de entrenamiento.
Un conjunto de actualizaciones de todos los pesos para todos los patrones de
entrenamiento se llama una época de entrenamiento.
6. Repetir el paso 5 hasta que la función de error de la red sea suficientemente
pequeña.
2. Página 2
3. Describa el procedimiento para entrenar un perceptrón multicapa
4. Realice un cuadro sinóptico de las consideraciones prácticas para el aprendizaje por
descenso de gradiente.
Para efectuar el procedimiento para entrenar un perceptrón multicapa se debe efectuar los
siguientes pasos:
1. Tomar el conjunto de patrones de entrenamiento que desee que la red aprenda.
2. Configurar su red neuronal con n unidades de entradas conectadas a n unidades
de salidas mediante conexiones ponderadas.
3. Generar pesos aleatorios en un rango
4. Seleccionar una función de error apropiada y una tasa de aprendizaje n
5. Aplicar una actualización de pesos a cada peso para cada patrón de entrenamiento.
Un conjunto de actualizaciones de todos los pesos para todos los patrones de
entrenamiento se llama una época de entrenamiento. Aquí se puede considerar
técnicas como que la implica una retro propagación del error.
6. Repetir el paso 5 hasta que la función de error de la red sea suficientemente
pequeña.
ConsideracionesPrácticaspara
elAprendizaje
¿Necesitamos pre-procesar los datos de
entrenamiento? Si es así, ¿cómo?
¿Cómo elegimos los pesos iniciales de
los cuales empezaremos el
entrenamiento?
¿Cómo elegimos una tasa de
aprendizaje apropiado ?
¿Hay que cambiar los pesos después de
cada patrón de entrenamiento, o
después de todo el conjunto?
¿Son algunas de las funciones de
activación / transferencia mejores que
otras?
¿Cómo podemos evitar puntos planos en
la función de error?
¿Cómo podemos evitar los mínimos
locales en la función de error?
¿Cómo sabemos cuándo debemos parar el
entrenamiento?
3. Página 3
Consideracionesprácticasparael
aprendizajepordescensodegradiente.
Pre- procesamiento de los
datos de entrenamiento
Si se utiliza el entrenamiento on- line en lugar de entrenamiento por paquetes, por lo general debemos asegurarnos de
que cambiar el orden de los datos de entrenamiento de cada época.
Se debe Asegurar que los datos de entrenamiento sean representativos y que no contengan demasiados ejemplos de un
tipo a expensas de otro.
Elección de los pesos
iniciales
Este algoritmo trata a los pesos de la misma manera, por lo que si se tiene los mismos valores de pesos la red acabará
haciendo lo mismo y esta jamás aprenderá. Se debe comenzar todos los pesos con pequeños valores aleatorios.
Los pesos se los toma de una distribución plana en torno a cero [-smwt,+ smwt ] , o de una distribución Gaussiana
alrededor de cero con smwt desviación estándar. La elección de un buen valor de smwt deberá ser tan grande como
sea posible sin saturar cualquiera de los sigmoids
Elección de la tasa de
aprendizaje
Si h es demasiado pequeño, se tardará demasiado tiempo para llegar a cualquier lugar cerca del mínimo de la función de
error.y si h es demasiado grande, los cambios de peso se sobre-disparan el mínimo error y los pesos oscilarán, o incluso
divergirán.
Batch Training vs. On-
line Training
En el aprendizaje en online las actualizaciones de peso individuales pueden ser bastante irregulares.Una patrón de aprendizaje mucho
más bajo h será necesario que para el aprendizaje por paquetes. Debido a que tiene n patrones de actualizaciones por época. Este tipo
de aprendizaje suele ser mucho más rápido.
La elección de la función
de transferencia
Una alternativa conveniente a la función logística es la tangente hiperbólica. Cuando las salidas requeridas son no
binarias, es decir los valores reales continuos con la función de transferencia sigmoide ya no tiene sentido. En este caso,
una simple función de transferencia lineal f (x) = x es apropiada.
Puntos planos en la
función de error
Los cambios de los pesos por descenso de gradiente dependen de la pendiente de la función de error. En consecuencia, si la función de error tiene
puntos planos, el algoritmo de aprendizaje puede tardar mucho tiempo para pasar a través de ellos. Mantener a los pesos iniciales de la red lo
suficientemente pequeños es necesario para que la función no se sature antes del entrenamiento. El Off- setting de la target también tiene el efecto de
detener que los pesos de la red crezcan demasiado.
Mínimo local Si se parte en las proximidades de los mínimos locales, se puede terminar en el mínimo local en lugar del mínimo global. Empezando con un rango
de diferentes conjuntos de pesos iniciales, nosotros aumentamos las posibilidades de encontrar el mínimo global.
Paro del entrenamiento Si el algoritmo de entrenamiento puede en realidad nunca alcanzar el mínimo, se tiene que detener el proceso de formación cuando es
" lo suficientemente cerca". Lo que constituye " lo suficientemente cerca " depende del problema.
4. Página 4
5. Escriba el código para implementar las consideraciones prácticas.
a) Puntos planos en la función de error
Código del Programa:
clear all
in0=1;
in1=[0 1 0 1];
in2=[0 0 1 1];
targ=[0.1 0.9 0.9 0.1];
w1=rand();
w2=rand();
w3=rand();
w4=rand();
w5=rand();
w6=rand();
w7=rand();
w8=rand();
w9=rand();
n=0.1;
alpha=4;
dw1=0;dw2=0;dw3=0;dw4=0;dw5=0;dw6=0;dw7=0;dw8=0;dw9=0;
for j=1:1000
err_T=0;
for i=1:4
net1=in1(i)*w1+in2(i)*w3+in0*w7;
net2= in2(i)*w4+in1(i)*w2+in0*w8;
out1=1/(1+exp(-alpha*net1));
out2=1/(1+exp(-alpha*net2));
net= w5*out1+w6*out2+ in0*w9;
out=1/(1+ exp(-alpha*net) );
D_w1= n*(targ(i)-out)*[alpha*out*(1-out)+0.1]*w5*[alpha*out1*(1-out1)+0.1]*in1(i);
D_w2= n*(targ(i)-out)*[alpha*out*(1-out)+0.1]*w6*[alpha*out2*(1-out2)+0.1]*in1(i);
D_w3= n*(targ(i)-out)*[alpha*out*(1-out)+0.1]*w5*[alpha*out1*(1-out1)+0.1]*in2(i);
D_w4= n*(targ(i)-out)*[alpha*out*(1-out)+0.1]*w6*[alpha*out2*(1-out2)+0.1]*in2(i);
D_w5= n*(targ(i)-out)*[alpha*out*(1-out)+0.1]*out1;
D_w6= n*(targ(i)-out)*[alpha*out*(1-out)+0.1]*out2;
D_w7= n*(targ(i)-out)*[alpha*out*(1-out)+0.1]*w5*[alpha*out1*(1-out1)+0.1]*1;
D_w8= n*(targ(i)-out)*[alpha*out*(1-out)+0.1]*w6*[alpha*out2*(1-out2)+0.1]*1;
D_w9= n*(targ(i)-out)*[alpha*out*(1-out)+0.1];
dw1=dw1+D_w1;
dw2=dw2+D_w2;
dw3=dw3+D_w3;
dw4=dw4+D_w4;
dw5=dw5+D_w5;
dw6=dw6+D_w6;
dw7=dw7+D_w7;
dw8=dw8+D_w8;
dw9=dw9+D_w9;
err_i=(targ(i)-out)^2;
err_T=err_T+err_i;
end
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;
dw1=0;dw2=0;dw3=0;dw4=0;dw5=0;dw6=0;dw7=0;dw8=0;dw9=0;
vector_epocas(j)=j;
vector_err(j)=err_T;
plot(vector_epocas,vector_err);
ylabel('ERROR CUADRATICO')
xlabel('EPOCA')
end
5. Página 5
w11=w1;
w12=w2;
w21=w3;
w22=w4;
lw1=w5;
lw2=w6;
b1=w7;
b2=w8;
b3=w9;
[in11,in22]= meshgrid (0:.01:1,0:.01:1);
alpha=4;
net1a= in11*w11+in22*w21+in0*b1;
net2b= in11*w12+in22*w22+in0*b2;
out1a=1./(1+exp(-alpha*net1a));
out2b=1./(1+exp(-alpha*net2b));
net3c= out1a*lw1+out2b*lw2+in0*b3;
outxr= 1./(1+exp(-alpha*net3c))
figure(9);
out21xr= round (outxr);
subplot(2,1,1);
mesh(in11,in22,outxr);
xlabel('in2');ylabel('in1');zlabel('out')
subplot(2,1,2);
mesh(in11,in22,out21xr);
xlabel('in2');ylabel('in1');zlabel('out')
Curva de aprendizajeFunción de Aprendizaje de la Neurona
Gráfica de las Líneas de Frontera
6. Página 6
b) Uso de la función de activación tanh.
Yo Evelyn Gabriela Lema Vinueza afirmo que esta actividad es de mi autoría y establezco que
para la elaboración de la misma he seguido los lineamientos del Código de Ética de la
Universidad de las Fuerzas Armadas ESPE
Código del Programa:
close all
clear all
in0=1;
in1=[0 1 0 1];
in2=[0 0 1 1];
targ=[-1 1 1 -1];
w1=rand();
w2=rand();
w3=rand();
w4=rand();
w5=rand();
w6=rand();
w7=rand();
w8=rand();
w9=rand();
n=0.1;
alpha=4;
dw1=0;dw2=0;dw3=0;dw4=0;dw5=0;dw6=0;dw7=0;dw8=0;dw9=0;
for j=1:2000
err_T=0;
for i=1:4
net1=in1(i)*w1+in2(i)*w3+in0*w7;
net2= in2(i)*w4+in1(i)*w2+in0*w8;
out1=(2/pi)*tanh(alpha*net1);
out2=(2/pi)*tanh(alpha*net2);
net= w5*out1+w6*out2+ in0*w9;
out=(2/pi)*tanh(alpha*net);
D_w1= n*(targ(i)-out)*[1-out*out+0.1]*w5*[1-out1*out1+0.1]*in1(i);
D_w2= n*(targ(i)-out)*[1-out*out+0.1]*w6*[1-out2*out2+0.1]*in1(i);
D_w3= n*(targ(i)-out)*[1-out*out+0.1]*w5*[1-out1*out1+0.1]*in2(i);
D_w4= n*(targ(i)-out)*[1-out*out+0.1]*w6*[1-out2*out2+0.1]*in2(i);
D_w5= n*(targ(i)-out)*[1-out*out+0.1]*out1;
D_w6= n*(targ(i)-out)*[1-out*out+0.1]*out2;
D_w7= n*(targ(i)-out)*[1-out*out+0.1]*w5*[1-out1*out1+0.1]*1;
D_w8= n*(targ(i)-out)*[1-out*out+0.1]*w6*[1-out2*out2+0.1]*1;
D_w9= n*(targ(i)-out)*[1-out*out+0.1];
dw1=dw1+D_w1;
dw2=dw2+D_w2;
dw3=dw3+D_w3;
dw4=dw4+D_w4;
dw5=dw5+D_w5;
dw6=dw6+D_w6;
dw7=dw7+D_w7;
dw8=dw8+D_w8;
dw9=dw9+D_w9;
err_i=(targ(i)-out)^2;
err_T=err_T+err_i;
end
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;
dw1=0;dw2=0;dw3=0;dw4=0;dw5=0;dw6=0;dw7=0;dw8=0;dw9=0;
vector_epocas(j)=j;
vector_err(j)=err_T;
plot(vector_epocas,vector_err);
ylabel('ERROR CUADRATICO')
xlabel('EPOCA')
end
w11=w1;
w12=w2;
w21=w3;
w22=w4;
7. Página 7
Página 7
w21=w3;
w22=w4;
lw1=w5;
lw2=w6;
b1=w7;
b2=w8;
b3=w9;
[in11,in22]= meshgrid (0:.005:1,0:.005:1);
net1a= in11*w11+in22*w21+in0*b1;
net2b= in11*w12+in22*w22+in0*b2;
out1a=(2/pi)*tanh(alpha*net1a)
out2b=(2/pi)*tanh(alpha*net2b)
net3c= out1a*lw1+out2b*lw2+in0*b3;
outxr=(2/pi)*tanh(alpha*net3c)
figure(9);
out21xr= round (outxr);
subplot(2,1,1);
mesh(in11,in22,outxr);
xlabel('in2')
ylabel('in1')
zlabel('out')
subplot(2,1,2);
mesh(in11,in22,out21xr);
xlabel('in2')
ylabel('in1')
zlabel('out')
Función de Aprendizaje de la Neurona
Gráfica de la Líenas de Frontera
8. Página 8
Yo Evelyn Gabriela Lema Vinueza afirmo que esta actividad es de mi autoría y establezco que para
la elaboración de la misma he seguido los lineamientos del Código de Ética de la Universidad de las
Fuerzas Armadas ESPE