¿Cómo elegir el número de capas y nodos ocultos en una red neuronal de avance?


542

¿Existe un método estándar y aceptado para seleccionar el número de capas y el número de nodos en cada capa, en una red neuronal de avance? Estoy interesado en formas automatizadas de construir redes neuronales.


44
Entre todas las excelentes respuestas, este documento me pareció útil dstath.users.uth.gr/papers/IJRS2009_Stathakis.pdf
Sello Debpriya

@DebpriyaSeal no es tan útil ...
DarkCygnus

Respuestas:


469

Me doy cuenta de que esta pregunta ha sido respondida, pero no creo que la respuesta existente realmente involucre la pregunta más allá de señalar un enlace generalmente relacionado con el tema de la pregunta. En particular, el enlace describe una técnica para la configuración programática de la red, pero ese no es un " [a] método estándar y aceptado " para la configuración de la red.

Siguiendo un pequeño conjunto de reglas claras, uno puede establecer mediante programación una arquitectura de red competente (es decir, el número y tipo de capas neuronales y el número de neuronas que comprende cada capa). Siguiendo este esquema, esto le dará una arquitectura competente, pero probablemente no una óptima.

Pero una vez que esta red se inicializa, puede ajustar de forma iterativa la configuración durante el entrenamiento utilizando varios algoritmos auxiliares; Una familia de estos trabaja podando nodos basados ​​en valores (pequeños) del vector de peso después de un cierto número de épocas de entrenamiento, en otras palabras, eliminando nodos innecesarios / redundantes (más sobre esto a continuación).

Por lo tanto, cada NN tiene tres tipos de capas: entrada , oculta y salida .


Por lo tanto, crear la arquitectura NN significa obtener valores para el número de capas de cada tipo y el número de nodos en cada una de estas capas.

La capa de entrada

Simple: cada NN tiene exactamente uno de ellos, sin excepciones que yo sepa.

Con respecto al número de neuronas que componen esta capa, este parámetro se determina de forma única y completa una vez que conoce la forma de sus datos de entrenamiento. Específicamente, el número de neuronas que comprenden esa capa es igual al número de características (columnas) en sus datos . Algunas configuraciones NN agregan un nodo adicional para un término de sesgo.


La capa de salida

Al igual que la capa de entrada, cada NN tiene exactamente una capa de salida. Determinar su tamaño (número de neuronas) es simple; está completamente determinado por la configuración del modelo elegido.

¿Su NN se está ejecutando en modo máquina o en modo de regresión (la convención ML de usar un término que también se usa en estadísticas pero asignarle un significado diferente es muy confuso). Modo máquina: devuelve una etiqueta de clase (por ejemplo, "Cuenta Premium" / "Cuenta básica"). El modo de regresión devuelve un valor (por ejemplo, precio).

Si el NN es un regresor, la capa de salida tiene un solo nodo.

Si el NN es un clasificador, también tiene un único nodo a menos que se utilice softmax, en cuyo caso la capa de salida tiene un nodo por etiqueta de clase en su modelo.

Las capas ocultas

Entonces, esas pocas reglas establecen el número de capas y el tamaño (neuronas / capa) para las capas de entrada y salida. Eso deja las capas ocultas.

¿Cuántas capas ocultas? Bueno, si sus datos son linealmente separables (que a menudo sabe cuando comienza a codificar un NN), entonces no necesita ninguna capa oculta. Por supuesto, tampoco necesita un NN para resolver sus datos, pero aún así hará el trabajo.

Más allá de eso, como probablemente sepa, hay una montaña de comentarios sobre la cuestión de la configuración de capas ocultas en NN (consulte las preguntas frecuentes de NN increíblemente exhaustivas y perspicaces para obtener un excelente resumen de ese comentario). Un tema dentro de este tema sobre el cual hay consenso es la diferencia de rendimiento de agregar capas ocultas adicionales: las situaciones en las que el rendimiento mejora con una segunda (o tercera, etc.) capa oculta son muy pocas. Una capa oculta es suficiente para la gran mayoría de los problemas.

