Objetivo: construir mentalmente un MLP y contar sus parámetros.
Un MLP es una red de propagación hacia adelante formada por capas totalmente conectadas.
a⁽⁰⁾ = x
z⁽ˡ⁾ = W⁽ˡ⁾a⁽ˡ⁻¹⁾ + b⁽ˡ⁾
a⁽ˡ⁾ = φ(z⁽ˡ⁾)Una capa Linear(p, q) contiene p × q pesos y q sesgos, es decir (p + 1)q
parámetros. Un modelo 784 → 128 → 10 contiene por tanto 784×128+128 + 128×10+10 = 101 770 parámetros.
from torch import nn
model = nn.Sequential(
nn.Flatten(),
nn.Linear(28 * 28, 128),
nn.ReLU(),
nn.Linear(128, 10),
)«Oculta» significa que su salida no es ni la entrada bruta ni la predicción entregada. Construye una representación intermedia. No hay que suponer que cada neurona tiene un sentido humano simple; una representación suele estar distribuida entre varias unidades.
La salida depende de la tarea:
| Tarea | Salida bruta |
|---|---|
| Regresión escalar | 1 valor |
| Clasificación binaria | 1 logit |
| Clasificación de K clases | K logits |
| Multietiqueta con K etiquetas | K logits independientes |
Un logit es una puntuación no normalizada. En clasificación multiclase, PyTorch espera en
general los logits directamente; CrossEntropyLoss aplica la transformación numérica
estable apropiada.
softmax en el modelo antes de CrossEntropyLoss.¿Cuántos parámetros contiene Linear(20, 5)? ¿Qué dimensión de salida para 7
clases exclusivas?
20×5 + 5 = 105. Hacen falta 7 logits.
Calcula formas y parámetros de un MLP 20 → 8 → 5 → 3, sesgos incluidos. Propón después
una variante dos veces más pequeña y precisa qué mantienes constante para comparar las
dos. Éxito: cada matriz está orientada correctamente y el protocolo no toca el conjunto de prueba.
Lectura: una capa lineal cambia la última dimensión, nunca el tamaño del lote. Para
una clasificación de K clases, la última capa produce exactamente K logits. La
trampa principal es aplicar una activación de salida incompatible con la función de
pérdida, por ejemplo softmax antes de CrossEntropyLoss.