cdist·pdist에 이중 역전파가 열려 create_graph=True로 Hessian·기울기 페널티를 통과시킵니다 | DAKER 커뮤니티

한 줄 요약
PyTorch 2.14에서 torch.cdist와 torch.pdist에 이중 역전파가 구현되었습니다. create_graph=True로 Hessian·기울기 페널티·Hessian-벡터 곱을 쌍거리 연산 위에 올릴 때 더 이상 바로 실패하지 않습니다.
예전에 쌍거리 기반 손실에 이차 미분을 걸면 지원되지 않는다는 오류로 막히는 경우가 많았습니다. 오늘은 작은 배치에서 cdist로 거리를 구한 뒤, create_graph=True로 한 번 더 미분하여 기울기 노름 페널티를 계산하는 경로부터 확인하십시오. 참가자 노트에는 PyTorch 버전, 입력 shape, create_graph 설정, 성공·실패 한 줄을 남깁니다. “빨라졌다”보다 “이차 미분이 통과하는지”가 재현에 도움이 됩니다.
재현해 볼 실험 조건
- 작은 실수 텐서 두 개로
torch.cdist거리를 만들고, 스칼라 손실을 정의합니다. torch.autograd.grad(..., create_graph=True)로 일차 기울기를 구한 뒤, 그 기울기 노름에 대해 다시 미분합니다.- 같은 코드를 PyTorch 2.13 이전과 비교할 수 있다면, 실패하던 지점이 2.14에서 통과하는지 한 줄로 적습니다.
pdist도 같은 방식으로 확인합니다.
node_creation_hook이나 set_output_grad_dtype은 그래프 메타·기울기 dtype 계약이고, 이번 글은 쌍거리 연산의 이차 미분 지원입니다. 실험이 끝나면 사용한 버전·shape·손실 형태를 고정해 두면 다음 참가자가 바로 따라올 수 있습니다.
실무에서 바로 볼 포인트
- 기울기 페널티·HvP를
cdist/pdist위에 올릴 때 2.14부터 이중 역전파를 전제로 잡으십시오. - 학습 노트에
create_graph=True성공 여부와 shape를 남깁니다. - 혼합정밀 dtype 선언 실습과 섞지 말고, 이번엔 이차 미분 통과만 확인하십시오.
관련 DAKER 학습
출처: https://pytorch.org/blog/pytorch-2-14-release-blog/
설명용 생성 이미지입니다. 동작은 로컬에서 cdist/pdist 이중 역전파 결과로 확인하십시오.