Arquitectura de perceptrón multicapa (MLP): ¿criterios para elegir el número de capas ocultas y el tamaño de la capa oculta?


104

Si tenemos 10 vectores propios, entonces podemos tener 10 nodos neuronales en la capa de entrada. Si tenemos 5 clases de salida, entonces podemos tener 5 nodos en la capa de salida. Pero, ¿cuál es el criterio para elegir el número de capas ocultas en un MLP y cuántos neurales? nodos en 1 capa oculta?



Respuestas:


216

cuantas capas ocultas ?

un modelo con cero capas ocultas resolverá datos linealmente separables . Entonces, a menos que ya sepa que sus datos no se pueden separar linealmente, no está de más verificar esto: ¿por qué usar un modelo más complejo de lo que requiere la tarea? Si es linealmente separable, entonces una técnica más simple funcionará, pero un Perceptron también hará el trabajo.

Suponiendo que sus datos requieran separación mediante una técnica no lineal, entonces siempre comience con una capa oculta . Es casi seguro que eso es todo lo que necesitará. Si sus datos se pueden separar usando un MLP, entonces ese MLP probablemente solo necesite una única capa oculta. Hay una justificación teórica para esto, pero mi razón es puramente empírica: muchos problemas de clasificación / regresión difíciles se resuelven utilizando MLP de capa única oculta, pero no recuerdo haber encontrado ningún MLP de capa oculta múltiple utilizado para modelar datos con éxito. -ya sea en tableros de anuncios de ML, libros de texto de ML, artículos académicos, etc. Existen, ciertamente, pero las circunstancias que justifican su uso son empíricamente bastante raras.


¿Cuántos nodos hay en la capa oculta?

De la literatura académica MLP. mi propia experiencia, etc., he recopilado y a menudo confío en varias reglas generales ( RoT ), y que también he encontrado que son guías confiables (es decir, la guía fue precisa, e incluso cuando no lo fue, normalmente estaba claro qué hacer a continuación):

RoT basado en mejorar la convergencia:

Cuando empiece a construir el modelo, opte por el lado de más nodos en la capa oculta.

¿Por qué? Primero, es poco probable que algunos nodos adicionales en la capa oculta hagan ningún daño; su MLP aún convergerá. Por otro lado, muy pocos nodos en la capa oculta pueden evitar la convergencia. Piénselo de esta manera, los nodos adicionales proporcionan un exceso de capacidad: pesos adicionales para almacenar / liberar la señal a la red durante la iteración (entrenamiento o construcción de modelos). En segundo lugar, si comienza con nodos adicionales en su capa oculta, es fácil podarlos más adelante (durante el progreso de la iteración). Esto es común y existen técnicas de diagnóstico para ayudarlo (por ejemplo, diagrama de Hinton, que es solo una descripción visual de las matrices de peso, un "mapa de calor" de los valores de peso).

RoT basados ​​en el tamaño de la capa de entrada y el tamaño de la capa de salida:

Una regla general es que el tamaño de esta capa [oculta] esté en algún lugar entre el tamaño de la capa de entrada ... y el tamaño de la capa de salida ...

Para calcular el número de nodos ocultos usamos una regla general de: (Número de entradas + salidas) x 2/3

RoT basado en componentes principales:

Por lo general, especificamos tantos nodos ocultos como dimensiones [componentes principales] necesarios para capturar el 70-90% de la varianza del conjunto de datos de entrada .

Y, sin embargo, el autor de NN FAQ llama a estas Reglas "sin sentido" (literalmente) porque: ignoran el número de instancias de entrenamiento, el ruido en los objetivos (valores de las variables de respuesta) y la complejidad del espacio de características.

En su opinión (y siempre me pareció que él sabe de lo que está hablando), elija la cantidad de neuronas en la capa oculta en función de si su MLP incluye alguna forma de regularización o detención anticipada .

La única técnica válida para optimizar el número de neuronas en la capa oculta:

Durante la construcción de su modelo, pruebe obsesivamente; las pruebas revelarán las firmas de una arquitectura de red "incorrecta". Por ejemplo, si comienza con un MLP que tiene una capa oculta compuesta por una pequeña cantidad de nodos (que aumentará gradualmente según sea necesario, según los resultados de la prueba), su error de entrenamiento y generalización será alto debido a sesgos y desajustes.

Luego, aumente el número de nodos en la capa oculta, uno a la vez, hasta que el error de generalización comience a aumentar, esta vez debido al sobreajuste y la alta variación.


En la práctica, lo hago de esta manera:

capa de entrada : el tamaño de mi vactor de datos (el número de características en mi modelo) + 1 para el nodo de sesgo y sin incluir la variable de respuesta, por supuesto

capa de salida : solo determinado por mi modelo: regresión (un nodo) versus clasificación (número de nodos equivalente al número de clases, asumiendo softmax)

