Introducción Redes Neuronales ArtificialesMFM
Introducción Redes Neuronales ArtificialesMFM
Introducción Redes Neuronales ArtificialesMFM
transferencia pueden ser una funcin lineal (purelin) [-, +], base radial
Los mtodos de tipo gradiente calculan la variacin del error al variar cada uno
de los parmetros (a modo de derivada multidimensional), y luego modifican
2
Ambos mtodos son mtodos iterativos, que se repiten hasta cumplir alguno de los
diferentes criterios de parada. Algunos ejemplos de los criterios de parada son el
nmero de iteraciones, la obtencin de un error mnimo, o un tiempo de ejecucin. En
cualquier caso, generalmente es difcil asegurar que la solucin obtenida no es un
mnimo local.
Sobreaprendizaje
Figura 3 Aproximacin de la funcin seno. Con y sin sobreaprendizaje. Datos con ruido.
Early-stopping
A partir del empleo de la divisin de datos en los grupos mencionados, es posible
aplicar una tcnica de evitar el sobreaprendizaje: early-stopping. Durante el proceso
iterativo de optimizacin de los parmetros de la red, se comparan los errores
obtenidos con los datos de entrenamiento y con los datos de validacin. En el caso
de que durante sucesivas iteraciones, el error con los datos de entrenamientos
disminuya, mientras que el error con los datos de validacin aumente, se detiene el
proceso de ajuste, como un criterio de parada adicional.
Regularizacin
Otras tcnicas para evitar el sobreaprendizaje consisten en la aplicacin del principio
de parsimonia o navaja de Ockham, por el cual a igualdad de condiciones, la
explicacin ms simple es la correcta. La regularizacin consiste en agregar el
sumatorio ponderado de los pesos de la red a la funcin de coste, de modo que para
un mismo error similar de dos redes neuronales, aquella que tiene valores de los
pesos menores es mejor.
1 N
1 N
2
2
ei t i ai
N i1
N i1
2
1 n
MSW w j
n j1
2N
PSE MSE 1
Nn
El dimensionamiento de una red neuronal feed-forward con una capa oculta para la
aproximacin de una funcin, consiste en la eleccin del nmero de neuronas de la
capa oculta. Un posible criterio es el de dimensionar la red en funcin del nmero de
datos disponibles, de modo que el nmero de parmetros de la red sea una fraccin
del total de datos disponibles. Si los datos disponibles se encuentran distribuidos
uniformemente, se puede tomar, por ejemplo, un tamao de red tal que el nmero de
datos sea de aproximadamente diez veces el nmero de parmetros de la red
neuronal (grados de libertad de la red).
1
0.9
0.8
0.7
MSE
0.6
0.5
0.4
0.3
0.2
0.1
0
N Neuronas
Simulacin
Cc=14.5
Cc=15.0
10.00
Cc=15.5
Cc=16.0
Cc=16.5
1.00
5
9 Hs(m)
El error de una red neuronal tendr las mismas unidades que los valores de la salida
de la red. Un modo de adimensionalizar el error, consiste en emplear el error
cuadrtico medio relativo (RMSE) como error.
1 N
1 N
2
2
MSE ei t i ai
N i1
N i1
MSE
MSE
RMSE
2
N
2
1
t
ti t
N i1
7
Ventajas
1. Robustez frente al ruido en datos de entrada y salida
2. Independencia entre complejidad del problema y dimensionamiento de la red
3. Rapidez de ajuste y simulacin
4. Laboratorio virtual, curvas de diseo o dimensionamiento
Desventajas
1. Mnimos locales
2. Sobreaprendizaje o prdida de generalizacin
3. Criterios de dimensionamiento de la red neuronal arbitrarios
4. Comportamiento de caja negra
5. La inicializacin aleatoria de los pesos y bias, y la divisin aleatoria de datos en
entrenamiento, validacin y test, dan lugar a soluciones diferentes (relacionado
con los mnimos locales)
6. No permiten la extrapolacin
Referencias
http://www.mathworks.com/access/helpdesk/help/pdf_doc/nnet/nnet.pdf
MATLAB Neural Network Toolbox
Wikipedia: http://es.wikipedia.org/wiki/Red_neuronal_artificial
%
Generacion de los datos de la red
% --------------------------------------------% Numero de datos
clear; clc;
N = 1000;
% Variables
x = rand(1,N)*4-2; % x:[-2 2]
y = rand(1,N)*4;
% y:[ 0 4]
r = randn(1,N)*0.01; % Ruido de desv.tip. 0.01
% Funcion a aproximar
a=2; b=1; c=3; d=0;
z = a*x.^2+b*y+c+r; %Para incluir ruido
f = [num2str(a) '*x.^2+' num2str(b) '*y+' num2str(c)];
% Preparacion de los datos para la red neuronal
% --------------------------------------------ptotal = [x; y];
ttotal = [z];
N = size(ptotal,2);
% Porcentajes en los que dividimos los datos (Han de sumar 1 y no pueden ser 0)
prob_entr = 0.8;
prob_vali = 0.1;
prob_test = 0.1;
N_entr = floor(N*prob_entr);
N_vali = floor(N*prob_vali);
N_test = N - N_entr - N_vali;
% Separacion de los datos en entrenamiento, validacion y test
entr_P = []; entr_T = []; vali_P = []; vali_T = []; test_P = []; test_T = [];
VPerm=randperm(N);
entr_P=ptotal(:,VPerm(1:N_entr));
entr_T=ttotal(:,VPerm(1:N_entr));
vali_P=ptotal(:,VPerm(N_entr+1:N_entr+N_vali));
vali_T=ttotal(:,VPerm(N_entr+1:N_entr+N_vali));
test_P=ptotal(:,VPerm(N_entr+N_vali+1:N));
test_T=ttotal(:,VPerm(N_entr+N_vali+1:N));
% Estandarizacion
% --------------------------------------------[pstd, coefp] = mapstd(entr_P);
[tstd, coeft] = mapstd(entr_T);
valistd.P = mapstd('apply',vali_P,coefp);
valistd.T = mapstd('apply',vali_T,coeft);
teststd.P = mapstd('apply',test_P,coefp);
teststd.T = mapstd('apply',test_T,coeft);
% Creacion de la red
% --------------------------------------------nocultas=3;
nentrada = size(ptotal,1);
nsalida = size(ttotal,1);
net =
newff(pstd,tstd,[nocultas,nsalida],{'tansig','purelin'},'trainlm','learngdm','mse');
net.trainParam.show=100;
net.trainParam.goal=10^(-8);
net.trainParam.epochs=100;
net.trainParam.min_grad=10^(-6);
% Inicializacion de la red
% --------------------------------------------net = init(net);
% Entrenamiento de la red y calculo del PSE
% --------------------------------------------[net,tr,Y,E] = train(net,pstd,tstd,[],[],valistd,teststd);
NPar =
size(net.IW{1,1},1)*size(net.IW{1,1},2)+size(net.b{1,1},1)+size(net.b{2,1},1)+size(net.L
W{2,1},1)*size(net.LW{2,1},2);
NPar2 = nentrada*nocultas+nocultas+nocultas*nsalida+nsalida;
astd = sim(net,pstd);
MSE = mean((astd-tstd).^2)
RMSE = MSE/var(tstd)
PSE(nocultas) = MSE*(1+2*NPar/(N-NPar));
% Validacion cruzada
% --------------------------------------------an = sim(net,mapstd('apply',ptotal,coefp));
a = mapstd('reverse',an,coeft);
postreg(a,ttotal);
% Matrices de pesos y sesgo (entradas y salidas estandarizadas)
% ------------------------------------------------------------net.IW{1,1}
net.b{1,1}
net.LW{2,1}
net.b{2,1}
% Representacion grafica de f
% --------------------------------------------figure('Name',['Funcion a aproximar -> f=' f]); hold on;
ezsurf(f,[-4,4,-4,4]); view(3); hold on;
% Representacion sobre la superficie de los datos empleados
% ---------------------------------------------------------plot3(entr_P(1,:),entr_P(2,:),mapstd('reverse',sim(net,mapstd('apply',entr_P,coefp)),coe
ft),'.r');
plot3(vali_P(1,:),vali_P(2,:),mapstd('reverse',sim(net,mapstd('apply',vali_P,coefp)),coe
ft),'.b');
plot3(test_P(1,:),test_P(2,:),mapstd('reverse',sim(net,mapstd('apply',test_P,coefp)),coe
ft),'.g');
% Representacion sobre la superficie de datos fuera de rango
% ---------------------------------------------------------x2 = rand(1,N)*10-5;
% x2:[-5 5]
y2 = rand(1,N)*10-5;
% y2:[-5 5]
plot3(x2,y2,mapstd('reverse',sim(net,mapstd('apply',[x2;y2],coefp)),coeft),'.k');
10