이 섹션에서는 미분 가능한 시뮬레이터의 핵심인 그래디언트 계산 방법으로 자동 미분(AD), 기호 미분, 그리고 해석적 미분(암시적 미분 및 Adjoint 방법 포함)을 비교하고 설명합니다. 특히 시뮬레이터의 복잡성과 접촉 모델링의 불연속성을 다루기 위해 각 방법이 가진 장단점과 적용 사례를 분석합니다.
A. 그래디언트 계산 (Gradient Calculation)
그래디언트를 계산하는 방법은 다양합니다. 다음에서는 섹션 II-A1의 자동 미분, 섹션 II-A2의 기호 미분, 그리고 섹션 II-A3의 해석적 미분 유도를 검토합니다.
본 논문에서 검토된 대부분의 시뮬레이션 프레임워크는 자동 미분(Automatic Differentiation, AD)을 그래디언트 계산의 핵심으로 사용합니다. 이는 자동 미분이 수동으로 그래디언트를 유도해야 하는 필요성을 없애주기 때문이며, 시뮬레이터가 복잡해질수록 수동 유도는 점점 더 번거로워집니다. 반면, 기호 미분(Symbolic Differentiation)은 주어진 함수의 그래디언트 평가를 자동화해주지만, 미분할 함수의 크기에 따라 지수적으로 증가하는 기호 표현식을 생성해야 하므로 미분 가능한 시뮬레이터에서는 자동 미분에 비해 거의 사용되지 않습니다.
이 두 가지 자동화된 도구는 오버헤드를 발생시켜 성능이 중요한 애플리케이션에서는 불리할 수 있습니다. 마찬가지로, 불연속적인 동역학이나 명시적 함수가 아닌 타당성 문제(feasibility problem)의 해로 주어지는 경우(예: 접촉 모델링)에는 이러한 방법을 적용하기 어렵습니다. 이러한 시나리오에서는 대신 해석적 미분(Analytical Gradients)을 유도하거나 선형 대수학 등의 해석적 기법을 사용하여 계산을 단순화하는 것이 유리할 수 있습니다. 전체적으로 자동 미분을 사용하지 않고 모든 그래디언트를 해석적으로 계산한 연구는 단 하나뿐입니다.
1) 자동 미분 (Automatic Differentiation)
자동 미분(AD)은 복잡한 함수라도 덧셈, 뺄셈 등의 기본 연산과 사인, 코사인, 지수 함수 등의 함수로 구성된다는 사실에 기반하며, 이를 통해 연쇄 법칙(chain rule)을 프로그래밍 방식으로 반복 적용하여 미분값을 계산합니다. AD에는 두 가지 주요 유형인 전방 모드(forward mode)와 후방 모드(reverse mode)가 있습니다. 전방 모드는 입력에서 시작하여 연쇄 법칙을 통과하며 출력보다 입력이 적을 때 효율적입니다. 반면, 후방 모드(reverse mode)는 출력에서 시작하며 입력이 출력보다 많을 때 더 효율적입니다. 미분 가능한 시뮬레이터는 일반적으로 많은 시뮬레이션 파라미터에 대해 단일 스칼라 목적 함수의 미분을 구하는 데 사용되므로, 주로 후방 모드 AD가 사용됩니다. 또 다른 접근 방식으로는 소스 코드 변환(source code transformation)이 있으며, 이는 Python 코드에 JIT 트랜스파일러를 사용하여 그래디언트를 계산하는 함수를 생성합니다.
2) 기호 미분 (Symbolic Differentiation)
AD와 마찬가지로 기호 미분도 연쇄 법칙을 반복 적용하여 미분을 계산합니다. 그러나 AD가 미분의 수치적 값을 계산하는 반면, 기호 미분은 기호 표현식을 생성합니다. 미분 가능한 시뮬레이터 애플리케이션에서는 보통 그래디언트 기반 최적화를 수행하기 위해 단일 지점에서 평가된 그래디언트만 필요하므로 전체 기호 그래디언트는 필요하지 않습니다. 또한 앞서 논의한 바와 같이, 기호 미분의 주요 단점은 함수의 복잡도에 따라 기호 그래디언트의 크기가 급격히 커진다는 점입니다. 따라서 기호 미분은 동역학이 단순하거나 시뮬레이터의 일부 구성 요소에 대해서만 제한적으로 사용됩니다.
3) 해석적 미분 (Analytical Gradients)
불연속적인 프로세스나 현상에 AD나 기호 미분을 적용하는 것은 어려울 수 있습니다. 이러한 상황에서는 미분 가능한 시뮬레이터에서 발생하는 함수의 미분 표현식을 수동으로 유도하는 것이 유리합니다. 또한 AD와 기호 미분은 온라인에서 그래디언트를 계산해야 하지만, 해석적 미분은 사전에 명시적인 그래디언트 표현식을 제공하므로 더 빠르고 정확하게 계산할 수 있습니다. AD나 기호 미분을 적용하기 어려운 또 다른 상황은 표현식이 타당성 문제로 주어지는 경우이며, 이는 주로 접촉 모델링(contact modeling)에서 발생합니다. 이러한 구성 요소는 종종 해석적 미분 유도를 필요로 합니다.
그래디언트의 명시적 표현식을 수동으로 유도할 때, 저자들은 종종 암시적 미분(Implicit Differentiation)이나 Adjoint 방법(Adjoint Method)과 같은 표준 기법을 따릅니다.
암시적 미분: 암시적 미분은 두 변수를 포함하는 식 $f(y, x) = 0$에서 한 변수가 다른 변수의 함수 $y(x)$로 명시적으로 표현되지 않을 때도 도함수 $dy/dx$를 얻는 기법입니다. 이 기법은 타당성 문제나 최적화 문제로 표현되는 접촉 모델에 특히 유용합니다.
Eq. 1: 2차 계획법 (Quadratic Program)$$\begin{aligned} \min_{z} \quad & \frac{1}{2}z^T Qz + q^T z \\ \text{subj. to} \quad & Az = b \\ & Gz \leq h \end{aligned}$$이 수식은 2차 계획법(QP)의 표준 형태를 보여줍니다. 목적 함수는 2차식이고 제약 조건은 선형입니다. OptNet과 같은 연구에서는 이러한 최적화 문제의 해에 대해 암시적 미분을 사용하여 그래디언트를 구하는 방법을 보였습니다.
이후 연구들은 이 공식을 확장하여 다양한 제약 조건을 다루었습니다. 일부는 QR 분해를 사용하여 선형 시스템의 크기를 최소화하거나, 비선형 제약 조건을 처리하기 위해 야코비안(Jacobian) 정보를 통합하기도 했습니다.
Adjoint 방법: Adjoint 방법은 선형 시스템을 풀어 얻은 Adjoint 벡터를 활용하여 그래디언트 획득 과정을 계산적으로 덜 비싸게 만듭니다. 이 Adjoint 벡터는 시스템 출력(예: 최종 상태)의 변화가 파라미터 변화와 어떻게 연관되는지에 대한 정보를 캡슐화합니다. 그래디언트 계산에 이 벡터를 사용하면 각 파라미터가 전체 궤적에 미치는 영향을 직접 계산하지 않고도 시스템 동작에 영향을 미치는 파라미터를 효율적으로 계산할 수 있습니다.
Eq. 2: 손실 함수의 전미분$$\frac{dL}{d\theta} = \frac{\partial L}{\partial \theta} + \frac{\partial L}{\partial q}^T \frac{dq}{d\theta}$$이 수식은 파라미터 $\theta$에 대한 손실 함수 $L$의 미분을 나타냅니다. 여기서 가장 큰 난관은 $\frac{dq}{d\theta}$를 계산하는 것인데, 이를 직접 구하려면 시스템 동역학을 통해 암시적 미분을 수행해야 하며 이는 매우 큰 선형 방정식을 풀어야 하므로 비용이 많이 듭니다.
Adjoint 방법은 단일 선형 시스템을 풀어 Adjoint 벡터 $z = (\frac{\partial f}{\partial q})^{-T} \frac{\partial L}{\partial q}$를 먼저 계산함으로써 이를 회피합니다. 그 후 원하는 그래디언트는 다음과 같이 계산됩니다.
Eq. 3: Adjoint 기반 그래디언트$$\frac{dL}{d\theta} = \frac{\partial L}{\partial \theta} - z^T \frac{\partial f}{\partial \theta}$$이 수식은 Adjoint 벡터 $z$를 사용하여 효율적으로 그래디언트를 계산하는 방법을 보여줍니다. 복잡한 $\frac{dq}{d\theta}$ 항을 직접 계산하는 대신, 미리 구한 $z$와 시스템 동역학의 편미분 $\frac{\partial f}{\partial \theta}$를 곱하여 계산 비용을 획기적으로 줄입니다.
Comments