2011-09-20 13 views
6

después de leer algunos artículos sobre la red neuronal (propagación de retorno) intento escribir una red neuronal simple por mi cuenta.propagación de la red neuronal, error en el entrenamiento

ive XOR red neuronal decidió, mi problema es cuando estoy tratando de entrenar a la red, si yo uso sólo un ejemplo para entrenar la red, que permite decir 1,1,0 (como INPUT1, INPUT2, targetOutput) después de 500 trenes + - la red responde 0.05. pero si estoy tratando más de un ejemplo (digamos 2 diferentes o todas las 4 posibilidades) la red apunta a 0.5 como salida :( busqué en google mis errores sin resultados: S intentaré dar todos los detalles como pueda para ayudar a encontrar lo malo:

.

redes tratado -ive con 2,2,1 y 2,4,1 (inputlayer, hiddenlayer, outputlayer)

-la salida para cada neuronal definido por:

double input = 0.0; 
     for (int n = 0; n < layers[i].Count; n++) 
      input += layers[i][n].Output * weights[n]; 

mientras que 'i' es la capa y el peso actuales son todos los pesos del anterior capa ous.

, la última capa (capa de salida) de error es definido por:

value*(1-value)*(targetvalue-value); 

mientras que el 'valor' es la salida neural y 'targetvalue' es la salida de destino para el neural actual.

-el error para los demás neurales definen por:

foreach neural in the nextlayer 
      sum+=neural.value*currentneural.weights[neural]; 

-todos los pesos de la red se adaptan por esta fórmula (el peso de neural -> neural 2)

weight+=LearnRate*neural.myvalue*neural2.error; 

mientras que LearnRate es la tasa de aprendizaje de nework (definida 0.25 en mi red). biasweight -la para cada neural se define por:

bias+=LearnRate*neural.myerror*neural.Bias; 

sesgo es valor const = 1.

que más o menos todo lo que puedo detalle, como he dicho, el objetivo salida sea 0,5 con diferentes ejemplos de entrenamiento :(

muchas gracias mucho por su ayuda^_ ^.

+2

¿Ha escrito su propia implementación o está utilizando un marco? –

+0

Es muy gracioso que no haya podido responder a su pregunta después de haber sido protegido :) – PythEch

Respuesta

1

Es es difícil saber dónde está el error sin ver el código completo. Una cosa que debe verificar cuidadosamente es que su cálculo del gradiente de error local para cada unidad coincide con la función de activación que está utilizando en esa capa. Mire aquí la fórmula general : http://www.learnartificialneuralnetworks.com/backpropagation.html.

Por ejemplo, th El cálculo que hace para la capa de salida supone que está utilizando una función de activación sigmoidea logística, pero no lo menciona en el código anterior, por lo que parece que está utilizando una función de activación lineal.

En principio, una red 2-2-1 debería ser suficiente para aprender XOR aunque el entrenamiento en algún momento quedará atrapado en un mínimo local sin poder converger al estado correcto. Por lo tanto, es importante no sacar conclusiones sobre el rendimiento de su algoritmo a partir de una sola sesión de entrenamiento.Tenga en cuenta que backprog simple está destinado a ser lento, hay soluciones más rápidas y más robustas como Rprop, por ejemplo.

Hay libros sobre el tema que proporcionan cálculos detallados paso a paso para una red simple (por ejemplo, 'A.I .: Una guía de sistemas inteligentes' de Negnevitsky), esto podría ayudarlo a depurar su algoritmo. Una alternativa sería utilizar un marco existente (por ejemplo, Encog, FANN, Matlab) configurar exactamente la misma topología y pesos iniciales y comparar el cálculo con su propia implementación.

Cuestiones relacionadas