las ecuaciones de esta slide
E[R̂(θ̂)] ≈ Rtgt(θ*) + O(VC(F)n) + d(Dsrc, Dtgt)(nota, Ec. 1)
el error esperado en tu problema tiene tres sumandos: el error irreducible Rtgt(θ*) (ni con datos infinitos bajas de ahí), el término de generalización √(VC(F)/n) (capacidad efectiva del modelo dividida por tus n etiquetas) y el transfer gap d(·,·), la distancia entre el dominio donde se preentrenó y el tuyo. Preentrenar no toca n: encoge VC(F) al anclar los pesos cerca de θ0.
acc(n) ≈ a·(1 − A·n−α)(ley de potencia, forma de la Ec. 4)
la curva de aprendizaje empírica: a es el techo con datos infinitos, A cuánto te falta al empezar y α la velocidad a la que cada nueva etiqueta acerca al techo. Preentrenar baja A y sube α: arrancas más arriba y avanzas más rápido por etiqueta.
guion paso a paso
  1. Pon n = 800 (las fotos de Inditex del deck). Con backbone preentrenado ya rondas el 90 %; desde cero apenas superas el 75 %: mismo dato, 15 puntos de diferencia.
  2. Sube el objetivo a 90 % y lee el ahorro. Desde cero necesitas decenas de miles de etiquetas; con transfer, unos cientos. El factor de ahorro sube con el objetivo.
  3. Lleva n a 500 000. Las dos curvas casi se tocan: con escala masiva el preentrenamiento aporta poco. La ventaja del transfer vive en el régimen de pocos datos, que es donde vive tu empresa.
  4. Mira el panel inferior moviendo el objetivo. El factor de ahorro de etiquetas crece de ×20 a más de ×100 según lo exigente que seas: el transfer vale más cuanto más cerca del techo quieres operar.
Comprueba que entiendes: ¿por qué las curvas se juntan con n grande si el transfer gap d no desaparece?
Porque lo que el preentrenamiento mejora es el término de generalización √(VC/n), que se hunde para AMBAS curvas cuando n crece: desde cero también acaba aprendiendo bordes y texturas, solo que pagándolos con tus etiquetas. El gap d sí persiste, pero aquí es pequeño (catálogo de producto ≈ ImageNet); en la slide siguiente verás qué pasa cuando d es grande y la curva preentrenada ya no domina tan claramente.

Setup. Caso del deck: clasificar 10 categorías del catálogo de Inditex. La curva dorada es accuracy con backbone ResNet-50 preentrenado en ImageNet (1,3 millones de imágenes ya pagadas por otros); la curva tinta es la misma arquitectura entrenada desde cero solo con tus fotos. Ambas son leyes de potencia acc(n) = a(1−A·n−α) con parámetros realistas: preentrenada (a = 0,95, A = 0,9, α = 0,45), desde cero (a = 0,93, A = 2,2, α = 0,38). La línea horizontal punteada de abajo es el nivel azar (10 %).

Juega. Mueve n y mira la distancia vertical entre curvas: es máxima entre 100 y 5 000 etiquetas, el rango donde de verdad operan los proyectos de empresa. Después fija un objetivo de accuracy: el lector invierte la ley de potencia, n = (A/(1−t/a))1/α, y te dice cuántas etiquetas necesita cada estrategia y cuántas te ahorra el transfer.

Lee así. A 3 minutos por foto etiquetada, cada 1 000 etiquetas son unas 50 horas-persona. El "ahorro de etiquetas" del lector se traduce directamente en semanas de trabajo y miles de euros que no gastas.

Mensaje. Transfer learning no es una técnica exótica: es la diferencia entre un proyecto de visión viable con 200 fotos (Repsol y sus grietas) y uno que exige 50 000. Por eso el Día 05 empieza aquí.

Términos. Backbone: tronco convolucional que extrae rasgos. Preentrenar: entrenar primero en un dataset enorme ajeno. Ley de potencia: mejora proporcional a n−α; cada etiqueta nueva rinde menos que la anterior. θ0: pesos preentrenados que descargas del Hub.

las ecuaciones de esta slide
d(Dsrc, Dtgt) = lo que pierdes por usar rasgos de OTRO dominio(transfer gap, Ec. 1)
en la cota de la slide anterior, d es el único término que ni más etiquetas ni más épocas arreglan mientras el backbone siga congelado: mide la discrepancia entre el mundo que vio el backbone (ImageNet) y el tuyo (facturas, satélite…).
acccongelado = Φ(r·cosφσ(φ)),    acccabeza nueva ≤ Φ(rσ(φ))
en el modelo de juguete: las dos clases están a distancia 2r en el espacio de rasgos, φ es el giro que el cambio de dominio impone a la dirección que separa las clases y σ(φ) = 1 + 1,2(φ/90°)² el ruido extra porque los rasgos de ImageNet describen peor tu dominio. Φ es la CDF normal: accuracy de un clasificador lineal con margen r·cosφ y ruido σ. Reentrenar la cabeza recupera el cosφ (re-orienta la frontera); el factor 1/σ(φ) solo lo recupera el fine-tuning del backbone.
guion paso a paso
  1. Pon φ = 5° (catálogo de producto, casi ImageNet). La frontera congelada (tinta) y la reentrenada (dorada) casi coinciden y ambas accuracies rondan el 93 %: con dominio cercano, la cabeza original casi sirve.
  2. Sube φ a 60° (imágenes médicas o satélite). La frontera congelada queda atravesada respecto a las nubes y su accuracy se hunde; la reentrenada se re-orienta y recupera varios puntos… pero ya no llega al 93 %: hay una parte del gap que la cabeza no puede recuperar.
  3. Con φ = 60°, baja n a 4 y pulsa "nueva muestra" varias veces. La frontera dorada baila de muestra a muestra: con 4 etiquetas por clase ni siquiera la cabeza se estima bien. Las etiquetas del dominio objetivo siguen importando.
  4. Mira el panel inferior. La banda entre la curva dorada discontinua (techo con backbone congelado) y el 93,3 % de origen es la parte del gap que SOLO el fine-tuning del backbone recupera: crece con φ.
