미분 가능 시뮬레이션

편집 역사 토론
시뮬레이션 최적설계 소프트웨어 마지막 수정: 2026-09-06 04:26:09

1. 개요[편집]

미분 가능 시뮬레이션
Differentiable Simulation
얻는 것결과를 파라미터·초기조건·제어로 미분한 기울기
기반역방향 자동 미분 = 수반법
구현 갈래연산자 오버로딩 · 소스 변환 · 손으로 쓴 이산 수반
메모리 대책체크포인팅 · 가역 적분 · 음함수 미분
천적접촉·충돌·상전이의 불연속 · 카오스
단골 오해「미분이 되면 최적화가 된다」

시뮬레이터가 답을 준다. 미분 가능한 시뮬레이터는 어느 쪽으로 손잡이를 돌려야 하는지까지 준다.

미분 가능 시뮬레이션(differentiable simulation)은 물리 시뮬레이터 전체를 미분 가능한 계산 그래프로 구성해, 시뮬레이션 결과를 입력 파라미터·초기조건·제어 신호로 미분한 기울기 J/θ\partial J/\partial \theta 를 시뮬레이터 자신이 내놓게 만드는 방법론이다. 이름은 새것이지만 수학은 새것이 아니다 — 이것은 수반법이고 역방향 자동 미분이며, 새로운 것은 그 인프라가 공짜가 되었다는 사실이다.

전통적으로 수반 코드는 솔버마다 사람이 손으로 유도하고 몇 달씩 디버깅하는 물건이었다. 딥러닝 프레임워크가 역방향 AD 엔진과 GPU 커널을 표준 부품으로 깔아 놓자, 물리 솔버를 그 위에 다시 쓰는 것만으로 수반이 따라오게 됐다. 그래서 2019년 무렵부터 유체·강체·연속체·광학 시뮬레이터가 한꺼번에 “미분 가능”을 이름표로 달기 시작했다.

기울기가 손에 들어오면 역문제와 제어가 전부 기울기 기반 최적화로 재작성된다. 반대로 이 문서가 절반을 할애하는 이야기는 그 뒤에 온다 — 미분이 존재한다고 해서 그 기울기가 쓸모 있는 것은 아니다.

2. 무엇을 무엇으로 미분하는가[편집]

시뮬레이터를 xn+1=F(xn;θ)x_{n+1} = F(x_n; \theta), 목적함수를 J=ng(xn;θ)J = \sum_n g(x_n;\theta) 로 놓으면, 원하는 것은 dJ/dθdJ/d\theta 다. 여기서 θ\theta 가 무엇이냐에 따라 응용이 갈린다.

θ\theta문제 이름
재료·모델 상수시스템 식별관측 궤적에서 마찰계수·점성·강성 추정
초기조건데이터 동화 · 역문제4D-Var, 관측에 맞는 초기장
형상·재료 분포형상 최적화 · 위상 최적화광소자 역설계, 구조 경량화
시간에 따른 제어 입력최적 제어로봇 관절 토크 궤적
신경망 가중치학습형 모델서브그리드 난류 모델, 학습된 접촉 모델

구조는 전부 같다. 차이는 θ\theta 의 개수가 몇 개냐뿐이고, 개수가 많을수록 역방향(수반) 모드의 이득이 커진다. 설계변수 백만 개 대 목적함수 하나 — 이 비대칭이 이 분야가 성립하는 전제다.

3. 구현의 세 갈래[편집]

  • 연산자 오버로딩. 스칼라 타입을 도함수를 함께 나르는 타입으로 바꾸고 솔버를 그 타입으로 다시 쓴다. PyTorch·JAX 위에 물리를 얹는 방식이 여기에 해당하고, 코드가 짧아지고 GPU가 공짜로 따라온다. 대가는 테이프 메모리와, 프레임워크의 배열 연산으로 표현되지 않는 알고리즘(불규칙 이웃 탐색, 희소 조립)의 성능 저하다.
  • 소스 변환. 솔버 소스를 파싱해 수반 코드를 생성한다. Tapenade 같은 도구가 포트란 CFD 코드에 이산 수반을 붙이는 표준 경로이고, DiffTaichi는 도메인 특화 언어를 컴파일하면서 역방향 커널을 함께 생성해 메가스케일 격자·입자 커널의 성능을 지키면서 미분을 얻는다. 대가는 도구 구축 난이도와, 도구가 이해 못 하는 코드 패턴(포인터 별칭, 전역 상태, I/O)에서 조용히 틀리는 것.
  • 손으로 쓴 이산 수반. 잔차의 전치 야코비안을 직접 조립한다. 노동은 가장 크지만 메모리와 성능을 완전히 통제할 수 있어, 산업용 CFD 수반 솔버는 여전히 이 길과 소스 변환의 혼합이다.

