Redes neuronales multicapa y capacidad de aproximación

Capítulo 6

Tiempo estimado de lectura: 10 minutos

+ Ejercicio

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.

Continúa en nuestra aplicación.
  • Escuche el audio con la pantalla apagada.
  • Obtenga un certificado al finalizar.
  • ¡Más de 5000 cursos para que explores!
O continúa leyendo más abajo...
Download App

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 k si multisalida) con activación identidad.
  • Clasificación binaria: salida de tamaño 1 con sigmoide.
  • Clasificación multiclase: salida de tamaño C con 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 (o k), 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.

CapaDimensionesParámetros
Dense 1d → h1d·h1 + h1
Dense 2h1 → h2h1·h2 + h2
Outputh2 → outh2·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) → Sigmoid

Alternativa 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) → Softmax

Si 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 d es pequeño (≤ 20): prueba h1 en 32–64.
  • Si d es medio (20–200): prueba h1 en 64–256.
  • Si d es grande (≥ 200): empieza con h1 en 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.

Ahora responde el ejercicio sobre el contenido:

¿Cuál es la razón principal por la que un MLP necesita activaciones no lineales entre capas densas para aumentar su expresividad?

¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.

¡Tú error! Inténtalo de nuevo.

Si se encadenan solo capas lineales, el resultado sigue siendo una función lineal equivalente. Al intercalar activaciones no lineales, el MLP puede modelar relaciones más complejas (interacciones, umbrales y regiones no convexas) que un modelo lineal no captura.

Siguiente capítulo

Optimización moderna: optimizadores adaptativos y programación de tasa de aprendizaje

Arrow Right Icon
Portada de libro electrónico gratuitaIntroducción a las Redes Neuronales: Del Perceptrón al Deep Learning
46%

Introducción a las Redes Neuronales: Del Perceptrón al Deep Learning

Nuevo curso

13 páginas

Descarga la aplicación para obtener una certificación gratuita y escuchar cursos en segundo plano, incluso con la pantalla apagada.