Entonces, ¿qué pasa con el tamaño de las capas ocultas? ¿Cuántas neuronas? Hay algunas reglas empíricas derivadas empíricamente, de las cuales la más comúnmente utilizada es ' el tamaño óptimo de la capa oculta generalmente está entre el tamaño de la entrada y el tamaño de las capas de salida '. Jeff Heaton, autor de Introducción a las redes neuronales en Java ofrece algunas más.

En resumen, para la mayoría de los problemas, uno podría obtener un rendimiento decente (incluso sin un segundo paso de optimización) configurando la configuración de la capa oculta usando solo dos reglas: (i) el número de capas ocultas es igual a uno; y (ii) el número de neuronas en esa capa es la media de las neuronas en las capas de entrada y salida.


Optimización de la configuración de red

Podadescribe un conjunto de técnicas para recortar el tamaño de la red (por nodos no capas) para mejorar el rendimiento computacional y, a veces, el rendimiento de resolución. La esencia de estas técnicas es eliminar los nodos de la red durante el entrenamiento mediante la identificación de los nodos que, si se eliminan de la red, no afectarían notablemente el rendimiento de la red (es decir, la resolución de los datos). (Incluso sin usar una técnica de poda formal, puede obtener una idea aproximada de qué nodos no son importantes al observar su matriz de pesas después del entrenamiento; observe los pesos muy cerca de cero: son los nodos en cada extremo de esos pesos que a menudo son eliminado durante la poda.) Obviamente, si usa un algoritmo de poda durante el entrenamiento, comience con una configuración de red que sea más probable que tenga nodos en exceso (es decir, 'podables'), en otras palabras,

Dicho de otra manera, al aplicar un algoritmo de poda a su red durante el entrenamiento, puede acercarse a la configuración óptima de la red; si puede hacer eso en un solo "inicio" (como un algoritmo basado en algoritmos genéticos) No lo sé, aunque sí sé que por ahora, esta optimización de dos pasos es más común.


31
Usted afirma que para la mayoría de los problemas solo necesita una capa oculta. Quizás sea mejor decir que las NN con más capas ocultas son extremadamente difíciles de entrenar (si desea saber cómo, consulte las publicaciones del grupo de Hinton en Uof Toronto, "aprendizaje profundo") y, por lo tanto, los problemas que requieren más que un oculto capa son consideradas "no solucionables" por las redes neuronales.
bayerj

13
Escribe Si el NN es un regresor, entonces la capa de salida tiene un solo nodo. . ¿Por qué solo un nodo? ¿Por qué no puedo tener múltiples salidas continuas?
gerrit

55
@gerrit Definitivamente puede tener múltiples salidas continuas si su salida objetivo tiene un valor vectorial. Sin embargo, definir una función de pérdida adecuada para salidas con valor vectorial puede ser un poco más complicado que con una salida.
lmjohns3

55
Pensé que era lo opuesto a esto: si el NN es un clasificador, entonces también tiene un solo nodo a menos que se use softmax, en cuyo caso la capa de salida tiene un nodo por etiqueta de clase en su modelo.
viyps

2
@doug Gracias por esta maravillosa respuesta. Esto me permitió reducir mi ANN de 3 capas ocultas a 1 y lograr la misma precisión de clasificación estableciendo el número correcto de neuronas ocultas ... Acabo de usar el promedio de la entrada y la salida sumadas. ¡Gracias!
rayryeng

130

La respuesta de @ doug me ha funcionado. Hay una regla general adicional que ayuda a los problemas de aprendizaje supervisado. Por lo general, puede evitar el sobreajuste si mantiene su número de neuronas a continuación:

Nh=Ns(α(Ni+No))

Ni
No
Ns
α

alpha

Ns(Ni+No)α

Para un procedimiento automatizado, comenzaría con un alfa de 2 (el doble de grados de libertad en sus datos de entrenamiento que su modelo) y avanzaría hasta 10 si el error (pérdida) para su conjunto de datos de entrenamiento es significativamente menor que para su conjunto de datos de prueba


77
Esta fórmula es muy interesante y útil. ¿Hay alguna referencia para esta fórmula? Sería más útil
prashanth

2
@prashanth Combiné varias aserciones y fórmulas en el texto de NN Design mencionado anteriormente. Pero no creo que se llame explícitamente en la forma que muestro. Y mi versión es una aproximación muy cruda con muchos supuestos simplificadores. Entonces YMMV.
placas

