Perceptrón multicapa (MLP): capas lineales + activaciones no lineales
Un perceptrón multicapa (MLP, Multi-Layer Perceptron) es una red neuronal formada por la composición repetida de dos ingredientes: (1) una transformación lineal (también llamada capa densa o fully connected) y (2) una activación no lineal. En un problema supervisado típico, el MLP implementa una función f(x; θ) que transforma un vector de entrada x (características tabulares) en una predicción ŷ, donde θ agrupa todos los pesos y sesgos.
Una capa densa toma un vector h y produce z = W h + b. Luego se aplica una activación a(·) para obtener h' = a(z). Encadenando varias capas se obtiene una función compuesta: h0 = x, h1 = a1(W1 h0 + b1), h2 = a2(W2 h1 + b2), …, ŷ = g(WL h(L-1) + bL), donde g suele ser una activación de salida acorde a la tarea (por ejemplo, identidad para regresión, sigmoide o softmax para clasificación).
Por qué la no linealidad importa en un MLP
Si elimináramos las activaciones no lineales y dejáramos solo capas lineales, la composición de varias capas lineales seguiría siendo una sola transformación lineal equivalente. La expresividad del MLP proviene de intercalar activaciones no lineales: esto permite modelar relaciones complejas entre variables (interacciones, umbrales, regiones no convexas en el espacio de entrada) que no se capturan con un modelo lineal.
Capacidad y expresividad: profundidad, anchura y número de parámetros
La capacidad (o expresividad) describe cuán rica es la familia de funciones que el modelo puede representar. En MLPs, la capacidad está fuertemente influida por: (1) profundidad (número de capas), (2) anchura (neuronas por capa) y (3) número total de parámetros.
Profundidad vs. anchura
- Más anchura (capas más grandes) suele aumentar la capacidad de forma directa: más unidades permiten más combinaciones y particiones del espacio de entrada.
- Más profundidad (más capas) permite construir representaciones jerárquicas: capas tempranas pueden aprender combinaciones simples de variables y capas posteriores combinarlas en patrones más complejos. En muchos casos, ciertas funciones pueden representarse de manera mucho más eficiente (con menos parámetros) usando más profundidad que usando solo anchura.
En la práctica, para datos tabulares, aumentar profundidad más allá de unas pocas capas no siempre mejora; suele ser más sensible a regularización, calidad del preprocesamiento y tamaño del dataset. Aun así, la profundidad puede ayudar cuando hay interacciones complejas entre variables.
- Escuche el audio con la pantalla apagada.
- Obtenga un certificado al finalizar.
- ¡Más de 5000 cursos para que explores!
Descargar la aplicación
Número de parámetros y relación con el ajuste
El número de parámetros determina, en parte, la capacidad. En una capa densa con n_in entradas y n_out salidas, los parámetros son n_in × n_out (pesos) + n_out (sesgos). El total del MLP es la suma por capas.
Más parámetros suelen facilitar ajustar (reducir la pérdida en entrenamiento), pero también incrementan el riesgo de sobreajuste si el modelo aprende patrones específicos del conjunto de entrenamiento que no generalizan. Por eso, capacidad y generalización se equilibran con decisiones de arquitectura y técnicas como regularización (p. ej., dropout, weight decay), validación y early stopping (tratadas en otros capítulos o recursos complementarios).
Capacidad efectiva: no solo “tamaño”
Dos redes con el mismo número de parámetros pueden comportarse distinto según: activaciones, normalización, inicialización, optimizador y escala de los datos. Por eso, al diseñar un MLP conviene pensar en capacidad como una combinación de arquitectura + entrenamiento.
Pipeline práctico de un MLP: de la arquitectura a la evaluación
El flujo de trabajo típico para entrenar un MLP en un problema tabular puede organizarse como una secuencia clara de pasos. A continuación se describe el pipeline completo, destacando qué decisiones se toman y qué se espera observar en cada etapa.
1) Definición de la arquitectura
Decide: número de capas ocultas, tamaño de cada capa, activación, y capa de salida. Para tabular, una plantilla común es: Input → Dense → ReLU → Dense → ReLU → Dense(output).
- Regresión: salida de tamaño 1 (o
ksi multisalida) con activación identidad. - Clasificación binaria: salida de tamaño 1 con sigmoide.
- Clasificación multiclase: salida de tamaño
Ccon softmax.
Recomendación práctica: empieza con 2–3 capas ocultas y ajusta anchura según complejidad y tamaño del dataset (ver sección de recomendaciones).
2) Inicialización de parámetros
La inicialización define el punto de partida del entrenamiento. En MLPs con activaciones tipo ReLU, es común usar inicializaciones del estilo He; con activaciones tipo tanh, inicializaciones tipo Xavier suelen funcionar bien. En librerías modernas (PyTorch, TensorFlow/Keras) esto suele venir por defecto, pero es importante saber que una mala inicialización puede ralentizar el aprendizaje o hacerlo inestable.
3) Forward pass (propagación hacia adelante)
Con los parámetros actuales, el modelo calcula predicciones ŷ para un batch de entradas X. Conceptualmente: H1 = a1(XW1 + b1), H2 = a2(H1W2 + b2), …, Ŷ = g(HL-1WL + bL).
En tabular, es crucial que las entradas estén en escalas razonables (por ejemplo, estandarización de variables numéricas) para que el forward produzca activaciones en rangos adecuados.
4) Cálculo de la loss
Se calcula una función de pérdida que mide discrepancia entre ŷ y y. La elección depende de la tarea (p. ej., MSE para regresión, entropía cruzada para clasificación). Además, a veces se añade un término de regularización (como L2) que penaliza pesos grandes.
5) Backward pass (cálculo de gradientes)
Se calculan gradientes de la pérdida respecto a cada parámetro. En frameworks de autodiferenciación, esto se obtiene automáticamente tras definir el grafo computacional del forward y la loss. El resultado es un conjunto de gradientes ∂L/∂Wl, ∂L/∂bl para cada capa.
6) Optimización (actualización de parámetros)
El optimizador actualiza los parámetros usando los gradientes. En la práctica, Adam es un punto de partida robusto para tabular; SGD con momentum puede funcionar muy bien con ajuste cuidadoso de la tasa de aprendizaje. Aquí importan hiperparámetros como learning rate, batch size y, si aplica, weight decay.
7) Evaluación y control de generalización
Evalúa en validación (y luego test) con métricas apropiadas. Observa: (1) brecha entre pérdida/metricas de entrenamiento y validación, (2) estabilidad de la curva de aprendizaje, (3) sensibilidad a semillas e inicialización. Para tabular, también es útil comparar contra baselines (p. ej., regresión logística/lineal, árboles de decisión o gradient boosting) para verificar que el MLP aporta valor.
Para profundizar en prácticas de entrenamiento y evaluación, puedes apoyarte en cursos y laboratorios de plataformas como Coursera, edX, Udacity o los tutoriales oficiales de PyTorch y TensorFlow.
Guía paso a paso: diseñar un MLP para datos tabulares
Paso 1: define el tipo de problema y la salida
- Regresión:
out_dim = 1(ok), salida lineal. - Binaria:
out_dim = 1, salida sigmoide (o logits y aplicar sigmoide en la loss). - Multiclase:
out_dim = C, salida softmax (o logits y aplicar softmax en la loss).
Paso 2: estima una arquitectura inicial (baseline)
Elige una arquitectura simple que puedas entrenar rápido. Ejemplos típicos:
- Pequeña:
[d] → 64 → 32 → out - Media:
[d] → 128 → 64 → 32 → out - Grande:
[d] → 256 → 256 → 128 → 64 → out
Donde d es el número de features de entrada. Usa ReLU (u otra activación moderna) en capas ocultas como punto de partida.
Paso 3: calcula parámetros para verificar capacidad
Antes de entrenar, estima el número de parámetros para evitar modelos desproporcionados respecto al tamaño del dataset.
| Capa | Dimensiones | Parámetros |
|---|---|---|
| Dense 1 | d → h1 | d·h1 + h1 |
| Dense 2 | h1 → h2 | h1·h2 + h2 |
| Output | h2 → out | h2·out + out |
Regla práctica: si tienes pocos miles de filas, evita redes enormes salvo que uses regularización fuerte y validación cuidadosa. Si tienes cientos de miles o millones de filas, puedes permitirte más capacidad.
Paso 4: selecciona hiperparámetros de entrenamiento
- Optimizador: Adam como baseline.
- Learning rate: empieza con
1e-3(ajusta si diverge o si aprende lento). - Batch size: 64–512 según hardware y estabilidad.
- Regularización: weight decay (p. ej.,
1e-4) y/o dropout (p. ej., 0.1–0.3) si hay sobreajuste.
Paso 5: entrena y diagnostica
Observa curvas de entrenamiento/validación. Patrones comunes:
- Subajuste (train y val malos): aumenta capacidad (más neuronas/capas), mejora features, ajusta learning rate.
- Sobreajuste (train bueno, val peor): reduce capacidad, añade regularización, usa early stopping, revisa fuga de datos.
- Inestabilidad (pérdida oscila o diverge): baja learning rate, revisa escalado de inputs, prueba batch size distinto.
Paso 6: itera arquitectura con cambios controlados
Cambia una cosa por vez: (a) anchura, (b) profundidad, (c) regularización, (d) learning rate. Mantén un registro de experimentos (por ejemplo, con MLflow o W&B) para comparar de forma reproducible.
Ejemplos de arquitecturas MLP para problemas tabulares
Ejemplo A: regresión con complejidad baja-media
Útil cuando las relaciones no son extremadamente no lineales y el dataset no es enorme.
Input(d) → Dense(64) → ReLU → Dense(32) → ReLU → Dense(1)Si hay sobreajuste, añade weight decay o dropout entre capas ocultas.
Ejemplo B: clasificación binaria con interacciones moderadas
Input(d) → Dense(128) → ReLU → Dense(64) → ReLU → Dense(1) → SigmoidAlternativa común en implementaciones: producir logits (sin sigmoide final) y usar una loss que lo incorpore, por estabilidad numérica.
Ejemplo C: multiclase con mayor complejidad
Input(d) → Dense(256) → ReLU → Dense(256) → ReLU → Dense(128) → ReLU → Dense(C) → SoftmaxSi el dataset es pequeño, esta arquitectura puede ser demasiado capaz; reduce a 128-64 o incrementa regularización.
Ejemplo D: tabular con muchas variables (alto d) y riesgo de sobreajuste
Input(d) → Dense(128) → ReLU → Dropout(0.2) → Dense(64) → ReLU → Dropout(0.2) → Dense(out)Cuando d es grande, el primer bloque d → h1 concentra muchos parámetros. Controlar h1 y usar regularización suele ser más efectivo que añadir muchas capas.
Recomendaciones de tamaño de capa según complejidad del dato
Heurísticas rápidas (punto de partida)
- Dataset pequeño (p. ej., < 10k filas): 1–2 capas ocultas, 32–128 neuronas. Prioriza regularización y validación.
- Dataset mediano (10k–200k): 2–3 capas, 64–256 neuronas. Ajusta según señales de sub/sobreajuste.
- Dataset grande (> 200k): 3–5 capas, 128–512 neuronas, con control de learning rate y regularización moderada.
Cómo decidir anchura inicial a partir de d (número de features)
- Si
des pequeño (≤ 20): pruebah1en 32–64. - Si
des medio (20–200): pruebah1en 64–256. - Si
des grande (≥ 200): empieza conh1en 128–256 y evita crecer demasiado (el coste paramétrico del primer layer domina).
Profundidad recomendada en tabular
- Si sospechas que el problema requiere interacciones complejas entre variables, prueba 3 capas ocultas antes de aumentar mucho la anchura.
- Si el problema parece más suave (tendencias y pocas interacciones), 1–2 capas suelen bastar.
Checklist de “capacidad adecuada”
- El modelo mejora en entrenamiento pero no en validación: reduce capacidad o aumenta regularización.
- El modelo no mejora ni en entrenamiento: aumenta capacidad o revisa preprocesamiento/learning rate.
- Pequeñas variaciones de arquitectura cambian mucho el resultado: estabiliza con mejor validación, semillas, y control de hiperparámetros.