En 04-07 construimos una MLP — un perceptrón multicapa con una o dos capas ocultas — y dejamos pendientes las siglas que dominan los titulares: CNN, RNN, transformers. Esta lección salda esa deuda. El deep learning es, en esencia, la misma red neuronal de 04-07 llevada a la profundidad: muchas capas apiladas que aprenden representaciones jerárquicas de los datos. Vas a entender qué aporta exactamente la profundidad, por qué solo se volvió práctica hace unos quince años, qué técnicas concretas la hacen entrenable, qué arquitectura corresponde a cada tipo de dato, y entrenarás una red profunda con Keras sobre el churn de MercaFresh — para descubrir, con honestidad, cuándo el deep learning compensa y cuándo el gradient boosting de la lección anterior sigue siendo la mejor opción.

Contenido

  1. De la MLP a la red profunda: qué aporta la profundidad
  2. Por qué ahora es posible: GPU, datos y técnicas
  3. Las técnicas que lo hacen entrenable
  4. Arquitecturas y su dominio: CNN, RNN/LSTM, transformers
  5. Ejemplo con Keras: churn de MercaFresh
  6. Deep learning vs. gradient boosting en datos tabulares
  7. Qué viene después

De la MLP a la red profunda: qué aporta la profundidad

Recordemos la MLP de 04-07: capas de neuronas donde cada una calcula una combinación lineal de sus entradas seguida de una activación no lineal, entrenada con backpropagation. En teoría, una sola capa oculta suficientemente ancha puede aproximar cualquier función (teorema de aproximación universal). Entonces, ¿para qué apilar más capas?

Porque la profundidad no aporta más capacidad en abstracto, sino una capacidad mejor organizada: una jerarquía de representaciones. Cada capa construye conceptos sobre los de la anterior:

  • En una imagen: la capa 1 detecta bordes; la 2 combina bordes en texturas y esquinas; la 3, en partes (un ojo, una rueda); la 4, en objetos completos.
  • En texto: caracteres → palabras → sintaxis → significado.
  • En audio: ondas → fonemas → palabras.

Esta composición es exponencialmente más eficiente que la fuerza bruta de una capa ancha: reutiliza conceptos intermedios igual que el software reutiliza funciones. Y tiene una consecuencia práctica enorme que conecta con 03-06: la red aprende sola la ingeniería de características. Donde nosotros diseñamos a mano las features RFM para el churn, una red profunda sobre imágenes descubre sus propios "RFM visuales" capa a capa. Por eso el deep learning arrasa en datos no estructurados (imágenes, audio, texto), donde diseñar features a mano es casi imposible.

flowchart LR
    P[Pixeles] --> B[Capa 1: bordes] --> T[Capa 2: texturas] --> O[Capa 3: partes] --> C[Capa 4: objeto - gato]

Por qué ahora es posible: GPU, datos y técnicas

En 01-02 contamos los inviernos de la IA: las redes neuronales existen desde los años 50-80, pero durante décadas las redes profundas eran inentrenables en la práctica. Su resurrección (~2012, con AlexNet ganando ImageNet) se apoyó en tres patas simultáneas:

Pata Qué cambió Por qué importa
Hardware (GPU) Las tarjetas gráficas resultaron perfectas para multiplicar matrices en paralelo Entrenamientos de meses pasaron a días u horas
Datos Internet produjo datasets masivos etiquetados (ImageNet: 14M de imágenes) Las redes profundas tienen millones de parámetros: sin datos masivos, solo memorizan
Técnicas ReLU, dropout, batch normalization, mejores inicializaciones y optimizadores Resolvieron los problemas matemáticos que atascaban el entrenamiento

Ninguna pata basta sola: es su coincidencia histórica lo que abrió la era actual. Las dos primeras son contexto; la tercera es ingeniería que debes conocer, y la desgranamos a continuación.

Las técnicas que lo hacen entrenable

Entrenar 50 capas con el backpropagation "ingenuo" de 04-07 fracasa por dos vías: los gradientes se desvanecen al atravesar tantas capas (la señal de corrección llega nula a las primeras) y los millones de parámetros sobreajustan con avidez. Estas son las herramientas que lo resolvieron:

