Algoritmo de retropropagación de errores habr. Método de retropropagación: matemáticas, ejemplos, código.

Algoritmo propagación hacia atrás Los errores son uno de los métodos para entrenar redes neuronales de alimentación directa multicapa, también llamadas perceptrones multicapa. Los perceptrones multicapa se han utilizado con éxito para resolver muchos problemas complejos.

El entrenamiento con el algoritmo de retropropagación implica dos pasadas por todas las capas de la red: hacia adelante y hacia atrás. En el paso directo, el vector de entrada se envía a la capa de entrada de la red neuronal y luego se propaga a través de la red de capa a capa. Como resultado, se genera un conjunto de señales de salida, que es la respuesta real de la red a una imagen de entrada determinada. Durante el paso hacia adelante, todos los pesos sinápticos de la red son fijos. Durante el paso hacia atrás, todos los pesos sinápticos se ajustan de acuerdo con una regla de corrección de errores, a saber: la salida real de la red se resta de la salida deseada, lo que da como resultado una señal de error. Posteriormente, esta señal se propaga por la red en dirección opuesta a la de las conexiones sinápticas. De ahí el nombre - algoritmo de retropropagación. Los pesos sinápticos se ajustan para acercar la salida de la red lo más posible a la deseada.

Consideremos el funcionamiento del algoritmo con más detalle. Digamos que necesitas entrenar lo siguiente red neuronal, utilizando el algoritmo de retropropagación:

En la figura se utilizan los siguientes símbolos:

Como función de activación en perceptrones multicapa, por regla general, se utiliza una función de activación sigmoidea, en particular una logística:

donde es el parámetro de pendiente de la función sigmoidal. Al cambiar este parámetro, puede construir funciones con diferentes pendientes. Hagamos una reserva de que para todos los argumentos posteriores usaremos precisamente la función de activación logística, representada únicamente por la fórmula anterior.

El sigmoide reduce el rango de variación de modo que el valor se encuentra entre cero y uno. Las redes neuronales multicapa tienen un mayor poder de representación que las redes neuronales de una sola capa solo en presencia de no linealidad. La función de compresión proporciona la no linealidad requerida. En realidad hay muchas funciones que podrían usarse. El algoritmo de retropropagación solo requiere que la función sea diferenciable en todas partes. Sigmoide satisface este requisito. Tiene el beneficio adicional del control automático de ganancia. Para señales débiles (es decir, cuando están cerca de cero), la curva entrada-salida tiene una pendiente fuerte, lo que da una ganancia grande. A medida que la magnitud de la señal aumenta, la ganancia disminuye. De esta manera, la red acepta señales grandes sin saturación y las señales pequeñas pasan a través de la red sin una atenuación excesiva.

El propósito de la formación en red. El algoritmo de retropropagación es un ajuste de sus pesos de modo que la aplicación de un determinado conjunto de entradas conduzca al conjunto requerido de salidas. Para abreviar, estos conjuntos de entradas y salidas se denominarán vectores. Durante el entrenamiento, se supone que para cada vector de entrada hay un vector objetivo emparejado con él, que especifica la salida requerida. Juntos se les llama pareja de entrenamiento. La red está entrenada en muchos pares.

Próximo:

  1. Inicialice los pesos sinápticos con pequeños valores aleatorios.
  2. Seleccione el siguiente par de entrenamiento del conjunto de entrenamiento; envíe el vector de entrada a la entrada de la red.
  3. Calcule la salida de la red.
  4. Calcule la diferencia entre la salida de la red y la salida requerida (vector objetivo del par de entrenamiento).
  5. Ajuste los pesos de la red para minimizar el error (como se muestra a continuación).
  6. Repita los pasos 2 a 5 para cada vector del conjunto de entrenamiento hasta que el error en todo el conjunto alcance un nivel aceptable.

Las operaciones realizadas en los pasos 2 y 3 son similares a las realizadas cuando la red ya está entrenada, es decir Se proporciona un vector de entrada y se calcula la salida resultante. Los cálculos se realizan capa por capa. En la Fig. 1, primero se calculan las salidas de las neuronas de la capa (la capa es la entrada, lo que significa que no se realizan cálculos en ella), luego se usan como entradas de la capa, se calculan las salidas de las neuronas de la capa , que forman el vector de salida de la red. Los pasos 2 y 3 forman el llamado "pase directo" a medida que la señal se propaga a través de la red desde la entrada hasta la salida.

Los pasos 4 y 5 constituyen un "retroceso", donde la señal de error calculada se propaga nuevamente a través de la red y se utiliza para ajustar los pesos.

Echemos un vistazo más de cerca al paso 5: ajustar los pesos de la red. Cabe destacar aquí dos casos que se describen a continuación.

Caso 1. Ajuste de pesos sinápticos de la capa de salida.

Por ejemplo, para el modelo de red neuronal de la Fig. 1, serán pesas que tendrán las siguientes designaciones: y . Decidamos que el índice denotará la neurona de la que sale el peso sináptico y la neurona en la que entra:

Introduzcamos el valor , que es igual a la diferencia entre la producción requerida y la real, multiplicada por la derivada de la función de activación logística (ver arriba la fórmula de la función de activación logística):

Entonces, los pesos de la capa de salida después de la corrección serán iguales a:

A continuación se muestra un ejemplo de cálculos para el peso sináptico:

Caso 2. Ajuste de pesos sinápticos de la capa oculta

Para el modelo de red neuronal de la Fig. 1, estos serán los pesos correspondientes a las capas y . Decidamos que el índice denotará la neurona de la que sale el peso sináptico y la neurona en la que entra (obsérvese la aparición de una nueva variable).

Delta es una regla que se utiliza al entrenar un perceptrón, utilizando el valor de error de la capa de salida. Si la red tiene dos o más capas, entonces para las capas intermedias no hay un valor de error explícito y no se puede utilizar la regla delta.

La idea principal detrás de la retropropagación es cómo obtener una estimación del error para las neuronas de capa oculta. Darse cuenta de famoso Los errores cometidos por las neuronas en la capa de salida surgen debido a desconocido Errores de las neuronas de capa oculta. Cuanto mayor sea el valor de la conexión sináptica entre la neurona de la capa oculta y la neurona de salida, mayor error más fuerte el primero afecta el error del segundo. En consecuencia, la estimación del error de los elementos de las capas ocultas se puede obtener como una suma ponderada de los errores de las capas posteriores.

El algoritmo de retropropagación (BEP), que es una generalización de la regla delta, le permite entrenar una PR ANN con cualquier número de capas. Se puede decir que AORO en realidad utiliza una variedad descenso de gradiente, reorganizando los pesos en la dirección del error mínimo.

Cuando se utiliza AOR, se supone que la función sigmoidea se utiliza como función de activación. Esta función ahorra esfuerzo computacional porque tiene una derivada simple:

La función sigmoidea limita las señales fuertes a 1 y amplifica las señales débiles.

El significado del algoritmo de retropropagación es que durante el entrenamiento, a la red primero se le presenta una imagen para la cual se calcula el error de salida. Este error luego se propaga a través de la red en la dirección opuesta, cambiando los pesos de las conexiones entre neuronas.

El algoritmo incluye la misma secuencia de acciones que cuando se entrena un perceptrón. Primero, se obtienen los pesos de las conexiones interneuronales. valores aleatorios, luego se realizan los siguientes pasos:

1) Se selecciona un par de entrenamiento ( X , z*), X suministrado a la entrada;

2) Se calcula la salida de la red. z = F(Y);

3) Se calcula el error de salida. mi;

4) Los pesos de la red se ajustan para minimizar los errores;

Los pasos 1 y 2 son propagación directa a través de la red y 3 y 4 son propagación inversa.

Antes del entrenamiento, es necesario dividir los pares entrada-salida existentes en dos partes: entrenamiento y prueba.

Los pares de prueba se utilizan para verificar la calidad del entrenamiento: la red neuronal está bien entrenada si produce una salida cercana a la de prueba para la entrada especificada por el par de prueba.

Durante el entrenamiento, es posible una situación en la que la red neuronal muestra buenos resultados para los datos de entrenamiento, pero malos resultados para los datos de prueba. Podría haber dos razones:

1. Los datos de prueba son muy diferentes de los datos de entrenamiento, es decir. Los pares de entrenamiento no cubrieron todas las áreas del espacio de entrada.


2. Ha surgido el fenómeno del “reciclaje” ( sobreajuste), cuando el comportamiento de la red neuronal resulta más complejo que el problema a resolver.

último caso El problema de aproximar una función por puntos se ilustra en la Fig. 3.3, donde los círculos blancos indican datos de prueba y los círculos oscuros indican datos de entrenamiento.

En las redes neuronales multicapa, los valores de salida óptimos de las neuronas de todas las capas excepto la última son, por regla general, desconocidos. Un perceptrón de tres o más capas ya no se puede entrenar, guiándose únicamente por los valores de error; en las salidas de la red

Una de las opciones para resolver este problema es desarrollar conjuntos de señales de salida correspondientes a las señales de entrada para cada capa de la red neuronal, lo que, por supuesto, es una operación que requiere mucha mano de obra y no siempre es factible. para ajustar dinámicamente los coeficientes de ponderación de las sinapsis, durante el cual, por regla general, la mayoría lazos débiles y cambiar una pequeña cantidad en una dirección u otra, y solo se guardan aquellos cambios que dieron como resultado una disminución en el error en la salida de toda la red. este método, a pesar de

La aparente simplicidad requiere cálculos de rutina engorrosos y, finalmente, la tercera opción, más aceptable, es la propagación de señales de error desde las salidas de la red neuronal hasta sus entradas, en la dirección opuesta a la propagación directa de las señales en el funcionamiento normal. El algoritmo se llama procedimiento de retropropagación (error propagación hacia atrás) Es él de quien se habla a continuación.

El algoritmo de retropropagación es un algoritmo de aprendizaje de gradiente iterativo que se utiliza para minimizar Desviación Estándar corriente de las salidas requeridas de redes neuronales multicapa con conexiones en serie

Según el método mínimos cuadrados, la función de error objetivo de la red neuronal a minimizar es el valor

¿Dónde está el estado de salida real de la neurona en la capa de salida de la red neuronal cuando se envía una imagen a sus entradas? El estado de salida requerido de esta neurona.

La suma se lleva a cabo en todas las neuronas de la capa de salida y en todas las imágenes procesadas por la red. La minimización mediante el método de descenso de gradiente garantiza el ajuste de los coeficientes de peso de la siguiente manera.