세 갈래 어디에도 해당하지 않는 중요한 축이 하나 더 있다. 음함수 미분(implicit differentiation)이다. 반복 솔버 내부를 통째로 미분하면 수렴 전 반복까지 다 미분해 테이프가 터지고 기울기도 부정확하다. 정석은 수렴한 해에서 음함수 정리로 한 번에 미분하는 것 — 선형계 한 번을 전치해 푸는 것으로 끝난다. 그래서 성숙한 구현은 바깥 루프는 음함수 미분, 안쪽 잔차 평가 한 번은 AD 라는 하이브리드다. 이 구별을 모르면 “왜 우리 시뮬레이터는 미분 가능하게 만들었더니 메모리가 200배가 됐나”라는 질문에 답할 수 없다.

4. 프레임워크 지형[편집]

  • DiffTaichi — Taichi DSL에 역방향 모드를 얹어 강체·연속체·유체 시뮬레이터 열 개를 미분 가능하게 만들어 보인 작업(2020). 접촉이 있는 강체에서 시간 이산화 때문에 기울기가 부서지는 현상을 진단하고, 충돌 시각을 연속적으로 추정해 완화하는 처방을 제시한 것이 이 계보의 중요한 기여다.
  • NVIDIA Warp — 파이썬으로 쓴 커널을 CUDA로 컴파일하면서 역방향 커널을 함께 생성한다. 그 전신인 dFlex 가 미분 가능 강체·연질체 시뮬레이터로 먼저 나왔다.
  • JAX-MD분자동역학을 JAX 위에서. 퍼텐셜 파라미터에 대한 미분이 자연스러워 힘장 피팅과 학습형 퍼텐셜에 바로 붙는다.
  • Brax — JAX 기반 미분 가능 강체 물리. 강화 학습 환경으로 대규모 병렬 롤아웃을 돌리는 것이 주 용도이며, 미분 가능성은 그 위의 옵션이다.
  • PhiFlow — 유동 솔버와 신경망을 한 그래프에 놓고 학습시키는 데 초점을 맞춘 파이썬 프레임워크. “solver-in-the-loop” 계열 연구의 작업대다.
  • 미분 가능 렌더러 — 영상에서 물리 파라미터를 역추정하려면 렌더링도 미분 가능해야 한다. Mitsuba 3 계열이 경로 적분의 불연속(가시성 경계)을 다루는 정교한 추정량을 내놓았고, 이 문제의식은 접촉의 불연속과 사실상 같다.

물리 분야별로는 광결정·메타물질 역설계가 가장 먼저 자리를 잡았다. FDTD와 주파수영역 해석에 수반을 붙인 도구(meep의 수반 모듈, 파이썬 광학 최적화 스택)가 성숙했고, 목적함수가 매끄럽고 접촉 같은 불연속이 없으며 설계변수가 화소 수만 개인 — 미분 가능 시뮬레이션에 가장 이상적인 문제 구조이기 때문이다.

5. 불연속 — 이 분야의 진짜 벽[편집]

물리는 매끄럽지 않다. 그리고 코드는 물리보다 더 안 매끄럽다.

접촉과 충돌. 강체 두 개가 부딪히는 순간 속도가 점프한다. 이산 시간 시뮬레이터에서 이 점프는 스텝 경계에서 일어나므로, 파라미터를 아주 조금 바꿔 충돌이 한 스텝 앞이나 뒤로 옮겨 가면 결과가 계단처럼 튄다. 그 사이 구간에서 AD가 돌려주는 기울기는 계단의 평평한 부분의 기울기 — 즉 0이거나, 점프를 전혀 모르는 값이다. 미분이 “틀린” 게 아니라 정보가 없다. 공이 벽에 부딪혀 목표에 도달하는 문제에서 기울기가 “공을 더 세게 던져라”만 말하고 “각도를 바꿔 벽을 피해라”는 절대 말하지 않는 이유가 이것이다.1

마찰의 스틱-슬립, 소성 항복, 상전이, 리미터와 분기문도 같은 부류다. if, max, abs 는 AD 앞에서 한쪽 미분값을 태연히 뱉는데, 그 값이 물리적으로 무의미할 수 있다. 충격파가 있는 유동에서 리미터를 미분하면 수반이 잡음을 뱉는 것도 뿌리가 같다.

