민감도 해석

편집 역사 토론
최적설계 수치해석 시뮬레이션 마지막 수정: 2026-07-17 04:35:07

1. 개요[편집]

민감도 해석(sensitivity analysis)은 설계 변수나 입력 파라미터가 조금 변했을 때 관심 있는 응답이 얼마나 변하는지를 정량화하는 작업, 즉 미분계수 J/x\partial J / \partial x 를 구하는 일이다. 최적화 알고리즘에게는 어느 쪽으로 내려가야 하는지 알려주는 나침반이고, 엔지니어에게는 “이 치수 0.1 mm 늘리면 뭐가 얼마나 좋아지나요”라는 질문에 대한 답이다.

민감도가 없으면 최적화는 눈 감고 더듬는 신세가 된다. 그래서 형상 최적화위상 최적화의 성패는 사실상 민감도를 얼마나 싸고 정확하게 뽑느냐에 달려 있다.1 그리고 그 “싸게”의 핵심에 **수반법(adjoint method)**이 있다.

2. 국소 민감도와 전역 민감도[편집]

민감도라는 단어는 서로 꽤 다른 두 세계에서 쓰인다. 헷갈리면 대화가 산으로 간다.

  • 국소 민감도(local) — 현재 설계점에서의 도함수. 미분 기반이며 최적화 루프에 직접 들어간다. “지금 여기서 기울기가 얼마냐”를 묻는다.
  • 전역 민감도(global) — 입력이 전체 분포에 걸쳐 흔들릴 때 출력 분산에 누가 얼마나 기여하는지. 소볼 지수(Sobol index)나 모리스 스크리닝이 대표적이며 몬테카를로 방법대리 모델에 기댄다. “누가 제일 문제냐”를 묻는다.

아래에서 주로 다루는 것은 최적설계 맥락의 국소 민감도다. 전역 민감도는 불확실성 정량화 쪽 이야기이며 실험계획법과 짝을 이룬다.

3. 계산 방법[편집]

민감도를 얻는 길은 여럿이고, 비용과 정확도가 정확히 반비례하지는 않는다는 게 재미있는 지점이다.

방법정확도해석 횟수구현 난도
유한차분스텝 크기에 좌우N+1N+1매우 쉬움
복소수 스텝기계 정밀도N+1N+1쉬움
직접 미분법정확NN중간
수반법정확11어려움
자동 미분(AD)정확도구 의존도구 의존

유한차분은 모두의 첫사랑이자 첫 배신이다. 스텝 hh 가 크면 절단오차, 작으면 소거오차(cancellation)에 죽는다. 부동소수점 연산의 근본 한계라 정성으로 이길 수 없고, 최적 hh 근처에서도 유효숫자 절반은 날아간다.

복소수 스텝 미분은 이 딜레마를 우아하게 피한다. 실수 함수를 복소수로 확장할 수 있다면,

JxIm ⁣[J(x+ih)]h\frac{\partial J}{\partial x} \approx \frac{\mathrm{Im}\!\left[ J(x + ih) \right]}{h}

뺄셈이 없으므로 소거오차가 없고, hh103010^{-30} 으로 때려박아도 된다. 코드가 복소수를 받아들이도록 개조하기만 하면 되는데, 그 “만 하면”이 레거시 포트란에서는 지옥문이다.2

4. 수반법[편집]

설계 변수가 수만 개인 위상 최적화에서는 위의 방법이 전부 파산한다. NN 번 해석하는 순간 게임이 끝나기 때문이다. 수반법은 여기서 판을 뒤집는다.

상태 방정식이 R(u,x)=0\mathbf{R}(\mathbf{u}, \mathbf{x}) = \mathbf{0} 이고 목적함수가 J(u,x)J(\mathbf{u}, \mathbf{x}) 일 때, 연쇄법칙으로 전미분을 쓰면

dJdx=Jx+Jududx\frac{dJ}{d\mathbf{x}} = \frac{\partial J}{\partial \mathbf{x}} + \frac{\partial J}{\partial \mathbf{u}} \frac{d\mathbf{u}}{d\mathbf{x}}

문제의 원흉은 du/dxd\mathbf{u}/d\mathbf{x} 다. 이걸 구하려면 설계 변수마다 선형계를 한 번씩 풀어야 한다. 그런데 라그랑주 승수 λ\boldsymbol{\lambda} 를 도입해 아래 수반 방정식을 먼저 풀면,