¿Dónde está el coeficiente de ponderación de la conexión sináptica que conecta una neurona de capa con una neurona de capa? El coeficiente de tasa de aprendizaje.

De acuerdo con la regla de diferenciación de funciones complejas.

donde es la suma ponderada de las señales de entrada de la neurona y el argumento de la función de activación. Dado que la derivada de la función de activación debe determinarse en todo el eje de abscisas, la función de salto unitario y otras funciones de activación con heterogeneidades no son adecuadas. Las redes neuronales consideradas utilizan lo siguiente. funciones suaves, Cómo tangente hiperbólica o un sigmoide clásico con una exponencial (ver Tabla 1 1) Por ejemplo, en el caso de una tangente hiperbólica

El tercer multiplicador es igual a la salida de la neurona de la capa anterior.

En cuanto al primer factor de (1.11), se puede ampliar fácilmente de la siguiente manera:

Aquí la sumatoria se realiza entre las neuronas de la capa introduciendo una nueva variable:

obtenemos una fórmula recursiva para calcular los valores de una capa a partir de los valores de una capa más antigua

Para la capa de salida:

Ahora podemos escribir (1.10) en forma desarrollada:

A veces, para darle cierta inercia al proceso de corrección de peso, suavizando los saltos bruscos al moverse por la superficie. función objetiva, (1.17) se complementa con el valor del cambio de peso en la iteración anterior.

¿Dónde está el coeficiente de inercia? número de iteración actual.

Por tanto, el algoritmo completo para entrenar una red neuronal mediante el procedimiento de retropropagación se construye de la siguiente manera.

PASO 1. Aplicar una de las posibles imágenes a las entradas de la red y, en el modo de funcionamiento normal de la red neuronal, cuando las señales se propaguen de las entradas a las salidas, calcular los valores de estas últimas. Te recordamos que:

¿Dónde está el número de neuronas en la capa, teniendo en cuenta una neurona con un estado de salida constante que establece el sesgo? entrada de neuronas en la capa

¿Dónde está el sigmoide?

¿Dónde está el componente vectorial de la imagen de entrada?

PASO 4. Ajuste todos los pesos en la red neuronal:

PASO 5. Si el error de red es significativo, vaya al paso 1. De lo contrario, finalice.

Las redes en el paso 1 se alternan en Orden aleatorio Todas las imágenes de entrenamiento se presentan para que la red, en sentido figurado, no olvide algunas mientras memoriza otras.

De la expresión (1.17) se deduce que cuando el valor de salida tiende a cero, la eficiencia del aprendizaje disminuye notablemente. Con vectores de entrada binarios, en promedio la mitad de los pesos no se ajustarán, por lo que la región valores posibles Es deseable desplazar las salidas de las neuronas dentro de los límites, lo que se logra mediante simples modificaciones de las funciones logísticas. Por ejemplo, un sigmoide con exponencial se convierte a la forma:

Consideremos la cuestión de la capacidad de una red neuronal, es decir, la cantidad de imágenes presentadas a sus entradas que puede aprender a reconocer. Para redes con más de dos capas, esta cuestión permanece abierta. Para redes con dos capas, la capacidad de red determinista se estima de la siguiente manera:

donde es el número de pesos ajustables, es el número de neuronas en la capa de salida.

Esta expresión se obtuvo teniendo en cuenta algunas restricciones. En primer lugar, el número de entradas y neuronas en la capa oculta debe satisfacer la desigualdad. En segundo lugar, sin embargo, la estimación anterior se hizo para redes con funciones de activación de umbral de neuronas y la capacidad de redes con funciones de activación suaves, por ejemplo (1.23), suele ser mayor. Además, el término determinista significa que la estimación de capacidad resultante es adecuada para todos los patrones de entrada que pueden ser representados por las entradas. En realidad, la distribución de los patrones de entrada tiende a tener cierta regularidad, lo que permite que la red neuronal se generalice y así aumente su capacidad real. Desde la distribución de imágenes, en caso general, no se conoce de antemano, solo podemos hablar de la capacidad real de forma provisional, pero normalmente es el doble de la capacidad determinista.

La cuestión de la capacidad de una red neuronal está estrechamente relacionada con la cuestión de la potencia requerida de la capa de salida de la red que realiza la clasificación final de las imágenes. Por ejemplo, para dividir un conjunto de imágenes de entrada en dos clases, una neurona de salida es suficiente. En este caso, cada nivel lógico designará una clase separada. En dos neuronas de salida con una función de activación de umbral, se pueden codificar cuatro clases. Para aumentar la confiabilidad de la clasificación, es deseable introducir redundancia asignando a cada clase una neurona en la capa de salida o, mejor aún, varias, cada una de las cuales está entrenada para determinar si una imagen pertenece a una clase con su propio grado de clasificación. confianza, por ejemplo: alta, media y baja. Estas redes neuronales permiten clasificar imágenes de entrada combinadas en conjuntos borrosos (borrosos o que se cruzan). Esta propiedad acerca dichas redes a condiciones reales funcionamiento de las redes neuronales biológicas.