Comprueba que entiendes: ¿por qué reentrenar la cabeza no recupera todo el gap?
Porque el gap tiene dos componentes. El giro φ desalinea la frontera de decisión, y eso sí lo arregla una cabeza nueva: es un problema de orientación en el espacio de rasgos. Pero σ(φ) refleja que los propios rasgos discriminan peor tu dominio (texturas de factura no son texturas de ImageNet): ninguna combinación lineal de malos rasgos los mejora. Para tocar σ hay que tocar el backbone, y eso es exactamente la decisión feature extraction vs fine-tuning de la slide siguiente.

Setup. Modelo de juguete exacto del transfer gap. Las dos nubes son las dos clases de tu problema vistas en el espacio de rasgos del backbone congelado (2D para poder dibujarlo): centros en ±r·u(φ) con r = 1,5 y ruido gaussiano σ(φ). La línea tinta es la frontera que traes de fábrica (la óptima del dominio fuente, vertical); la dorada es la que aprende una cabeza nueva con tus n etiquetas por clase: el clasificador de medias μ̂B−μ̂A, calculado de verdad sobre la muestra que ves. Las accuracies del lector son exactas (Φ del margen proyectado), no conteos.

Juega. φ pequeño = dominio parecido a ImageNet (retail, fotos de calle); φ grande = dominio lejano (satélite Iberdrola, radiografías). Observa que el orden de las tres cifras del lector es siempre origen ≥ cabeza nueva ≥ congelado, y que las dos brechas miden cosas distintas: orientación (recuperable barato) y calidad de rasgos (cara).

Lee así. El "techo con backbone congelado" del panel inferior es la cifra que debes mirar antes de decidir régimen: si está por debajo del objetivo de negocio, no hay cabeza que te salve y toca descongelar.

Mensaje. El eje "similitud con ImageNet" del gráfico de decisión del deck no es una metáfora: es d(Dsrc, Dtgt) actuando sobre tu accuracy a través de cosφ y σ(φ).

Términos. Espacio de rasgos: salida del backbone (2048 números por imagen en ResNet-50). Frontera de decisión: hiperplano que separa clases en ese espacio. Φ: CDF de la normal estándar. Zero-shot / congelado: usar el modelo tal cual, sin entrenar nada.

las ecuaciones de esta slide
(L1)  θ̂h = argminθh R̂(θb(0), θh)(feature extraction)
solo la cabeza θh se optimiza; el backbone queda clavado en sus pesos preentrenados θb(0). Pocos parámetros, imposible romper nada.
(L2)  θ̂ = argminbh) R̂(θ),  ηb ≪ ηh    (L3)  igual, con ηb = ηh(parcial / total)
en L2 todo se mueve pero el backbone con learning rate mucho menor (≪): se adapta sin olvidar. En L3 backbone y cabeza aprenden al mismo ritmo: máxima capacidad, máximo riesgo. Regla práctica de la nota: n < 10³ ⇒ L1; 10³–10⁴ ⇒ L2; n ≥ 10⁴ ⇒ L3.
guion paso a paso
  1. Pon n = 200 y s = 0,85: el caso Repsol (grietas en tubería, fotos normales). El punto cae en la zona pálida: feature extraction, 20 490 parámetros, cabe en un portátil.
  2. Lleva n a 12 000 y s a 0,50: Mercadona y su frutería. Zona intermedia: fine-tuning parcial. Aunque los datos darían para L3, la similitud media no lo exige: la recomendación es el mínimo de lo que puedes pagar y lo que necesitas.
  3. Con s = 0,15 (satélite Iberdrola), mueve n de 500 a 50 000. Con pocos datos el mapa se raya en gris: NECESITAS L3 pero no puedes pagarlo. La salida no es entrenar más fuerte: es etiquetar más o buscar un backbone ya cercano a satélite en el Hub.
  4. Fija n = 1 500 y barre s de 0 a 1. El régimen recomendado cambia dos veces: la similitud importa tanto como el tamaño del dataset.
Comprueba que entiendes: ¿por qué la recomendación es el MÍNIMO entre lo que necesitas y lo que te puedes permitir?
Son dos restricciones de naturaleza distinta. La similitud fija cuánta adaptación hace falta (con dominio idéntico, descongelar es capacidad ociosa que solo añade varianza); el tamaño n fija cuánta adaptación puedes estimar sin sobreajustar (9,5 M de parámetros con 800 fotos es memorización garantizada). Si necesitas más de lo que puedes pagar, descongelar igualmente no te da L3: te da L3 sobreajustado, que rinde peor que L1 honesto. De ahí la franja gris de conflicto.

