7.139 수치적 안정성과 반올림 오차의 영향
1. 부동 소수점 산술과 반올림 오차
디지털 컴퓨터는 실수를 유한 정밀도의 부동 소수점(floating-point) 수로 표현한다. IEEE 754 배정밀도(double precision) 표준에서 유효 자릿수는 약 15~16자리이며, 기계 엡실론(machine epsilon)은 \epsilon_{mach} \approx 2.2 \times 10^{-16}이다. 모든 산술 연산에서 결과가 가장 가까운 부동 소수점 수로 반올림되며, 이로 인해 반올림 오차(roundoff error)가 누적된다.
부동 소수점 산술의 기본 모델에 따르면, 연산 \text{fl}(a \circ b) = (a \circ b)(1 + \delta) (\lvert \delta \rvert \leq \epsilon_{mach})로 각 연산의 상대 오차가 \epsilon_{mach} 이내로 제한된다. 그러나 수천~수백만 회의 연산이 연쇄되면 오차가 축적되어 결과의 정확도를 크게 저하시킬 수 있다.
2. 수치적 안정성의 정의
알고리즘이 수치적으로 안정(numerically stable)하다 함은, 입력 데이터의 미소한 섭동에 대해 출력의 변화가 문제의 조건수(condition number)에 의해 예측되는 범위 내에 있음을 의미한다. 수치적으로 불안정(unstable)한 알고리즘은 문제 자체의 민감도를 넘어서는 과도한 오차를 산출한다.
전방 안정성(forward stability): 계산된 결과 \hat{\mathbf{y}}가 정확한 결과 \mathbf{y}에 가까운 경우이다.
후방 안정성(backward stability): 계산된 결과 \hat{\mathbf{y}}가 약간 섭동된 입력 \tilde{\mathbf{x}}에 대한 정확한 결과인 경우이다. 즉, \hat{\mathbf{y}} = f(\tilde{\mathbf{x}})이고 \lVert \tilde{\mathbf{x}} - \mathbf{x} \rVert / \lVert \mathbf{x} \rVert = O(\epsilon_{mach})인 경우이다.
3. 조건수와 문제의 본질적 민감도
문제의 조건수(condition number) \kappa는 입력의 상대적 변화에 대한 출력의 상대적 변화의 최대 비율이다.
\kappa = \sup \frac{\lVert \delta \mathbf{y} \rVert / \lVert \mathbf{y} \rVert}{\lVert \delta \mathbf{x} \rVert / \lVert \mathbf{x} \rVert}
조건수가 큰 문제를 악조건(ill-conditioned) 문제라 하며, 이 경우 입력의 미소한 섭동(반올림 오차 포함)이 출력에 크게 증폭된다.
선형 시스템 \mathbf{A}\mathbf{x} = \mathbf{b}의 조건수는 \kappa(\mathbf{A}) = \lVert \mathbf{A} \rVert \lVert \mathbf{A}^{-1} \rVert = \sigma_{\max}/\sigma_{\min}이다. \kappa(\mathbf{A}) \approx 10^k이면 해의 유효 자릿수가 약 16 - k자리로 감소한다.
4. 소거 오차(Cancellation Error)
크기가 비슷한 두 수의 뺄셈에서 유효 자릿수가 크게 손실되는 현상을 소거 오차(catastrophic cancellation)라 한다. 예를 들어, a = 1.00000001과 b = 1.00000000의 차이는 10^{-8}이지만, 각 수의 반올림 오차가 10^{-16} 수준이면 결과의 상대 오차는 10^{-8} 수준이 된다.
최적화 알고리즘에서 소거 오차는 다음의 상황에서 발생한다.
- 수치 미분에서 유한 차분 [f(x + h) - f(x)] / h의 계산
- 수렴 판정에서 f(\mathbf{x}_{k+1}) - f(\mathbf{x}_k)의 계산
- 야코비안의 근특이(near-singular) 열 사이의 연산
5. 최적화 알고리즘에서의 수치적 안정성
5.1 정규 방정식의 불안정성
비선형 최소 제곱에서 정규 방정식 \mathbf{J}^T\mathbf{J}\mathbf{d} = -\mathbf{J}^T\mathbf{r}의 조건수는 \kappa(\mathbf{J}^T\mathbf{J}) = \kappa(\mathbf{J})^2이다. 야코비안의 조건수가 10^8이면, 정규 방정식의 조건수가 10^{16}이 되어 배정밀도에서 유효 자릿수가 거의 없다. QR 분해에 의한 해법은 \kappa(\mathbf{J})에만 의존하므로 수치적으로 더 안정적이다.
5.2 촐레스키 분해의 안정성
양정치 행렬의 촐레스키 분해 \mathbf{A} = \mathbf{L}\mathbf{L}^T는 후방 안정적이다. 그러나 행렬이 근특이하면(조건수가 크면) 분해 자체는 안정적이더라도 해의 정확도가 조건수에 의해 제한된다.
5.3 수치 미분의 오차
전방 차분 \frac{f(x + h) - f(x)}{h}에서 절단 오차(truncation error)는 O(h)이고, 반올림 오차는 O(\epsilon_{mach}/h)이다. 두 오차의 합을 최소화하는 최적 스텝 크기는 h^* \approx \sqrt{\epsilon_{mach}} \approx 10^{-8} (배정밀도)이며, 이때 총 오차는 O(\sqrt{\epsilon_{mach}}) \approx 10^{-8}이다.
중심 차분 \frac{f(x+h) - f(x-h)}{2h}에서 절단 오차는 O(h^2)이므로 최적 h^* \approx \epsilon_{mach}^{1/3} \approx 10^{-5}이고 총 오차는 O(\epsilon_{mach}^{2/3}) \approx 10^{-11}이다.
6. 로봇 공학에서의 수치적 안정성 문제
6.1 야코비안 특이점 근방
로봇 매니퓰레이터가 야코비안 특이점(singular configuration)에 접근하면, 야코비안의 조건수가 무한대로 증가한다. 역기구학에서 야코비안의 역행렬이 수치적으로 불안정해지며, 관절 속도가 과도하게 커지는 현상이 발생한다. 댐핑된 최소 제곱법(DLS)이 이 문제의 표준적 해결책이다.
6.2 회전 표현의 특이성
오일러 각도 표현은 짐벌 록(gimbal lock)에 의한 특이점을 가지며, 이 근방에서 수치적 불안정이 발생한다. 쿼터니언이나 회전 행렬을 사용하면 이 특이성을 피할 수 있으나, 쿼터니언의 단위 제약 유지나 회전 행렬의 직교성 유지에 대한 수치적 관리가 필요하다.
6.3 동역학 시뮬레이션의 강성(Stiffness)
로봇 접촉 시뮬레이션에서 높은 접촉 강성은 동역학 방정식의 강성(stiffness)을 증가시키며, 명시적 적분기의 안정성 한계를 극도로 제한한다. 암시적 적분기가 이러한 강성 문제에 적합하지만, 각 시간 단계에서 비선형 방정식을 풀어야 하는 추가 비용이 발생한다.
7. 안정성 향상 기법
스케일링: 변수와 제약의 크기를 비슷한 수준으로 정규화하여 조건수를 개선한다.
정규화: 레벤버그-마쿼트의 댐핑 항 \lambda\mathbf{I}가 정규 방정식의 조건수를 (\sigma_{\max}^2 + \lambda)/(\sigma_{\min}^2 + \lambda)로 개선한다.
직교 분해: 정규 방정식 대신 QR 분해를 사용하여 조건수의 제곱화를 방지한다.
자동 미분: 유한 차분의 반올림 오차를 완전히 회피하여 정확한 도함수를 계산한다.
8. 참고 문헌
- Higham, N. J. (2002). Accuracy and Stability of Numerical Algorithms (2nd ed.). SIAM.
- Golub, G. H., & Van Loan, C. F. (2013). Matrix Computations (4th ed.). Johns Hopkins University Press.
- Nocedal, J., & Wright, S. J. (2006). Numerical Optimization (2nd ed.). Springer.
- Trefethen, L. N., & Bau, D. (1997). Numerical Linear Algebra. SIAM.
version: 1.0