Tape 한 개로 부족할 때
기본 GradientTape는 첫 tape.gradient() 호출 후 리소스를 놓아. 두 상황엔 특별한 패턴이 필요해 — 같은 forward pass에서 여러 gradient 계산, 그리고 second-order (또는 그 이상) gradient.
Persistent tape (tf.GradientTape(persistent=True))는 여러 번 gradient() 호출 가능. trade-off: tape가 모든 중간 tensor 참조 잡고 있어서 GC 막아. 끝나면 항상 del tape — 특히 빡빡한 training loop에서.
Higher-order gradient는 중첩 tape 써. 바깥 tape가 안쪽 tape의 gradient 계산을 녹화해서 outer.gradient(inner_grad, x)가 2계 도함수 반환.
벡터값 함수의 Jacobian은 tape.jacobian(y, x) — shape는 output_shape + input_shape.