martes, 23 de agosto de 2011

REDES NEURONALES ARTIFICIALES

REDES NEURONALES ARTIFICIALES

Algoritmo de aprendizaje supervisado BACK PROPAGATION

Función de activación tipo sigmoide

// CÁLCULO DE LAS SALIDAS y[k][j] DE LAS NEURONAS DE LA RED EN FUNCIÓN DE LAS ENTRADAS y[0][j] A LA RED

// N - número de capas de neuronas de la red
// L[k] - número de neuronas de la capa k
// a[k][j] - suma ponderada por pesos de las entradas de la neurona j de la capa k
// w[k][i][j] - peso entre la neurona i de la capa (k-1) y la neurona j de la capa k
// y[k][j] - salida de la neurona j de la capa k

for(k = 1; k <= N; k++) { // recorre capas
for(j = 1; j <= L[k]; j++) { // recorre neuronas de la capa
a[k][j] = 0;
for(i = 1; i <= L[k-1]; i++) { // recorre entradas de la neurona
a[k][j] = a[k][j] + w[k][i][j]*y[k-1][i];
}
y[k][j] = 1.0/(1.0+exp(-a[k][j]));
}
}

// SOLO DURANTE ENTRENAMIENTO: CÁLCULO DE DELTA PARA CADA NEURONA DESDE LA CAPA DE SALIDA (k=N) HASTA LA CAPA k=1 EN FUNCIÓN DE LAS SALIDAS DESEADAS

// delta[k][j] - delta de la neurona j de la capa k
// d[j] - salida deseada (a aprender) para la neurona j de la capa de salida (k=N)

// Para la última capa
for(j = 1; j <= L[N]; j++) { // recorre neuronas de la última capa (k=N)
delta[N][j] = 2*(y[N][j]-d[j]);
}

// Para el resto de capas, desde k=(N-1) hasta k=1
for(k = N-1; k >= 1; k--) { // recorre capas
for(j = 1; j <= L[k]; j++) { // recorre neuronas de la capa
delta[k][j] = 0;
for(i = 1; i <= L[k+1]; i++) { // recorre neuronas de la capa siguiente
delta[k][j] = delta[k][j] + delta[k+1][i]*y[k+1][i]*(1-y[k+1][i])*w[k+1][j][i];
}
}
}

// SOLO DURANTE ENTRENAMIENTO: ACTUALIZACIÓN DE PESOS

for(k = 1; k <= N; k++) { // recorre capas
for(j = 1; j <= L[k]; j++) { // recorre neuronas de la capa
for(i = 1; i <= L[k-1]; i++) { // recorre pesos de la neurona
w[k][i][j] = w[k][i][j]-eta*delta[k][j]*y[k][j]*(1-y[k][j])*y[k-1][i];
}
}
}

En fichero pdf

Basado en
http://insn.die.upm.es/docs/capitulo22-RedesNeuronales.pdf

Si tratamos de buscar semejanzas con el sistema nervioso, cada peso en el sistema nervioso sería algo parecido a las características de la sinapsis y las neuritas presináptica y postsináptica.

La repetición para maximizar la "satisfacción" es lo que provoca el aprendizaje en el sistema nervioso. El mayor o menor tránsito de potenciales de acción cambia las propiedades eléctricas de las sinapsis y las neuronas.

La "satisfacción" sería la medida del error, pero el ajuste de pesos en el sistema nervioso viene dado por el mayor o menor tránsito de potenciales de acción.

¿Es eso?

Obviamente el algoritmo de las neuronas artificiales no nos sirve. Buscamos la equivalencia para poder "resucitar" muertos.

NOTA: He actualizado el algoritmo para que esté en formato C/C++.

No hay comentarios:

Publicar un comentario en la entrada

Nota: solo los miembros de este blog pueden publicar comentarios.