¿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.
¿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.
Respuestas:
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.
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:
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
N_h
solució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.
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.
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!
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) .
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:
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.
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.
He enumerado muchas formas de aprendizaje de topología en mi tesis de maestría, capítulo 3 . Las grandes categorías son:
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.
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.