1
Primero, quería escribir el conjunto de entrenamiento en lugar del conjunto de prueba en el comentario anterior. Tal vez esta fórmula tenga sentido si la leemos como "necesita al menos esa cantidad de neuronas para aprender suficientes características (el DOF que mencionó) del conjunto de datos". Si las características del conjunto de datos son representativas de la población y qué tan bien puede generalizarse el modelo, tal vez sea una pregunta diferente (pero importante).
kon psych

3
Nh(Ni+No)

2
@mateus, quizás una regla general ligeramente mejor para múltiples capas es la N_hsolución (número promedio de neuronas ocultas por capa) para esto N_s = (N_i + N_o) * N_h ^ N_hidden_layers. Pero todavía no usaría esta fórmula. Es solo para problemas muy básicos (problemas con los juguetes) cuando no planea implementar ningún otro enfoque de regularización.
placas

61

De Introducción a las redes neuronales para Java (segunda edición) por Jeff Heaton : vista previa disponible gratuitamente en Google Books y anteriormente en el sitio web del autor :

El número de capas ocultas

En realidad, se deben tomar dos decisiones con respecto a las capas ocultas: cuántas capas ocultas se deben tener realmente en la red neuronal y cuántas neuronas habrá en cada una de estas capas. Primero examinaremos cómo determinar el número de capas ocultas para usar con la red neuronal.

Los problemas que requieren dos capas ocultas rara vez se encuentran. Sin embargo, las redes neuronales con dos capas ocultas pueden representar funciones con cualquier tipo de forma. Actualmente no existe una razón teórica para usar redes neuronales con más de dos capas ocultas. De hecho, para muchos problemas prácticos, no hay razón para usar más de una capa oculta. La tabla 5.1 resume las capacidades de las arquitecturas de redes neuronales con varias capas ocultas.

Tabla 5.1: Determinación del número de capas ocultas

El | Número de capas ocultas | Resultado |

 0: solo es capaz de representar funciones o decisiones lineales separables.

 1 - Puede aproximar cualquier función que contenga un mapeo continuo
de un espacio finito a otro.

 2 - Puede representar un límite de decisión arbitraria a una precisión arbitraria
con funciones de activación racionales y puede aproximarse a cualquier suave
mapeo a cualquier precisión.

Decidir el número de capas neuronales ocultas es solo una pequeña parte del problema. También debe determinar cuántas neuronas habrá en cada una de estas capas ocultas. Este proceso se trata en la siguiente sección.

El número de neuronas en las capas ocultas

Decidir la cantidad de neuronas en las capas ocultas es una parte muy importante para decidir la arquitectura general de su red neuronal. Aunque estas capas no interactúan directamente con el entorno externo, tienen una tremenda influencia en el resultado final. Tanto el número de capas ocultas como el número de neuronas en cada una de estas capas ocultas deben considerarse cuidadosamente.

El uso de muy pocas neuronas en las capas ocultas dará como resultado algo llamado falta de ajuste. El ajuste insuficiente ocurre cuando hay muy pocas neuronas en las capas ocultas para detectar adecuadamente las señales en un conjunto de datos complicado.

Usar demasiadas neuronas en las capas ocultas puede ocasionar varios problemas. Primero, demasiadas neuronas en las capas ocultas pueden resultar en un sobreajuste. El sobreajuste ocurre cuando la red neuronal tiene tanta capacidad de procesamiento de información que la cantidad limitada de información contenida en el conjunto de entrenamiento no es suficiente para entrenar a todas las neuronas en las capas ocultas. Un segundo problema puede ocurrir incluso cuando los datos de entrenamiento son suficientes. Un número excesivamente grande de neuronas en las capas ocultas puede aumentar el tiempo que lleva entrenar la red. La cantidad de tiempo de entrenamiento puede aumentar hasta el punto de que es imposible entrenar adecuadamente la red neuronal. Obviamente, se debe llegar a un compromiso entre demasiadas y muy pocas neuronas en las capas ocultas.