Setup. El gráfico de decisión del deck, hecho calculadora. Eje x: etiquetas disponibles (escala log, de 100 a 500 000). Eje y: similitud de tu dominio con ImageNet (la φ de la slide anterior, normalizada al revés). Cada color es el régimen recomendado: pálido = L1 feature extraction, dorado medio = L2 parcial, dorado oscuro = L3 total. La regla implementada: lo asumible por datos (n < 10³ ⇒ L1; < 10⁴ ⇒ L2; si no L3), lo necesario por dominio (s ≥ 0,66 ⇒ L1; ≥ 0,33 ⇒ L2; si no L3), y recomendación = mínimo de ambos, con aviso si necesitas más de lo que tus datos soportan (rayado gris).

Juega. Los cuatro rombos del mapa son los casos del Tema 2: Repsol (200; 0,85), BBVA OCR (1 500; 0,35), Mercadona (12 000; 0,50) e Iberdrola satélite (50 000; 0,15). Coloca tu punto encima de cada uno y comprueba que la calculadora reproduce la decisión del deck.

Lee así. El lector traduce el régimen a números operativos: parámetros entrenables (20 490 / ≈9,5 M / ≈23,5 M) y los learning rates de partida que usarás en la receta.

Mensaje. Elegir régimen no es gusto del data scientist: es leer dos coordenadas de tu proyecto (cuántas etiquetas, cuán raro es tu dominio) en un mapa que sale de la cota de la slide 1.

Términos. L1 / feature extraction: backbone congelado, solo cabeza. L2 / parcial: se descongelan los últimos bloques con LR pequeño. L3 / total: todo entrenable. Sobreajuste: memorizar el train y fallar en test; llega cuando parámetros ≫ etiquetas.

las ecuaciones de esta slide
paramscabeza = 2048 × 10 + 10 = 20 490(deck, ejemplo Inditex)
la cabeza Linear de ResNet-50 para 10 clases: una matriz de 2048×10 pesos más 10 sesgos. Comparado con los ≈23,5 M del backbone, es un 0,09 %: tres órdenes de magnitud entre regímenes.
tépoca = ⌈n / B⌉ · tbatch,    tbatch ≈ tfwd·(1 + 2·fbwd)(presupuesto de tiempo)
⌈n/B⌉ batches por época (los 800/32 ≈ 25 del deck) por el coste de cada batch: el forward siempre recorre toda la red, pero el backward (≈2× el forward) solo atraviesa la fracción descongelada fbwd de las operaciones. Congelar no solo evita sobreajuste: ahorra hasta 3× de tiempo por época.
guion paso a paso
  1. Con n = 800, parte de 5 bloques congelados (solo cabeza). 20 490 parámetros entrenables, ≈26 por ejemplo, 2 segundos por época: el régimen Inditex del deck, verde.
  2. Baja a 3 congelados (se descongelan Conv4 y Conv5). Saltas a ≈22 M entrenables y >27 000 parámetros por ejemplo: el badge se pone rojo. Con 800 fotos eso es memorizar, no aprender.
  3. Sube n hasta 30 000 sin tocar el congelado. El mismo descongelado baja de 27 000 a ≈700 parámetros por ejemplo: dos órdenes de magnitud menos de riesgo. El badge sigue en rojo porque la frontera de 300 es conservadora: con early stopping y aumentado de datos, este punto ya es defendible.
  4. Compara el tiempo por época entre 0 y 5 bloques congelados. Cerca de 3× de diferencia con n fijo: el backward es el que paga la factura, y congelar lo apaga por tramos.
Comprueba que entiendes: si congelo todo el backbone, ¿por qué el tiempo por época no baja a casi cero?
Porque el forward no se puede congelar: cada imagen tiene que atravesar la red entera para producir el vector de 2048 rasgos que come la cabeza. Lo que desaparece es el backward por el tronco (unas 2/3 partes del coste del batch). Por eso el truco pro del Día 05: si el backbone está 100 % congelado, puedes precalcular los 2048 rasgos de cada foto UNA vez, guardarlos, y entrenar la cabeza sobre vectores: ahí sí que cada época cuesta milisegundos.

Setup. La barra superior es un ResNet-50 real por bloques: stem (9,5 K parámetros), Conv2 (216 K), Conv3 (1,2 M), Conv4 (7,1 M), Conv5 (15,0 M) y la cabeza nueva de 10 clases (20 490). El ancho de cada caja es proporcional al log de sus parámetros; los bloques helados (❄) están congelados (requires_grad = False), los dorados entrenan. El slider congela desde la entrada, que es como se hace en la práctica: lo universal está abajo.

Juega. El panel inferior pinta, para cada nivel de congelado, los parámetros entrenables por ejemplo (escala log) con la frontera de riesgo en 300: por debajo, una cabeza regularizada generaliza; por encima, el modelo puede memorizar tu train. El tiempo por época usa tbatch = 0,085 s · (1+2fbwd) en una GPU T4 con batch 32, con la fracción fbwd calculada sobre los GFLOPs reales de cada bloque (0,12 / 0,68 / 1,0 / 1,45 / 0,81 / 0,004).

Lee así. Parámetros por ejemplo es la métrica honesta de riesgo: 25,6 con todo congelado y n = 800, 27 600 si descongelas hasta Conv4. La regla del deck (<1 000 fotos ⇒ feature extraction) sale sola de este cociente.

Mensaje. Congelar es la palanca que convierte un modelo de 23,5 millones de parámetros en un problema de 20 490: tres órdenes de magnitud que separan "necesito un cluster" de "me vale el portátil del aula".