(Ru) ⁣Tλ=(Ju) ⁣T\left( \frac{\partial \mathbf{R}}{\partial \mathbf{u}} \right)^{\!T} \boldsymbol{\lambda} = -\left( \frac{\partial J}{\partial \mathbf{u}} \right)^{\!T}

민감도는 이렇게 정리된다.

dJdx=Jx+λTRx\frac{dJ}{d\mathbf{x}} = \frac{\partial J}{\partial \mathbf{x}} + \boldsymbol{\lambda}^{T} \frac{\partial \mathbf{R}}{\partial \mathbf{x}}

du/dxd\mathbf{u}/d\mathbf{x} 가 통째로 사라졌다. 남은 항들은 전부 국소적으로 계산 가능한 편미분이라 값싸다. 결론은 강렬하다. 설계 변수가 100만 개든 1개든 수반 해석 한 번이면 전체 기울기를 얻는다. 대신 목적함수마다 수반 해석을 따로 해야 하므로, 출력이 입력보다 훨씬 적을 때 유리하다.3 라그랑주 승수법의 가장 실용적인 응용 사례라 할 만하다.

이 구조는 딥러닝의 역전파와 정확히 같은 뼈대다. 역전파는 수반법의 특수한 경우이며, 물리 정보 신경망이 물리 문제에 그 도구를 되가져온 셈이다.

4.1. 이산 수반 대 연속 수반[편집]

수반법 진영에는 오래된 종교전쟁이 있다.

  • 이산 수반(discrete adjoint) — 이미 이산화된 잔차 R\mathbf{R} 을 그대로 전치한다. 이산화된 목적함수의 기울기와 정확히 일치하므로 최적화기가 좋아한다. 단점은 코드에 종속적이라 솔버를 고치면 수반도 같이 고쳐야 한다는 것.
  • 연속 수반(continuous adjoint) — 연속 편미분방정식 수준에서 수반 방정식을 손으로 유도한 뒤 이산화한다. 물리적 해석이 명확하고 격자와 독립적이지만, 이산화된 목적함수와 기울기가 미세하게 어긋나 최적화기가 마지막에 삐걱거린다.

산업계는 자코비안 행렬 전치를 자동으로 뽑아주는 AD 도구가 성숙하면서 이산 수반 쪽으로 기울었다. SU2, ADflow 같은 코드가 대표적이다.

5. 현업에서의 현실[편집]

  • 수반법 구현 후 첫 검증은 무조건 유한차분과의 비교다. 그리고 열에 아홉은 안 맞는다. 범인은 대개 경계 조건 항 하나를 빼먹은 것.
  • 난류 모델을 “동결(frozen turbulence)“시키고 수반을 푸는 편법이 오래 쓰였다. k-오메가 SST 모델까지 완전 미분하면 정확해지지만 코드가 두 배로 험해진다.
  • 민감도 필드를 컨투어로 그려놓으면 최적화를 돌리기 전에 이미 답이 보인다. 그 자체로 훌륭한 설계 도구다.
  • 감도가 큰 변수가 언제나 중요한 변수는 아니다. 제조 공차 안에서 못 움직이는 변수는 감도가 아무리 커도 그림의 떡이다.

6. 관련 문서[편집]

7. Footnotes[편집]

  1. 기울기 없이 최적화하겠다면 유전 알고리즘이나 입자 군집 최적화 같은 무미분(derivative-free) 기법으로 가야 한다. 편하지만 함수 호출 횟수가 수천 배로 뛴다. 세상에 공짜는 없고, 미분을 안 하면 CPU가 대신 갈린다.

  2. 복소수 스텝의 함정은 abs, max, 부등호 비교처럼 복소수에서 정의가 애매한 연산들이다. 이걸 제대로 오버로딩하지 않으면 답이 조용히 틀린다. 조용히 틀리는 게 제일 무섭다.

  3. 반대로 입력 하나에 출력이 수천 개면 직접 미분법이 이긴다. 즉 수반법과 직접법의 선택 기준은 난이도가 아니라 입력 수 대 출력 수의 비율이다. 항공기 항력 하나 줄이려고 형상 변수 수천 개를 만지는 상황이 수반법의 홈그라운드인 이유.