¿Deben converger siempre las redes neuronales?

16

Introducción

Paso uno

Escribí una red neuronal de propagación hacia atrás estándar, y para probarla, decidí que mapeara XOR.

Es una red 2-2-1 (con función de activación de tanh)

X1  M1
        O1
X2  M2

B1  B2

Para fines de prueba, configuré manualmente la neurona media superior (M1) para que sea una puerta AND y la neurona inferior (M2) para que sea una puerta OR (ambas salidas 1 si es verdadera y -1 si es falsa).

Ahora, también configuré manualmente la conexión M1-O1 para que sea -.5, M2-O1 para que sea 1 y B2 para que sea -.75

Entonces, si M1 = 1 y M2 = 1, la suma es (-0.5 +1 -0.75 = -.25) tanh (0.25) = -0.24

si M1 = -1 y M2 = 1, la suma es ((-0.5) * (- 1) +1 -0.75 = .75) tanh (0.75) = 0.63

si M1 = -1 y M2 = -1, la suma es ((-0.5) * (- 1) -1 -0.75 = -1.25) tanh (1.25) = -0.8

Este es un resultado relativamente bueno para una "primera iteración".

Segundo paso

Luego procedí a modificar estos pesos un poco y luego los entrené usando el algoritmo de propagación de errores (basado en el descenso del gradiente). En esta etapa, dejo intactos los pesos entre las neuronas de entrada y media, y simplemente modifico los pesos entre el medio (y el sesgo) y la salida.

Para las pruebas, configuré los pesos para ser y .5 .4 .3 (respectivamente para M1, M2 y sesgo)

Aquí, sin embargo, empiezo a tener problemas.


Mi pregunta

Establecí mi tasa de aprendizaje en .2 y dejé que el programa iterara a través de los datos de entrenamiento (ABA ^ B) durante 10000 iteraciones o más.

La mayoría de las veces, los pesos convergen a un buen resultado. Sin embargo, a veces, esos pesos convergen a (digamos) 1.5, 5.7 y .9, lo que resulta en una salida +1 (par) a una entrada de {1, 1} (cuando el resultado debería ser un -1).

¿Es posible que un ANN relativamente simple que tiene una solución no converja en absoluto o hay un error en mi implementación?

Xodarap
fuente

Respuestas:

13

(Supongo que por "propagación de error" te refieres a lo que yo llamo " propagación de error de retroceso ").

En la página 231 de Neural Networks (por Haykin), afirma que la propagación inversa siempre converge, aunque la tasa puede ser (en sus palabras) "terriblemente lenta".

Sin embargo, creo que lo que está preguntando no es si el algoritmo siempre convergerá, sino si siempre convergerá a la respuesta óptima. Y desafortunadamente, no lo hará. Incluso en casos simples como el suyo, es completamente posible que haya mínimos locales que no sean mínimos globales.

Tratar con los extremos locales es un tema muy importante en la optimización, y puede encontrar una gran cantidad de consejos sobre cómo lidiar con ellos. Uno de los más comunes es lo que parece que estás haciendo: reinicios aleatorios (es decir, simplemente ejecuta el algoritmo varias veces, cada uno desde un lugar aleatorio).

Para averiguar si hay un error en su código, imprimiría el término de error y verificaría que disminuye en cada iteración. Si es así, entonces probablemente solo estés alcanzando un mínimo local.

Xodarap
fuente
Todos los pesos aumentan (el peso de la neurona OR aumenta más rápido), lo que minimiza el error cuando la entrada es {1,0}, {0,1}, {0,0} pero maximiza el error cuando {1,1}. ¿Es este un problema con el aprendizaje en línea sobre el aprendizaje por lotes?
@Shmuel: tanto en línea como por lotes irán en la dirección del gradiente. Si ese gradiente apunta en la dirección incorrecta, ambos irán en la dirección incorrecta. La página de Wikipedia sobre Hill Climbing tiene algunas formas de evitar esto, si está interesado.
Xodarap
6

Si ha arreglado los pesos entre las unidades de entrada y ocultas y solo está modificando los pesos ocultos a los de salida durante el entrenamiento, entonces no habrá mínimos locales. Con la entrada fija a pesos ocultos, el problema de optimización que está resolviendo es similar a la regresión logística pero con una función tanh en lugar de sigmoide. Independientemente de que el problema es convexo y debe haber solo un mínimo global.

Dado que los mínimos locales no están causando su problema, recomendaría aproximar numéricamente sus derivados y luego compararlos con los valores que está calculando. Si no está seguro de cómo hacer esto, el tutorial ULFDL de Standford tiene una buena descripción general.

Alto
fuente