Técnica Qué hace Problema que ataca
ReLU (max(0, x)) como activación Sustituye a sigmoide/tanh en capas ocultas; su gradiente es 1 para entradas positivas Desvanecimiento de gradiente: la señal ya no se atenúa capa a capa
Dropout En cada paso de entrenamiento "apaga" al azar un porcentaje de neuronas (p. ej. 30%) Overfitting: ninguna neurona puede depender de otra concreta; en el fondo entrena un ensemble implícito de subredes (¡eco del bagging de 07-02!)
Batch normalization Normaliza las activaciones de cada capa sobre el mini-lote (media 0, desviación 1) Estabiliza y acelera el entrenamiento: cada capa recibe entradas en escala controlada — la idea de 03-05 aplicada dentro de la red
Early stopping Detiene el entrenamiento cuando la pérdida de validación deja de mejorar Overfitting por exceso de épocas — la misma medicina que en el boosting de 07-03

Observa el patrón: ninguna de estas ideas te es realmente ajena. Dropout es regularización (07-01) con sabor a ensemble (07-02); batch normalization es estandarización (03-05); early stopping ya lo usaste en 07-03. El deep learning recombina las armas de todo el curso a otra escala.

Arquitecturas y su dominio: CNN, RNN/LSTM, transformers

Una red "densa" (todas las neuronas conectadas con todas, como nuestra MLP) ignora la estructura del dato. Las grandes arquitecturas del deep learning son formas de incorporar esa estructura al diseño de la red:

CNN: redes convolucionales (imágenes)

Una imagen de 1000×1000 píxeles tiene 3 millones de entradas; una capa densa necesitaría miles de millones de pesos. La CNN lo resuelve con la convolución: en lugar de conectar cada neurona con toda la imagen, un filtro pequeño (p. ej. 3×3 pesos) se desliza por toda la imagen calculando en cada posición el producto con el parche local. El mismo filtro — los mismos 9 pesos — se reutiliza en todas las posiciones.

flowchart LR
    I[Imagen 6x6] -->|"filtro 3x3 se desliza"| M[Mapa de activación 4x4]
    M -->|"pooling: quedarse con el máximo local"| R[Resumen 2x2]
    R --> S[Siguientes capas: filtros sobre filtros]

Dos intuiciones lo justifican: (1) un detector de bordes verticales es útil en cualquier rincón de la imagen — compartir pesos codifica esa invariancia y reduce brutalmente los parámetros —; (2) apilar convoluciones construye exactamente la jerarquía bordes → texturas → partes → objetos de la sección 1. Entre convoluciones se intercala el pooling (quedarse con el máximo de cada zona), que resume y da tolerancia a pequeños desplazamientos. Las CNN dominan visión por computador: clasificación de imágenes, detección de objetos, imagen médica. En MercaFresh: clasificar automáticamente las fotos que los proveedores suben al catálogo — y es la arquitectura que usaremos en el proyecto 09-02.

RNN y LSTM: secuencias

Para datos secuenciales (series temporales, texto), la red recurrente procesa los elementos en orden manteniendo un estado interno — una "memoria" que se actualiza en cada paso. Las LSTM (Long Short-Term Memory) añaden compuertas que deciden qué recordar y qué olvidar, resolviendo la incapacidad de las RNN simples para retener dependencias largas. Dominio natural: predicción de demanda diaria de productos de MercaFresh, texto (antes de 2018), audio, sensores.

Transformers y atención: lenguaje (y ya casi todo)

El transformer (2017, "Attention Is All You Need") sustituyó la recurrencia por el mecanismo de atención: cada elemento de la secuencia decide, con pesos aprendidos, a qué otros elementos "mirar" para construir su representación — en "el pedido que Ana canceló ayer", la palabra "canceló" atiende fuertemente a "pedido" y a "Ana". Al eliminar el procesamiento paso a paso, el entrenamiento se paraleliza masivamente, lo que permitió escalar a modelos con miles de millones de parámetros entrenados sobre buena parte de internet. Son la base de los grandes modelos de lenguaje y de la IA generativa actual que mencionamos al cerrar la historia de 01-02 — GPT, Claude, Gemini son transformers gigantes. Su estudio detallado excede este curso; lo esencial es que sepas situarlos.

