Curso de Matemáticas para IA · Lección 21 de 180
Transpuesta para IA: reorientar las relaciones entre tokens y características
Transponer una matriz, predecir su forma y cambiar con seguridad entre las vistas token por característica y característica por token sin perder de vista los valores subyacentes.
Supón que un lote contiene dos tokens y que cada token está representado por tres características. Almacenas los datos como dos filas y tres columnas. Sin embargo, una operación posterior está escrita para comparar las características entre tokens. ¿Han cambiado los datos o la operación necesita una orientación diferente?
La respuesta suele ser una transposición: los mismos seis valores se leen intercambiando filas y columnas. Esta pequeña operación es una herramienta importante para depurar formas en aprendizaje automático, porque el significado de los ejes forma parte del contrato de un tensor.
Al terminar esta lección podrás transponer una matriz, predecir la forma de salida, explicar qué cambia semánticamente y elegir entre las disposiciones token por característica y característica por token sin perder de vista los valores subyacentes.
Resultado de aprendizaje: Transponer una matriz y explicar qué cambia semánticamente.
La lección 18: Las matrices organizan reglas lineales introdujo las filas y columnas como posiciones con significado dentro de una matriz. Los ejemplos y la visualización de esta lección son aplicaciones originales de la notación de transpuesta desarrollada en la sección 2.2 de Mathematics for Machine Learning.
Una matriz almacena relaciones a lo largo de sus ejes
Comienza con una matriz cuya forma es :
La primera dimensión tiene longitud , por lo que hay dos filas. La segunda tiene longitud , por lo que hay tres columnas. La forma solo nos dice cuáles son las dimensiones; las etiquetas nos dicen qué significan. En esta lección, cada fila representa un token y cada columna representa una característica:
| 2 | −1 | 0 | |
| 4 | 3 | 1 |
La entrada significa «fila 2, columna 3»: la tercera característica del segundo token. Los índices no son decorativos. Si el código trata después las columnas como tokens, los números pueden seguir pareciendo razonables mientras el modelo lee las relaciones equivocadas.
Definición: la transpuesta intercambia posiciones, no valores
La transpuesta de una matriz se escribe . Su regla definitoria es
En palabras, la entrada que está en la fila , columna pasa a la fila , columna . Por tanto, si tiene forma , entonces tiene forma :
La transpuesta no cambia el signo, ordena, escala ni vuelve a calcular ninguna entrada. Reorienta la relación entre una entrada y las etiquetas de su fila y su columna.
X: tokens por filas y características por columnas
Dos filas de tokens, con una característica en cada columna.
| Token | f₁ | f₂ | f₃ |
|---|---|---|---|
| t₁ | 2 | −1 | 0 |
| t₂ | 4 | 3 | 1 |
Token → rows · Característica → columns
Xᵀ: características por filas y tokens por columnas
Tres filas de características, con un token en cada columna.
| Característica | t₁ | t₂ |
|---|---|---|
| f₁ | 2 | 4 |
| f₂ | −1 | 3 |
| f₃ | 0 | 1 |
Característica → rows · Token → columns
Correspondencia de celdas:X[2, 3] = 1 se convierte en Xᵀ[3, 2] = 1: el valor conserva su identidad, mientras sus coordenadas se intercambian.
Inspecciona una celda paso a paso
El valor del segundo token y la tercera característica pasa a la tercera fila y segunda columna después de la transposición.
- Antes
X[2, 3] = 1- Después
Xᵀ[3, 2] = 1
La visualización usa etiquetas, y no el color, como señal principal. Sus dos tablas semánticas también son una alternativa completa: el lector puede verificar cada valor, dimensión y significado de los ejes sin JavaScript. La sección desplegable es un control nativo operable con el teclado, y el componente no tiene movimiento continuo que interfiera con las preferencias de movimiento reducido.
Ejemplo resuelto: transponer una matriz
Aplica la definición posición por posición. La primera fila de procede de la primera columna de :
La segunda fila procede de la segunda columna:
La tercera fila procede de la tercera columna:
Al reunir esas entradas obtenemos
Dos comprobaciones detectan la mayoría de los errores de cálculo manual. Primero, la forma se invierte de a . Segundo, leer hacia abajo una columna de debería recuperar una fila de : su primera columna es , que era la primera fila de .
Por qué importa la orientación en los datos de IA
Un lote organizado por filas facilita una operación común. Si almacena ejemplos con características y una matriz de pesos de características a salidas , suele aplicarse como
Aquí la transpuesta no cambia los números aprendidos. Hace que el eje de características de los pesos coincida con las columnas de características de la matriz del lote. La salida tiene filas, una por ejemplo, y columnas, una por característica de salida.
Los mismos datos pueden almacenarse con las características primero como . Esta vista es útil cuando la pregunta es «¿cómo varía cada característica entre los ejemplos?», pero no es intercambiable con la vista de lote por filas. Transpone siempre de vuelta, o escribe el producto usando la convención de características primero, antes de pasar el array a código que espera los ejemplos en las filas.
y plantean preguntas diferentes
La transpuesta aparece a menudo junto a un producto matricial. Sus formas revelan qué se compara:
por lo que cada entrada compara dos características entre los ejemplos. En cambio,
por lo que cada entrada compara dos ejemplos a través de sus características. Ningún producto está «más transpuesto» que el otro; responden a preguntas relacionales diferentes.
Para la matriz de esta lección,
La primera es de porque hay tres características. La segunda es de porque hay dos tokens. Los números están relacionados, pero sus índices tienen significados diferentes.
Implementar el intercambio en NumPy
Para un pequeño ejemplo didáctico, un bucle explícito refleja la definición. Reserva la forma invertida y copia matrix[row, column] en result[column, row]:
import numpy as np
X = np.array([[2, -1, 0],
[4, 3, 1]])
def transpose_by_loops(matrix):
rows, columns = matrix.shape
result = np.empty((columns, rows), dtype=matrix.dtype)
for row in range(rows):
for column in range(columns):
result[column, row] = matrix[row, column]
return result
X_T_by_loops = transpose_by_loops(X)
X_T = X.T
np.testing.assert_array_equal(X_T_by_loops, X_T)
np.testing.assert_array_equal(X_T.T, X)
feature_relationships = X.T @ X
token_relationships = X @ X.T
print(X_T)
print(feature_relationships.shape, token_relationships.shape)
El bucle sirve para entender, no para obtener velocidad de producción. ndarray.T de NumPy es la forma concisa de escribir transpose para un array bidimensional, mientras que np.transpose se generaliza a arrays con más ejes. La documentación oficial de NumPy señala un límite importante: transponer un array unidimensional no cambia su forma. Un vector con forma (3,) no tiene ejes independientes de fila y columna que intercambiar; usa vector[:, np.newaxis] para obtener una columna explícita de forma (3, 1) o vector[np.newaxis, :] para obtener una fila de forma (1, 3).
Cuando la siguiente operación es un producto matricial, distingue los operadores: @ significa multiplicación matricial, mientras que * es una multiplicación elemento a elemento. Por ejemplo, X.T @ X contrae el eje de tokens y devuelve una matriz (3, 3); X.T * X.T solo funciona cuando las formas coinciden y devuelve productos elemento a elemento. La referencia de transposición de NumPy, la referencia de .T y la referencia de producto matricial son las fuentes de implementación para estas diferencias.
Caso límite: la transpuesta no es una inversa
Es tentador llamar a la operación que «deshace» . En general, eso es incorrecto. Una transpuesta solo intercambia ejes. Una inversa, cuando existe, es una matriz diferente que satisface
Una inversa requiere una matriz cuadrada y no singular. Una matriz como la de esta lección no puede tener una inversa ordinaria por ambos lados, porque su forma ni siquiera coincide con la de una identidad cuadrada. Incluso para una matriz cuadrada, solo es la inversa en casos especiales, como cuando es ortogonal.
Hay otro caso límite en el código. La expresión X.T no presenta ambigüedad para una matriz bidimensional, pero vector.T no hace nada en un array unidimensional de NumPy. Si un modelo espera una columna de características, crea esa dimensión de forma explícita y comprueba array.shape antes del producto matricial. Un error de forma suele ser una evidencia útil de que se dejó implícita alguna convención de ejes.
La secuencia de depuración que conviene seguir es:
- Indica qué significa cada eje.
- Predice la nueva forma antes de transponer.
- Verifica a mano uno o dos mapeos de índices.
- Comprueba el contrato de formas del operador siguiente.
- Confirma que las filas y columnas resultantes siguen coincidiendo con la convención del modelo.
La lección 22 usará transformaciones identidad e inversas para analizar cuándo una operación lineal realmente puede deshacerse. La transpuesta es el puente cuidadoso: cambia la orientación para expresar la relación siguiente con ejes compatibles, pero no promete reversibilidad.
Comprueba tu comprensión
Question 1
Si A tiene forma 4 × 7, ¿qué forma tiene Aᵀ y adónde se desplaza la entrada A[3, 6]?
Show the step-by-step solution
Paso 1: invierte las dimensiones. La transposición cambia por , así que una matriz se convierte en .
Paso 2: intercambia los índices. La regla definitoria es . Por tanto, la entrada de la fila 3, columna 6 pasa a la fila 6, columna 3.
Paso 3: interpreta el resultado. El valor no cambia; solo se intercambian las posiciones de fila y columna y, por tanto, sus etiquetas.
Question 2
Transpone a mano M = [[5, −2, 1], [0, 4, 3]] e indica la forma del resultado.
Show the step-by-step solution
Paso 1: cuenta los ejes originales. tiene dos filas y tres columnas, así que su transpuesta debe tener tres filas y dos columnas.
Paso 2: copia las columnas como filas. La primera columna se convierte en la primera fila; la segunda columna , en la segunda; la tercera columna , en la tercera.
Paso 3: escribe el resultado.
Question 3
Una matriz tiene filas para documentos y columnas para características del vocabulario. ¿Qué significan las filas y columnas después de transponerla?
Show the step-by-step solution
Paso 1: nombra los ejes originales. Antes de transponer, cada fila es un documento y cada columna es una característica del vocabulario.
Paso 2: aplica la regla de índices. Cada valor documento-característica pasa de a .
Paso 3: expresa el nuevo significado. Después de transponer, cada fila es una característica del vocabulario y cada columna es un documento. Los valores no cambian, pero una operación por filas ahora agrega información entre documentos y no entre características. Por eso el significado de los ejes debe viajar con el array.
Question 4
¿Por qué (Aᵀ)ᵀ = A y qué no implica esta identidad?
Show the step-by-step solution
Paso 1: intercambia una vez. La primera transpuesta envía la entrada a .
Paso 2: intercambia de nuevo. La segunda transpuesta devuelve esa misma entrada de a . Cada valor regresa a su posición original.
Paso 3: mantén la distinción. Esta identidad dice que la transposición es una involución: aplicar dos veces el mismo intercambio de orientación devuelve la matriz. No dice que sea una inversa ni que la primera operación deshaga una transformación aprendida en el sentido de una matriz inversa.
Question 5
Para X con forma (8, 5), ¿qué formas tienen XᵀX y XXᵀ y qué compara cada par de índices?
Show the step-by-step solution
Paso 1: transpón la forma. tiene forma .
Paso 2: multiplica en el primer orden. , así que compara pares de las cinco características entre los ocho ejemplos.
Paso 3: multiplica en el segundo orden. , así que compara pares de los ocho ejemplos a través de sus cinco características. Invertir el orden cambia la pregunta, no solo la notación.
Question 6
En NumPy, ¿por qué vector.T mantiene un vector de forma (3,) con forma (3,), mientras que vector[:, np.newaxis] tiene forma (3, 1)?
Show the step-by-step solution
Paso 1: inspecciona el número de ejes. La forma (3,) describe un solo eje de longitud tres. No hay ejes separados de fila y columna que .T pueda intercambiar.
Paso 2: observa el comportamiento de NumPy. La transpuesta unidimensional es una vista sin cambios, por lo que vector.T.shape sigue siendo (3,).
Paso 3: añade explícitamente el eje deseado. vector[:, np.newaxis] inserta un segundo eje después de las tres entradas y produce (3, 1). Es un vector columna explícito que puede participar en un producto matricial con la forma prevista.
Question 7
Un alumno dice que Xᵀ es la inversa de X porque aplicar dos veces la transposición devuelve X. ¿Cuál es la corrección precisa?
Show the step-by-step solution
Paso 1: separa las identidades. significa que dos intercambios de ejes restauran las posiciones originales.
Paso 2: indica el requisito de una inversa. Una inversa debe multiplicarse por para producir una matriz identidad en el lado correspondiente.
Paso 3: usa el caso límite. La matriz de esta lección no es cuadrada, por lo que no puede tener una inversa ordinaria por ambos lados. Incluso una matriz cuadrada no tiene por qué ser igual a la inversa de su transpuesta. La transpuesta es una operación de orientación; la inversa es una propiedad de reversibilidad.
Question 8
Un lote X tiene forma (32, 768) y una matriz de pesos W tiene forma (256, 768). ¿Por qué X @ W no es válido y qué transpuesta produce la salida habitual de un lote por filas?
Show the step-by-step solution
Paso 1: comprueba el producto intentado. Las formas son y . La multiplicación matricial necesita que las columnas de la izquierda, 768, sean iguales a las filas de la derecha, 256. No lo son, así que X @ W no es válido.
Paso 2: transpón los pesos. tiene forma .
Paso 3: comprueba el producto corregido. . Las 32 filas siguen siendo ejemplos y las 256 columnas son características de salida. La transpuesta corrige la convención de ejes, no los valores de los pesos aprendidos.