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
Nota: solo los miembros de este blog pueden publicar comentarios.