Entregar el objetivo a autograd
Escribe solo el objetivo en PyTorch — el modelo y la pérdida — y backward() produce el gradiente que derivaste a mano. Guarda cada factor como exp(θ): el modelo es idéntico, pero no hay restricción con la que tropezar y el gradiente se mantiene bien escalado.
Adam con lr = 0.05 llega donde llegó L-BFGS-B. El descenso por gradiente simple diverge ahí y con 1e-4; necesita un paso unas cinco mil veces menor (1e-5) y aun así se queda corto, porque las escalas del gradiente son muy distintas entre las matrices de factores: 7 días frente a 78 áreas comunitarias.
El momento (0.9) cierra casi toda la diferencia; el paso por parámetro de Adam cierra el resto. Un objetivo derivable también puede evaluarse sobre una muestra de entradas: el GCP estocástico, para tensores que no caben en memoria.