UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO CENTRO UNIVERSITARIO UAEM “ATLACOMULCO” REPORTE DE INVESTIGACIÓN BACK PROPAGATION INTEGRANTES: CARLOS MARTÍNEZ LÓPEZ JOSÉ ALBERTO CRUZ CASTRO JOSÉ CARLOS SECUNDINO MACEDONIO 28 DE NOVIEMBRE DEL 2014 1 ÍNDICE CAPITULO 1 INTRODUCCIÓN…………………………………………………………………… 3 ALGORITMO…………………………………………………………………….……4 ESTRUCTURA………………………………………………………………….……5 GRADIENTE DESCENDENTE……………………………………………………..7 DERIVADA DE LA FUNCIÓN SIGMOIDAL….……………………………………9 ACTUALIZACIÓN DE PESOS….……………………………………………….….10 ACCELERATION AND STABILIZACION OF SUPERVISED GRADIENT TRAINING OF MLPS. AUTOR:NGUYEN-WIDROW……………………………11 INICIALIZACIÓN DE NGUYEN-WIDROW………………………………………. 12 TASA DE APRENDIZAJE Y FACTOR MOMENTO……………………….……. 13 SESGO………………………………………………………………………….…… 16 CAPÍTULO 2 BACKPROPAGATION………………………………………………………………17 CÓDIGO DEL PROGRAMA…………………………………………………...……18 COMENTARIOS……………………………………………………………………...23 REFERENCIAS……………………………………………………………………... 25 2 ÍNTRODUCCIÓN La Backpropagation es una red de tipo de aprendizaje supervisado, que emplea un ciclo propagation-adaptacion de dos fases. Una vez que se ha aplicado un patrón a la entrada de la red como estímulo se propaga desde la primera capa a través de las capas superiores de la red. (3,4,2,8) La regla de aprendizaje del Perceptrón de Rosenblatt y el algoritmo LMS de Widrow y Hoff fueron diseñados para entrenar redes de una sola capa. Estas redes tienen la desventaja que solo pueden resolver problemas linealmente separables, fue esto lo que llevo al surgimiento de las redes multicapa para sobrepasar esta dificultad en las redes hasta entonces conocidas. (3,4,8,14) El primer algoritmo de entrenamiento para redes multicapa fue desarrollado por Paul Werbos en 1974, este se desarrolló en un contexto general, para cualquier tipo de redes, siendo las redes neuronales una aplicación especial, razón por la cual el algoritmo no fue aceptado dentro de la comunidad de desarrolladores de redes neuronales. Fue solo hasta mediados de los años 80 cuando el algoritmo Backpropagation o algoritmo de propagación inversa fue redescubierto al mismo tiempo por varios investigadores, David Rumelhart, Geoffrey Hinton y Ronal Williams, David Parker y Yann Le Cun. El algoritmo se popularizó cuando fue incluido en el libro "Parallel Distributed Processing Group" por los psicólogos David Rumelhart y James McClelland. La publicación de este libro trajo consigo un auge en las investigaciones con redes neuronales, siendo la Backpropagation una de las redes más ampliamente empleadas, aun en nuestros días. (4,2,3,9) La red Backpropagation tiende a desarrollar relaciones internas entre neuronas con el fin de organizar los datos de entrenamiento entre clases. Esta tendencia se puede utilizar para llegar a la hipótesis que consiste en que todas las unidades de la capa oculta de una red Backpropagation son asociadas de alguna manera a 3 características específicas del patrón de entrada como consecuencia del entrenamiento. (5,1,1,5) ALGORITMO Paso 0. Inicializar pesos y bias. Paso 1. Paso 2. Para cada patrón de entrenamiento, hacer Pasos 3-8 Propagación hacia delante: Paso 3. Hacer la activación de cada neurona de entrada Xi (i=1…n) igual al atributo i del patrón. Enviar esta señal a cada neurona oculta. Paso 4. Cada neurona oculta Zj (j=1…p) suma cada una de sus entradas pesadas: y luego computa su activación: Finalmente, envía esta señal a cada neurona de salida. Paso 5.Cada neurona de salida Yk (k=1…m) suma sus entradas pesadas: y luego computa su señal de salida: Retropropagación del error: Paso 6. Cada neurona de salida Yk (k=1…m) recibe un patrón objetivo correspondiente al patrón de entrada, y computa el término de error: a continuación, calcula el término de corrección de peso (que se usará más tarde para cambiar wjk): y su término de corrección de bias (que se usará para cambiar w0k más tarde): Finalmente, envía a todas las neuronas de la capa oculta. Paso 7.Cada neurona oculta Zj (j=1…p) suma sus deltas recibidas de la capa de salida. A continuación, multiplica este término por la derivada de la activación para calcular el término de error: Después calcula el término de corrección de peso (que se usará más tarde para cambiar vij): y su término de corrección de bias (que se usará para cambiar v0j más tarde): Cambio de pesos y bias: Paso 8. Cada neurona de salida Yk (k=1…m) cambia todos sus pesos y bias (j=0…p): Cada neurona oculta Zj (j=1…p) cambia todos sus pesos y bias (i=0…n): 4 Paso 9.Chequeo de la condición de parada. Si se cumple, poner el flag Parar a verdadero. (2,2,4,13) (2,3,1,10) ESTRUCTURA Neurona con una entrada w Y= r ( x + w ) Neurona con entrada y bias Ɵ Neurona con múltiples entradas W1 X1 XX22 W2 Ʃ σ y W3 X3 y = σ (w1 x1 w2 x2 +w3 x3 + Ɵ) Red Neuronal 5 ℓ XJ= Entrada al nodo j de la capa ℓ ℓ Wij= Peso de la capa ℓ-1 del nodo i a la capa ℓ del nodo j 1 r(x)=1+𝑒−𝑥 Función de transferencia sigmoidal ℓ Ɵ j = Bias del nodo j de la capa ℓ ℓ Ɵ j = Salida del nodo j de la capa ℓ tj= Valor objetivodel nodo j de la capa de salida El error 1 E= 2 Ʃ(oj – tj)2 𝜕𝐸 𝜕𝑤𝑗𝑘 es el cambio del error cuando el peso wjk cambia Wjk= Peso de la capa de salida del nodo K a la capa ℓ del nodo j Ok= Salida del nodo k de la capa de salida Xk = Entrada del nodo k de la capa de salida igual a oj. Por el peso wjk Xk= wjk*oj Oj = r (wij*xj) Por lo tanto xk= wjk ( r ( wij * xj ) ) 6 GRADIENTE DESCENDENTE El método del gradiente descendente se basa en buscar la dirección en la que una pequeña variación del vector de pesos hace que el error decrezca más rápidamente. Para encontrar esta dirección usamos la que nos marca el gradiente de la función de error con respecto al vector de pesos. E E E E ( w) , ,..., wn wo w1 Para llegar a comprenderlo mejor veamos la siguiente figura en la que se representa el hiperplano resultante de la evaluación de una función de error dependiente de un vector de pesos bidimensional. Resultante de la evaluación de una función de error. La flecha nos indica la dirección en la cual pequeñas variaciones en los pesos producen las mayores variaciones en la función de error, que es la misma dirección que la que indica el gradiente de la función de error con respecto del vector de pesos. Así la actualización de los pesos para el método del gradiente descendente quedaría de la siguiente manera: w w w w E (w) 7 El algoritmo del gradiente descendente es el siguiente: GRADIENTE_DESCENDENTE () - Inicializar cada peso a un valor aleatorio. - Repetir hasta que se cumpla la condición de terminación: o Inicializar cada wi a cero. o Para cada ejemplo de entrenamiento hacer: Calcular la salida que ofrece la red wi (t o) xi Para cada peso wi hacer: wi wi wi o Para cada peso wi hacer: FIN GRADIENTE_DESCENDENTE 8 DERIVADA DE LA FUNCIÓN SIGMOIDAL σ(x) = funcionsigmoidal = = 𝑒 −𝑥 (1 + 𝑒 −𝑥 )2 = 1 + e−x − 1 (1 + e−x )2 d 1 ( ) dx 1 + e−x = 1 + e−x 1 − (1 + e−x )2 (1 + e−x )2 = 1 1 −( )2 −x (1 + e ) 1 + e−x = 𝜎(𝑋) − 𝜎(𝑋)2 σ′ = σ(1 − σ) 9 ACTUALIZACIÓN DE PESOS La primera regla para realizar la actualización de pesos en una red neuronal se le conoce como la regla del perceptron o también el procedimiento de convergencia del perceptron esta primera regla modifica Wc de acuerdo al algoritmo básico de la regla del perceptron. (6,4,1,5) 𝐸 Wk+1 = Wk + 0 ( 2 ) Xk Desarrollando por Rosembler Esta regla actualiza Wk solo si el error es diferente de cero. El valor de entrada es W k el nuevo vector de peso W k+1 y a es la tasa de aprendizaje de la red. (6,4,5,6) Maxs. Desarrollo su algoritmo adaptativo para redes neuronales las cuales son una versión mas general de la regla del perceptron. Esta regla es también llamada de momento adaptativo o algoritmo de Mays. Donde Wk es menor a dk-1/k siendo “d” la respuesta deseada y “y” la salida de la red por lo general la “y” es un valor pequeño y si vale 0 el algoritmo uno de Mays se convierte en la regla del perceptron. (6,4,6,6) 10 ACCELERATION AND STABILIZACION OF SUPERVISED GRADIENT TRAINING OF MLPS AUTOR : Nguyen-Widrow La regla de aprendizaje del Perceptrón de Rosenblatt y el algoritmo LMS de Widrow y Hoff fueron diseñados para entrenar redes de una sola capa. Estas redes solo pueden resolver problemas linealmente separables. Una red multicapa, en cambio, podría potencialmente solucionar este problema. Backpropagation es un algoritmo de aprendizaje supervisado para redes multicapa que utiliza un ciclo propagación – adaptación de dos fases: (1,1,2,6) 1. Propagación hacia delante: Se aplica un patrón a la entrada de la red como estímulo y se propaga desde la primera capa a través de las capas superiores de la red, hasta generar una salida. (1,1,2,6) 2. Retro propagación de los errores: A continuación, la señal de salida se compara con la salida deseada y se calcula una señal de error para cada una de las salidas. Las salidas de error se propagan hacia atrás, partiendo de la capa de salida, hacia todas las neuronas de la capa oculta que contribuyen directamente a la salida. Sin embargo las neuronas de la capa oculta solo reciben una fracción de la señal total del error, basándose aproximadamente en la contribución relativa que haya aportado cada neurona a la salida original. Este proceso se repite, capa por capa, hasta que todas las neuronas de la red hayan recibido una señal de error que describa su contribución relativa al error total. Basándose en la señal de error percibida, se actualizan los pesos de conexión de cada neurona, para hacer que la red converja hacia un estado que permita clasificar correctamente todos los patrones de entrenamiento. (1,2,1,5) La importancia de este proceso consiste en que, a medida que se entrena la red, las neuronas de las capas intermedias se organizan a sí mismas de tal modo que las distintas neuronas aprenden a reconocer distintas características del espacio 11 total de entrada. Después del entrenamiento, cuando se les presente un patrón arbitrario de entrada que contenga ruido o que esté incompleto, las neuronas de la capa oculta de la red responderán con una salida activa si la nueva entrada contiene un patrón que se asemeje a aquella característica que las neuronas individuales hayan aprendido a reconocer durante su entrenamiento. Y a la inversa, las unidades de las capas ocultas tienen una tendencia a inhibir su salida si el patrón de entrada no contiene la característica para reconocer, para la cual han sido entrenadas. (1,1,5,10) Inicialización de la Red La elección de los pesos y bias iniciales influirá en si la red llega al óptimo global o no, y cómo de rápido converge. En la fase de aprendizaje, el cambio en el peso de la neurona A a la B depende de la derivada de la función de activación de B, y de la activación de A. Por este motivo es importante evitar pesos iniciales que hagan próxima a cero las activaciones o sus derivadas. De esta forma, los pesos y bias iniciales no deben ser muy grandes (para evitar que las neuronas se saturen y por tanto su derivada sea 0), ni muy bajas (para evitar que las activaciones sean próximas a 0).Inicialización Aleatoria. Esta estrategia consiste en elegir todos los pesos y bias de manera aleatoria entre -0.5 y 0.5 (o entre -1 y 1). (1,2,3,5) INICIALIZACIÓN DE NGUYEN-WIDROW Esta estrategia sirve para inicializar los pesos vij (entre neuronas de entrada y neuronas ocultas), y se puede utilizar cuando la función de activación de las neuronas ocultas es la sigmoide bipolar. Este método busca optimizar la velocidad de aprendizaje de las neuronas ocultas. (2,1,1,4) 12 El algoritmo es el siguiente: 1. Calcular (recordar que n es el número de neuronas de entrada, y p el número de neuronas ocultas). 2. Para cada neurona oculta j, calcular el peso preliminar vij (prel) para todas sus conexiones con las neuronas de entrada i. Cada vij (prel) se elige aleatoriamente en el intervalo [-0.5, 0.5] 3. Computar 4. Inicializar cada peso: 5. Inicializar el bias con un valor escogido aleatoriamente en el intervalo. (4,2,6,14) Función de Activación La función de activación en una red de red de retropropagación debe cumplir varias cosas: 1. Debe ser continua 2. Debe ser diferenciable (y a ser posible, esta derivada debe ser fácil de calcular) 3. Debe ser monotónica no decreciente. Una de las funciones de activación típicas es la función sigmoidal binaria: Como se puede observar, su rango es (0,1). Además se puede demostrar fácilmente que su derivada respecto a x. (2,2,2,4) TASA DE APRENDIZAJE Y FACTOR MOMENTO El valor de la tasa de aprendizaje (η) controla el tamaño del cambio de los pesos en cada iteración. Se deben evitar dos extremos: un ritmo de aprendizaje demasiado pequeño puede ocasionar una disminución importante en la velocidad de convergencia y la posibilidad de acabar atrapado en un mínimo local; en cambio, un ritmo de aprendizaje demasiado grande puede conducir a inestabilidades en la función de error, lo cual evitará que se produzca la convergencia debido a que se darán saltos en torno al mínimo sin alcanzarlo. 13 Por tanto, se recomienda elegir un ritmo de aprendizaje lo más grande posible sin que provoque grandes oscilaciones. En general, el valor de la tasa de aprendizaje suele estar comprendida entre 0.05 y 0.5. El factor momento (α) acelera la convergencia de los pesos. Suele tomar un valor próximo a 1 (por ejemplo, 0.9). Función de activación de las neuronas ocultas y de salida (4,1,3,14) Hay dos formas básicas que cumplen esta condición: la función lineal (o identidad) y la función sigmoidal (logística o tangente hiperbólica). 14 Para aprovechar la capacidad de las NN de aprender relaciones complejas o no lineales entre variables, se recomienda la utilización de funciones no lineales al menos en las neuronas de la capa oculta. Por tanto, en general se utilizará una función sigmoidal (logística o tangente hiperbólica) como función de activación en las neuronas de la capa oculta. La elección de la función de activación en las neuronas de la capa de salida dependerá del tipo de tarea impuesto. En tareas de clasificación, las neuronas normalmente toman la función de activación sigmoidal. En cambio, en tareas de predicción o aproximación de una función, generalmente las neuronas toman la función de activación lineal. (4,1,14,24) 15 SESGO El análisis sesgo-varianza es una herramienta fundamental para comprender el comportamiento de cualquier algoritmo de estimación. Dicho análisis resulta una técnica natural en el problema de regresión con pérdida cuadrática debido a las propiedades de esta pérdida. (1,2,1,4) En relación con el problema de clasificación con pérdida 0-1, se han propuesto diferentes descomposiciones del error de predicción tratando de emular la descomposición sesgo-varianza del problema de regresión mínimo cuadrática. El sesgo tiene la función de hacer que el resultado varié, que este mismo comience a acercarse más a cualquiera de los patrones de entrada que se necesiten separar hablamos de el sesgo como la varianza en cada red neuronal, este mismo provocara que la línea que grafica el resultado sea elevada conforme a los valores del bías haciendo el deslizamiento de esta misma sobre el eje de las “y”, o moviéndose por cada uno de los cuadrantes dados los valores de las ordenadas que el resultado maneje, Un nombre con el cual es más conocido es por el bias este mismo desempeñando un rol principal dentro de una red neuronal logrando este efecto en la salida así como colaborando para que este resultado sea favorable. (1,4,4,15) La importancia de este proceso consiste en que, a medida que se entrena la red, las neuronas de las capas intermedias se organizan a sí mismas de tal modo que las distintas neuronas aprenden a reconocer distintas características del espacio total de entrada. Después del entrenamiento, cuando se les presente un patrón. Arbitrario de entrada que contenga ruido o que esté incompleto, las neuronas de la capa oculta de la red responderán con una salida activa si la nueva entrada contiene un patrón que se asemeje a aquella característica que las neuronas individuales hayan aprendido a reconocer durante su entrenamiento. Y a la inversa, las unidades de las capas ocultas tienen una tendencia a inhibir su salida 16 si el patrón de entrada no contiene la característica para reconocer, para la cual han sido entrenadas. (2,1,9,15) BACKPROPAGATION Esta red aprovecha la naturaleza paralela de las redes neuronales para reducir el tiempo requerido en el procesador secuencial y así determinar la correspondencia entre unos patrones dados. Además el tiempo de desarrollo de cualquier sistema que se esté tratando de analizar se puede reducir como consecuencia de que la red puede aprender el algoritmo correcto sin que alguien tenga que deducir por anticipación el algoritmo en cuestión. (2,5,11,15) El algoritmo de la Backpropagation para redes multicapa es una generalización del algoritmo LMS, ambos algoritmos realizan su labor de actualización de peso y ganancias con base al erro cuadrático medio. La red Backpropagation trabaja bajo aprendizaje supervisado y por tanto necesita un set de entrenamiento que describa cada salida y su valor de la salida esperando de la siguiente forma. (2,5,16,20) {P1,t1},{ P2,t2} …….{ PQ1,tQ} Donde PQ es una de la entrada de la red y tQ esla correspondiente salida deseada para el patron q-esimo. El algoritmo debe ajustar los parametros de la red para minimizar el error medio cuadratico. (2,6,1,5) El algoritmo backpropagation es el método de entrenamiento más utilizado en redes con conexión hacia delante. Es un método de aprendizaje supervisado de gradiente descendente, en el que se distinguen claramente dos fases: primero se aplica un patrón de entrada, el cual se propaga por las distintas capas que componen la red hasta producir la salida de la misma. Esta salida se compara con la salida deseada y se calcula el error cometido por cada neurona de salida. Estos errores se transmiten hacia atrás, partiendo de la capa de salida, hacia todas las neuronas de las capas intermedias. Cada neurona recibe un error que es 17 proporcional a su contribución sobre el error total de la red. Basándose en el error recibido, se ajustan los errores de los pesos sinápticos de cada neurona. (2,6,7,16) CÓDIGO DEL PROGRAMA import java.lang.Math; import javax.swing.JOptionPane; public class Prueba2 { //user defineable variables public static int numEpochs = 500; //number of training cycles public static int numInputs = 3; //number of inputs - this includes the input bias public static int numHidden = 4; //number of hidden units public static int numPatterns = 4; //number of training patterns public static double LR_IH = 0.7; //learning rate public static double LR_HO = 0.07; //learning rate //process variables public static int patNum; public static double errThisPat; public static double outPred; public static double RMSerror; //training data public static double[][] trainInputs = new double[numPatterns][numInputs]; public static double[] trainOutput = new double[numPatterns]; //the outputs of the hidden neurons public static double[] hiddenVal = new double[numHidden]; //the weights public static double[][] weightsIH = new double[numInputs][numHidden]; public static double[] weightsHO = new double[numHidden]; //============================================================== //********** THIS IS THE MAIN PROGRAM ************************** //============================================================== public static void main(String[] args) { //initiate the weights 18 initWeights(); //load in the data initData(); //train the network for(int j = 0;j <= numEpochs;j++) { for(int i = 0;i<numPatterns;i++) { //select a pattern at random patNum = (int)((Math.random()*numPatterns)-0.001); //calculate the current network output //and error for this pattern calcNet(); //change network weights WeightChangesHO(); WeightChangesIH(); } //display the overall network error //after each epoch calcOverallError(); System.out.println("epoch = " + j + " RMS Error = " + RMSerror); } //training has finished //display the results displayResults(); } //============================================================ //********** END OF THE MAIN PROGRAM ************************** //============================================================= //************************************ public static void calcNet() { //calculate the outputs of the hidden neurons //the hidden neurons are tanh for(int i = 0;i<numHidden;i++) 19 { hiddenVal[i] = 0.0; for(int j = 0;j<numInputs;j++) hiddenVal[i] = hiddenVal[i] + (trainInputs[patNum][j] * weightsIH[j][i]); hiddenVal[i] = tanh(hiddenVal[i]); } //calculate the output of the network //the output neuron is linear outPred = 0.0; for(int i = 0;i<numHidden;i++) outPred = outPred + hiddenVal[i] * weightsHO[i]; //calculate the error errThisPat = outPred - trainOutput[patNum]; } //************************************ public static void WeightChangesHO() //adjust the weights hidden-output { for(int k = 0;k<numHidden;k++) { double weightChange = LR_HO * errThisPat * hiddenVal[k]; weightsHO[k] = weightsHO[k] - weightChange; //regularisation on the output weights if (weightsHO[k] < -5) weightsHO[k] = -5; else if (weightsHO[k] > 5) weightsHO[k] = 5; } } //************************************ public static void WeightChangesIH() //adjust the weights input-hidden { for(int i = 0;i<numHidden;i++) { for(int k = 0;k<numInputs;k++) { double x = 1 - (hiddenVal[i] * hiddenVal[i]); x = x * weightsHO[i] * errThisPat * LR_IH; x = x * trainInputs[patNum][k]; 20 double weightChange = x; weightsIH[k][i] = weightsIH[k][i] - weightChange; } } } //************************************ public static void initWeights() { for(int j = 0;j<numHidden;j++) { weightsHO[j] = (Math.random() - 0.5)/2; for(int i = 0;i<numInputs;i++) weightsIH[i][j] = (Math.random() - 0.5)/5; } } //************************************ public static void initData() { System.out.println("initialising data"); // the data here is the XOR data // it has been rescaled to the range // [-1][1] // an extra input valued 1 is also added // to act as the bias trainInputs[0][0] = 1; trainInputs[0][1] = -1; trainInputs[0][2] = 1;//bias trainOutput[0] = 1; trainInputs[1][0] = -1; trainInputs[1][1] = 1; trainInputs[1][2] = 1;//bias trainOutput[1] = 1; trainInputs[2][0] = 1; trainInputs[2][1] = 1; trainInputs[2][2] = 1;//bias trainOutput[2] = -1; trainInputs[3][0] = -1; trainInputs[3][1] = -1; trainInputs[3][2] = 1;//bias trainOutput[3] = -1; 21 } //************************************ public static double tanh(double x) { if (x > 20) return 1; else if (x < -20) return -1; else { double a = Math.exp(x); double b = Math.exp(-x); return (a-b)/(a+b); } } //************************************ public static void displayResults() { for(int i = 0;i<numPatterns;i++) { patNum = i; calcNet(); System.out.println("pat = " + (patNum+1) + " actual = " + trainOutput[patNum] + " neural model = " + outPred); } } //************************************ public static void calcOverallError() { RMSerror = 0.0; for(int i = 0;i<numPatterns;i++) { patNum = i; calcNet(); RMSerror = RMSerror + (errThisPat * errThisPat); } RMSerror = RMSerror/numPatterns; RMSerror = java.lang.Math.sqrt(RMSerror); } 22 COMENTARIOS Comentario 1. La red adaline tiene la desventaja de solo llevar a cabo soluciones con problemas linealmente separables ya que solo es capaz de procesar entradas binarias por lo que frecuentemente es utilizada por el análisis de patrones. Uno de los ejemplos que encontré hace referencia a a su uso en algunas predicciones meteorológicas en el que al determinar si un fenómeno ocurre le da un valor le uno, por el contrario, si no ocurre le asigna un valor de cero, cuando se logran ingresar diferentes entradas (humedad, corrientes atmosféricas, etc.) se logra una predicción del clima que como sabemos no es cien por ciento certera, pero tiene muy altas probabilidades de exacta, lo que viene siendo muy útil. Este tipo de red tiene muchas utilidades ya que aunque algunos no la consideran una red porque solo cuenta con un elemento de procesamiento, se han podido implementar redes más complejas. A comparación del perceptrón eta red hace uso de una regla de corrección de error, lo que hace que sus salidas sean más exactas (resultado esperado respecto a resultado deseado). (José Alberto Cruz Castro) Comentario 2. La red Backpropagation es muy útil debido a que aprovecha su forma en que está creada, para reducir el tiempo del proceso secuencial de la información el cual determina la correspondencia entre los patrones ingresados, además el tiempo de desarrollo de cualquier sistema que se esté tratando de analizar se puede reducir debido a que red puede aprender el algoritmo correcto sin que nadie tenga deducirlo antes. Esta es una red de aprendizaje supervisado la cual nos ayuda a saber cómo se propagan los valores ingresados desde la primera capa y continua a través de las 23 capas superiores de la red donde su proceso consiste en medida a la entrada de la red, de tal manera que las neuronas se organizan de un modo que aprenden a reconocer distintas características del espacio de entrada. La señal de la salida se compara con la salida deseada y utilizando ambas señales se calcula una señal de error para cada una de las salidas, donde esta salida es prácticamente un margen de error entre las señales. (José Carlos Secundino Macedonio) Comentario 3. Debido a muchas desventajas que tuvieron la redes neuronales por no resolver problemas mas complejos que los problemas linealmente separables, esto conlleva a los investigadores a seguir investigando como resolver este tipo de problemas ya que los entrenamientos de las redes de una sola capa y sus reglas de aprendizaje fueron diseñados por LMS de Windrow Holf. Posteriormente a esto las investigaciones fueron incrementando hasta que en 1974 Paul Werbos se encargó de desarrollar un contexto general para cualquier tipo de red, este se puede aplicar a redes neuronales especiales. Pero este algoritmo fue descartado por los programadores o desarrolladores de estas, pero por los años 80’s cuando el algoritmo de propagación inversa (BackPropagation), fue descubierto por los desarrolladores, esto conllevo a la Red de Propagación Inversa a ser una de las mas aplicadas y mas utilizadas hoy en dia… La BlackPropagation es una red de aprendizaje supervisado , que emplea un ciclo de propagación ósea tiene la funcionalidad de adaptación de dos faces. Esto quiere decir que una ves que recibe un estimulo en la entrada este se propaga por cada capa por las capas superiores hasta llegar a la capa de salida y esta se compara con la deseada y se calcula una señal de error para cada una de las salidas, y a subes estas se propagan hacia atrás contribuyendo al resultado de la salida repitiendo el proceso en cada una de las capas hasta que la red obtenga una señal de error completa el, dependiendo la señal de error que percibe la red 24 actualizará los pesos de la conexión de cada neurona para que la red permita clasificar concretamente cada una de los patrones de entrenamiento. (Carlos Martínez López) REFERENCIAS [1] Algoritmo Backpropagation para Redes Neuronales: conceptos y aplicaciones, pp 5-7 disponible en: http://www.repositoriodigital.ipn.mx/bitstream/handle/123456789/8628/Archivo%20 que%20incluye%20portada,%20%C3%ADndice%20y%20texto.pdf?sequence=1 [2] Domingos, P. (2000). " Bias-Varianza su Descomposición y sus Aplicaciones". Morgan Kauffman, pp 231-238. [3] Laurene Fausett, Prentice Hall, Fundamentals of Neural Networks 1994 pp 412. [4] Hiera J.R., Martinez V.J. Addison-Wesley iberoamericana, ra-ma, Redes neuronales artificiales fundamentos, momentos y aplicaciones 2003 [5] Simon Haykin, Prentice Hall. Neural Networks A Comprehensive Foundation 199 25