Arquitectura Estructura que explota Dominio típico
Densa (MLP, 04-07) Ninguna en particular Datos tabulares
CNN Localidad espacial, invariancia a traslación Imágenes, vídeo, señal
RNN / LSTM Orden temporal, dependencias secuenciales Series temporales, audio
Transformer Relaciones entre cualesquiera posiciones (atención) Lenguaje, y crecientemente imágenes/audio/…

Ejemplo con Keras: churn de MercaFresh

Hasta ahora usamos MLPClassifier de sklearn (04-07). Para redes profundas de verdad, el estándar son frameworks dedicados; usaremos Keras (la API de alto nivel de TensorFlow) por su claridad. El catálogo completo de frameworks — TensorFlow, PyTorch y compañía — se estudia en 08-01; aquí nos basta uno para tocar las técnicas de esta lección con las manos.

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# --- Dataset de churn de MercaFresh (el mismo de 07-02/07-03) ---
rng = np.random.default_rng(42)
n = 1000
recencia = rng.gamma(2, 15, n)
frecuencia = rng.poisson(5, n) + 1
monetario = rng.gamma(3, 40, n)
antiguedad = rng.uniform(1, 60, n)
incidencias = rng.poisson(0.5, n)
logits = 0.05 * recencia - 0.4 * frecuencia + 0.6 * incidencias - 0.01 * antiguedad - 0.5
y = (rng.random(n) < 1 / (1 + np.exp(-logits))).astype(int)
X = pd.DataFrame({"recencia": recencia, "frecuencia": frecuencia,
                  "monetario": monetario, "antiguedad": antiguedad,
                  "incidencias": incidencias})

# División y escalado con la disciplina de 06-01: el scaler se ajusta solo en train
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42)
scaler = StandardScaler().fit(X_train)
X_train_s, X_test_s = scaler.transform(X_train), scaler.transform(X_test)

# --- Red profunda: 3 capas ocultas con ReLU y dropout ---
tf.random.set_seed(42)
modelo = keras.Sequential([
    layers.Input(shape=(5,)),                 # 5 features RFM
    layers.Dense(64, activation="relu"),      # capa oculta 1
    layers.Dropout(0.3),                      # apaga el 30% de neuronas al entrenar
    layers.Dense(32, activation="relu"),      # capa oculta 2
    layers.Dropout(0.3),
    layers.Dense(16, activation="relu"),      # capa oculta 3
    layers.Dense(1, activation="sigmoid"),    # salida: probabilidad de churn
])

modelo.compile(
    optimizer="adam",                 # descenso de gradiente adaptativo (evolución del de 04-01)
    loss="binary_crossentropy",       # la log-loss de la regresión logística (04-02)
    metrics=["accuracy"],
)

parada = keras.callbacks.EarlyStopping(
    monitor="val_loss", patience=20,          # paciencia: 20 épocas sin mejorar
    restore_best_weights=True)                # recupera los pesos del mejor momento

historia = modelo.fit(
    X_train_s, y_train,
    validation_split=0.2,             # 20% del train como validación interna
    epochs=300, batch_size=32,
    callbacks=[parada], verbose=0,
)

print(f"Épocas ejecutadas: {len(historia.history['loss'])}")
loss, acc = modelo.evaluate(X_test_s, y_test, verbose=0)
print(f"Accuracy en test: {acc:.3f}")

Lectura del código, pieza a pieza:

  • Sequential apila capas en orden; Dense es la capa totalmente conectada de la MLP de 04-07. Tres capas ocultas (64→32→16) ya constituyen una red "profunda" modesta.
  • compile fija el optimizador (Adam: el descenso de gradiente de 04-01 con pasos adaptativos por parámetro) y la pérdida (la entropía cruzada binaria es exactamente la función de coste de la regresión logística de 04-02: la salida sigmoide de la última capa es una logística sobre las representaciones aprendidas).
  • fit entrena por épocas (pasadas completas sobre el train) en mini-lotes de 32 ejemplos, apartando un 20% para validación; el callback de early stopping vigila esa validación y restaura los mejores pesos, tal como hicimos con el boosting en 07-03.
  • historia.history guarda las curvas de pérdida train/validación por época: dibujarlas con matplotlib reproduce las learning curves de 06-05 y es el primer diagnóstico ante cualquier red.