처방은 두 갈래다.

  • 완화된 접촉 모델. 강체 접촉을 스프링-댐퍼나 로그 배리어로 대체해 매끄럽게 만든다. 기울기는 잘 흐르지만 그 기울기는 완화된 물리의 기울기다. 강성을 올려 진짜 물리에 가까워질수록 기울기가 다시 뾰족해지고 시간 스텝도 작아진다 — 정확성과 미분 가능성이 정면으로 충돌한다.
  • 확률적 평활화. 파라미터에 잡음을 얹고 기대값을 취하면 불연속 함수도 매끄러워진다. Eϵ[J(θ+ϵ)]\mathbb{E}_{\epsilon}[J(\theta+\epsilon)] 의 기울기는 원 함수가 미분 불가능해도 존재하고, 이는 사실상 0차 최적화(진화 전략·정책경사)가 하던 일이다. 여기서 불편한 결과가 하나 나온다.

숴 등(2022)이 던진 질문이 이 분야에 냉수를 끼얹었다. 미분 가능 시뮬레이터의 1차 기울기가 0차 추정량보다 항상 나은가? 답은 아니오였다. 접촉이 빈번하고 강성이 높은 계에서는 1차 기울기가 편향되거나 분산이 폭발해, 아무것도 미분하지 않는 무작위 탐색보다 나쁜 최적화 궤적을 만든다. 실무의 결론은 절충이다 — 1차와 0차 기울기를 섞어 쓰거나, 불연속이 적은 구간에서만 1차를 신뢰한다.

6. 카오스 — 기울기가 지수적으로 커질 때[편집]

두 번째 벽은 결이 다르다. 계가 카오스 이론적이면, 즉 랴푸노프 지수가 양수이면, 초기조건의 미세한 차이가 eλte^{\lambda t} 로 벌어진다. 그리고 수반은 정확히 그 증폭률을 시간 역방향으로 누적한다. 적분 구간이 길어지면 기울기의 크기가 지수적으로 폭발하고, 방향은 무의미해진다.

이것은 버그가 아니라 참값이다. 난류 대규모 에디 모사에서 “10초 뒤 특정 시각의 항력”의 기울기는 진짜로 거대하다 — 나비 한 마리가 결과를 바꾸니까. 문제는 우리가 알고 싶은 것이 대개 장시간 평균이고, 평균은 초기조건에 둔감한데도 그 평균의 수반 기울기는 발산한다는 데 있다. 유한 시간 궤적의 미분과 통계량의 미분이 어긋나는 것이다.

대책으로 연구되는 것들이 있다.

  • 최소제곱 섀도잉(LSS) — 원 궤적 대신 파라미터가 바뀐 계에서 원 궤적과 오랫동안 붙어 다니는 「그림자 궤적」을 찾아, 그 차이로 통계량의 민감도를 정의한다. 발산은 사라지지만 시공간 전체를 미지수로 하는 큰 최적화를 풀어야 해 비싸다. 계산을 줄인 NILSS 계열 변형이 나와 있다.
  • 짧은 구간 앙상블 평균 — 폭발하기 전에 자른다. 편향이 남는 대신 싸고 단순해서 현업에서 가장 많이 쓰인다.
  • 정상 모델로 도망가기 — RANS로 풀면 카오스가 없다. 난류 모델링의 정상해를 미분하는 것이 산업 공력 최적화가 실제로 하고 있는 일이고, 물리적 정직성 대신 수반의 안정성을 고른 결과다.

같은 현상이 학습 쪽에서는 긴 롤아웃을 통한 역전파의 기울기 폭발로 나타난다. 순환 신경망의 오래된 병과 정확히 같은 구조여서, 처방도 같다 — 롤아웃을 자르고(순환 신경망의 절단 BPTT), 기울기를 클리핑하고, 여러 짧은 구간의 기울기를 평균한다.