La red neuronal en cuestión tiene varios “ cuellos de botella" En primer lugar, en el proceso hay grandes cambios positivos o valores negativos Los pesos pueden desplazar el punto de operación en los sigmoideos de las neuronas a la región de saturación. Valores pequeños de la derivada de la función logística conducirán, de acuerdo con (1.15) y (1.16), a una parada en el aprendizaje, lo que paraliza la red. En segundo lugar, el uso del método de descenso de gradiente no garantiza encontrar el mínimo global de la función objetivo. Esto está estrechamente relacionado con la cuestión de elegir la tasa de aprendizaje. Los incrementos de peso y, por tanto, la tasa de aprendizaje para encontrar el extremo deben ser infinitesimales, pero en este caso el aprendizaje será

sucediendo con una lentitud inaceptable. Por otro lado, ajustes demasiado grandes en las ponderaciones pueden provocar una inestabilidad permanente en el proceso de aprendizaje. Por lo tanto, generalmente se selecciona un número menor que 1 (por ejemplo, 0,1) como coeficiente de tasa de aprendizaje 1], que disminuye gradualmente durante el proceso de aprendizaje. Además, para excluir accesos accidentales de la red a los mínimos locales, a veces, después de estabilizar los valores de los coeficientes de ponderación, 7 se aumenta significativamente durante un breve período de tiempo para comenzar el descenso del gradiente desde nuevo punto. Si al repetir este procedimiento varias veces la red vuelve al mismo estado, podemos suponer que se ha encontrado un mínimo global.

Existe otro método para eliminar los mínimos locales y la parálisis de la red, que consiste en utilizar redes neuronales estocásticas.

Demos a lo anterior una interpretación geométrica.

En el algoritmo de retropropagación, se calcula el vector gradiente de la superficie de error. Este vector indica la dirección del descenso más corto a lo largo de la superficie desde el punto actual, cuyo movimiento conduce a una disminución del error. Una secuencia de pasos decrecientes conducirá a un mínimo de un tipo u otro. La dificultad aquí es la cuestión de seleccionar la longitud de los pasos.

En talla grande paso, la convergencia será más rápida, pero existe el peligro de saltarse la solución o en caso Forma compleja Aparece el error de ir en la dirección equivocada, por ejemplo, avanzando por un estrecho barranco con fuertes pendientes, saltando de un lado a otro. Por el contrario, cuando pasito e ir en la dirección correcta requerirá muchas iteraciones. En la práctica, el tamaño del paso se considera proporcional a la pendiente de la pendiente, de modo que el algoritmo se ralentiza cerca del mínimo. Buena elección La velocidad de aprendizaje depende de tarea específica y generalmente se hace de forma experimental. Esta constante también puede depender del tiempo, disminuyendo a medida que avanza el algoritmo.

Normalmente, este algoritmo se modifica para incluir un término de impulso (o inercia). Esto favorece el avance en una dirección fija, por lo que si se han dado varios pasos en la misma dirección, el algoritmo aumenta la velocidad, lo que en ocasiones permite evitar un mínimo local, así como atravesar zonas planas más rápido.

En cada paso del algoritmo, todos los ejemplos de entrenamiento se envían a la entrada de la red, los valores reales de salida de la red se comparan con los valores requeridos y se calcula el error. El valor del error así como el gradiente de la superficie del error.

se utiliza para ajustar las escalas, después de lo cual se repiten todas las acciones. El proceso de aprendizaje se detiene cuando ha pasado un cierto número de épocas, cuando el error alcanza un cierto nivel pequeño o cuando el error deja de disminuir.

Consideremos con más detalle los problemas de generalización y reentrenamiento de una red neuronal. La generalización es la capacidad de una red neuronal para realizar una predicción precisa sobre datos que no pertenecen al conjunto de entrenamiento original. El sobreajuste es un sobreajuste que se produce cuando el algoritmo de entrenamiento tarda demasiado y la red es demasiado compleja para la tarea o la cantidad de datos disponibles.

Demostremos los problemas de generalización y reentrenamiento usando el ejemplo de aproximar una determinada dependencia no mediante una red neuronal, sino mediante polinomios, y la esencia del fenómeno será absolutamente la misma.

Las gráficas polinómicas pueden tener forma diferente, y cuanto mayor sea el grado y el número de términos, más compleja puede ser esta forma. Para los datos iniciales, se puede seleccionar una curva polinómica (modelo) y así obtener una explicación de la dependencia existente. Los datos pueden tener ruido, por lo que no se puede suponer que el mejor modelo pase exactamente por todos los puntos disponibles. Un polinomio de bajo orden puede explicar mejor la dependencia existente; sin embargo, no es un medio lo suficientemente flexible para aproximar datos, mientras que un polinomio alto orden Puede ser demasiado flexible, pero seguirá los datos exactamente, mientras adopta una forma complicada que no tiene nada que ver con la relación real.

Las redes neuronales enfrentan las mismas dificultades. Redes con un número grande los pesos se modelan sobre funciones complejas y por lo tanto son propensos al sobreentrenamiento. Es posible que las redes con una pequeña cantidad de pesos no sean lo suficientemente flexibles para modelar las dependencias existentes. Por ejemplo, una red sin capas ocultas sólo modela una función lineal ordinaria.

Como escoger grado correcto¿Complejidad de la red? Casi siempre una red más compleja produce un error menor, pero esto puede no indicar buena calidad modelo, sino sobre reentrenar la red.

La solución es utilizar una validación cruzada de referencia. Para ello, se reserva una parte de la muestra de entrenamiento, que no se utiliza para entrenar la red mediante el algoritmo de retropropagación, sino para el control independiente del resultado durante el algoritmo. Al inicio del trabajo, se produjo un error de red en la capacitación y

