Convergencia de pesos de redes neuronales

10

Llegué a una situación en la que los pesos de mi red neuronal no convergen incluso después de 500 iteraciones. Mi red neuronal contiene 1 capa de entrada, 1 capa oculta y 1 capa de salida. Son alrededor de 230 nodos en la capa de entrada, 9 nodos en la capa oculta y 1 nodo de salida en la capa de salida. Quería saber si hago una condición de parada temprana (por ejemplo, parando mi entrenamiento de la red neuronal después de 100 iteraciones). ¿Qué efecto tendrá esto en el modelo?

¿También quería saber cuál es el estándar de trabajo de la industria si los pesos en la red neuronal no convergen?

Aprendiz
fuente
¿Están sus datos correctamente normalizados? Esta suele ser la razón de tal comportamiento.
sashkello
Por lo general, el número de neuronas en la capa oculta debe ser del mismo tamaño que en la capa de entrada. Creo que 9 neuronas es demasiado pequeña. ¿Intentaste aumentar a 200-300 neuronas?
Jueves
@sashkello Sí, los datos se normalizan correctamente.
Aprendiz
1
@juampa No hay razón para tener 9 nodos en la capa oculta. Sentimos que tener más nodos en la capa oculta aumentará la complejidad de la red y sobreajustará los datos.
Estudiante el
3
Necesitas dar un poco más de explicación. ¿Cuál es el problema que estás resolviendo? ¿Cuántos puntos de datos de entrenamiento tienes? ¿Qué quieres decir con no converger? - ¿solo quiere decir que el rendimiento (en el conjunto de entrenamiento) es malo, o que sus pesos no convergen ... si la convergencia de peso, entonces necesita usar una tasa de aprendizaje más baja o una tasa de aprendizaje decreciente. También es posible que desee utilizar la regresión logística / lineal como línea de base. Por último, ¿qué tan correlacionadas están sus entradas? Si están muy correlacionados, la normalización no será suficiente, y debe considerar la diagonalización (también conocida como PCA).
seanv507

Respuestas:

13

Hay una serie de preguntas para hacer:

  • ¿Tiene la cantidad adecuada de neuronas en cada capa?
  • ¿Está utilizando los tipos apropiados de funciones de transferencia?
  • ¿Está utilizando el tipo apropiado de algoritmo de aprendizaje?
  • ¿tiene un tamaño de muestra suficientemente grande?
  • ¿puede confirmar que sus muestras tienen el tipo correcto de relación entre ellas para ser informativas? (no redundante, de dimensión relevante, etc.)

¿Qué puedes dar en el camino de las efemérides? ¿Puede decirnos algo sobre la naturaleza de los datos?

Podrías hacer un árbol de redes neuronales potenciado por gradiente.

Usted preguntó qué pasa si se detiene temprano.

Puedes probarlo tu mismo. Ejecute 300x donde comience con pesos inicializados al azar, y luego pare en un número específico de iteraciones, digamos 100. En ese punto calcule su error de conjunto, su error de subconjunto de entrenamiento y su error de conjunto de prueba. Repetir. Después de que tenga 300 valores para indicarle cuál es el error, puede hacerse una idea de su distribución de errores con 100 iteraciones de aprendizaje. Si lo desea, puede probar esa distribución en varios otros valores de aprendizaje. Sugiero 200, 500 y 1000 iteraciones. Esto le dará una idea de cómo cambia su SNR con el tiempo. Una gráfica del recuento de SNR vs iteración puede darle una idea sobre "acantilados" o "lo suficientemente bueno". A veces hay acantilados donde se derrumba el error. A veces el error es aceptable en ese punto.

Se necesitan datos "relativamente simples" o "bastante buena" suerte para que su sistema converja consistentemente en menos de 100 iteraciones. Los dos no son sobre repetibilidad ni son generalizables.

¿Por qué está pensando en términos de pesos convergentes y no en errores por debajo de un umbral particular? ¿Alguna vez has oído hablar de una paradoja de votación? ( enlace ) Cuando tiene interacciones cíclicas en su sistema (como la retroalimentación en las redes neuronales), puede tener paradojas de votación, cambios acoplados. No sé si el peso solo es un indicador suficiente para la convergencia de la red.

Puedes pensar en los pesos como un espacio. Tiene más de 3 dimensiones, pero sigue siendo un espacio. En el "centroide" de ese espacio está su región de "mejor ajuste". Lejos del centroide es un ajuste menos bueno. Puede pensar en la configuración actual de sus pesos como un único punto en ese espacio.

Ahora no sabes dónde está el "bien". Lo que tienes es una "pendiente" local. Puede realizar el descenso de gradiente hacia el local "mejor" dado dónde está su punto ahora. No te dice lo "universal" mejor, pero lo local es mejor que nada.

Entonces comienzas a iterar, caminando cuesta abajo hacia ese valle de mejoría. Usted itera hasta que cree que ha terminado. Quizás el valor de sus pesos sea grande. Tal vez están rebotando por todo el lugar. Tal vez el cálculo está "tomando demasiado tiempo". Quieres que se haga

Entonces, ¿cómo sabes si dónde estás es "suficientemente bueno"?

Aquí hay una prueba rápida que puedes hacer:

Tome 30 subconjuntos aleatorios uniformes de los datos (como un pequeño porcentaje de los datos cada uno) y vuelva a entrenar la red en ellos. Debería ser mucho más rápido. Observe cuánto tiempo les lleva converger y compárelo con el historial de convergencia del gran conjunto. Pruebe el error de la red para todos los datos en estos subconjuntos y vea cómo esa distribución de errores se compara con su gran error. Ahora aumente el tamaño del subconjunto hasta un 5% de sus datos y repita. Mira lo que esto te enseña.

Esta es una variación en la optimización del enjambre de partículas (ver referencia) modelada sobre cómo las abejas toman decisiones basadas en la exploración.

Preguntó qué sucede si los pesos no convergen.

Las redes neuronales son una herramienta. No son la única herramienta. Hay otros. Me gustaría ver el uso de uno de ellos.

Trabajo en términos de criterios de información, así que miro tanto los pesos (recuento de parámetros) como el error. Puedes probar uno de esos.

Hay algunos tipos de preprocesamiento que pueden ser útiles. Centro y escala. Rotar utilizando componentes principales. Si observa los valores propios en sus componentes principales, puede usar las reglas de trazado de skree para estimar la dimensión de sus datos. Reducir la dimensión puede mejorar la convergencia. Si sabe algo sobre la 'física subyacente', puede suavizar o filtrar los datos para eliminar el ruido. A veces, la convergencia se trata de ruido en el sistema.

La idea de la detección comprimida me parece interesante. Puede permitir submuestreo radical de algunos sistemas sin pérdida de generalización. Me gustaría ver algunas estadísticas y distribuciones de sus datos de muestreo de arranque para determinar si y en qué nivel de submuestreo el conjunto de entrenamiento se vuelve representativo. Esto le da una cierta medida de la "salud" de sus datos.

A veces es bueno que no converjan

¿Alguna vez has oído hablar de una paradoja de votación? Podrías pensar en ello como un primo de mayor cuenta en un callejón sin salida de dos vías. Es un bucle. En una paradoja de votación de 2 personas, la primera persona quiere al candidato "A" mientras que la segunda quiere al candidato "B" (o no A o tal). La parte importante es que puedes pensarlo como un bucle.

Los bucles son importantes en las redes neuronales. Retroalimentación. Recursividad Hizo que el perceptrón pudiera resolver problemas similares a XOR. Crea bucles y, a veces, los bucles pueden actuar como la paradoja de la votación, donde seguirán cambiando de peso si tuviera iteraciones infinitas. No están destinados a converger porque no es el peso individual lo que importa, sino la interacción de los pesos en el bucle.

Nota:

Usar solo 500 iteraciones puede ser un problema. He tenido NN's donde 10,000 iteraciones apenas fueron suficientes. El número de iteraciones para ser "suficiente" depende, como ya he indicado, de los datos, la topología NN, las funciones de transferencia de nodos, la función de aprendizaje / entrenamiento e incluso el hardware de la computadora. Debe comprender bien cómo interactúan todos con su recuento de iteraciones antes de decir que ha habido "suficientes" o "demasiadas" iteraciones. También se deben considerar otras consideraciones, como el tiempo, el presupuesto y lo que desea hacer con el NN cuando termine la capacitación.

Chen, RB, Chang, SP, Wang, W. y Wong, WK, (2011, septiembre). Diseños experimentales óptimos a través de métodos de optimización de enjambre de partículas (preimpresión), obtenido el 25 de marzo de 2012, de http://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdf

Estudiante
fuente
2

Para mí es difícil decir cuál podría ser tu problema. Un punto a considerar es la implementación concreta que utiliza. Concretamente, qué algoritmo de optimización. Si su red tarda mucho en converger, y está utilizando alguna forma de descenso de gradiente estocástico (o mini-lote), entonces podría ser el caso de que su red esté en una meseta (una región donde la función de energía / error es muy plana) para que los gradientes sean muy bajos y, por lo tanto, converjan).

Si es así, verifique la magnitud de los gradientes para ver si este es el caso. Hay varias técnicas diferentes para tratar este problema, como agregar un impulso al gradiente.

Para obtener una descripción detallada de las técnicas y los trucos del oficio, eche un vistazo a este documento (debe leer) de Yann LeCun .

jpmuc
fuente
1

Asegúrese de que sus gradientes no vayan más allá de los límites o también es posible que los gradientes se vuelvan cero. Esto se conoce popularmente como gradientes explosivos y problemas de gradientes que desaparecen.

Una posible solución es usar un optimizador adaptativo como AdaGrad o Adam.

Me enfrenté a un problema similar mientras entrenaba una red neuronal simple cuando comencé con las redes neuronales.

Pocas referencias: https://en.wikipedia.org/wiki/Vanishing_gradient_problem https://www.youtube.com/watch?v=VuamhbEWEWA

Yeshwanth Venkatesha
fuente
0

He tenido muchos conjuntos de datos que convergieron lentamente, probablemente porque las entradas estaban altamente correlacionadas.

Escribí mi propio analizador C ++ NN, y con él, puedo variar la tasa de aprendizaje para cada peso. Por cada peso en cada borde hago dos cosas que ayudan un poco.

Primero, multiplico cada tasa de aprendizaje por un número aleatorio distribuido uniformemente de [0,1]. Supongo que eso ayuda con el problema de correlación.

El otro truco es que comparo el gradiente actual con el gradiente anterior en cada borde. Si el gradiente apenas se redujo porcentualmente, entonces multiplico la tasa de aprendizaje para esa ventaja por hasta 5.

No tengo ninguna justificación particular para ninguno de esos trucos, pero parecen funcionar bastante bien.

Espero que esto ayude.

Bill Davy
fuente