Si comparas el resultado con el HistGradientBoosting de 07-03 sobre estos mismos datos, lo normal es que la red no lo supere (y tarde más). No es un fallo del código: es la lección de la siguiente sección.

Deep learning vs. gradient boosting en datos tabulares

Toca ser honestos, porque el marketing no lo es. En datos tabulares — tablas de clientes, pedidos, features RFM: el pan de cada día de MercaFresh y de la mayoría de las empresas — la evidencia empírica es consistente: el gradient boosting gana o empata casi siempre, con menos esfuerzo.

Criterio Gradient boosting (07-03) Deep learning
Datos tabulares pequeños/medianos (miles-millones de filas) Gana casi siempre Rara vez compensa
Imágenes, audio, texto, vídeo No competitivo Sin rival
Tamaño de datos necesario Funciona desde cientos de filas Necesita datos abundantes
Preparación de datos Mínima (ni escalado necesita) Escalado, más sensibilidad a todo
Coste de entrenamiento y ajuste Segundos-minutos, CPU Minutos-horas-semanas, idealmente GPU
Ingeniería de características Manual (03-06) sigue aportando La aprende sola (su superpoder)
Interpretabilidad Media (importancias, SHAP) Baja

La regla práctica para MercaFresh y para tu carrera:

  • ¿Tu dato cabe con naturalidad en un DataFrame de pandas? Empieza por gradient boosting (con el Random Forest de 07-02 como baseline). Considera una red solo si tienes muchísimos datos y el boosting se queda corto.
  • ¿Tu dato es imagen, audio o texto libre? Deep learning sin discusión — y hoy, casi siempre, partiendo de un modelo preentrenado en lugar de entrenar desde cero (una técnica, el transfer learning, que tocaremos en el proyecto de imágenes 09-02, donde por fin construiremos una CNN de principio a fin).

Qué viene después

Con esta lección tienes el mapa completo del deep learning a nivel de usuario informado: sabes qué aporta la profundidad, qué técnicas la hacen posible y qué arquitectura corresponde a cada dato. Profundizar en cada arquitectura da para cursos enteros; en este curso, el ecosistema de frameworks (TensorFlow, PyTorch y su mundo) se cataloga en 08-01, y la práctica real con CNN llega en 09-02.

Errores Comunes y Consejos

  • Usar deep learning por defecto en datos tabulares. El error de moda. Para el churn de MercaFresh, una red profunda tarda más, exige más ajuste y probablemente rinda igual o peor que LightGBM. Elige la herramienta por el dato, no por el titular.
  • Olvidar escalar las entradas. A diferencia de los árboles, las redes son muy sensibles a la escala (el descenso de gradiente sufre con features de magnitudes dispares). StandardScaler ajustado solo en train, siempre — la disciplina de 03-05 y 06-01.
  • Entrenar sin conjunto de validación ni early stopping. Una red con miles de parámetros memoriza el train con gusto; validation_split + EarlyStopping es el cinturón de seguridad mínimo.
  • Interpretar la accuracy de train como rendimiento. Con dropout activo, la métrica de train durante fit está distorsionada (parte de la red está apagada); mira siempre las curvas val_loss/val_accuracy.
  • Redes enormes para datasets diminutos. Con 1.000 clientes, una red de 4 capas y cientos de neuronas es un lanzallamas para encender una vela; si insistes en red, hazla pequeña y con dropout generoso.
  • Consejo: ante cualquier entrenamiento de red, dibuja siempre historia.history["loss"] y ["val_loss"]. Divergencia entre ambas = overfitting (más dropout, red menor, parar antes); ambas altas y planas = underfitting o learning rate mal elegido. Es el diagnóstico de 06-05 aplicado época a época.

