Shapes de tensors comuns em NLP: tokens de entrada são inteiros (batch_size, sequence_length). Embeddings são floats (batch_size, seq_len, model_dim). Pesos de atenção são (batch_size, num_heads, seq_len, seq_len). Os logits de saída são (batch_size, seq_len, vocab_size). Entender esses shapes diz exatamente o que está acontecendo: o tensor de atenção é N×N porque cada token atende a todo outro token.
Operações chave de tensors: matmul (multiplicação de matrizes — a computação central em redes neurais), reshape (mudar dimensões sem alterar dados), transpose (trocar dimensões), concat (juntar tensors ao longo de uma dimensão), slice (extrair subtensors) e broadcast (tornar tensors de shapes diferentes compatíveis para operações element-wise). Deep learning é realmente apenas uma sequência dessas operações aplicadas a tensors.
Tensors são computados em GPUs porque operações tensoriais são massivamente paralelas: multiplicar duas matrizes envolve milhões de operações independentes de multiplicar-e-somar que podem rodar simultaneamente. É por isso que VRAM da GPU importa — todos os tensors envolvidos na computação devem residir na memória da GPU. Quando você fica sem VRAM, é porque a soma de todos os tamanhos de tensors (pesos do modelo + ativações + gradientes + estados do otimizador) excede a capacidade. Técnicas como gradient checkpointing, precisão mista e model sharding são todas sobre gerenciar memória de tensors.