Términos. Congelar: excluir parámetros del gradiente. requires_grad: flag de PyTorch que lo implementa. GFLOPs: miles de millones de operaciones por imagen. Batch: grupo de imágenes que se procesa de una vez (aquí 32).

las ecuaciones de esta slide
wt+1 = wt − η·∇L(wt),    estable ⇔ η < 2λmax(descenso por gradiente)
la regla de actualización de siempre. En un valle cuadrático con curvatura máxima λmax, todo η por encima de 2/λmax hace que cada paso SE ALEJE del mínimo en la dirección más curvada: divergencia, no entrenamiento. Aquí λmax = 4, de modo que el precipicio está en η = 0,5 exactamente.
olvido ≡ ‖wT − θ0(catastrophic forgetting medible)
la distancia entre los pesos tras fine-tunear y los preentrenados θ0. Si crece mucho, has destruido lo que pagaste al descargar el modelo: el punto de partida era el activo, y un η grande lo quema en tres pasos.
guion paso a paso
  1. Con η = 0,08, mira las dos trayectorias. La dorada (arranque preentrenado, ya dentro del valle) llega al óptimo en pocos pasos; la gris (arranque aleatorio) gasta casi todos sus pasos cruzando el mapa. Mismo algoritmo, distinto punto de partida.
  2. Sube η hasta 0,4. Las trayectorias zigzaguean en la dirección más curvada pero aún convergen: estás rozando el límite 2/λmax = 0,5.
  3. Pasa de 0,5 (p. ej. η = 0,7). La pérdida del panel inferior sube en línea recta (escala log): divergencia geométrica. Y el lector muestra ‖w−θ0‖ explotando: empezaste al lado del óptimo y has acabado fuera del mapa. Eso es quemar el preentrenado.
  4. Vuelve a η = 0,05 y baja T a 10. El arranque preentrenado ya casi ha convergido; el aleatorio ni se ha acercado. Por esto el fine-tuning son 3 épocas y el desde-cero son 90.
Comprueba que entiendes: ¿por qué fine-tuning usa η ≈ 10⁻⁵ y desde cero se entrena con 10⁻¹?
Si ya estás dentro del valle (preentrenado), cada paso debe ser más corto que la distancia que te separa del fondo, o saltarás al otro lado y para η > 2/λmax cada salto será más alto que el anterior. Lejos del valle (aleatorio), pasos grandes son baratos: no hay nada que romper y todo que cruzar. La cifra 2e-5 del TrainingArguments del deck es exactamente esta slide en producción: pasos minúsculos porque el activo es el punto de partida.

Setup. Descenso por gradiente DE VERDAD (cada punto de las trayectorias es un paso w ← w − η∇L calculado en vivo) sobre un valle cuadrático con curvaturas λ = (4, 0,5) girado 30°: el modelo mínimo de un fine-tuning. El fondo del valle (aspa dorada) es el óptimo de TU tarea; el punto tinta θ0 son los pesos preentrenados, que caen cerca porque la tarea fuente se parece; el arranque gris es una inicialización aleatoria, lejos. El mapa de calor es la pérdida (claro = bajo).

Juega. El slider de η barre de 0,005 a 1,2 en escala log; el precipicio teórico está en 2/λmax = 0,5 y lo verás exactamente ahí. El panel inferior muestra L(wt) en escala log para ambos arranques; el lector añade el olvido ‖wT−θ0‖ comparado con la distancia natural ‖w*−θ0‖ = 1,17 que sí hay que recorrer.

Lee así. Badge verde: convergencia con olvido acotado (η bajo el límite y ‖w−θ0‖ del orden de la distancia al óptimo). Badge rojo: o diverges o has acabado mucho más lejos de θ0 de lo necesario.

Mensaje. El catastrophic forgetting no es una metáfora poética: es ‖w−θ0‖ creciendo porque tu η supera lo que la curvatura local admite. La receta del deck (lr = 2e-5, scheduler coseno) existe para que nunca te acerques al precipicio.

Términos. ∇L: gradiente, dirección de máximo crecimiento de la pérdida. λmax: curvatura máxima del valle (autovalor mayor del Hessiano). Scheduler coseno: bajar η gradualmente durante el entrenamiento. w*: óptimo de la tarea objetivo.

las ecuaciones de esta slide
η = η0 · rL−ℓ,   r ∈ (0, 1)(nota, Ec. 2 — discriminative LR)
cada capa recibe su propio learning rate: la cabeza (ℓ = L) recibe η0 entero y cada capa hacia la entrada lo multiplica por r una vez más. Con r = 0,5 y 12 capas, la primera capa aprende 2⁻¹¹ ≈ 1/2048 de lo que aprende la cabeza: geometría pura.
Δw ≈ η · T · ‖g‖(deriva acumulada tras T pasos)
cuánto se mueve la capa ℓ tras T pasos con gradientes de norma típica ‖g‖: proporcional a su learning rate. La deriva RELATIVA (Δw dividido por la norma de los pesos de la capa, ≈30 aquí) es lo que decide si una capa "se reescribe": el panel inferior la pinta capa a capa con la frontera del 1 %.
guion paso a paso
  1. Con los valores por defecto (η0 = 10⁻³, r = 0,5, T = 600), lee el panel inferior. La cabeza se mueve un 2 % y la capa 1 un 0,001 %: la cabeza aprende, los bordes y texturas universales quedan intactos. Badge verde.
  2. Sube r a 1 (todas las capas igual). Las 12 barras se igualan en el 2 %: estás reescribiendo también las capas universales con los gradientes ruidosos de tu dataset pequeño. Badge rojo: esto es el catastrophic forgetting de la slide anterior, ahora capa a capa.
  3. Baja η0 a 10⁻⁵ con r = 0,5. Ahora ni la cabeza llega al 1 %: el modelo es "seguro" pero no aprende nada en un tiempo razonable. Badge rojo por el otro extremo.
  4. Busca la pareja (η0, r) que deja la cabeza por encima del 1 % y las 4 primeras capas por debajo. Hay toda una región válida — p. ej. η0 = 10⁻³ con r entre 0,3 y 0,7 — y es exactamente donde la literatura de fine-tuning acampa.