7. 응용[편집]

  • 시스템 식별. 실측 궤적에 맞도록 마찰계수·감쇠·강성·유체 물성을 역추정한다. 로봇의 sim-to-real 격차를 줄이는 표준 절차가 됐다. 파라미터 수십 개짜리 문제에서는 사실 유한차분으로도 되지만, 재료 분포처럼 수천 개가 되면 기울기가 필수다.
  • 로봇 제어와 궤적 최적화. 접촉이 적고 궤적이 짧으면 1차 기울기가 0차 강화학습보다 자릿수 단위로 빠르다. 반대로 접촉이 많으면 앞 절의 함정으로 직행한다. 그래서 현실적인 파이프라인은 대개 혼합이다.
  • 역설계. 광소자, 음향 메타표면, 컴플라이언트 메커니즘. 위상 최적화가 이미 하던 일을 다른 물리로 확장하는 것이라고 봐도 크게 틀리지 않는다.
  • 신경망-물리 하이브리드. 솔버 안에 신경망을 박아 넣고 솔버를 통과하는 기울기로 학습시킨다. 신경망 출력을 정답과 직접 비교하는 대신 “솔버에 넣었을 때 결과가 맞는가”를 손실로 삼는 것으로, 학습된 서브그리드 모델이 실제 솔버와 함께 안정적으로 굴러가게 만드는 데 결정적이다. 신경망만 따로 학습시키면 롤아웃에서 발산하는 고전적 실패를 이 구조가 막는다.2
  • 미분 가능 렌더링과의 결합. 영상 → 물리 파라미터의 완전한 역추정 파이프라인. 물리와 렌더링을 한 그래프에 놓으면 관측 영상만으로 재료 물성을 뽑는 것이 원리적으로 가능해진다.

8. 현업 감각[편집]

  • 메모리가 첫 번째 벽이다. 순방향 궤적 전체를 들고 있어야 하므로 3차원 문제는 시작하자마자 터진다. 체크포인팅이 옵션이 아니라 전제다.
  • 기울기 검증을 안 하면 반드시 후회한다. 방향도함수를 유한차분·복소수 스텝과 비교하는 절차는 자동 미분·수반법 문서의 교훈과 완전히 같다. 첫 시도는 거의 예외 없이 안 맞고, 범인은 대개 경계조건 항이다.
  • 「미분 가능」이 「최적화 가능」은 아니다. 기울기가 존재해도 목적함수가 국소최소로 가득하면 기울기 기반 최적화는 가까운 구덩이에 빠진다. 다중 시작점, 연속화(continuation), 완화 강성을 점진적으로 올리는 스케줄이 실무의 필수 장비다.
  • 불연속 예산을 먼저 세어라. 프로젝트를 시작하기 전에 “이 시뮬레이션에 접촉·분기·상전이가 몇 개나 있는가”를 세어 보는 것이 가장 정확한 성공 예측 지표다. 광학 역설계가 잘되고 다족 보행 최적화가 어려운 이유는 알고리즘이 아니라 이 개수 차이다.
  • 성능이 다른 방향으로도 이득이다. 미분 가능하게 만드는 과정에서 솔버를 배열 연산으로 다시 쓰게 되므로, 부산물로 GPU 병렬화와 대규모 배치 롤아웃이 따라온다. 기울기를 안 쓰더라도 이것만으로 남는 장사인 경우가 종종 있다.3

9. 관련 문서[편집]

10. Footnotes[편집]

  1. 이 성질을 “기울기가 근시안적”이라고 표현하기도 한다. 기울기는 지금 서 있는 자리의 무한소 이웃만 안다. 그 이웃 안에 사건(충돌·접촉·분기)이 없으면 사건의 존재 자체를 모른다. 유한차분은 스텝 hh 안에 사건이 들어오면 적어도 계단을 감지하는데, “정확한” 미분은 그마저도 못 본다. 정확한 답이 유용한 답이 아닐 수 있다는 흔치 않은 사례.

  2. 이 구조의 교훈이 은근히 근본적이다. 학습된 모델을 솔버 밖에서 지도학습하면 한 스텝 오차는 작지만 롤아웃에서 발산하고, 솔버 안에 넣고 여러 스텝의 결과로 학습시키면 한 스텝 오차는 더 커도 롤아웃이 안정된다. 모델은 자기가 실제로 쓰일 조건에서 학습해야 한다는 당연한 이야기인데, 그러려면 솔버가 미분 가능해야 한다.

  3. “미분 가능 시뮬레이터를 만들었는데 정작 기울기는 안 쓰고 있다”는 고백을 학회장에서 종종 듣는다. GPU에서 환경 4096개를 동시에 굴릴 수 있게 된 것만으로 이미 목적을 달성했기 때문. 미분 가능성이 강제한 코드 규율(순수 함수, 부작용 없음, 정적 형상)이 성능 최적화와 방향이 같았던 것인데, 이런 우연은 흔치 않다.