¿Qué es el Dropout? Reduce el overfitting en tus redes neuronales

Última actualización el 17 de diciembre de 2019

Cuando entrenas redes neuronales, tu objetivo es producir un modelo que se desempeñe realmente bien.

Esto tiene mucho sentido, ya que no tiene sentido usar un modelo que no se desempeñe.

Sin embargo, hay un equilibrio relativamente estrecho que tendrás que mantener cuando intentes encontrar un modelo que se desempeñe perfectamente bien.

Es el equilibrio entre la infraadaptación y la sobreadaptación.

Para evitar la infraadaptación (tener un rendimiento predictivo peor de lo posible), puede seguir entrenando, hasta que experimente el otro problema: la sobreadaptación, es decir, ser demasiado sensible a sus datos de entrenamiento. Ambos dificultan el rendimiento del modelo.

A veces, el rango en el que su modelo no está infraajustado ni sobreajustado es realmente pequeño. Afortunadamente, puede ampliarse aplicando lo que se conoce como regularizador, una técnica que regulariza el comportamiento de su modelo durante el entrenamiento, para retrasar el sobreajuste durante algún tiempo.

Dropout es una técnica de regularización de este tipo. En esta entrada del blog, la cubrimos, echando un vistazo a un par de cosas. En primer lugar, nos sumergimos en la diferencia entre underfitting y overfitting con más detalle, para que tengamos una comprensión más profunda de los dos. En segundo lugar, introducimos el Dropout basándonos en trabajos académicos y te contamos cómo funciona. En tercer lugar, analizaremos si realmente funciona, describiendo los distintos experimentos realizados con esta técnica. Por último, compararemos el Dropout tradicional con el Gaussian Dropout – y cómo cambia el entrenamiento de su modelo.

¿Listo? Vamos. 😎

¿Qué tal funciona tu modelo? Infraajuste y sobreajuste

En primer lugar, veamos qué son el infraajuste y el sobreajuste.

Cuando se inicia el proceso de entrenamiento, es probable que los pesos de tus neuronas se inicialicen al azar o con alguna otra estrategia de inicialización. Esto significa que la tasa de error, o valor de pérdida, será muy alta durante las primeras épocas. Observe este diagrama, en el que la pérdida disminuye muy rápidamente durante las primeras épocas:

Cuando tanto la pérdida de entrenamiento como la validación disminuyen, se dice que el modelo está infraajustado: todavía puede ser entrenado para hacer mejores predicciones, es decir, para ganar en su poder predictivo.

La acción a emprender entonces es continuar entrenando.

Sin embargo, esto no puede continuar para siempre. La optimización de un modelo implica la generación de predicciones de validación con sus datos de validación, lo que resulta en valores de pérdida y gradientes para la optimización, que se lleva a cabo. Desafortunadamente, esto significa que algunas de las ideosincrasias de los datos se filtran en los pesos del modelo. Es decir, como los datos son una muestra y no una población completa, siempre son ligeramente diferentes de la población completa que representan. Cuando se optimiza el modelo durante cientos de épocas con estos datos, siempre se obtiene un desfase con respecto a esta población verdadera.

Si se siguiera entrenando, el modelo se adaptaría cada vez más a esas ideosincrasias, haciéndolo menos adecuado para datos que nunca ha visto antes, es decir, otras muestras de la población. Se dice entonces que el modelo está sobreajustado: está demasiado bien adaptado a los datos de entrenamiento y validación.

¡Hagamos una pausa por un segundo! 👩💻

Blogs en MachineCurve enseñan Machine Learning para desarrolladores. Apúntate a la actualización gratuita de MachineCurve sobre Aprendizaje Automático hoy mismo. Aprenderás cosas nuevas y entenderás mejor los conceptos que ya conoces.
Enviamos correos electrónicos al menos cada viernes. Bienvenido!