Comprueba que entiendes: ¿por qué decaer el LR hacia la ENTRADA y no hacia la salida?
Por lo que vimos en la slide de intuición del deck: las primeras capas detectan bordes, esquinas y texturas, que son iguales para gatos, grietas o camisetas — son el capital universal del preentrenado y tu dataset pequeño solo puede degradarlas. Las últimas capas combinan esas piezas en objetos del dominio FUENTE ("oreja de gato"), que sí debes reescribir como "grieta" o "estante vacío". Más cerca de la salida, más específico del dominio, más learning rate.

Setup. Una red de L = 12 capas (un ViT-base, el backbone del caso Repsol-marcas del deck). El panel superior pinta el perfil η = η0·rL−ℓ en escala log: una recta descendente de la cabeza hacia la entrada, cuya pendiente controla r. El panel inferior convierte ese perfil en deriva relativa esperada de cada capa tras T pasos (Δw = η·T con ‖g‖ = 1, dividida por la norma típica de los pesos, 30), con dos fronteras: por debajo del 1 % una capa apenas cambia; por encima del 10 % se está reescribiendo.

Juega. r es el dial fino entre L1 y L3: con r → 0 recuperas feature extraction (todo congelado de facto salvo la cabeza); con r = 1 recuperas fine-tuning total. Los valores intermedios son el L2 del deck, pero con transición suave en vez de un corte brusco por bloques.

Lee así. El lector da η de cabeza y de capa 1 y su cociente r11: con r = 0,5 son tres órdenes de magnitud — el mismo salto que vimos en parámetros entrenables, ahora en velocidad de aprendizaje.

Mensaje. Discriminative LR es congelar con dimmer en vez de con interruptor: proteges lo universal no prohibiéndole moverse, sino dándole un paso tan corto que tu dataset pequeño no puede arrastrarlo.

Términos. : índice de capa (1 = entrada, L = cabeza). r: factor multiplicativo de decaimiento (0,5 ó 0,1 típicos). Deriva: cuánto se aleja una capa de sus pesos preentrenados. Dimmer: regulador continuo, frente al on/off de congelar.

