A 04-07 vam construir una MLP — un perceptró multicapa amb una o dues capes ocultes — i vam deixar pendents les sigles que dominen els titulars: CNN, RNN, transformers. Aquesta lliçó salda aquest deute. El deep learning és, en essència, la mateixa xarxa neuronal de 04-07 portada a la profunditat: moltes capes apilades que aprenen representacions jeràrquiques de les dades. Entendràs què aporta exactament la profunditat, per què només es va tornar pràctica fa uns quinze anys, quines tècniques concretes la fan entrenable, quina arquitectura correspon a cada tipus de dada, i entrenaràs una xarxa profunda amb Keras sobre el churn de MercaFresh — per descobrir, amb honestedat, quan el deep learning compensa i quan el gradient boosting de la lliçó anterior continua sent la millor opció.

Contingut

  1. De l'MLP a la xarxa profunda: què aporta la profunditat
  2. Per què ara és possible: GPU, dades i tècniques
  3. Les tècniques que el fan entrenable
  4. Arquitectures i el seu domini: CNN, RNN/LSTM, transformers
  5. Exemple amb Keras: churn de MercaFresh
  6. Deep learning vs. gradient boosting en dades tabulars
  7. Què ve després

De l'MLP a la xarxa profunda: què aporta la profunditat

Recordem l'MLP de 04-07: capes de neurones on cadascuna calcula una combinació lineal de les seves entrades seguida d'una activació no lineal, entrenada amb backpropagation. En teoria, una sola capa oculta prou ampla pot aproximar qualsevol funció (teorema d'aproximació universal). Llavors, per a què apilar més capes?

Perquè la profunditat no aporta més capacitat en abstracte, sinó una capacitat més ben organitzada: una jerarquia de representacions. Cada capa construeix conceptes sobre els de l'anterior:

  • En una imatge: la capa 1 detecta vores; la 2 combina vores en textures i cantonades; la 3, en parts (un ull, una roda); la 4, en objectes complets.
  • En text: caràcters → paraules → sintaxi → significat.
  • En àudio: ones → fonemes → paraules.

Aquesta composició és exponencialment més eficient que la força bruta d'una capa ampla: reutilitza conceptes intermedis igual que el programari reutilitza funcions. I té una conseqüència pràctica enorme que connecta amb 03-06: la xarxa aprèn sola l'enginyeria de característiques. On nosaltres vam dissenyar a mà les features RFM per al churn, una xarxa profunda sobre imatges descobreix els seus propis "RFM visuals" capa a capa. Per això el deep learning arrasa en dades no estructurades (imatges, àudio, text), on dissenyar features a mà és gairebé impossible.

flowchart LR
    P[Pixels] --> B[Capa 1: vores] --> T[Capa 2: textures] --> O[Capa 3: parts] --> C[Capa 4: objecte - gat]

Per què ara és possible: GPU, dades i tècniques

A 01-02 vam explicar els hiverns de la IA: les xarxes neuronals existeixen des dels anys 50-80, però durant dècades les xarxes profundes eren inentrenables a la pràctica. La seva resurrecció (~2012, amb AlexNet guanyant ImageNet) es va recolzar en tres potes simultànies:

Pota Què va canviar Per què importa
Maquinari (GPU) Les targetes gràfiques van resultar perfectes per multiplicar matrius en paral·lel Entrenaments de mesos van passar a dies o hores
Dades Internet va produir datasets massius etiquetats (ImageNet: 14M d'imatges) Les xarxes profundes tenen milions de paràmetres: sense dades massives, només memoritzen
Tècniques ReLU, dropout, batch normalization, millors inicialitzacions i optimitzadors Van resoldre els problemes matemàtics que encallaven l'entrenament

Cap pota no és suficient sola: és la seva coincidència històrica el que va obrir l'era actual. Les dues primeres són context; la tercera és enginyeria que has de conèixer, i la desgranem a continuació.

Les tècniques que el fan entrenable

Entrenar 50 capes amb el backpropagation "ingenu" de 04-07 fracassa per dues vies: els gradients s'esvaeixen en travessar tantes capes (el senyal de correcció arriba nul a les primeres) i els milions de paràmetres sobreajusten amb avidesa. Aquestes són les eines que ho van resoldre:

Tècnica Què fa Problema que ataca
ReLU (max(0, x)) com a activació Substitueix sigmoide/tanh en capes ocultes; el seu gradient és 1 per a entrades positives Esvaïment de gradient: el senyal ja no s'atenua capa a capa
Dropout En cada pas d'entrenament "apaga" a l'atzar un percentatge de neurones (p. ex. 30%) Overfitting: cap neurona no pot dependre d'una altra de concreta; en el fons entrena un ensemble implícit de subxarxes (eco del bagging de 07-02!)
Batch normalization Normalitza les activacions de cada capa sobre el mini-lot (mitjana 0, desviació 1) Estabilitza i accelera l'entrenament: cada capa rep entrades en escala controlada — la idea de 03-05 aplicada dins de la xarxa
Early stopping Atura l'entrenament quan la pèrdua de validació deixa de millorar Overfitting per excés d'èpoques — la mateixa medicina que en el boosting de 07-03

Observa el patró: cap d'aquestes idees no t'és realment aliena. Dropout és regularització (07-01) amb gust d'ensemble (07-02); batch normalization és estandardització (03-05); early stopping ja el vas usar a 07-03. El deep learning recombina les armes de tot el curs a una altra escala.

Arquitectures i el seu domini: CNN, RNN/LSTM, transformers

Una xarxa "densa" (totes les neurones connectades amb totes, com la nostra MLP) ignora l'estructura de la dada. Les grans arquitectures del deep learning són maneres d'incorporar aquesta estructura al disseny de la xarxa:

CNN: xarxes convolucionals (imatges)

Una imatge de 1000×1000 píxels té 3 milions d'entrades; una capa densa necessitaria milers de milions de pesos. La CNN ho resol amb la convolució: en lloc de connectar cada neurona amb tota la imatge, un filtre petit (p. ex. 3×3 pesos) es desplaça per tota la imatge calculant en cada posició el producte amb el retall local. El mateix filtre — els mateixos 9 pesos — es reutilitza en totes les posicions.

flowchart LR
    I[Imatge 6x6] -->|"filtre 3x3 llisca"| M["Mapa d'activacio 4x4"]
    R --> S[Mes capes: filtres sobre filtres]
    M -->|"pooling: quedar-se el maxim local"| R[Resum 2x2]

Dues intuïcions ho justifiquen: (1) un detector de vores verticals és útil a qualsevol racó de la imatge — compartir pesos codifica aquesta invariància i redueix brutalment els paràmetres —; (2) apilar convolucions construeix exactament la jerarquia vores → textures → parts → objectes de la secció 1. Entre convolucions s'intercala el pooling (quedar-se el màxim de cada zona), que resumeix i dona tolerància a petits desplaçaments. Les CNN dominen la visió per computador: classificació d'imatges, detecció d'objectes, imatge mèdica. A MercaFresh: classificar automàticament les fotos que els proveïdors pugen al catàleg — i és l'arquitectura que usarem al projecte 09-02.

RNN i LSTM: seqüències

Per a dades seqüencials (sèries temporals, text), la xarxa recurrent processa els elements en ordre mantenint un estat intern — una "memòria" que s'actualitza en cada pas. Les LSTM (Long Short-Term Memory) afegeixen comportes que decideixen què recordar i què oblidar, resolent la incapacitat de les RNN simples per retenir dependències llargues. Domini natural: predicció de la demanda diària de productes de MercaFresh, text (abans de 2018), àudio, sensors.

Transformers i atenció: llenguatge (i ja gairebé tot)

El transformer (2017, "Attention Is All You Need") va substituir la recurrència pel mecanisme d'atenció: cada element de la seqüència decideix, amb pesos apresos, a quins altres elements "mirar" per construir la seva representació — a "la comanda que l'Anna va cancel·lar ahir", la paraula "cancel·lar" atén fortament "comanda" i "Anna". En eliminar el processament pas a pas, l'entrenament es paral·lelitza massivament, cosa que va permetre escalar a models amb milers de milions de paràmetres entrenats sobre bona part d'internet. Són la base dels grans models de llenguatge i de la IA generativa actual que vam mencionar en tancar la història de 01-02 — GPT, Claude, Gemini són transformers gegants. El seu estudi detallat excedeix aquest curs; l'essencial és que els sàpigues situar.

Arquitectura Estructura que explota Domini típic
Densa (MLP, 04-07) Cap en particular Dades tabulars
CNN Localitat espacial, invariància a la translació Imatges, vídeo, senyal
RNN / LSTM Ordre temporal, dependències seqüencials Sèries temporals, àudio
Transformer Relacions entre qualssevol posicions (atenció) Llenguatge, i creixentment imatges/àudio/…

Exemple amb Keras: churn de MercaFresh

Fins ara vam usar MLPClassifier de sklearn (04-07). Per a xarxes profundes de debò, l'estàndard són frameworks dedicats; usarem Keras (l'API d'alt nivell de TensorFlow) per la seva claredat. El catàleg complet de frameworks — TensorFlow, PyTorch i companyia — s'estudia a 08-01; aquí ens en basta un per tocar les tècniques d'aquesta lliçó amb les mans.

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 mateix de 07-02/07-03) ---
rng = np.random.default_rng(42)
n = 1000
recencia = rng.gamma(2, 15, n)
frequencia = rng.poisson(5, n) + 1
monetari = rng.gamma(3, 40, n)
antiguitat = rng.uniform(1, 60, n)
incidencies = rng.poisson(0.5, n)
logits = 0.05 * recencia - 0.4 * frequencia + 0.6 * incidencies - 0.01 * antiguitat - 0.5
y = (rng.random(n) < 1 / (1 + np.exp(-logits))).astype(int)
X = pd.DataFrame({"recencia": recencia, "frequencia": frequencia,
                  "monetari": monetari, "antiguitat": antiguitat,
                  "incidencies": incidencies})

# Divisio i escalat amb la disciplina de 06-01: l'scaler s'ajusta nomes en entrenament
X_entrenament, X_prova, y_entrenament, y_prova = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42)
scaler = StandardScaler().fit(X_entrenament)
X_entrenament_esc, X_prova_esc = scaler.transform(X_entrenament), scaler.transform(X_prova)