Ejercicios

  1. Curvas de entrenamiento. Reentrena la red del ejemplo sin dropout (elimina las capas Dropout) y sin early stopping, con epochs=300 fijas. Dibuja loss y val_loss por época junto a las de la red original. ¿Qué patrón de 06-05 aparece en la red sin regularizar y cómo lo corrigen dropout y early stopping?
  2. Profundidad vs. anchura. Con el mismo presupuesto aproximado de neuronas (~112), compara tres arquitecturas sobre el churn escalado: (a) una sola capa de 112, (b) 64→32→16 (la del ejemplo), (c) 6 capas de ~19 neuronas. Usa early stopping y evalúa accuracy en test con 5 semillas distintas cada una. ¿Gana la profundidad en este problema tabular? ¿Por qué era esperable?
  3. El duelo definitivo. Enfrenta la red del ejemplo con HistGradientBoostingClassifier (07-03) sobre el mismo train/test: compara F1 en test (usa umbral 0.5 sobre las probabilidades de la red), tiempo de entrenamiento (time.perf_counter) y líneas de código de preparación. Redacta en tres frases la recomendación que harías al equipo de datos de MercaFresh.

Soluciones

  1. Sin dropout ni early stopping, loss cae de forma monótona mientras val_loss toca mínimo pronto y luego asciende: la divergencia clásica del overfitting (la misma silueta que la curva de validación de 06-05 y que el ejercicio 3 de 07-03). Con dropout, ambas curvas avanzan más juntas (el train ni siquiera puede memorizar, porque cada paso ve una subred distinta); el early stopping corta además en el entorno del mínimo de validación y restaura esos pesos. Regularización y parada temprana atacan el mismo síntoma por vías complementarias.
  2. Con 5 features tabulares y 1.000 filas, las tres arquitecturas quedan estadísticamente empatadas (las diferencias entre semillas superan las diferencias entre arquitecturas); a menudo la más profunda es la más inestable. Era esperable: la jerarquía de representaciones brilla cuando el dato tiene estructura composicional (píxeles→bordes→objetos); cinco features RFM ya son la representación — no hay jerarquía que aprender. La profundidad paga en datos no estructurados, no aquí.
  3. Resultado típico: F1 similar o favorable al boosting, con el boosting entrenando en una fracción del tiempo, sin escalado y con menos código. Recomendación razonable: "Para el churn y demás problemas tabulares de MercaFresh, mantener gradient boosting como herramienta estándar; reservar deep learning para el clasificador de imágenes del catálogo y otros datos no estructurados; revisar la decisión si el volumen de datos crece en órdenes de magnitud."

Conclusión

El deep learning es la MLP de 04-07 elevada a jerarquía: capas que construyen representaciones sobre representaciones, entrenables gracias a un puñado de técnicas concretas — ReLU contra el desvanecimiento del gradiente, dropout y early stopping contra el overfitting, batch normalization para estabilizar — y a la conjunción histórica de GPU y datos masivos que repasamos desde 01-02. Cada arquitectura codifica la estructura de su dato: CNN para imágenes, RNN/LSTM para secuencias, transformers y su atención para el lenguaje y la IA generativa actual. Con Keras entrenaste tu primera red profunda sobre el churn de MercaFresh y extrajiste la conclusión madura: en datos tabulares, el gradient boosting sigue mandando; el reino de las redes son las imágenes, el audio y el texto — y lo visitaremos de verdad en el proyecto 09-02. Mientras tanto, una cuenta pendiente atraviesa todo el módulo: alpha, n_estimators, learning rate, capas, dropout… cada técnica ha añadido hiperparámetros que hasta ahora hemos elegido a ojo. La última lección del módulo pone orden: la optimización sistemática de hiperparámetros.

Curso de Machine Learning

Módulo 1: Introducción al Machine Learning

Módulo 2: Fundamentos de Estadística y Probabilidad

Módulo 3: Preprocesamiento de Datos

Módulo 4: Algoritmos de Machine Learning Supervisado

Módulo 5: Algoritmos de Machine Learning No Supervisado

Módulo 6: Evaluación y Validación de Modelos

Módulo 7: Técnicas Avanzadas y Optimización

Módulo 8: Implementación y Despliegue de Modelos

Módulo 9: Proyectos Prácticos

Módulo 10: Recursos Adicionales

© Copyright 2026. Todos los derechos reservados