capa oculta : para empezar , una capa ocultacon un número de nodos igual al tamaño de la capa de entrada. Es más probable que el tamaño "ideal" sea más pequeño (es decir, cierto número de nodos entre el número en la capa de entrada y el número en la capa de salida) en lugar de más grande; nuevamente, esto es solo una observación empírica, y el volumen de esta observación es mi propia experiencia. Si el proyecto justificó el tiempo adicional requerido, entonces comienzo con una sola capa oculta compuesta por una pequeña cantidad de nodos, luego (como expliqué antes) agrego nodos a la Capa Oculta, uno a la vez, mientras calculo la generalización error, error de entrenamiento, sesgo y varianza. Cuando el error de generalización ha disminuido y justo antes de que comience a aumentar nuevamente, la cantidad de nodos en ese punto es mi elección. Consulte la figura siguiente.

ingrese la descripción de la imagen aquí


1
Me gustaría agregar algunos resultados relacionados con el RoT n. ° 1: en las SVM exitosas, en realidad asigna su entrada a un espacio dimensional más alto (más nodos ocultos que nodos en la capa de entrada en el lenguaje NN). El trabajo de la capa de salida es obtener la decisión de esta representación demasiado completa. También puede haber una conexión con las proyecciones aleatorias. El brillante artículo de Adam Coates y Andrew Y. Ng (2011) analiza temas relacionados.
Vladislavs Dovgalecs

Buena explicación. ¿Alguna idea de cómo podría trazar una figura como la anterior al usar sklearn y MLPClassifier?
seralouk

1
@sera te refieres al estilo xkcd?
denfromufa

En principio, ¿podría automatizar el proceso de optimización del número de neuronas en la capa oculta? Además, ¿podría optimizar el número de capas ocultas automáticamente también?
Addison

2

Es muy difícil elegir la cantidad de neuronas en una capa oculta y elegir la cantidad de capas ocultas en su red neuronal.

Generalmente, para la mayoría de las aplicaciones, una capa oculta es suficiente. Además, la cantidad de neuronas en esa capa oculta debe estar entre la cantidad de entradas (10 en su ejemplo) y la cantidad de salidas (5 en su ejemplo).

Pero la mejor forma de elegir la cantidad de neuronas y capas ocultas es la experimentación. Entrene varias redes neuronales con diferentes números de capas ocultas y neuronas ocultas, y mida el rendimiento de esas redes mediante la validación cruzada . Puede seguir con el número que produzca la red de mejor rendimiento.


1

Para automatizar la selección del mejor número de capas y el mejor número de neuronas para cada una de las capas, puede utilizar la optimización genética .

Las piezas clave serían:

  1. Cromosoma : Vector que define cuántas unidades hay en cada capa oculta (por ejemplo, [20,5,1,0,0] que significa 20 unidades en la primera capa oculta, 5 en la segunda, ..., faltan las capas 4 y 5). Puede establecer un límite en el número máximo de capas para probar y el número máximo de unidades en cada capa. También debe establecer restricciones sobre cómo se generan los cromosomas. Por ejemplo, [10, 0, 3, ...] no debería generarse, porque cualquier unidad después de una capa faltante (el '3, ...') sería irrelevante y desperdiciaría ciclos de evaluación.
  2. Función de aptitud : una función que devuelve el recíproco del error de entrenamiento más bajo en el conjunto de validación cruzada de una red definida por un cromosoma dado. También puede incluir el número de unidades totales o el tiempo de cálculo si desea encontrar la "red más pequeña / rápida pero más precisa".

También puede considerar:

  • Poda : comience con una red grande, luego reduzca las capas y las unidades ocultas, mientras realiza un seguimiento del rendimiento del conjunto de validación cruzada.
  • Crecimiento : comience con una red muy pequeña, luego agregue unidades y capas, y nuevamente realice un seguimiento del rendimiento del conjunto de CV.

0

Recientemente hay un trabajo teórico sobre este https://arxiv.org/abs/1809.09953 . Suponiendo que usa un RELU MLP, todas las capas ocultas tienen el mismo número de nodos y su función de pérdida y la función real que está aproximando con una red neuronal obedecen algunas propiedades técnicas (en el documento), puede elegir su profundidad para ser de orden $ \ log (n) $ y su ancho de capas ocultas será del orden $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Aquí $ n $ es su tamaño de muestra, $ d $ es la dimensión de su vector de entrada y $ \ beta $ es un parámetro de suavidad para su función verdadera. Dado que $ \ beta $ es desconocido, probablemente querrá tratarlo como un hiperparámetro.

Al hacer esto, puede garantizar que con una probabilidad que converja a $ 1 $ como función del tamaño de la muestra, su error de aproximación converja a $ 0 $ como una función del tamaño de la muestra. Dan la tarifa. Tenga en cuenta que no se garantiza que esta sea la "mejor" arquitectura, pero al menos puede brindarle un buen lugar para comenzar. Además, mi propia experiencia sugiere que cosas como la deserción escolar aún pueden ayudar en la práctica.

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.