솔버 교차검증
솔버 교차검증은 수치 시뮬레이터를 방법과 코드베이스가 모두 다른 독립 구현들과 대조하는 것입니다 — 구현 오류는 자기 일관적이어서 단일 코드베이스 내부에서는 보이지 않기 때문입니다.
무슨 뜻인가요
시뮬레이터는 항상 자기 자신과는 일치합니다.뒤집힌 부호, 인자 2, 정규화 실수, 기저 순서 착오는 수학적으로 유효한 — 다만 다른 물리의 — 발전을 만들어내므로, 같은 코드베이스 안에서 작성된 어떤 테스트도 이를 잡아낸다는 보장이 없습니다: 실수하는 머리와 검사하는 머리가 같은 머리이기 때문입니다.구조적 해법은 두 축에서 동시에 독립적인 재구현입니다: 다른 수치 방법과 다른 코드베이스.GradPulse 사례 연구는 세 개의 솔버를 사용합니다: 트로터 분할을 쓰는 미분 가능한 PyTorch 전파기(검증 대상), 전체 리우빌리안의 정확한 행렬 지수를 취하는 순수 NumPy 솔버(시간을 전혀 썰지 않는 유일한 솔버), 그리고 커뮤니티가 검증한 QuTiP의 적응형 ODE 적분기.~10⁻¹⁴ 수준의 일치는 전사(transcription) 버그의 부재를 보증하고, 세 잔차는 1차 트로터 오차 크기 ~2×10⁻⁷에서 만나며 dt → 0 외삽 시 ~10⁻¹³으로 수렴합니다 — 근사 오차가 예측대로 행동하는 것입니다(2026년 기준).CI 게이트가 설계를 완성합니다: 어느 두 솔버라도 운영점에서 어긋나면 빌드가 자동으로 실패합니다 — 검증이 일회성 이벤트가 아니라 모든 커밋에 걸린 불변식이 됩니다.일상 비유
흔한 오해
- 두 구현이 코드를 공유하거나 같은 근사 계열을 쓴다면 그 일치는 아무것도 증명하지 못합니다 — 공유된 가정은 메아리칠 뿐, 검증하지 않습니다. 독립성은 설계되어야 합니다: 다른 방법 축과 다른 코드베이스 축.
- 단위 테스트는 작성자가 상상한 실수만 잡습니다 — 작성자의 머릿속 물리가 틀렸다면 테스트의 기대값도 똑같이 틀립니다. 상상하지 못한 오류를 잡으려면 독립적인 재구현이 필요합니다.
- 일회성 검증은 이후의 모든 커밋을 미검증 상태로 남깁니다 — CI 게이트는 검증을 이벤트에서 모든 커밋에 강제되는 불변식으로 바꿉니다.
핵심 정리
- 구현 오류(부호 실수, 인자 2, 정규화, 기저 순서)는 자기 일관적이어서 하나의 코드베이스 내부에서는 검출할 수 없습니다.
- 3중 분할: 트로터 전파 vs 정확한 행렬 지수 vs 적응형 ODE — 각각이 다른 둘이 볼 수 없는 오류를 잡습니다.
- ~10⁻¹⁴ 수준의 일치(전사 버그 없음)와 1차 트로터 오차 ~2×10⁻⁷에서 만나 dt → 0 외삽 시 ~10⁻¹³으로 수렴하는 잔차는 오차가 예측대로 행동함을 보여줍니다(GradPulse 사례 연구, 2026년 기준); CI 게이트는 솔버 어긋남을 곧 빌드 실패로 만듭니다.
이해했는지 확인해 보세요
단일 코드베이스 안의 단위 테스트가 린드블라드 생성자의 부호 실수를 검출하지 못할 수 있는 이유는 무엇입니까?
- A.부호 실수는 계산된 동역학에 아무 영향도 주지 않기 때문
- B.잘못된 생성자도 자기 일관적이고 수학적으로 유효한 발전을 만들며, 테스트의 기대값도 같은 (틀렸을 수 있는) 머릿속 모델에서 나오기 때문
- C.부동소수점 연산이 모든 부호 오류를 기계 정밀도 아래로 숨기기 때문
- D.린드블라드 생성자는 애초에 수치적으로 테스트할 수 없기 때문
정답 보기
정답: B. 잘못된 생성자도 자기 일관적이고 수학적으로 유효한 발전을 만들며, 테스트의 기대값도 같은 (틀렸을 수 있는) 머릿속 모델에서 나오기 때문
이유: 잘못 전사된 생성자는 완벽한 내부 일관성으로 틀린 물리를 발전시키고, 테스트 작성자의 기대값은 그 오류를 만든 것과 같은 머리에서 나옵니다 — 실수하는 머리와 검사하는 머리가 같은 머리입니다.
3중 솔버 교차검증에서 적어도 하나의 솔버가 시간 분할 대신 정확한 행렬 지수를 사용해야 하는 이유는 무엇입니까?
- A.정확한 행렬 지수가 트로터 스텝보다 항상 빠르기 때문
- B.적응형 ODE 적분기는 린드블라드 방정식을 다룰 수 없기 때문
- C.같은 시간 이산화 계열을 공유하는 솔버들은 공통 모드의 트로터 계열 오차를 검출할 수 없기 때문 — 시간을 전혀 썰지 않는 방법만이 그것을 드러낼 수 있습니다
- D.CI 시스템이 최소 하나의 닫힌 형식 계산을 요구하기 때문
정답 보기
정답: C. 같은 시간 이산화 계열을 공유하는 솔버들은 공통 모드의 트로터 계열 오차를 검출할 수 없기 때문 — 시간을 전혀 썰지 않는 방법만이 그것을 드러낼 수 있습니다
이유: 트로터 계열 솔버 둘은 같은 이산화 오차를 공유해 서로에게서 그것을 볼 수 없습니다(공통 모드 오차). 정확한 행렬 지수는 시간을 썰지 않으므로 공유된 근사 오차가 그것과의 잔차로 드러납니다 — 실제로 예측된 1차 트로터 크기에서 만납니다.
먼저 알아야 할 개념
Independent-reimplementation methodology is sound practice, but the concrete figures (1e-14 agreement, 2e-7 Trotter residual) are from the 2026 GradPulse case study (repo verified 2026-07-03).