# --- Xarxa profunda: 3 capes ocultes amb ReLU i dropout ---
tf.random.set_seed(42)
model = 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 neurones en 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"),    # sortida: probabilitat de churn
])

model.compile(
    optimizer="adam",                 # descens de gradient adaptatiu (evolucio del de 04-01)
    loss="binary_crossentropy",       # la log-loss de la regressio logistica (04-02)
    metrics=["accuracy"],
)

aturada = keras.callbacks.EarlyStopping(
    monitor="val_loss", patience=20,          # paciencia: 20 epoques sense millorar
    restore_best_weights=True)                # recupera els pesos del millor moment

historial = model.fit(
    X_entrenament_esc, y_entrenament,
    validation_split=0.2,             # 20% de l'entrenament com a validacio interna
    epochs=300, batch_size=32,
    callbacks=[aturada], verbose=0,
)

print(f"Epoques executades: {len(historial.history['loss'])}")
loss, acc = model.evaluate(X_prova_esc, y_prova, verbose=0)
print(f"Accuracy en prova: {acc:.3f}")

Lectura del codi, peça a peça:

  • Sequential apila capes en ordre; Dense és la capa totalment connectada de l'MLP de 04-07. Tres capes ocultes (64→32→16) ja constitueixen una xarxa "profunda" modesta.
  • compile fixa l'optimitzador (Adam: el descens de gradient de 04-01 amb passos adaptatius per paràmetre) i la pèrdua (l'entropia creuada binària és exactament la funció de cost de la regressió logística de 04-02: la sortida sigmoide de l'última capa és una logística sobre les representacions apreses).
  • fit entrena per èpoques (passades completes sobre l'entrenament) en mini-lots de 32 exemples, apartant un 20% per a validació; el callback d'early stopping vigila aquesta validació i restaura els millors pesos, tal com vam fer amb el boosting a 07-03.
  • historial.history guarda les corbes de pèrdua entrenament/validació per època: dibuixar-les amb matplotlib reprodueix les learning curves de 06-05 i és el primer diagnòstic davant de qualsevol xarxa.

Si compares el resultat amb el HistGradientBoosting de 07-03 sobre aquestes mateixes dades, el normal és que la xarxa no el superi (i trigui més). No és un error del codi: és la lliçó de la secció següent.

Deep learning vs. gradient boosting en dades tabulars

Toca ser honestos, perquè el màrqueting no ho és. En dades tabulars — taules de clients, comandes, features RFM: el pa de cada dia de MercaFresh i de la majoria de les empreses — l'evidència empírica és consistent: el gradient boosting guanya o empata gairebé sempre, amb menys esforç.

Criteri Gradient boosting (07-03) Deep learning
Dades tabulars petites/mitjanes (milers-milions de files) Guanya gairebé sempre Rarament compensa
Imatges, àudio, text, vídeo No competitiu Sense rival
Mida de dades necessària Funciona des de centenars de files Necessita dades abundants
Preparació de dades Mínima (ni escalat necessita) Escalat, més sensibilitat a tot
Cost d'entrenament i ajust Segons-minuts, CPU Minuts-hores-setmanes, idealment GPU
Enginyeria de característiques La manual (03-06) continua aportant L'aprèn sola (el seu superpoder)
Interpretabilitat Mitjana (importàncies, SHAP) Baixa

La regla pràctica per a MercaFresh i per a la teva carrera:

  • La teva dada cap amb naturalitat en un DataFrame de pandas? Comença per gradient boosting (amb el Random Forest de 07-02 com a baseline). Considera una xarxa només si tens moltíssimes dades i el boosting es queda curt.
  • La teva dada és imatge, àudio o text lliure? Deep learning sense discussió — i avui, gairebé sempre, partint d'un model preentrenat en lloc d'entrenar des de zero (una tècnica, el transfer learning, que tocarem al projecte d'imatges 09-02, on per fi construirem una CNN de principi a fi).

Què ve després

Amb aquesta lliçó tens el mapa complet del deep learning a nivell d'usuari informat: saps què aporta la profunditat, quines tècniques la fan possible i quina arquitectura correspon a cada dada. Aprofundir en cada arquitectura dona per a cursos sencers; en aquest curs, l'ecosistema de frameworks (TensorFlow, PyTorch i el seu món) es cataloga a 08-01, i la pràctica real amb CNN arriba a 09-02.

Errors Comuns i Consells

  • Usar deep learning per defecte en dades tabulars. L'error de moda. Per al churn de MercaFresh, una xarxa profunda triga més, exigeix més ajust i probablement rendeix igual o pitjor que LightGBM. Tria l'eina per la dada, no pel titular.
  • Oblidar escalar les entrades. A diferència dels arbres, les xarxes són molt sensibles a l'escala (el descens de gradient pateix amb features de magnituds disparelles). StandardScaler ajustat només en entrenament, sempre — la disciplina de 03-05 i 06-01.
  • Entrenar sense conjunt de validació ni early stopping. Una xarxa amb milers de paràmetres memoritza l'entrenament amb gust; validation_split + EarlyStopping és el cinturó de seguretat mínim.
  • Interpretar l'accuracy d'entrenament com a rendiment. Amb dropout actiu, la mètrica d'entrenament durant fit està distorsionada (part de la xarxa està apagada); mira sempre les corbes val_loss/val_accuracy.
  • Xarxes enormes per a datasets diminuts. Amb 1.000 clients, una xarxa de 4 capes i centenars de neurones és un llançaflames per encendre una espelma; si insisteixes en xarxa, fes-la petita i amb dropout generós.
  • Consell: davant de qualsevol entrenament de xarxa, dibuixa sempre historial.history["loss"] i ["val_loss"]. Divergència entre totes dues = overfitting (més dropout, xarxa menor, parar abans); totes dues altes i planes = underfitting o learning rate mal triat. És el diagnòstic de 06-05 aplicat època a època.

Exercicis

  1. Corbes d'entrenament. Reentrena la xarxa de l'exemple sense dropout (elimina les capes Dropout) i sense early stopping, amb epochs=300 fixes. Dibuixa loss i val_loss per època al costat de les de la xarxa original. Quin patró de 06-05 apareix a la xarxa sense regularitzar i com el corregeixen el dropout i l'early stopping?
  2. Profunditat vs. amplada. Amb el mateix pressupost aproximat de neurones (~112), compara tres arquitectures sobre el churn escalat: (a) una sola capa de 112, (b) 64→32→16 (la de l'exemple), (c) 6 capes de ~19 neurones. Usa early stopping i avalua l'accuracy en prova amb 5 llavors diferents cadascuna. Guanya la profunditat en aquest problema tabular? Per què era esperable?
  3. El duel definitiu. Enfronta la xarxa de l'exemple amb HistGradientBoostingClassifier (07-03) sobre el mateix entrenament/prova: compara l'F1 en prova (usa llindar 0.5 sobre les probabilitats de la xarxa), el temps d'entrenament (time.perf_counter) i les línies de codi de preparació. Redacta en tres frases la recomanació que faries a l'equip de dades de MercaFresh.

Solucions

  1. Sense dropout ni early stopping, loss cau de manera monòtona mentre val_loss toca mínim aviat i després ascendeix: la divergència clàssica de l'overfitting (la mateixa silueta que la corba de validació de 06-05 i que l'exercici 3 de 07-03). Amb dropout, totes dues corbes avancen més juntes (l'entrenament ni tan sols pot memoritzar, perquè cada pas veu una subxarxa diferent); l'early stopping talla a més a l'entorn del mínim de validació i restaura aquells pesos. Regularització i aturada primerenca ataquen el mateix símptoma per vies complementàries.
  2. Amb 5 features tabulars i 1.000 files, les tres arquitectures queden estadísticament empatades (les diferències entre llavors superen les diferències entre arquitectures); sovint la més profunda és la més inestable. Era esperable: la jerarquia de representacions brilla quan la dada té estructura composicional (píxels→vores→objectes); cinc features RFM ja són la representació — no hi ha jerarquia per aprendre. La profunditat paga en dades no estructurades, no aquí.
  3. Resultat típic: F1 semblant o favorable al boosting, amb el boosting entrenant en una fracció del temps, sense escalat i amb menys codi. Recomanació raonable: "Per al churn i la resta de problemes tabulars de MercaFresh, mantenir el gradient boosting com a eina estàndard; reservar el deep learning per al classificador d'imatges del catàleg i altres dades no estructurades; revisar la decisió si el volum de dades creix en ordres de magnitud."

Conclusió

El deep learning és l'MLP de 04-07 elevada a jerarquia: capes que construeixen representacions sobre representacions, entrenables gràcies a un grapat de tècniques concretes — ReLU contra l'esvaïment del gradient, dropout i early stopping contra l'overfitting, batch normalization per estabilitzar — i a la conjunció històrica de GPU i dades massives que vam repassar des de 01-02. Cada arquitectura codifica l'estructura de la seva dada: CNN per a imatges, RNN/LSTM per a seqüències, transformers i la seva atenció per al llenguatge i la IA generativa actual. Amb Keras has entrenat la teva primera xarxa profunda sobre el churn de MercaFresh i n'has extret la conclusió madura: en dades tabulars, el gradient boosting continua manant; el regne de les xarxes són les imatges, l'àudio i el text — i el visitarem de debò al projecte 09-02. Mentrestant, un compte pendent travessa tot el mòdul: alpha, n_estimators, learning rate, capes, dropout… cada tècnica ha afegit hiperparàmetres que fins ara hem triat a ull. L'última lliçó del mòdul hi posa ordre: l'optimització sistemàtica d'hiperparàmetres.

Curs de Machine Learning

Mòdul 1: Introducció al Machine Learning

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algorismes de Machine Learning Supervisat

Mòdul 5: Algorismes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2026. Tots els drets reservats