A) Especificamos
que hace la red en cada paso como en el paso anterior, con esta salvedad
Las sinapsis aprenden cuando les decimos que se actualicen y también
que al método aprender le entra una lista de patrones.
Un ejemplo podría se este : un perceptrón
Para cada patrón
- Enviamos el patrón a la capa de entrada.
- Actualizamos las Neuronas de la capa de salida para tener los
resultados predichos
- Les decimos a las sinapsis que unen las capas que se actualicen.
B) La anterior lista de tareas la pasamos a código para actualizar
las sinapsis tenemos la siguiente función.
public void aprenderSinapsis(int
capaOrigen, int capaDestino, double[] parámetros , int numVeces)
donde
int capaOrigen es la capa de donde salen las sinapsis.
int capaDestino es la capa a la que llegan las sinapsis.
double[] parámetros son los posibles parámetros que
le tengamos que pasar a
las sinapsis para que aprenda.
int numVeces si numVeces = 0 se actualizaran todas las sinapsis de
la capa
si es mayor que cero se actualizaran numVeces sinapsis aleatorias
un ejemplo podría ser este perceptrón.
public void Aprender(ListaPatrones
Ps) {
int i=0; int j =0;Patrón p;
while(i<Ps.NumeroPatrones)
{
p= Ps.Patron(i);
//1. Envío al principio y al final los valores de entrada y
de Salida_deseada
CapaEntrada.EnviarPatron(p);
CapaSalida.EnviarSalida(p);
//2. Realizo una ejecución de la red
CapaEntrada.ActualizarSinapsisAdelante();
CapaSalida.ActualizarNeuronas();
//3. Le digo a las sinapsis que se actualicen para ese patrón
i
double[] sinParametros = new double [0];
aprenderAdelante(0,2, sinParametros,0);
i++;
}
}
En este paso
especificaremos como se comportara una sinapsis individual cuando
se le ordene que aprenda, esto es, que actualice su peso.
Consistira en
coger la funcion con la que se actualize los pesos y aplicarsela.
El modo en que
se actualizan las sinapsis, la definimos nosotros mismos en la clase
sinapsis_hija, redefiniendo el método public void Aprender(double
[] parámetros)
Para ello tendremos
una serie de funciones que nos darán todos los datos que necesitemos
como :
public double neuronaEntradaEstado( )
Devuelve el estado de la neurona que llega, que entra, a la sinapsis
public double
neuronaSalidaEstado()
Devuelve el estado de la neurona de sale de la sinapsis
public double
neuronaEntradaSalida()
Devuelve la salida deseada de la neurona que llega, que entra, a la
sinapsis
public double
neuronaSalidaSalida()
Devuelve la salida deseada de la neurona de sale de la sinapsis.
un ejemplo podría ser este que es el método de aprendizaje
del perceptrón
W = W + ( Z-Y)*
X * ? con
x = Salida deseada.
y = Salida tras la actualización.
x = entrada.
W = peso.
? = parámetro de regulación.
public void Aprender(double
[] parámetros){
double X = neuronaEntradaEstado();
double Y = neuronaSalidaSalida();
double Z = neuronaSalidaEstado();
double ? = 0.05;
Peso=Peso + (
Z-Y)* X * ? ;
}