PyTorch 2.14에서 torch.linalg.matrix_sqrth로 대칭 양의정부호 행렬의 제곱근 구하기 | DAKER 커뮤니티

행렬 제곱근이 필요한 순간은 생각보다 자주 옵니다. 다만 직접 고유분해를 조합해 구현하려고 하면 dtype, 대칭성, 수치 안정성 같은 조건을 빠뜨리기 쉽습니다. PyTorch 2.14의 torch.linalg.matrix_sqrth는 이런 과정을 줄여 주는 함수입니다.
이번 글은 작은 대칭 양의정부호 행렬에서 torch.linalg.matrix_sqrth의 결과가, 고유분해로 재구성한 제곱근과 얼마나 가까운지 확인하는 데 초점을 둡니다. 핵심은 속도 비교보다도 직접 조합 없이 같은 제곱근이 나오는지 재현하는 데 있습니다.
PyTorch 2.14의 torch.linalg.matrix_sqrth는 대칭 또는 에르미트 양의정부호 행렬의 제곱근을 바로 계산합니다.
에르미트는 켤레 전치가 자기 자신인 행렬을 뜻합니다.
왜 직접 고유분해 대신 이 함수를 보게 되는가
행렬 제곱근을 손으로 구성할 때는 먼저 고유값과 고유벡터를 구한 뒤, 고유값에 제곱근을 취해 다시 곱하는 방식이 흔히 쓰입니다. 하지만 이 과정은 구현이 길어지고, 대칭성 보장이나 dtype 처리 같은 조건을 놓치기 쉽습니다.
torch.linalg.matrix_sqrth를 쓰면 이런 직접 조합 없이 제곱근을 바로 계산할 수 있습니다. 따라서 실험 노트에는 성능 수치만 적기보다, 같은 입력에서 결과가 어떻게 맞아떨어지는지와 어떤 조건에서 실패하는지를 남기는 것이 더 도움이 됩니다.
재현해 볼 실험 조건
가장 간단한 출발점은 작은 대칭 양의정부호 행렬 하나를 만드는 것입니다. 예를 들어 무작위 행렬에서 A.T @ A + I 형태로 만들면 됩니다. 그런 다음 torch.linalg.matrix_sqrth를 호출하고, 같은 행렬을 고유분해로 제곱근을 재구성한 결과와 비교해 보면 됩니다.
이때는 A_sqrt @ A_sqrt가 원래 행렬에 얼마나 가까운지 오차를 적어 두는 것이 좋습니다. 참가자 노트에는 행렬 크기와 dtype도 함께 남기면 다음 사람이 같은 조건을 그대로 따라가기 쉬워집니다.
빨라졌는지보다 직접 조합 없이 같은 제곱근이 나오는지를 확인하는 편이 재현에 더 도움이 됩니다.
또 하나 볼 부분은 경계 조건입니다. 비대칭이거나 음의 고유값이 있는 행렬에서는 어떤 오류가 나는지 한 줄 정도 남겨 두면, 양의정부호 가정이 깨지는 지점을 함께 확인할 수 있습니다.
헷갈리기 쉬운 API 구분
torch.linalg.polar는 극분해이고, matrix_sqrth는 제곱근입니다. 이름이 비슷한 선형대수 API처럼 보여도 목적은 다릅니다. 이번 글에서는 제곱근을 구하는 torch.linalg.matrix_sqrth만 다룹니다.
극분해가 필요할 때는 torch.linalg.polar를, 행렬 제곱근이 필요할 때는 matrix_sqrth를 구분해 쓰는 것이 좋습니다.
실무에서 바로 볼 포인트
먼저 확인할 것은 입력 행렬이 정말 대칭 또는 에르미트 양의정부호인지입니다. 이 가정이 맞지 않으면 함수 사용 자체가 적절하지 않을 수 있습니다.
실험이나 학습 기록에는 고유분해 직접 조합과 matrix_sqrth의 오차, 그리고 사용한 dtype을 함께 남기면 좋습니다. 여기에 PyTorch 버전과 행렬 크기까지 한 줄로 적어 두면, 이후 같은 조건으로 다시 확인하기가 훨씬 수월해집니다.
관련 DAKER 학습
참고 자료
https://daker.ai/public/learning/tracks/pytorch-practice-advanced-track
https://daker.ai/community/post-mu3emtcn-b2f74975
https://daker.ai/community
같은 조건에서 torch.linalg.matrix_sqrth와 고유분해 재구성 결과를 비교해 보셨다면 어떤 차이가 가장 먼저 눈에 들어왔는지 궁금합니다.