Formas comunes de tensores en NLP: los tokens de entrada son enteros (batch_size, sequence_length). Los embeddings son floats (batch_size, seq_len, model_dim). Los pesos de attention son (batch_size, num_heads, seq_len, seq_len). Los logits de salida son (batch_size, seq_len, vocab_size). Entender estas formas te dice exactamente qué está pasando: el tensor de attention es N×N porque cada token atiende a cada otro token.
Operaciones clave de tensores: matmul (multiplicación de matrices — el cómputo central en redes neuronales), reshape (cambiar dimensiones sin cambiar datos), transpose (intercambiar dimensiones), concat (unir tensores a lo largo de una dimensión), slice (extraer subtensores) y broadcast (hacer tensores con formas diferentes compatibles para operaciones elemento a elemento). El deep learning es realmente solo una secuencia de estas operaciones aplicadas a tensores.
Los tensores se computan en GPUs porque las operaciones de tensores son masivamente paralelas: multiplicar dos matrices involucra millones de operaciones independientes de multiplicar y sumar que pueden ejecutarse simultáneamente. Por eso importa la VRAM de la GPU — todos los tensores involucrados en el cómputo deben residir en la memoria de la GPU. Cuando te quedas sin VRAM, es porque la suma de todos los tamaños de tensores (pesos del modelo + activaciones + gradientes + estados del optimizador) excede la capacidad. Técnicas como gradient checkpointing, precisión mixta y model sharding son todas sobre gestionar la memoria de tensores.