los conjuntos de control serán los mismos. A medida que se entrena la red, el error de entrenamiento disminuye, al igual que el error en el conjunto de control. Si el error de control deja de disminuir o incluso comienza a aumentar, esto indica que la red ha comenzado a aproximarse demasiado a los datos (sobreentrenamiento) y se debe detener el entrenamiento. Si esto sucede, entonces se debe reducir el número de elementos y/o capas ocultos, porque la red es demasiado poderosa para esta tarea. Si ambos errores (entrenamiento y validación cruzada) no alcanzan un nivel suficientemente pequeño, entonces, naturalmente, no se produjo el reentrenamiento y la red, por el contrario, no es lo suficientemente potente como para modelar la dependencia existente.

Los problemas descritos llevan al hecho de que cuando trabajo practico Con las redes neuronales, hay que experimentar con una gran cantidad de redes diferentes, a veces entrenando cada una de ellas varias veces y comparando los resultados. El principal indicador de la calidad del resultado es el error de control. Al mismo tiempo, de acuerdo con el principio de todo el sistema, de dos redes con errores de control aproximadamente iguales, tiene sentido elegir la que sea más simple.

La necesidad de repetir experimentos lleva al hecho de que el conjunto de control comienza a desempeñar un papel clave en la elección de un modelo y se convierte en parte del proceso de aprendizaje. Esto debilita su papel como criterio independiente calidad del modelo. En gran número hay experimentos Gran oportunidad elige una buena red que te dé buen resultado en el conjunto de control. Sin embargo, para darle al modelo final la confiabilidad adecuada, a menudo (cuando el volumen de ejemplos de entrenamiento lo permite) hacen lo siguiente: reservar un conjunto de ejemplos de prueba. El modelo final se prueba con datos de este conjunto para garantizar que los resultados obtenidos en los conjuntos de ejemplos de entrenamiento y prueba sean reales y no artefactos del proceso de aprendizaje. Por supuesto, para desempeñar bien su función, el conjunto de prueba sólo debe usarse una vez: si se reutiliza para ajustar el proceso de aprendizaje, de hecho se convertirá en un conjunto de control.

Para acelerar el proceso de entrenamiento de la red, se han propuesto numerosas modificaciones del algoritmo de retropropagación, relacionadas con el uso de Varias funciones errores, procedimientos para determinar la dirección y tamaños de paso.

1) Funciones de error:

Funciones de error integrales sobre todo el conjunto de ejemplos de entrenamiento;

Funciones de error de potencias enteras y fraccionarias.

2) Procedimientos para determinar el tamaño del paso en cada iteración.

Dicotomía;

Relaciones inerciales (ver arriba);

3) Procedimientos para determinar la dirección del paso.

Utilizando una matriz de derivadas de segundo orden (método de Newton);

Usar instrucciones en varios pasos (método partan).

El objetivo de entrenar una red es ajustar sus pesos de modo que la aplicación de un determinado conjunto de entradas conduzca al conjunto requerido de salidas. Para abreviar, estos conjuntos de entradas y salidas se denominarán vectores. Durante el entrenamiento, se supone que para cada vector de entrada hay un vector objetivo emparejado con él, que especifica la salida requerida. Juntos se les llama pareja de entrenamiento. Normalmente, la red está entrenada en muchos pares.

Antes de comenzar el entrenamiento, a todos los pesos se les deben asignar pequeños valores iniciales, elegidos al azar. Esto garantiza que la red no se sature con grandes pesos y previene otros casos patológicos. Por ejemplo, si a todos los pesos se les da el mismo valores iniciales, y el funcionamiento requerido requiere valores desiguales, entonces la red no podrá aprender.

Entrenar una red de retropropagación requiere

realizar las siguientes operaciones:

1. Seleccione el siguiente par de entrenamiento del conjunto de entrenamiento y envíe el vector de entrada a la entrada de la red.

2. Calcule la salida de la red.

3. Calcule la diferencia entre la salida de la red y la salida requerida (vector objetivo del par de entrenamiento)

4. Ajuste los pesos de la red para minimizar el error.

5. Repita los pasos 1 a 4 para cada vector del conjunto de entrenamiento hasta que el error en todo el conjunto alcance un nivel aceptable.

Las operaciones realizadas en los pasos 1 y 2 son similares a las realizadas cuando la red ya está entrenada, es decir Se proporciona un vector de entrada y se calcula la salida resultante. Los cálculos se realizan capa por capa. En la Fig. 3, primero se calculan las salidas de las neuronas de la capa j, luego se usan como entradas de la capa k, se calculan las salidas de las neuronas de la capa k, que forman el vector de salida de la red.

En el paso 3, cada una de las salidas de la red, que están etiquetadas como OUT en la Fig. 3, se resta del componente correspondiente del vector objetivo para obtener el error. Este error se utiliza en el paso 4 para ajustar los pesos de la red, con el signo y la magnitud de los cambios en los pesos determinados por el algoritmo de aprendizaje (ver más abajo).

Después de suficientes repeticiones de estos cuatro pasos, la diferencia entre los resultados reales y los resultados objetivo debería disminuir a un valor aceptable y se dice que la red ha aprendido. Ahora la red se utiliza para el reconocimiento y los pesos no cambian.

