Skip to content

English · Español

Lab 00 — Equivarianza por permutación, en números

Objetivo: demostrar empíricamente que attention sin información posicional es permutación-equivariante. Mostrar que añadir PE sinusoidal rompe esta propiedad.

Tiempo estimado: 30–45 minutos.

Prerrequisito: theory/00-motivation.md leído. src/minimodel/attention/ de la Fase 15 existe.


Lo que produces

Un directorio experiments/16-permutation-equivariance/ que contiene:

  • demo.py — script que ejecuta attention con y sin PE sobre una secuencia de 3 tokens y muestra qué ocurre bajo permutación.
  • demo_output.txt — printout capturado.
  • manifest.json.
  • README.md.

TODOs

Bloque A — preparación

  • Usa MultiHeadAttention(d_model=8, n_heads=1, seed=0) de la Fase 15.
  • Entrada: 3 tokens formando un fragmento de gramática verbal — he, work, I (IDs de tokens de tu tokenizer de Fase 14; embed vía el embedding de Fase 13). Apila como \(X \in \mathbb{R}^{3 \times 8}\).
  • Motivación lingüística: he work I es agramatical; I work he también es agramatical; solo con información posicional el modelo puede preferir un orden sobre otro (o más bien: preferir he works sobre works he más adelante en la Fase 18). Sin PE, todos los órdenes se ven iguales.

Bloque B — sin PE

  • Calcula Y = mha.forward(X, mask=None).
  • Permuta la entrada: X_perm = X[[2, 0, 1]] (intercambia tokens).
  • Calcula Y_perm = mha.forward(X_perm, mask=None).
  • Asegura: np.allclose(Y_perm, Y[[2, 0, 1]], atol=1e-6).

Esto demuestra: la salida de attention sobre la entrada permutada es igual a la permutación de la salida de attention sobre la entrada original. Equivarianza. El modelo no tiene forma de saber qué permutación recibió.

  • Imprime Y, Y[[2, 0, 1]] y Y_perm lado a lado. Verifica visualmente.

Bloque C — con PE

  • Usa PE sinusoidal: pe = sinusoidal_pe(3, 8) (de src/minimodel/positional/sinusoidal.py de Fase 16).
  • Calcula Y_pe = mha.forward(X + pe).
  • Calcula Y_perm_pe = mha.forward(X_perm + pe).
  • Asegura: not np.allclose(Y_perm_pe, Y_pe[[2, 0, 1]], atol=1e-3).

Esto demuestra: con PE, el modelo distingue la permutación. La salida ya no es solo un reordenamiento.

  • Imprime la matriz de diferencia Y_perm_pe - Y_pe[[2, 0, 1]] (debería tener entradas no triviales — la PE ha roto la equivarianza).

Bloque D — interpretar

En README.md (1–2 párrafos), contesta:

  1. ¿Por qué pasa el test sin PE? Enuncia el teorema de equivarianza por permutación con tus propias palabras y referencia el ejemplo de 3 tokens.
  2. ¿Por qué el test con PE pasa con diferencia? Las filas de PE son distintas para posiciones distintas; sumarlas a tokens permutados significa que cada token ahora lleva una firma específica de posición que la versión no permutada no tendría.

Bloque E — manifest

{
  "experiment": "16-permutation-equivariance",
  "date": "YYYY-MM-DD",
  "seed": 0,
  "versions": { "python": "3.11.x", "numpy": "X.Y.Z" },
  "config": {
    "d_model": 8,
    "n_heads": 1,
    "T": 3,
    "pe_scheme_compared": "sinusoidal"
  },
  "results_summary": {
    "without_PE_equivariance_max_diff": null,
    "with_PE_equivariance_max_diff": null
  }
}

La diferencia sin PE debería ser < 1e-6. La diferencia con PE debería ser > 1e-3.

Restricciones

  • Sin código nuevo en src/. Usa MultiHeadAttention y sinusoidal_pe existentes. Este lab es una demostración, no un lab de implementación.
  • Con semilla. Reproducible.

Condiciones de parada

Hecho cuando:

  1. Los cuatro archivos commiteados.
  2. Ambas aserciones pasan (una para equivarianza sin PE, otra para no-equivarianza con PE).
  3. README.md explica el resultado.

Escollos

  • Confusión con el índice de permutación. X[[2, 0, 1]] significa "toma la fila 2, fila 0, fila 1 en ese orden". Confirma imprimiendo X y X[[2, 0, 1]] para asegurarte de que entiendes.
  • Tolerancia. 1e-6 para sin PE; 1e-3 para con PE (los valores de PE son O(1), así que la diferencia tras attention es no trivial).

Cuándo consultar solutions/

Tras commitear los cuatro archivos. Solución en solutions/00-permutation-equivariance-ref.md.


Siguiente lab: 01-sinusoidal-pe.md.