¿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.
model-selection
neural-networks
Rob Hyndman
fuente
fuente
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.
fuente
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
fuente
N_h
solución (número promedio de neuronas ocultas por capa) para estoN_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 :
También me gusta el siguiente fragmento de una respuesta que encontré en researchgate.net , que transmite mucho en pocas palabras:
fuente
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!
fuente
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) .
fuente
Árbitro:
1 Maestros, Timothy. Prácticas recetas de redes neuronales en C ++. Morgan Kaufmann, 1993.
[2] http://www.iitbhu.ac.in/faculty/min/rajesh-rai/NMEICT-Slope/lecture/c14/l1.html
fuente
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.
fuente
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í:
fuente
He enumerado muchas formas de aprendizaje de topología en mi tesis de maestría, capítulo 3 . Las grandes categorías son:
fuente
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.
fuente
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.
fuente