Al inscribirse, da su consentimiento para que cualquier información que reciba pueda incluir servicios y ofertas especiales por correo electrónico.

Se puede detectar el sobreajuste en gráficos como el de arriba inspeccionando la pérdida de validación: cuando sube de nuevo, mientras que la pérdida de entrenamiento permanece constante o disminuye, sabes que tu modelo está sobreajustado. Como puede ver, la red potenciada por ELU en el gráfico de arriba ha empezado a sobreajustarse muy ligeramente.

Tanto el infraajuste como el sobreajuste deben evitarse, ya que su modelo funcionará peor de lo que podría funcionar teóricamente. Afortunadamente, se pueden utilizar ciertas técnicas -llamadas regularizadores- para reducir el impacto del sobreajuste. Dropout es una de ellas, y la trataremos en este blog. Empecemos analizando qué es Dropout, qué hace y cómo funciona.

¿Qué es Dropout y cómo funciona?

En su artículo «Dropout: A Simple Way to Prevent Neural Networks from Overfitting», Srivastava et al. (2014) describen la técnica Dropout, que es una técnica de regularización estocástica y debería reducir el sobreajuste al combinar (teóricamente) muchas arquitecturas de redes neuronales diferentes.

Con Dropout, el proceso de entrenamiento esencialmente deja fuera a las neuronas de una red neuronal. Se eliminan temporalmente de la red, lo que puede visualizarse de la siguiente manera:

Nótese que las conexiones o sinapsis se eliminan también, y que por tanto ya no fluyen datos a través de estas neuronas.

… ¡pero sólo muy brevemente! Este proceso se repite cada época (¡o incluso cada minilote! – Srivastava et al. 2014) y, por lo tanto, el muestreo de redes adelgazadas ocurre muy a menudo. Esto debería conducir a tasas de error de generalización significativamente más bajas (es decir, de sobreajuste), ya que «la presencia de neuronas se hace poco fiable» (Srivastava et al., 2014).

Esta eliminación de neuronas y sinapsis durante el entrenamiento se lleva a cabo de forma aleatoria, con un parámetro \(p\) que es sintonizable (o, dadas las pruebas empíricas, mejor ajustado a 0,5 para las capas ocultas y cerca de 1,0 para la capa de entrada). Esto significa efectivamente que, según los autores, la red «adelgazada» se muestrea a partir de la arquitectura global, y se utiliza para el entrenamiento.

En el momento de la prueba, «no es factible promediar explícitamente las predicciones de exponencialmente muchos modelos adelgazados» (Srivastava et al., 2014). Eso es cierto: se convertiría en una carga computacional cuando hay que promediar cientos de miles de épocas/minibatches, especialmente cuando las redes se vuelven realmente grandes.

Afortunadamente, hay una solución – que es simple, pero produce el mismo resultado. Utilizando una red neuronal, en la que las salidas de los pesos se reducen en función de la \ ~ (p\) con la que una unidad fue retenida durante el entrenamiento. Esto significa que la salida esperada en el momento del entrenamiento es la misma que la salida verdadera en el momento de la prueba, resolviendo el problema computacional y haciendo que Dropout sea utilizable en la práctica.

Variables Bernoulli

Veamos ahora cómo funciona Dropout matemáticamente. No te preocupes, no te enterraremos con las matemáticas, sino que intentaremos adoptar un punto de vista muy intuitivo.

Muy simplificadamente, así es como una neurona recibe su entrada: por ejemplo, tres neuronas ascendentes en una capa densa de tres neuronas envían sus salidas a la siguiente capa, donde se recibe como entrada. Tenga en cuenta que, para simplificar, omitimos aquí los valores de sesgo.

Neurona normal (se supone sin sesgo)

Es muy sencillo pasar de aquí a una neurona Dropout, que tiene el siguiente aspecto:

Neurona Dropout (se supone sin sesgo)

Matemáticamente, esto implica las llamadas variables aleatorias de Bernoulli:

En teoría de la probabilidad y estadística, la distribución de Bernoulli, llamada así por el matemático suizo Jacob Bernoulli, es la distribución de probabilidad discreta de una variable aleatoria que toma el valor 1 con probabilidad \(p\).

Wikipedia sobre la distribución Bernoulli

Para crear Dropout, Srivastava et al. (2014) adjuntaron variables Bernoulli a las neuronas de la red (multiplicándolas con salidas neuronales), «cada una de las cuales tiene una probabilidad \(p\) de ser 1″. El valor \(p\) aquí es seleccionado por el ingeniero de aprendizaje automático, generalmente basado en algún conjunto de validación, o ingenuamente establecido en 0,5.

No te pierdas nunca nuevos artículos de Aprendizaje Automático ✅

Blogs en MachineCurve enseñan Aprendizaje Automático para Desarrolladores. Apúntate a la actualización gratuita de MachineCurve sobre Machine Learning hoy mismo. Aprenderás cosas nuevas y entenderás mejor los conceptos que ya conoces.
Enviamos correos electrónicos al menos cada viernes. Bienvenido!

Al inscribirse, da su consentimiento para que cualquier información que reciba pueda incluir servicios y ofertas especiales por correo electrónico.

Dentro de la red, la variable Bernoulli y su valor de 1 o 0 determina si una neurona es «abandonada» durante esta operación de feedforward de época o minibatch. Esto, en efecto, conduce a la ‘red adelgazada’ de la que hablan Srivastava et al. (2014).

¿Por qué el Dropout podría reducir el sobreajuste?

Ahora te preguntarás: ¿por qué las variables Bernoulli unidas a las redes neuronales regulares, haciendo la red más delgada, reducen el sobreajuste?

Para responder a esta pregunta, tendremos que echar un vistazo a cómo se entrenan las redes neuronales.

Por lo general, para ello se utiliza la retropropagación y el descenso de gradiente o un optimizador similar. Dado un valor de pérdida, se calculan los llamados «gradientes» que el optimizador procesa en los pesos de la red. Al utilizar estos gradientes (con respecto a la tasa de error) para cambiar los pesos, es probable que la red funcione ligeramente mejor durante la siguiente iteración del proceso de entrenamiento.

El cálculo del gradiente se realiza con respecto al error, pero también con respecto a lo que hacen todas las demás unidades (Srivastava et al., 2014). Esto significa que ciertas neuronas, a través de cambios en sus pesos, pueden arreglar los errores de otras neuronas. Esto, según argumentan Srivastava et al. (2014), lleva a coadaptaciones complejas que pueden no generalizarse a datos no vistos, lo que resulta en un sobreajuste.

Dropout, entonces, evita estas coadaptaciones al hacer -como escribimos antes- que la presencia de otros ocultos no sea confiable. Las neuronas simplemente no pueden confiar en otras unidades para corregir sus errores, lo que reduce el número de coadaptaciones que no se generalizan a los datos no vistos, y por lo tanto, presumiblemente, reduce el sobreajuste también.

Entrenar redes neuronales con Dropout

Entrenar redes neuronales a las que se ha adjuntado Dropout es prácticamente igual a entrenar redes neuronales sin Dropout. Se puede utilizar el descenso de gradiente estocástico u optimizadores similares. La única diferencia, como informan Srivastava et al. (2014), se puede encontrar cuando se utiliza un enfoque de minilotes: en lugar de por época, las redes adelgazadas se muestrean por minilotes.

Además, los métodos que mejoran el SGD clásico -como el impulso- también se pueden utilizar, y muestran mejoras similares a las de las redes neuronales regulares (Srivastava et al., 2014).

Lo que los autores también encontraron útil durante el entrenamiento es aplicar la regularización de la norma máxima, lo que significa restringir la norma del peso entrante para que esté limitada por algún valor máximo \(c\). Este valor debe ser establecido por el ingeniero de antemano, y determinado utilizando un conjunto de validación (Srivastava et al., 2014).