las ecuaciones de esta slide
ŷ = a·(b·x),   L(a,b) = 12nΣi (a·b·xi − yi(la red de dos capas mínima)
el fine-tuning más pequeño del mundo: b es el backbone (un solo peso, preentrenado en b0 = 1, que es el valor bueno) y a la cabeza nueva, inicializada al azar. Los datos cumplen y ≈ x, así que el conjunto de óptimos es la hipérbola a·b = 1. La pregunta no es si llegas al valle (casi siempre llegas), sino QUÉ le pasa a b por el camino: si lo arrasas, el b final ya no es el heredado de ImageNet sino uno re-aprendido de tus 48 puntos ruidosos.
∂L∂a = 1nΣi ei·b·xi,    ∂L∂b = 1nΣi ei·a·xi,   ei = a b xi − yi(backprop a mano)
regla de la cadena en dos líneas. La clave está en ∂L/∂b: el gradiente que recibe el backbone va MULTIPLICADO por la cabeza a. Con una cabeza aleatoria y errónea, el backbone recibe gradientes grandes y mal orientados — el paso 3 de la receta del deck (congelar 1–3 épocas para inicializar la cabeza) existe para que eso nunca ocurra.
guion paso a paso
  1. Parte del caso malo: W = 0, ηbh = 1, a0 = −0,8. Mientras la cabeza cruza el cero, el backbone se desploma (b cae de 1 a ≈0,45: pierde más de la mitad) y luego se re-construye arrastrado por tus 48 puntos. La pérdida final es baja… pero la excursión máxima de b delata el arrasamiento: badge rojo.
  2. Sube W a 5 sin tocar lo demás. La fase gris (warmup) lleva la cabeza hasta a ≈ 1 con b clavado en 1; la fase dorada apenas se mueve ya. Misma pérdida final, backbone intacto: badge verde. CINCO épocas separan los dos mundos.
  3. Vuelve a W = 0 pero baja ηbh a 0,05. También se salva: el backbone casi no escucha los gradientes malos de la cabeza. El warmup y el discriminative LR son dos soluciones al mismo problema.
  4. Pon a0 = +0,8 con W = 0 y todo lo demás como al principio. Con la cabeza inicializada con suerte (signo correcto) no hay catástrofe ni sin warmup: el peligro depende del azar de la inicialización. La receta existe para no jugársela.
Comprueba que entiendes: sin warmup, b acaba cerca de 1 igualmente. ¿Por qué nos importa la excursión entonces?
Porque lo que importa no es el número final de b, sino DE DÓNDE viene su valor. En el juguete, b vuelve cerca de 1 porque el problema tiene un solo rasgo y el valle lo re-ensambla; pero ese b reconstruido lo dictaron tus 48 puntos ruidosos, no el preentrenamiento. En una red real, "b" son millones de pesos: una excursión así significa que los rasgos universales se borraron y se re-aprendieron de tu mini-dataset — y con millones de pesos y cientos de ejemplos NO se re-ensamblan: queda un backbone empobrecido que ajusta el train y falla fuera de muestra. La métrica honesta es la excursión máxt|bt−b0|, no la pérdida ni el b final.

Setup. Entrenamiento real (descenso por gradiente full-batch, 60 épocas, ηh = 0,35) del modelo de dos capas sobre n = 48 datos generados con y = x + ruido. El mapa muestra la pérdida en el plano (a, b): los valles oscuros forman la hipérbola a·b = 1; la línea horizontal discontinua marca b = 1, el backbone preentrenado intacto. La trayectoria pinta en gris la fase 1 (warmup: solo se actualiza a) y en dorado la fase 2 (se actualizan a y b, con ηb = ηh·fracción del slider).

Juega. Este es el paso 3-4 de la receta exprés del deck en versión microscopio: "congelar backbone, entrenar 1–3 épocas para inicializar la cabeza, descongelar con discriminative LR". El slider W es ese "1–3 épocas"; el slider ηbh es el discriminative LR de la slide anterior.

Lee así. El lector da la pérdida final, el punto (a, b) alcanzado y la excursión máxima del backbone máxt|bt−1| (con el mínimo que b llegó a tocar). El panel inferior muestra la pérdida por época con la frontera de fases: fíjate en que el warmup ya se come casi todo el descenso — la cabeza era el problema, no el backbone.

Mensaje. El warmup de cabeza no es superstición de cocina: decide si el backbone sobrevive al aterrizaje. Mismo dato, mismas épocas, pérdida final parecida — y en un caso lo heredado queda intacto y en el otro se arrasó y se re-aprendió de 48 puntos.

Términos. Warmup de cabeza: épocas iniciales con backbone congelado. Full-batch: el gradiente usa todos los datos a la vez. Hipérbola de óptimos: conjunto a·b = 1 donde la pérdida es mínima. Excursión: máxima desviación de b respecto a b0 durante el entrenamiento; mide el arrasamiento transitorio.

las ecuaciones de esta slide
VRAM ≈ paramsM · bytes/peso1024 + act(modelo),   lat ≈ 4 + 0,42·paramsM0,9 ms(modelos de coste)
memoria de inferencia: cada peso ocupa 4 bytes en fp32 (2 en fp16) y las activaciones añaden ≈0,5 GB más una parte que crece con el tamaño del modelo (aquí 0,01 GB por millón de parámetros, la mitad en fp16). La latencia crece casi linealmente con los parámetros (exponente 0,9: los modelos grandes aprovechan algo mejor la GPU). Son los dos límites duros de tu hardware.
elegir checkpoint = argmaxm calidad(m)  s.a.  VRAM(m) ≤ V,  lat(m) ≤ ℓ,  licencia válida(la decisión, formalizada)
no "el mejor modelo", sino el mejor que cabe: máxima calidad de benchmark sujeta a tu memoria V, tu latencia objetivo y que la licencia permita tu uso. Cambia una restricción y cambia el ganador: por eso es una decisión, no una tabla fija.
guion paso a paso
  1. Con 4 GB y 60 ms (un portátil con GPU modesta), mira el ganador. Un modelo mediano genérico: los grandes ni caben en memoria ni llegan a la latencia.
  2. Sube la VRAM a 16 GB y la latencia a 200 ms (servidor batch nocturno). El ganador salta a un modelo grande: la misma tabla, otra restricción, otra decisión correcta.
  3. Activa "caso BBVA: solo documentos" con uso comercial marcado. LayoutLMv3 queda fuera AUNQUE es el de mayor calidad: su licencia CC BY-NC-SA prohíbe uso comercial. El mejor modelo legalmente usable es otro. La licencia es una restricción tan dura como la memoria.
  4. Baja la VRAM a 1,5 GB (una GPU integrada) y activa fp16. ViT-base no cabía en fp32 y en fp16 sí: medio espacio por peso es a veces la diferencia entre proyecto viable e inviable.
Comprueba que entiendes: ¿por qué "más descargas" no entra en la función objetivo?
Las descargas son una señal social útil para fiabilidad (mantenimiento, bugs conocidos, documentación), pero no miden calidad EN TU TAREA: ViT-base tiene más descargas que DiT-base y para facturas es peor. En la decisión formal, las descargas funcionan como desempate entre candidatos factibles de calidad similar, nunca como objetivo. Lo que sí es innegociable: benchmark del dominio, restricciones de hardware y licencia.

Setup. Una estantería sintética pero realista de 8 checkpoints del Hub (tamaños, accuracies de benchmark y licencias del orden de los reales; los modelos de documentos son los tres de la nota técnica del caso BBVA). El scatter pinta calidad vs latencia con el área del punto proporcional a la VRAM; la zona pálida es la región factible en latencia. Solo compiten los modelos del dominio de TU tarea (genérica o documentos, según el checkbox): un benchmark de documentos no es comparable con uno de ImageNet. Los grises violan alguna restricción; el anillo dorado marca el ganador.

Juega. Tus sliders son las preguntas que el deck manda hacer antes de bajar nada del Hub: qué GPU tengo (VRAM), qué exige el negocio (latencia: caja de supermercado ≈ 30 ms, backoffice de facturas ≈ 300 ms), y para qué lo voy a usar (licencia). La tabla en vivo se filtra con cada movimiento.

Lee así. Si el badge se pone rojo es que NINGÚN modelo cumple tus restricciones: la respuesta correcta es relajar una (fp16, más hardware, menos latencia) — no ignorar la licencia.

Mensaje. "Antes de entrenar, busca" — pero buscar bien es optimizar con restricciones, y la licencia es una de ellas. Apache-2.0 y MIT permiten uso comercial; CC BY-NC y similares, no.

Términos. Checkpoint: pesos entrenados publicados. VRAM: memoria de la GPU. fp16: pesos en 16 bits en vez de 32. Apache-2.0 / MIT: licencias permisivas. CC BY-NC: prohíbe uso comercial.

las ecuaciones de esta slide
C(t) = Cetiquetas + CGPU-entreno + t · Cmes(coste acumulado a t meses)
cada estrategia es una recta en el tiempo: un coste inicial (etiquetar + entrenar) y una pendiente mensual (servir las predicciones). Desde cero: 25× más etiquetas y ≈120 h de GPU. Fine-tune: tus n etiquetas y unas horas. API: cero inicial y pendiente vol/1000 · precio.
t* = CinicialFTCmesAPI − CmesFT(mes de break-even fine-tune vs API)
el mes en que la recta del fine-tune cruza por debajo de la de la API: la inversión inicial dividida entre lo que ahorras cada mes. Si tu horizonte de producto es más corto que t*, la API gana aunque "parezca cara"; si es más largo, pagas etiquetas una vez y ahorras para siempre.
guion paso a paso
  1. Con los valores por defecto (caso BBVA: 1 500 facturas, 500 000 documentos/mes), lee la tabla. Fine-tune gana de calle: la API cuesta ≈750 €/mes para siempre y desde cero paga 25× las etiquetas para el mismo servicio.
  2. Baja las inferencias a 10 000/mes (un piloto interno). Ahora gana la API: con poco volumen, su pendiente es tan plana que la inversión inicial del fine-tune no se amortiza dentro del horizonte.
  3. Con 100 000/mes, mueve el horizonte de 6 a 36 meses. La ganadora cambia a mitad de camino: la línea vertical discontinua del gráfico (break-even) es la cifra que debes llevar a la reunión de presupuesto.
  4. Sube €/etiqueta a 3 (etiquetadores expertos, p. ej. médicos). Desde cero se va a seis cifras y el fine-tune duplica su coste inicial: cuando el etiquetado es caro, el ahorro de etiquetas del transfer ES el caso de negocio.
Comprueba que entiendes: ¿qué coste NO está en la calculadora y puede invertir la decisión?
El equipo humano y el riesgo. Self-host exige MLOps de guardia (despliegue, monitorización, reentrenos): si no lo tienes, súmale uno o dos sueldos parciales a la pendiente del fine-tune. La API externaliza eso pero añade riesgo de dependencia: subidas de precio, límites de uso, y tus facturas saliendo a un tercero (con datos bancarios, Compliance tiene voto). La calculadora da el suelo económico; la decisión completa añade estos términos cualitativos.

Setup. Las tres rectas C(t) de las tres estrategias para montar el OCR de facturas: entrenar desde cero (tinta), fine-tunear DiT del Hub (dorado) y pagar una API de visión por documento (gris). Costes iniciales: etiquetas (desde cero necesita 25×n, el factor de ahorro de la slide 1) y GPU de entrenamiento (120 h frente a ≈4 h). Pendientes: servir en GPU propia — fracción de instancia según tu volumen, mínimo 10 % — frente a pagar por mil imágenes.

Juega. Cada slider es una pregunta de negocio real: ¿cuánto cuesta tu etiqueta (0,1 € un crowdworker, 3 € un experto)?, ¿cuántas inferencias harás de verdad?, ¿cuánto vivirá el producto? La tabla en vivo recalcula el total al horizonte y subraya en dorado la ganadora.

Lee así. El break-even t* del lector es el número que resume todo: horizonte < t* ⇒ API; horizonte > t* ⇒ fine-tune. Desde cero casi nunca gana: necesita a la vez etiquetas baratas, volumen enorme y un dominio donde ningún preentrenado sirva.

Mensaje. "¿Fine-tuneamos o pagamos API?" no se responde con opiniones: son dos rectas y un punto de cruce. Tu trabajo como analista es poner números honestos en los sliders.

Términos. Break-even: mes en que dos estrategias igualan coste acumulado. Self-host: servir el modelo en tu propia infraestructura. Pendiente mensual: coste recurrente de servir. Horizonte: vida útil esperada del producto.

las ecuaciones de esta slide
F1(n) ≈ F1(∞)·(1 − A·n−α),   α ∈ [0,3, 0,7](nota, Ec. 4 — ley de escala)
la calidad del OCR fine-tuneado según las facturas etiquetadas: F1(∞) = 0,94 es el techo del modelo, A la distancia inicial al techo y α la velocidad. Aquí A se calibra para que la curva pase siempre por el punto medido (1 500, 0,90) — el slider de α pivota la curva sobre ese dato.
dF1dn = F1(∞)·A·α·n−α−1,    n* = (100·F1(∞)·A·α·Vc)1/(1+α)(el codo, en cerrado)
la derivada es el rendimiento marginal de la etiqueta n-ésima (en puntos de F1, de ahí el 100). El codo n* es donde el valor de ese punto marginal (V euros al año por punto porcentual) iguala el coste c de la etiqueta: antes de n*, cada etiqueta se paga sola; después, destruyes valor etiquetando.
guion paso a paso
  1. Sube α despacio hasta que la curva dorada pase por los tres puntos medidos de BBVA (300 → 0,78; 1 500 → 0,90; 15 000 → 0,93). Ocurre cerca de α ≈ 0,85: acabas de ajustar una ley de escala a datos reales, que es exactamente lo que hace un equipo de ML antes de pedir presupuesto de etiquetado.
  2. Con ese α, lee n* en el panel inferior. El cruce entre el valor marginal (dorado) y el coste por etiqueta (tinta) cae en unos pocos miles de facturas: ese es el presupuesto defendible, no "todas las que haya".
  3. Sube V (el punto de F1 vale más: más facturas procesadas, más ahorro por revisión manual evitada). n* se desplaza a la derecha: cuanto más valga la calidad, más lejos está el codo. La estadística no cambia; el negocio sí.
  4. Mueve "facturas ya etiquetadas" a ambos lados de n*. El badge cambia de "sigue etiquetando" a "para": cada posición del slider es una decisión de gasto con su justificación numérica en el lector.
Comprueba que entiendes: pasar de 1 500 a 15 000 facturas (10× el coste) subió F1 solo de 0,90 a 0,93. ¿Era previsible?
Sí, y sin etiquetar ninguna de las 13 500: con la ley de potencia ajustada a los dos primeros puntos, el déficit respecto al techo cae como n−α, así que multiplicar n por 10 divide el déficit por 10α (≈7 con α = 0,85). De 4 puntos de déficit en n = 1 500 quedan ≈0,6: F1 ≈ 0,93. La extrapolación de la curva ANTES de gastar es el uso ejecutivo de esta slide.

Setup. El caso BBVA del deck y de la nota: OCR de facturas con DiT fine-tuneado, y la pregunta de negocio que nadie hace a tiempo: ¿cuántas facturas etiquetamos? El panel superior muestra la ley de escala F1(n) con los tres puntos medidos (rombos tinta) y el codo n* (línea vertical dorada). El panel inferior superpone el valor marginal en euros de la siguiente etiqueta, V·100·dF1/dn, contra su coste c: el cruce es n*, calculado en cerrado con la fórmula del panel de ecuaciones.

Juega. V por defecto (≈8 000 €/punto/año) sale de un cálculo de servilleta: medio millón de facturas al año, cada punto de F1 son 5 000 revisiones manuales evitadas a ≈1,6 € cada una. Cámbialo a tu realidad.

Lee así. A la izquierda de n*, el cociente valor/coste de la próxima etiqueta es >1 (el lector lo muestra): se etiqueta. A la derecha, es <1: ese dinero rinde más en otra parte (mejor backbone, más aumentado de datos, o simplemente no gastarlo).

Mensaje. "Invertir en datos hasta el codo de la curva, no más allá" (nota técnica). El codo no se intuye: se calcula con una derivada y dos números de negocio. Esta es la slide que convierte el Día 05 en decisiones de presupuesto.

Términos. F1: media armónica de precisión y recall; estándar en extracción de campos. Rendimiento marginal: mejora que aporta la siguiente unidad. Codo n*: punto donde valor marginal = coste marginal. Punto (porcentual): 0,01 de F1.

Por qué transfer
Slides: Curvas · Gap
"El error tiene tres sumandos y preentrenar ataca el de generalización: misma accuracy con 20–100× menos etiquetas. Lo que queda — el transfer gap d — depende de cuán lejos esté tu dominio de ImageNet, y una parte solo se recupera descongelando."
Qué régimen
Slides: Decisión · Congelar
"Dos coordenadas (etiquetas n, similitud s) eligen entre feature extraction (20 490 parámetros), parcial (9,5–22 M según bloques) y total (≈23,5 M): la recomendación es el mínimo entre lo que necesitas y lo que tus datos soportan. Congelar compra tres órdenes de magnitud en parámetros y hasta 3× en tiempo."
Cómo entrenar sin romper
Slides: LR fino · LR capa · Receta
"El preentrenado es el activo: un η > 2/λmax lo quema (catastrophic forgetting = ‖w−θ0‖ disparada). Protección por capas con η = η0rL−ℓ, y warmup de cabeza para que los gradientes de una cabeza aleatoria nunca lleguen al backbone: los pasos 3–4 de la receta exprés."
Con qué y a qué precio
Slides: Hub · Coste · Codo BBVA
"Del Hub se elige por argmax de calidad sujeto a VRAM, latencia y licencia (CC BY-NC excluye uso comercial). Entre desde-cero, fine-tune y API deciden dos rectas de coste y su break-even. Y el presupuesto de etiquetado lo fija el codo n* donde el valor marginal de la etiqueta iguala su coste."

En una frase. Transfer learning convierte el deep learning en una decisión de negocio bien planteada: heredas gratis lo universal, entrenas lo justo con learning rates que no destruyen lo heredado, y cada elección — régimen, checkpoint, etiquetas — tiene una fórmula y un número delante.

Garrido-Merchán — ecgarrido@comillas.edu — Deep Learning para Business Analytics — Día 05 · Transfer learning con Hugging Face