O forward pass: a entrada flui pela rede, cada camada aplica sua transformação, e a camada final produz uma predição. A função de loss computa quão errada está a predição. O backward pass: começando da loss, backpropagation computa ∂loss/∂peso para cada peso na rede usando a regra da cadeia: ∂loss/∂w = ∂loss/∂output · ∂output/∂hidden · ∂hidden/∂w. Cada camada recebe o gradiente da camada acima e passa seu próprio gradiente para a camada abaixo.
Computar ingenuamente o gradiente para cada peso independentemente exigiria um forward pass separado por peso — impossivelmente caro para bilhões de parâmetros. Backpropagation reutiliza resultados intermediários: o gradiente em cada camada é computado uma vez e compartilhado com todos os pesos naquela camada. O backward pass custa aproximadamente 2x o forward pass em computação, significando que o custo total de um passo de treinamento (forward + backward + atualização) é cerca de 3x um único forward pass.
Frameworks modernos de deep learning (PyTorch, JAX) implementam backpropagation através de diferenciação automática (autograd). Você define a computação forward, e o framework automaticamente constrói o grafo de computação backward e calcula gradientes. Isso significa que você nunca deriva gradientes manualmente — você define a arquitetura do modelo e a loss, chama loss.backward(), e o framework cuida do resto. Essa automação é o que torna a experimentação rápida de arquiteturas prática.