Combinar Dropout con la regularización de la norma máxima mejora el rendimiento en comparación con el uso de Dropout solo, pero los autores informaron de resultados aún mejores cuando Dropout y la regularización de la norma máxima se combinan con otras dos cosas:

  • Grandes tasas de aprendizaje decrecientes.
  • Alto impulso.

Según Srivastava et al. (2014), esto puede justificarse posiblemente por los siguientes argumentos:

  1. La restricción de los vectores de pesos hace posible el uso de grandes tasas de aprendizaje sin explotar los pesos.
  2. El ruido de abandono más las grandes tasas de aprendizaje ayudan entonces a los optimizadores a «explorar diferentes regiones del espacio de pesos que, de otro modo, habrían sido difíciles de alcanzar».
  3. El descenso de la tasa de aprendizaje ralentiza entonces el carácter saltarín del proceso de exploración, para finalmente «asentarse en un mínimo».
  4. Un impulso elevado permite a la red superar los mínimos locales, aumentando la probabilidad de que se encuentre el mínimo global.

¿Funciona realmente el abandono? Resultados experimentales

Con cualquier mejora en el aprendizaje automático, es agradable tener una mejora teórica – pero también es importante probar si realmente funciona. Srivastava et al. (2014) realizaron múltiples pruebas para averiguar si Dropout funciona. En primer lugar, utilizaron varios conjuntos de datos estándar (como el conjunto de datos MNIST) para probar si Dropout mejora el rendimiento del modelo a través de una amplia gama de problemas de clasificación.

En segundo lugar, comprobaron cómo funcionaba con una variedad de otros regularizadores (produciendo la idea de que la regularización de la norma máxima junto con Dropout funciona mejor – pero vamos a echar un vistazo a estos resultados con más detalle más adelante), y en tercer lugar, Srivastava et al. (2014) investigaron qué tasas de abandono (es decir, qué parámetro \(p\)) funciona mejor y cómo el tamaño de los datos impacta en el rendimiento del Dropout. Echemos un vistazo:

Muestras del conjunto de datos MNIST

Dropout vs no dropout en conjuntos de datos estándar

Los autores probaron Dropout vs No Dropout en estos conjuntos de datos estándar (Srivastava et al., 2014):

  • El conjunto de datos MNIST, que contiene miles de dígitos escritos a mano;
  • El conjunto de datos de referencia del habla TIMIT para el reconocimiento limpio del habla.
  • Los conjuntos de datos CIFAR-10 y CIFAR-100, que contienen pequeñas imágenes naturales en 10 y 100 clases.
  • El conjunto de datos Street View House Numbers (SVHN), con imágenes de números de casas recogidas de Google Street View.
  • El conjunto de datos ImageNet, que contiene muchas imágenes naturales.
  • El conjunto de datos de artículos de noticias Reuters RCV1. Se trata de un conjunto de datos de texto más que de imágenes.
Muestras del conjunto de datos CIFAR10

Para todos los conjuntos de datos, Dropout mejoró el poder de generalización del modelo. En MNIST, se pudieron reportar errores de prueba drásticamente diferentes, con mejoras sustanciales para todas las diferentes arquitecturas que se probaron.

¡Únase a cientos de otros aprendices! 😎

Los blogs de MachineCurve enseñan aprendizaje automático para desarrolladores. Apúntate a la actualización gratuita de MachineCurve sobre Aprendizaje Automático hoy mismo. Aprenderás cosas nuevas y entenderás mejor los conceptos que ya conoces.
Enviamos correos electrónicos al menos cada viernes. Bienvenido!

Al inscribirse, da su consentimiento para que cualquier información que reciba pueda incluir servicios y ofertas especiales por correo electrónico.