Existen muchos métodos generales para determinar la cantidad correcta de neuronas que se utilizarán en las capas ocultas, como las siguientes:

  • El número de neuronas ocultas debe estar entre el tamaño de la capa de entrada y el tamaño de la capa de salida.
  • El número de neuronas ocultas debe ser 2/3 del tamaño de la capa de entrada, más el tamaño de la capa de salida.
  • El número de neuronas ocultas debe ser menos del doble del tamaño de la capa de entrada.

Estas tres reglas proporcionan un punto de partida para que lo considere. En última instancia, la selección de una arquitectura para su red neuronal se reducirá a prueba y error. Pero, ¿qué se entiende exactamente por prueba y error? No desea comenzar a lanzar números aleatorios de capas y neuronas a su red. Hacerlo requeriría mucho tiempo. El Capítulo 8, "Poda de una red neuronal" explorará varias formas de determinar una estructura óptima para una red neuronal.


También me gusta el siguiente fragmento de una respuesta que encontré en researchgate.net , que transmite mucho en pocas palabras:

Steffen B Petersen · Universidad de Aalborg

[...]

Para asegurar la capacidad de la red de generalizar, el número de nodos debe mantenerse lo más bajo posible. Si tiene un gran exceso de nodos, su red se convierte en un banco de memoria que puede recordar el conjunto de entrenamiento a la perfección, pero no funciona bien en muestras que no formaban parte del conjunto de entrenamiento.


¿Conoces la fuente de la cita de Steffen B Petersen?
Sebastian Nielsen

Lo siento, no lo hago. Intenté buscarlo pero no pude encontrarlo ... Creo que el artículo se ha eliminado de la web. ¿Quizás puedas contactarlo directamente?
jj_

¿No debería tenerse en cuenta el tamaño del conjunto de entrenamiento? Tengo un conjunto de datos tabular con ~ 300,000 muestras únicas (precios de automóviles). La capa de entrada tiene 89 nodos. Al entrenar una red sin regularización y solo 89 nodos en una sola capa oculta, la pérdida de entrenamiento se estabiliza después de algunas épocas. Mesetas RMSE en ~ $ 1,800 (el nodo de salida único es el precio en este problema de regresión).
rodrigo-silveira

Creo que la fuente de la cita de Steffen B Petersen estaba aquí: researchgate.net/post/…
TripleAntigen

43

Estoy trabajando en un estudio empírico de esto en este momento (¡aprobando un siglo de procesadores de simulaciones en nuestra instalación de HPC!). Mi consejo sería usar una red "grande" y regularización, si usa la regularización, la arquitectura de la red se vuelve menos importante (siempre que sea lo suficientemente grande como para representar la función subyacente que queremos capturar), pero debe ajustar la regularización parámetro correctamente

Uno de los problemas con la selección de arquitectura es que es un control discreto, en lugar de continuo, de la complejidad del modelo y, por lo tanto, puede ser un poco un instrumento contundente, especialmente cuando la complejidad ideal es baja.

Sin embargo, todo esto está sujeto a los teoremas de "no almuerzo gratis", aunque la regularización es efectiva en la mayoría de los casos, siempre habrá casos en los que la selección de arquitectura funciona mejor, y la única forma de averiguar si eso es cierto para el problema en cuestión es probar ambos enfoques y validar de forma cruzada.

Si tuviera que construir un generador de redes neuronales automatizado, usaría el enfoque bayesiano basado en el muestreo híbrido Monte Carlo (HMC) de Radford Neal, y usaría una red grande e integraría sobre los pesos en lugar de optimizar los pesos de una sola red. Sin embargo, eso es computacionalmente costoso y un poco un "arte negro", ¡pero los resultados que logra el profesor Neal sugieren que vale la pena!


"Estoy trabajando en un estudio empírico de esto en este momento" - ¿Hay alguna actualización?
Martin Thoma