Los pasos 1 y 2 pueden verse como un "pase directo" a medida que la señal se propaga a través de la red desde la entrada hasta la salida. Los pasos 3 y 4 constituyen un "retroceso", aquí la señal de error calculada se propaga de regreso a través de la red y se usa para ajustar los pesos. Estos dos pases ahora se detallarán y expresarán de una forma más matemática.

Paso adelante. Los pasos 1 y 2 se pueden expresar en forma vectorial de la siguiente manera: se suministra el vector de entrada X y la salida es un vector Y. Par de entrada-objetivo de vector X Y t se toma del conjunto de entrenamiento. Los cálculos se realizan en el vector. X para obtener el vector de salida Y.

Como hemos visto, el cálculo en redes multicapa se realiza capa por capa, comenzando por la capa más cercana a la entrada. El valor NETO de cada neurona en la primera capa se calcula como una suma ponderada de las entradas de la neurona. La función de activación F luego "comprime" la RED y produce un valor de SALIDA para cada neurona en esa capa. Cuando se recibe el conjunto de salida de una capa, se convierte en el conjunto de entrada para la siguiente capa. El proceso se repite capa por capa hasta que se obtiene el conjunto final de salidas de la red.

Este proceso se puede expresar de forma condensada utilizando notación vectorial. Los pesos entre neuronas pueden considerarse como una matriz. W.. Por ejemplo, el peso de la neurona 8 en la capa 2 a la neurona 5 en la capa 3 se denota con w 8,5. Entonces el vector NET de la capa. norte se puede expresar no como una suma de productos, sino como un producto X Y W.. En notación vectorial norte= XW. Aplicando por componentes la función F a un vector NET norte se obtiene el vector de salida ACERCA DE. Así, para una capa determinada, el proceso computacional se describe mediante la siguiente expresión:

oh=F( XW) (3)

El vector de salida de una capa es el vector de entrada de la siguiente.

pase inverso. Ajustar los pesos de la capa de salida. Dado que se especifica un valor objetivo para cada neurona en la capa de salida, el ajuste de los pesos se realiza fácilmente utilizando una regla delta modificada. Las capas internas se denominan "capas ocultas" y sus salidas no tienen valores objetivo para comparar. Por tanto, el aprendizaje se vuelve más difícil.

Entrenando la última capa Fig. 2.4

En la Fig. La Figura 2.4 muestra el proceso de aprendizaje de un peso de la neurona p. en la capa oculta j a la neurona q en la capa de salida k. La salida de la neurona de la capa k, restada del valor objetivo (Target), da la señal de error. Esto se multiplica por la derivada de la función de contracción calculada para esa neurona de la capa 6, dando así el valor d.

d = SALIDA(1 - SALIDA)(Objetivo - SALIDA). (2.4)

Luego d se multiplica por el valor OUT de la neurona j, lo que produce el peso en cuestión. Este producto, a su vez, se multiplica por un factor de tasa de aprendizaje h (generalmente entre 0,01 y 1,0) y el resultado se suma al peso. Se realiza el mismo procedimiento para cada peso desde la neurona de la capa oculta hasta la neurona de la capa de salida.

Las siguientes ecuaciones ilustran este cálculo:

Dw pq, k = hd q, k FUERA p, j (2.5)

w pq,k (n+1) = w pq, k (n) + Dw pq, k (2.6)

donde w pq, k (n) es el valor del peso desde la neurona h en la capa oculta hasta la neurona q en la capa de salida en el paso n (antes de la corrección), tenga en cuenta que el índice k se refiere a la capa en la que termina este peso , es decir, según la convención adoptada en este libro, con la que está unido; w pq, k (n+1) - valor de peso en el paso n+1 (después de la corrección), d q, k - valor d para la neurona en la capa de salida k, OUT p, j - valor OUT para la neurona p en la capa oculta j.

Ajustar los pesos de las capas ocultas. Considere una sola neurona en la capa oculta que precede a la capa de salida. A medida que avanza, esta neurona transmite su señal de salida a las neuronas de la capa de salida a través de los pesos que las conectan. Durante el entrenamiento, estos pesos operan en orden inverso, pasando el valor de d de la capa de salida a la capa oculta. Cada uno de estos pesos se multiplica por el valor d de la neurona a la que está conectado en la capa de salida. El valor d requerido para una neurona de capa oculta se obtiene sumando todos esos productos y multiplicando por la derivada de la función de compresión:

(ver Fig. 5) Una vez obtenido el valor de d, los pesos que alimentan la primera capa oculta se pueden ajustar usando las ecuaciones (5) y (6), donde los índices se modifican según la capa.

Entrenamiento de la capa interna Fig. 2.5

Para cada neurona en una capa oculta determinada, se debe calcular d y se deben ajustar todos los pesos asociados con esta capa. Este proceso se repite capa por capa hacia la entrada hasta que se hayan ajustado todos los pesos.

Usando notación vectorial, la operación de retropropagación de errores se puede escribir de manera mucho más compacta. Denotaremos el conjunto de valores d de la capa de salida como D k y el conjunto de pesos de la capa de salida como la matriz W k. Para obtener Dj, el vector d de la capa de salida, son suficientes las dos operaciones siguientes:

1. Multiplique el vector d de la capa de salida D k por la matriz de peso transpuesta W k que conecta la capa oculta con la capa de salida.

2. Multiplica cada componente del producto resultante por la derivada de la función de compresión de la neurona correspondiente en la capa oculta.