Dropout también supera a las redes neuronales normales en las ConvNets entrenadas en CIFAR-100, CIFAR-100, y en los conjuntos de datos de ImageNet.

Para el conjunto de datos de SVHN, se podría reportar otra observación interesante: cuando se aplica Dropout en la capa convolucional, el rendimiento también aumenta. Según los autores, esto es interesante, porque antes se suponía que estas capas no eran sensibles al sobreajuste porque no tienen muchos parámetros (Srivastava et al., 2014). Se argumenta que la adición de Dropout a las capas Conv proporciona entradas ruidosas a las capas Dense que las siguen, lo que evita que se sobreajusten aún más.

Por último, Dropout funciona en los conjuntos de datos de referencia del habla TIMIT y el conjunto de datos Reuters RCV1, pero aquí la mejora fue mucho menor en comparación con los conjuntos de datos de visión y habla.

Dropout frente a no dropout con otros regularizadores

Ahora que los autores sabían que Dropout se adapta bien a una variedad de problemas de aprendizaje automático, lo investigaron más a fondo: ¿cómo se comporta con respecto a otros regularizadores?

Se probaron varios métodos de regularización para evitar el sobreajuste:

  • Decrecimiento del peso de L2;
  • Lasso;
  • KL sparsity;
  • Regularización de la norma máxima.

Srivastava et al. (2014) descubrieron que cuando se combina con la regularización de la norma máxima, Dropout proporciona errores de generalización aún más bajos. De hecho, proporcionó el error más bajo reportado, seguido -a cierta distancia- por Dropout + regularización L2, y finalmente los demás.

Por lo tanto, al aplicar Dropout, también podría ser una buena idea realizar la regularización de la norma máxima al mismo tiempo.

¿Cuándo funciona mejor Dropout? Acerca de la tasa de abandono y el tamaño del conjunto de datos

Otra pregunta a la que intentaron responder: ¿la tasa de abandono (es decir, el parámetro \(p\)) y/o el tamaño del conjunto de datos influyen en el rendimiento de Dropout y de las redes neuronales a las que está unido?

La pregunta debe responderse con un sí.

¿Cuál es el mejor valor para \(p\)?

En primer lugar, el parámetro \(p\). Por ahora, podemos recordar que es sintonizable, y de hecho debe ser establecido por el ingeniero de aprendizaje de la máquina. El hecho de que sea sintonizable conduce a los mismos errores por los que las tasas de aprendizaje fijas no son una buena idea: simplemente no se sabe qué \(p\) se ajusta mejor a los datos.

Por lo tanto, los autores argumentan que la selección de un valor para \(p\) debe hacerse mediante algunas pruebas iniciales con un conjunto de validación.

Ellos también lo hicieron – para ver si se podían encontrar patrones interesantes.

Y sí encontraron dicho patrón: a través de múltiples escenarios, un valor de \(p \aproximadamente 0,5\) para las capas ocultas parece resultar en el mejor rendimiento al aplicar Dropout (Srivastava et al., 2014). Esto es cierto para todas las capas excepto la de entrada, donde \(p\) debe ser \(\aprox 1,0\). Esto último es presumiblemente el caso porque la capa de entrada toma los datos de entrada, y es difícil encontrar patrones cuando los datos se descartan al azar.

¿Cómo se comporta Dropout con respecto al tamaño del conjunto de datos?

Según los autores, un «buen regularizador permite obtener un buen error de generalización de los modelos con un gran número de parámetros entrenados en conjuntos de datos pequeños». Es decir, se desempeña realmente bien en datos que no ha visto antes – incluso cuando se entrena con datos pequeños.

Para encontrar si Dropout regulariza bien a través de varios tamaños de conjuntos de datos, Srivastava et al. (2014) realizaron pruebas con varios tamaños en el conjunto de datos MNIST. Los tamaños fueron los siguientes: «100, 500, 1K, 5K, 10K y 50K elegidos al azar del conjunto de entrenamiento MNIST» (Srivastava et al., 2014).

