Clase 02 — Convoluciones, normalización, ResNets y optimizadores
Desliza un kernel editable sobre una imagen y ve nacer el mapa de características; comprueba que BatchNorm y LayerNorm promedian por ejes distintos; encadena Jacobianos hasta que el gradiente muere; y haz correr cuatro optimizadores por el mismo valle.
También puedes hacer clic en cualquier celda del mapa de salida para ver de qué parche vino, y editar los números del kernel a mano.
Misma fórmula, distinto conjunto de números que entra en la media: \( \hat{x} = \dfrac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \). Pasa el ratón (o el foco) por una celda para ver iluminado el grupo con el que se normaliza.
BatchNorm estima \(\mu\) y \(\sigma^2\) con \(N\) muestras. Con \(N\) chico, esa estimación es ruidosa y cambia de un batch a otro: el mismo ejemplo se normaliza distinto según con quién le toque viajar. LayerNorm no tiene ese problema porque nunca mira a los vecinos.
Desviación típica del estadístico \(\mu_B\) estimado, en función del tamaño de batch (cae como \(1/\sqrt{N}\)). Es la razón concreta por la que los Transformers usan LayerNorm.
Simulación real: en cada capa se sortea un factor Jacobiano \(\partial\mathcal{F}/\partial x\) alrededor de la media que fijes. La red plana multiplica esos factores; la residual multiplica \((\text{factor} + 1)\). Eje logarítmico.
Superficie mal condicionada: casi plana en \(w_1\), muy empinada en \(w_2\). Es la situación en la que SGD zigzaguea y apenas avanza hacia el mínimo.
| Optimizador | Pérdida | Pasos | Estado |
|---|
Adam arranca con \(m_0 = v_0 = 0\). En \(t=1\) ambos acumuladores están pegados al cero, y el cociente \(m/\sqrt{v}\) sale distorsionado. Dividir por \(1-\beta^t\) deshace exactamente ese sesgo de arranque; el corrector se desvanece solo conforme \(t\) crece.
Tamaño relativo del primer paso, con y sin corrección, a lo largo de las primeras iteraciones.
- Pon el Sobel vertical sobre la imagen de borde horizontal: la salida es casi toda cero. Un detector solo ve lo que busca.
- Carga el ejemplo del apunte con padding 0 y stride 1: la salida 2×2 debe dar exactamente −2 −2 / −1 −3.
- En la pestaña 2, baja \(N\) a 2 con BatchNorm: con dos muestras, la normalización las manda siempre a ±1 pase lo que pase.
- En la 3, sube el factor medio a 1.2: el gradiente explota en la red plana. El atajo no lo salva — para eso está el recorte de norma.
- En la 4, apaga la corrección de sesgo y mira el primer salto de Adam: se pasa ~3× de largo, justo lo que dice el apunte.