machine learning - redes - Estimar el número de neuronas y el número de capas de una red neuronal artificial
redes neuronales (3)
En la práctica, esto no es difícil (basado en haber codificado y entrenado docenas de MLP).
En un sentido de libro de texto, conseguir la arquitectura "correcta" es difícil, es decir, sintonizar su arquitectura de red de modo que el rendimiento (resolución) no se pueda mejorar optimizando aún más la arquitectura es difícil, estoy de acuerdo. Pero solo en casos raros se requiere ese grado de optimización.
En la práctica, para cumplir o superar la precisión de predicción de una red neuronal requerida por su especificación, casi nunca necesita pasar mucho tiempo con la arquitectura de red, tres razones por las que esto es cierto:
la mayoría de los parámetros necesarios para especificar la arquitectura de red se corrigen una vez que ha decidido su modelo de datos (número de características en el vector de entrada, si la variable de respuesta deseada es numérica o categórica, y si esta última, cuántas etiquetas de clase únicas) has elegido);
los pocos parámetros de arquitectura restantes que son de hecho ajustables son casi siempre (el 100% del tiempo en mi experiencia) altamente restringidos por esos parámetros de arquitectura fijos, es decir, los valores de esos parámetros están estrechamente limitados por un valor máximo y mínimo; y
la arquitectura óptima no tiene que determinarse antes de comenzar el entrenamiento; de hecho, es muy común que el código de red neuronal incluya un pequeño módulo para sintonizar programáticamente la arquitectura de red durante el entrenamiento (mediante la eliminación de nodos cuyos valores de peso se acercan a cero; " poda ")
De acuerdo con la Tabla anterior, la arquitectura de una red neuronal está completamente especificada por seis parámetros (las seis celdas en la cuadrícula interior). Dos de esos (número de capas para las capas de entrada y salida) son siempre uno y uno: las redes neuronales tienen una sola capa de entrada y una única capa de salida. Su NN debe tener al menos una capa de entrada y una de salida, ni más ni menos. Segundo, el número de nodos que comprende cada una de esas dos capas es fijo: la capa de entrada, por el tamaño del vector de entrada, es decir, el número de nodos en la capa de entrada es igual a la longitud del vector de entrada (en realidad una neurona más casi siempre se agrega a la capa de entrada como un nodo de sesgo ).
De forma similar, el tamaño de capa de salida lo fija la variable de respuesta (nodo único para la variable de respuesta numérica y (suponiendo que se utiliza softmax, si la variable de respuesta es una etiqueta de clase, el número de nodos en la capa de salida simplemente es igual al número de etiquetas de clase).
Eso deja solo dos parámetros para los cuales hay alguna discreción: el número de capas ocultas y el número de nodos que comprende cada una de esas capas.
El número de capas ocultas
si sus datos son separables linealmente (lo que a menudo sabe cuando comienza a codificar un NN), entonces no necesita capas ocultas. (Si ese es, de hecho, el caso, no usaría un NN para este problema - elija un clasificador lineal más simple). El primero de ellos, el número de capas ocultas, es casi siempre uno. Hay mucho peso empírico detrás de esta presunción; en la práctica, muy pocos problemas que no se pueden resolver con una sola capa oculta se vuelven solubles al agregar otra capa oculta. Del mismo modo, existe un consenso en cuanto a la diferencia en el rendimiento al agregar capas ocultas adicionales: las situaciones en las que el rendimiento mejora con una segunda (o tercera, etc.) capa oculta son muy pequeñas. Una capa oculta es suficiente para la gran mayoría de los problemas.
En su pregunta, mencionó que, por cualquier razón, no puede encontrar la arquitectura de red óptima por prueba y error. Otra forma de ajustar su configuración de NN (sin usar prueba y error) es '' pruning ''. La esencia de esta técnica es eliminar los nodos de la red durante el entrenamiento identificando los nodos que, si se eliminan de la red, no afectarían de forma notable el rendimiento de la red (es decir, la resolución de los datos). (Incluso sin utilizar una técnica de poda formal, puede obtener una idea aproximada de qué nodos no son importantes al observar su matriz de peso después del entrenamiento; busque pesos muy cercanos a cero; son los nodos en cada extremo de esos pesos que son a menudo se elimina durante la poda.) Obviamente, si usa un algoritmo de poda durante el entrenamiento, comience con una configuración de red que tenga más nodos (es decir, "prunable") en exceso - en otras palabras, al decidir sobre una arquitectura de red, err en el lado de más neuronas, si agrega un paso de poda.
Dicho de otra manera, al aplicar un algoritmo de poda a su red durante el entrenamiento, puede acercarse mucho más a una configuración de red optimizada que cualquier teoría a priori que pueda ofrecerle.
El número de nodos que comprende la capa oculta
pero ¿qué pasa con la cantidad de nodos que componen la capa oculta? De acuerdo, este valor es más o menos ilimitado, es decir, puede ser más pequeño o más grande que el tamaño de la capa de entrada. Más allá de eso, como probablemente sabrá, hay una montaña de comentarios sobre la cuestión de la configuración de capa oculta en NN (consulte las famosas preguntas frecuentes de NN para obtener un excelente resumen de ese comentario). Existen muchas reglas empíricas derivadas empíricamente, pero de éstas, la más comúnmente utilizada es que el tamaño de la capa oculta se encuentra entre las capas de entrada y salida . Jeff Heaton, autor de " Introducción a las redes neuronales en Java " ofrece algunas más, que se recitan en la página que acabo de vincular. Del mismo modo, un escaneo de la literatura de redes neuronales orientada a la aplicación, casi con certeza revelará que el tamaño de la capa oculta generalmente se encuentra entre los tamaños de capa de entrada y salida. Pero entre no significa en el medio; de hecho, generalmente es mejor establecer el tamaño de la capa oculta más cerca del tamaño del vector de entrada. La razón es que si la capa oculta es demasiado pequeña, la red podría tener una convergencia difícil. Para la configuración inicial, err en el tamaño más grande: una capa oculta más grande le da a la red más capacidad que la ayuda a converger, en comparación con una capa oculta más pequeña. De hecho, esta justificación se utiliza a menudo para recomendar un tamaño de capa oculta mayor que (más nodos) la capa de entrada, es decir, comenzar con una arquitectura inicial que fomentará la convergencia rápida, después de lo cual puede podar los nodos "sobrantes" (identificar el nodos en la capa oculta con valores de peso muy bajos y eliminarlos de su red rediseñada).
Estoy buscando un método sobre cómo calcular el número de capas y el número de neuronas por capa. Como entrada, solo tengo el tamaño del vector de entrada, el tamaño del vector de salida y el tamaño del conjunto de trenes.
Por lo general, la mejor red se determina probando diferentes topologías de red y seleccionando la que tenga el menor error. Lamentablemente no puedo hacer eso.
Este es un problema realmente difícil.
Cuanta más estructura interna tenga una red, mejor será esa red para representar soluciones complejas. Por otro lado, demasiada estructura interna es más lenta, puede hacer que el entrenamiento diverja o llevar a un ajuste excesivo, lo que evitaría que su red generalice bien los datos nuevos.
La gente tradicionalmente ha abordado este problema de varias maneras diferentes:
Pruebe diferentes configuraciones, vea qué funciona mejor. Puede dividir su conjunto de capacitación en dos partes, una para la capacitación y otra para la evaluación, y luego capacitar y evaluar diferentes enfoques. Desafortunadamente, parece que en su caso este enfoque experimental no está disponible.
Usa una regla empírica Mucha gente ha tenido muchas conjeturas sobre qué funciona mejor. Con respecto al número de neuronas en la capa oculta, las personas han especulado que (por ejemplo) debería (a) estar entre el tamaño de la capa de entrada y salida, (b) establecer algo cercano (entradas + salidas) * 2/3, o (c) nunca más grande que el doble del tamaño de la capa de entrada.
El problema con las reglas generales es que no siempre tienen en cuenta las piezas vitales de información , como cuán "difícil" es el problema, cuál es el tamaño de los conjuntos de entrenamiento y prueba , etc. En consecuencia, estas reglas se usan a menudo como puntos de partida difíciles para el enfoque "vamos a probar un montón de cosas y ver qué funciona mejor".Use un algoritmo que ajuste dinámicamente la configuración de la red. Algoritmos como Cascade Correlation comienzan con una red mínima, luego agregan nodos ocultos durante el entrenamiento. Esto puede hacer que su configuración experimental sea un poco más simple, y (en teoría) puede dar como resultado un mejor rendimiento (porque no usará accidentalmente una cantidad inapropiada de nodos ocultos).
Hay mucha investigación sobre este tema, por lo que si estás realmente interesado, hay mucho que leer. Consulte las citas de este resumen , en particular:
Lawrence, S., Giles, CL y Tsoi, AC (1996), "¿Qué tamaño de red neuronal da una generalización óptima? Las propiedades de convergencia de la propagación inversa" . Informe técnico UMIACS-TR-96-22 y CS-TR-3617, Instituto de Estudios Avanzados de Informática, Universidad de Maryland, College Park.
Elisseeff, A., y Paugam-Moisy, H. (1997), "Tamaño de las redes de múltiples capas para el aprendizaje exacto: enfoque analítico" . Avances en los sistemas de procesamiento de información neuronal 9, Cambridge, MA: The MIT Press, pp.162-168.
He usado un MLP para un software comercial que tiene solo una capa oculta que tiene un solo nodo. Como los nodos de entrada y los nodos de salida son fijos, solo tengo que cambiar el número de capas ocultas y jugar con la generalización lograda. Nunca logré una gran diferencia en lo que estaba logrando con solo una capa oculta y un nodo al cambiar la cantidad de capas ocultas. Acabo de usar una capa oculta con un nodo. Funcionó bastante bien y los cálculos reducidos fueron muy tentadores en mi premisa de software.