¡Te ayudamos con el aprendizaje automático! 🧠

Los blogs de MachineCurve enseñan Machine Learning para desarrolladores. Apúntate a la actualización gratuita de MachineCurve sobre Machine Learning hoy mismo. Aprenderás cosas nuevas y entenderás mejor los conceptos que ya conoces.
Enviamos correos electrónicos al menos cada viernes. Bienvenido!

Al inscribirse, da su consentimiento para que cualquier información que reciba pueda incluir servicios y ofertas especiales por correo electrónico.

Los autores descubrieron que hay un equilibrio entre cuándo es necesario el Dropout y cuándo ya no es útil. Primero, para cubrir el caso en que el conjunto de datos es extremadamente pequeño: incluso Dropout no mejora el rendimiento en ese caso, simplemente porque el tamaño del conjunto de datos es demasiado pequeño. Lo mismo ocurre con los conjuntos de datos que son bastante grandes: Entonces el Dropout ya no mejora el modelo, sino que el rendimiento del modelo empeora.

Por lo tanto, existe un punto dulce, cuando el Dropout es necesario y cuando es inteligente no utilizarlo (o aumentar el tamaño del conjunto de datos). Según Srivastava et al. (2014), no existe una heurística para determinar este tamaño, sino que debe determinarse con un conjunto de validación.

Gaussian Dropout: Variables gaussianas en lugar de Bernoulli

Recordamos de lo anterior que Dropout funciona con variables Bernoulli que toman 1 con probabilidad \(p\) y 0 con el resto, siendo \(1 – p\).

Esta idea se puede generalizar a multiplicar las activaciones con variables aleatorias de otras distribuciones (Srivastava et al., 2014). En su trabajo, Srivastava et al. descubrieron que la distribución gaussiana y, por tanto, las variables gaussianas funcionan igual de bien, y quizás incluso mejor.

La aplicación de las variables gaussianas puede hacerse de forma similar: adelgazando las redes en el momento del entrenamiento y utilizando activaciones ponderadas en el momento de la prueba y la producción (como con el Dropout normal). Sin embargo, los autores optan por utilizar el Dropout gaussiano de forma diferente, es decir, de forma multiplicativa. En lugar de adelgazar y ponderar, el abandono gaussiano se pondera en tiempo de entrenamiento, cuando los valores activados que no se abandonan se multiplican por \(1/p\) en lugar de \(1\) (con el abandono Bernoulli normal). No se modifican en el momento de la prueba. Esto es igual al escenario anterior.

El Dropout Gaussiano debe ser configurado por algún \(\sigma\), que en los experimentos de Srivastava et al. se estableció en \(\sqrt{(1-p)/p}), donde \(p\) es la configuración de la variante Bernoulli (es decir, en los casos ingenuos \(p \approx 0,5\) para las capas ocultas y \(\approx 1,0\) para la capa de entrada).

Resumen

En esta entrada del blog, vimos el sobreajuste – y cómo evitarlo, con Dropout. Al ver qué es, cómo funciona, y que funciona, encontramos que es una técnica interesante para aplicar en tus modelos de aprendizaje profundo.

Espero que hayas aprendido algo hoy – algo útil para tus modelos de ML 😀 Si lo hiciste, o cuando tengas preguntas, ¡no dudes en dejar un comentario abajo ⬇! Cuando sea posible, responderé a tus preguntas 😊

¡Gracias por leer MachineCurve hoy y feliz ingeniería! 😎

Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014, 15 de junio). Dropout: Una forma sencilla de evitar el sobreajuste de las redes neuronales. Recuperado de http://jmlr.org/papers/v15/srivastava14a.html

Wikipedia. (2003, 20 de marzo). La distribución de Bernoulli. Recuperado de https://en.wikipedia.org/wiki/Bernoulli_distribution

💡 Domina tu ML – consulta también estos posts:

.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.