El dropout es la regularización más famosa del aprendizaje profundo: durante el entrenamiento apaga neuronas al azar para que la red no dependa de ninguna en concreto. La idea parece un truco brusco, pero tiene una interpretación matemática precisa. Apagar unidades equivale a entrenar y promediar un número gigantesco de redes más pequeñas, y el escalado por 1/p garantiza que las cuentas cuadren entre el entrenamiento y la inferencia. Esta guía desmonta esa mecánica paso a paso. La misma explicación está disponible en inglés.

Puntos clave

  • El dropout desactiva cada neurona de una capa con probabilidad 1 - p en cada paso de entrenamiento; p es la probabilidad de retención, y un valor típico en capas ocultas es 0,5.
  • Al apagar unidades, la red no puede confiar en una neurona concreta y aprende representaciones más redundantes, lo que reduce el sobreajuste.
  • El escalado invertido (inverted dropout) divide las activaciones supervivientes entre p durante el entrenamiento, de modo que en inferencia no hace falta tocar nada.
  • Matemáticamente, el dropout entrena un ensemble implícito de hasta 2^n subredes que comparten pesos, y en inferencia aproxima su media.
  • La técnica la introdujeron Srivastava, Hinton y sus coautores en 2014, tras el trabajo previo de 2012 sobre co-adaptación de detectores.

¿Qué es el dropout?

El dropout es una técnica de regularización pensada para combatir el sobreajuste, el mismo problema que atacan la regularización L1 y L2 por otra vía. En una red densa, cada capa calcula z = Wx + b y aplica una activación a = f(z). El dropout añade un paso: antes de pasar a a la capa siguiente, pone a cero una fracción de sus componentes elegida al azar en cada paso de entrenamiento.

La intuición es sencilla. Si una neurona sabe que en cualquier momento sus compañeras pueden desaparecer, no puede especializarse en corregir los errores de una vecina concreta. La red se ve obligada a repartir la información y a construir detectores que funcionen por su cuenta. Como resumen Srivastava y sus coautores, «la idea clave es descartar unidades al azar, junto con sus conexiones, de la red neuronal durante el entrenamiento».

El parámetro central es la probabilidad de retención p: la probabilidad de que una neurona sobreviva a un paso. Con p = 0,5, la mitad de las neuronas se apaga de media en cada iteración. En las capas de entrada se suele usar un valor más alto, cercano a 0,8, para no tirar demasiada señal de partida.

Cómo desactiva neuronas al azar

Formalmente, el dropout genera en cada paso un vector de máscara mask de la misma dimensión que la activación a. Cada componente de la máscara es una variable de Bernoulli: vale 1 con probabilidad p y 0 con probabilidad 1 - p. La salida de la capa se calcula multiplicando elemento a elemento la activación por esa máscara:

mask ~ Bernoulli(p)
y = a ⊙ mask

El símbolo es el producto de Hadamard, la multiplicación componente a componente. Donde la máscara vale 0, la neurona queda anulada para ese paso; donde vale 1, pasa intacta. En el siguiente lote se sortea una máscara nueva, así que la subred activa cambia constantemente.

Este muestreo tiene un efecto directo sobre las estadísticas de la señal. Si una activación tenía valor esperado a, tras la máscara su valor esperado pasa a ser p · a, porque sobrevive solo una fracción p de las veces. Esa caída de escala es justo el problema que resuelve el escalado invertido.

El escalado invertido (inverted dropout)

La red se entrena con activaciones reducidas de media a p · a, pero en inferencia queremos usar todas las neuronas. Si no corrigiéramos nada, la entrada media a la capa siguiente sería 1/p veces mayor en inferencia que en entrenamiento, y la red recibiría señales de una escala que nunca vio. Hay dos formas de arreglarlo.

La versión original multiplicaba las activaciones por p en inferencia. La versión moderna, llamada inverted dropout, hace lo contrario y más cómodo: divide entre p durante el entrenamiento, dejando la inferencia limpia. La fórmula completa es la de la portada:

y = (x ⊙ mask) / p

Con este factor 1/p, el valor esperado de cada componente vuelve a ser a: multiplicamos por p al aplicar la máscara y dividimos por p al escalar, así que la media se conserva. En código, una capa de dropout entrenada con p = 0,5 multiplica por 2 las activaciones que sobreviven:

import torch

def inverted_dropout(a, p=0.5, training=True):
    if not training:
        return a
    mask = (torch.rand_like(a) < p).float()  # 1 con prob p, 0 con prob 1-p
    return a * mask / p                       # escala 1/p conserva la media