2
no, por supuesto que no, todavía recomendaría una red grande (ish) y regularización, pero no hay una viñeta plateada, algunos problemas no necesitan regularización, pero algunos conjuntos de datos necesitan ajuste de tamaño de capa oculta, así como regularización. Lamentablemente, a los revisores no les gustó el artículo :-(
Dikran Marsupial

17

Hasta donde sé, no hay forma de seleccionar automáticamente el número de capas y neuronas en cada capa. Pero hay redes que pueden construir automáticamente su topología, como EANN (Redes Neuronales Artificiales Evolutivas, que usan Algoritmos Genéticos para evolucionar la topología).

Hay varios enfoques, uno más o menos moderno que parecía dar buenos resultados fue NEAT (Neuro Evolution of Topified Augized) .



6

Formas automatizadas de construir redes neuronales mediante la búsqueda global de hiperparámetros:

Las capas de entrada y salida son de tamaño fijo.

Lo que puede variar:

  • el número de capas
  • cantidad de neuronas en cada capa
  • el tipo de capa

Se pueden usar varios métodos para este problema de optimización discreta , con la red sin error de muestra como la función de costo.

  • 1) Rejilla / búsqueda aleatoria sobre el espacio de parámetros, para comenzar desde una posición ligeramente mejor
  • 2) Muchos métodos que podrían usarse para encontrar la arquitectura óptima. (Sí, lleva tiempo).
  • 3) Haga un poco de regularización, enjuague, repita.

6

Lo siento, aún no puedo publicar un comentario, así que tengan paciencia conmigo. De todos modos, me topé con este hilo de discusión que me recordó un artículo que había visto recientemente. Creo que podría ser de interés para las personas que participan aquí:

AdaNet: Aprendizaje estructural adaptativo de redes neuronales artificiales

Corinna Cortés, Xavier Gonzalvo, Vitaly Kuznetsov, Mehryar Mohri, Scott Yang; Actas de la 34a Conferencia Internacional sobre Aprendizaje Automático, PMLR 70: 874-883, 2017.

Resumen Presentamos un nuevo marco para analizar y aprender redes neuronales artificiales. Nuestro enfoque aprende de forma simultánea y adaptativa tanto la estructura de la red como sus pesos. La metodología se basa y está acompañada de fuertes garantías de aprendizaje teórico dependientes de los datos, de modo que la arquitectura de red final se adapte de manera comprobable a la complejidad de cualquier problema dado.



3

Me gustaría sugerir un método menos común pero súper efectivo .

Básicamente, puede aprovechar un conjunto de algoritmos llamados "algoritmos genéticos" que prueban un pequeño subconjunto de las opciones potenciales (número aleatorio de capas y nodos por capa). Luego trata a esta población de opciones como "padres" que crean hijos al combinar / mutar a uno o más de los padres de forma muy parecida a la evolución de los organismos. Los mejores niños y algunos buenos niños al azar se mantienen en cada generación y durante generaciones, los más aptos sobreviven.

Para ~ 100 o menos parámetros (como la elección del número de capas, tipos de capas y el número de neuronas por capa), este método es súper efectivo. Úselo creando una serie de arquitecturas de red potenciales para cada generación y capacitándolas parcialmente hasta que se pueda estimar la curva de aprendizaje (mini lotes de 100-10k generalmente dependiendo de muchos parámetros). Después de algunas generaciones, es posible que desee considerar el punto en el que el tren y la validación comienzan a tener una tasa de error (sobreajuste) significativamente diferente como su función objetivo para elegir niños. Puede ser una buena idea usar un subconjunto muy pequeño de sus datos (10-20%) hasta que elija un modelo final para llegar a una conclusión más rápido. Además, use una sola semilla para la inicialización de su red para comparar adecuadamente los resultados.

10-50 generaciones deberían producir excelentes resultados para una red de tamaño decente.


Otra forma muy interesante es la optimización bayesiana, que también es un método de optimización de caja negra extremadamente eficaz para un número relativamente pequeño de parámetros. arxiv.org/pdf/1206.2944.pdf
Dan Erez

2

Número de capas ocultas y lo que pueden lograr:

0: solo es capaz de representar funciones o decisiones lineales separables.

1 - Puede aproximar cualquier función que contenga un mapeo continuo de un espacio finito a otro.

2 - Puede representar un límite de decisión arbitrario para una precisión arbitraria con funciones de activación racionales y puede aproximar cualquier mapeo uniforme a cualquier precisión.

Más de 2: las capas adicionales pueden aprender representaciones complejas (una especie de ingeniería de entidades automática) para capas de capas.


8
Fuente (s) por favor. - Revisor
Jim
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.