En notación simbólica:

,

donde el operador $ denota el producto de vectores por componentes. O j es el vector de salida de la capa j e I es un vector cuyos componentes son iguales a 1.

Parálisis de la red. Durante el proceso de entrenamiento de la red, los valores de peso pueden volverse muy grandes como resultado de la corrección. Esto puede resultar en que todas o la mayoría de las neuronas funcionen a muy valores grandes OUT, en la región donde la derivada de la función de compresión es muy pequeña. Dado que el error devuelto durante el proceso de aprendizaje es proporcional a esta derivada, el proceso de aprendizaje prácticamente puede congelarse. Desde una perspectiva teórica, este problema no se comprende bien. Esto generalmente se evita disminuyendo el tamaño del paso n, pero esto aumenta el tiempo de entrenamiento. Se han utilizado varias heurísticas para prevenir o recuperarse de la parálisis, pero por ahora sólo pueden considerarse experimentales.

Mínimos locales. La retropropagación utiliza una variación del descenso de gradiente, es decir. desciende por la superficie de error, ajustando continuamente los pesos hacia el mínimo. La superficie de error de una red compleja es muy accidentada y está formada por colinas, valles, pliegues y barrancos en un espacio de alta dimensión. La red puede entrar mínimo local(valle poco profundo) cuando hay una depresión mucho más profunda cerca. En un punto mínimo local, todas las direcciones apuntan hacia arriba y la red no puede escapar de él. Los métodos de aprendizaje estadístico pueden ayudar a evitar este problema, pero son lentos. Se propone un método que combina los métodos estadísticos de la máquina Kasha con el descenso de gradiente de retropropagación y conduce a un sistema que encuentra el mínimo global preservando alta velocidad propagación hacia atrás. Esto se analiza en el cap. 5.

Numero de pie. Un examen cuidadoso de la prueba de convergencia muestra que se supone que las correcciones de peso son infinitesimales. Claramente, esto no es factible en la práctica, ya que conduce a una curva de aprendizaje interminable. El tamaño del paso debe considerarse finito y en este asunto hay que confiar únicamente en la experiencia. Si el tamaño del paso es muy pequeño, entonces la convergencia es demasiado lenta, pero si es muy grande, entonces puede ocurrir parálisis o inestabilidad constante.

Inestabilidad temporal. Si la red aprende a reconocer letras, entonces no tiene sentido aprender B si se olvida A. El proceso de aprendizaje debe ser tal que la red se entrene en todo el conjunto de entrenamiento sin omitir lo que ya se ha aprendido. En la prueba de convergencia, esta condición se cumple, pero también se requiere que a la red se le presenten todos los vectores del conjunto de entrenamiento antes de ajustar los pesos. Los cambios necesarios en los pesos deben calcularse sobre el conjunto completo, y esto requiere memoria adicional; Después de varios ciclos de entrenamiento, los pesos convergerán a un error mínimo. Este método puede resultar inútil si la red se encuentra en un entorno externo en constante cambio, de modo que el mismo vector no se puede repetir una segunda vez. En este caso, es posible que el proceso de aprendizaje nunca converja, deambule sin rumbo u oscile salvajemente. En este sentido, la retropropagación es diferente a los sistemas biológicos.

Estrictamente hablando, el método de retropropagación es un método para calcular rápidamente un gradiente, basado en características de la función de recálculo de la red que reducen la complejidad computacional del cálculo del gradiente. El método utiliza el error en la salida de la red para calcular las derivadas parciales con respecto a los pesos de la última capa de conexiones entrenadas, luego, usando los pesos de la última capa y el error de la red, el error en la salida de la penúltima capa es se determina y se repite el proceso.

Descripción del algoritmo

La retropropagación se aplica a redes multicapa cuyas neuronas tienen una no linealidad con una derivada continua, como esta:

La no linealidad de este tipo es conveniente debido a la simplicidad de calcular la derivada:

Para entrenar la red se utilizan P pares de vectores de señal: el vector de entrada I y el vector que debe recibirse en la salida de la red D. La red, en caso sencillo, consta de N capas, y cada neurona de la capa siguiente está conectada a todas las neuronas de la capa anterior mediante conexiones, con pesos w [n].

Con la propagación directa, para cada capa se calcula (y almacena) la señal total a la salida de la capa (S [n]) y la señal a la salida de la neurona. Por lo tanto, la señal en la entrada de la i-ésima neurona de la n-ésima capa:

Aquí w (i,j) son los pesos de las conexiones de la enésima capa. La señal de salida de la neurona se calcula aplicando la no linealidad de la neurona a la señal total.

La señal de la capa de salida x[N] se considera la señal de salida de la red O.

Con base en la señal de salida de la red O y la señal D, que debe obtenerse en la salida de la red para una entrada determinada, se calcula el error de la red. Normalmente, se utiliza la desviación cuadrática promedio de todos los vectores del conjunto de entrenamiento:

Para entrenar la red, se utiliza el gradiente de la función de error sobre los pesos de la red. El algoritmo de retropropagación implica calcular el gradiente de la función de error "propagando hacia atrás la señal" del error. Luego se calcula la derivada parcial del error con respecto a los pesos de las conexiones mediante la fórmula:

Aquí d es el residual de la red, que para la capa de salida se calcula utilizando la función de error:

Y para capas ocultas, según la discrepancia de la capa anterior:

Para el caso de no linealidad sigmoidea y desviación cuadrática media en función del error:

El entrenamiento real de la red consiste en encontrar valores de peso que minimicen el error en las salidas de la red. Hay muchos métodos basados ​​en gradientes o basados ​​en gradientes disponibles para resolver este problema. En el caso más simple, la red se entrena utilizando pequeños incrementos de pesos de conexión en la dirección opuesta al vector de gradiente:

Este método de aprendizaje se denomina "optimización de descenso de gradiente" y, en el caso de las redes neuronales, a menudo se considera parte del método de retropropagación.

Implementación del algoritmo de retropropagación de errores utilizando el ejemplo de aproximación de funciones.

Tarea: Sea una tabla de valores de argumentos ( X i ) y los valores de función correspondientes ( f(x) i )) ( Esta tabla podría haber surgido durante los cálculos de algunos análisis. función dada al realizar un experimento para identificar la dependencia de la corriente de la resistencia en red eléctrica, al identificar una conexión entre actividad solar y el número de visitas al centro de cardiología, entre el importe de las subvenciones a los agricultores y el volumen de producción agrícola, etc.).

En el entorno de Matlab, es necesario construir y entrenar una red neuronal para aproximar una función especificada en una tabla, i=1, 20. Desarrollar un programa que implemente el algoritmo de aproximación de la red neuronal y muestre los resultados de la aproximación en forma de gráficos.

La aproximación consiste en que, utilizando la información disponible sobre f (x), podemos considerar la función de aproximación z (x) que es cercana en algún sentido a f (x), lo que nos permite realizar las operaciones correspondientes sobre ella y obtener una estimación del error de tal reemplazo.

Aproximación generalmente significa una descripción de alguna dependencia, a veces no especificada explícitamente, o un conjunto de datos que la representan utilizando otra dependencia, generalmente más simple o más uniforme. A menudo, los datos se presentan en forma de puntos de anclaje individuales, cuyas coordenadas se especifican en la tabla de datos. Es posible que el resultado de la aproximación no pase por los puntos de los nodos. Por el contrario, la tarea de la interpolación es encontrar datos en las proximidades de los puntos de los nodos. Para ello se utilizan funciones adecuadas cuyos valores en los puntos nodales coinciden con las coordenadas de estos puntos.

Tarea. En el entorno Matlab, es necesario construir y entrenar una red neuronal para aproximar una función especificada en una tabla (ver Figura 5).

Figura 5. Tabla de valores de funciones En el entorno matemático Matlab, en la ventana de comandos, escribimos el código del programa para crear y entrenar una red neuronal.

Para resolver esto, usaremos la función newff (.), creando una red neuronal multicapa "clásica" entrenada utilizando el método de retropropagación, es decir. los pesos de las sinapsis cambian teniendo en cuenta la función de error; la diferencia entre las respuestas reales y correctas de la red neuronal, determinada en la capa de salida, se propaga en la dirección opuesta: hacia el flujo de señal. La red tendrá dos capas ocultas. La primera capa tiene 5 neuronas, la segunda - 1. La función de activación de la primera capa es "tansig" (función sigmoidea, devuelve vectores de salida con valores en el rango de - 1 a 1), la segunda - "purelin" ( función lineal activación, devuelve los vectores de salida sin cambios). Habrá 100 épocas de entrenamiento. Función de entrenamiento "trainlm": una función que entrena la red (utilizada de forma predeterminada porque proporciona la mayor cantidad de aprendizaje rápido, pero requiere mucha memoria).

Código de programa:

P = ceros (1, 20);

para i = 1: 20% de creación de matriz P (i) = i*0,1; %entrada (argumento) final T=; %entrada (valor de función) net = newff ([-1 2.09], ,("tansig" "purelin")); %creación de una red neuronal. trenParam. épocas = 100; %establecer el número de épocas de entrenamiento net=train (net,P,T); % entrenamiento en red y = sim(net,P); Cifra de encuesta de % de red capacitada (1);

trama (P,T,P,y,"o"),cuadrícula; %dibujar un gráfico de los datos fuente y la función generada por la red neuronal.

El resultado de la red neuronal.

Resultado del entrenamiento (ver Fig. 2): el gráfico muestra el tiempo de entrenamiento de la red neuronal y el error de entrenamiento. En este ejemplo, la red neuronal pasó por las 100 épocas, aprendiendo y reduciendo gradualmente los errores, hasta alcanzar 10 -2,35 (0,00455531).

Figura 2. Resultado del entrenamiento de redes neuronales.

Gráfico de los datos originales y la función generada por la red neuronal (ver Fig. 3): los círculos indican los datos originales y la línea indica la función generada por la red neuronal. A continuación, utilizando los puntos obtenidos, puede construir una regresión y obtener una ecuación de aproximación (ver Figura 8). Usamos la regresión cúbica porque su gráfica pasa con mayor precisión por los puntos obtenidos. La ecuación resultante se parece a:

y=0,049x 3 +0,88x 2 -0,006x+2,1.

Así, vemos que utilizando una red neuronal se puede encontrar rápidamente una función, conociendo solo las coordenadas de los puntos por los que pasa.

Figura 3. Gráfico de los datos originales y la función generada por la red neuronal


Figura 4. Gráfica de la función de aproximación



¿Te gustó el artículo? ¡Compartir con tus amigos!