Por eso torch.nn.Dropout no necesita ningún cambio al pasar a evaluación: con model.eval() la capa se convierte en la identidad y devuelve la entrada sin tocar. El escalado ya se pagó durante el entrenamiento.

Dropout como ensemble implícito

Aquí está la interpretación más profunda. Una capa con n neuronas tiene 2^n posibles patrones de encendido y apagado. Cada máscara selecciona una subred distinta, y todas esas subredes comparten los mismos pesos W. Entrenar con dropout equivale a entrenar, un poquito en cada paso, a esa familia enorme de redes más pequeñas.

En inferencia nos gustaría promediar las predicciones de todas las subredes, un método de ensemble que suele mejorar la precisión. Calcular 2^n pasadas es inviable, pero el dropout ofrece una aproximación barata: usar la red completa una sola vez con los pesos escalados. Esa única pasada aproxima la media geométrica de las predicciones del ensemble, y por eso el dropout se describe como un ensemble implícito. La conexión con el bagging clásico es directa, con la diferencia de que aquí los modelos no son independientes, sino que comparten parámetros.

Esta lectura explica por qué el dropout se lleva bien con redes grandes: cuantas más neuronas, mayor es el ensemble implícito y más robusta la media resultante. También explica por qué conviene combinarlo con otras técnicas de estabilidad, como la normalización por lotes, aunque su interacción exija cuidado con el orden de las capas.

Entrenamiento frente a inferencia

Conviene fijar la asimetría entre las dos fases, porque es donde más errores se cometen:

  1. Entrenamiento: se sortea una máscara de Bernoulli por lote, se anulan neuronas al azar y se divide entre p para conservar la escala. Cada lote entrena una subred distinta.
  2. Inferencia: no se apaga nada. La red completa procesa la entrada una sola vez y, como el escalado ya se aplicó, no hay ningún factor extra que añadir.

Olvidar poner el modelo en modo evaluación es un fallo habitual: si el dropout sigue activo al validar, las predicciones se vuelven ruidosas y las métricas fluctúan sin motivo aparente. El efecto regularizador también tiene un coste: como cada paso ve una red mutilada, el entrenamiento con dropout suele necesitar más épocas para converger, a veces del orden de 1,5 a 2 veces más. A cambio, la brecha entre el error de entrenamiento y el de validación se estrecha, que es justo lo que buscamos.

Preguntas frecuentes

¿Qué valor de p conviene usar?

Depende de la capa. En las capas ocultas de una red densa, p = 0,5 es el punto de partida clásico y casi siempre razonable. En las capas de entrada se usa un valor de retención más alto, entre 0,8 y 0,9, para no descartar demasiada información cruda. Si la red es pequeña o ya generaliza bien, conviene subir p o quitar el dropout, porque un exceso puede provocar infraajuste.

¿Por qué se divide entre p y no se multiplica?

Son dos convenciones equivalentes que buscan lo mismo: que el valor esperado de las activaciones sea igual en entrenamiento y en inferencia. La versión original multiplicaba por p en inferencia. El inverted dropout divide entre p en entrenamiento, lo que deja la inferencia sin ningún ajuste. La segunda opción se impuso porque simplifica el código de despliegue y es la que traen por defecto PyTorch y Keras.

¿El dropout sirve en cualquier red?

No de forma automática. Funciona muy bien en capas densas grandes, donde hay mucha redundancia que explotar. En capas convolucionales su efecto es menor, porque los píxeles vecinos están correlacionados, y suelen preferirse variantes como el dropout espacial. En arquitecturas modernas con normalización por lotes, a veces el dropout aporta poco o incluso estorba, así que su uso se decide midiendo, no por costumbre.

Conclusión

El dropout parece un martillazo (apagar neuronas al azar), pero esconde una idea elegante: entrenar de golpe un ensemble de 2^n subredes que comparten pesos y aproximar su media con una sola pasada. El escalado por 1/p es lo que mantiene la coherencia entre entrenamiento e inferencia, y entender ese factor evita los errores más comunes. Para situar esta técnica dentro del recorrido completo, consulta el mapa de las matemáticas de las redes neuronales.

Fuentes

  1. Dropout: A Simple Way to Prevent Neural Networks from Overfitting (Srivastava et al., JMLR 2014)
  2. Improving neural networks by preventing co-adaptation of feature detectors (Hinton et al., 2012)
  3. torch.nn.Dropout (documentación de PyTorch)
  4. Dilution (neural networks) (Wikipedia)