경사하강법(gradient descent)이 어떤 함수의 최소값을 향한 방향을 계산하는데 1차 미분을 사용하는 반면 뉴턴방법(Newton's method)는 2차 미분을 사용한다. 따라서 뉴턴방법이 경사하강법보다는 성능이 훨씬 좋다.
제약조건이 없는 최적화 문제는 다음과 같다.
\[ \min_{\mathbf{x}} f(\mathbf{x}) \tag{1} \]
여기서 \(\mathbf{x} \in \mathbb{R}^n\) 은 최적화 변수이고, \(f(\mathbf{x})\) 는 목적함수(objective function)이다. 목적함수는 두 번 미분가능하다고 가정한다.
뉴턴방법의 기본 개념은 최적화 변수의 시작값(starting point) \(\mathbf{x}\) 에서 목적함수 \(f(\mathbf{x})\) 를 2차 함수로 근사화하고, 목적함수 대신에 이 2차 근사 함수를 최소화하는 것이다. 그리고 이 최소값을 다음 이터레이션(iteration) 스텝의 시작값으로 설정하여 위 절차를 반복한다.
목적함수 \(f(\mathbf{x})\) 를 테일러 시리즈(Taylor series)로 전개하고 2차항에서 절삭하면 다음과 같다.
\[ \begin{align} f(\mathbf{x}+ \Delta \mathbf{x}) & \approx f(\mathbf{x})+ \nabla_{\mathbf{x}}^T f(\mathbf{x}) \Delta \mathbf{x}+ \frac{1}{2} \Delta \mathbf{x}^T \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \Delta \mathbf{x} \tag{2} \\ \\ &= \hat{f}(\mathbf{x}+ \Delta \mathbf{x}) \end{align} \]
여기서 \(\nabla_{\mathbf{x}} f(\mathbf{x})\) 는 \(f(\mathbf{x})\) 의 그래디언트(gradient)이고 \(\nabla_{\mathbf{x}}^2 f(\mathbf{x})\) 는 헤시안(Hessian)이다. 2차 근사함수 \(\hat{f}(\mathbf{x})\) 의 최소값을 구하기 위하여 미분하면 다음과 같다.
\[ \nabla_{\Delta \mathbf{x}} \hat{f}(\mathbf{x}+ \Delta \mathbf{x})=0= \nabla_{\mathbf{x}} f(\mathbf{x})+ \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \Delta \mathbf{x} \tag{3} \]
따라서 \(\nabla_{\mathbf{x}}^2 f(\mathbf{x}) \gt 0\) 이라면 \( \hat{f} (\mathbf{x}+ \Delta \mathbf{x})\) 를 최소화하는 \(\Delta \mathbf{x}\) 는 다음과 같다.
\[ \Delta \mathbf{x}= - \left( \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \right)^{-1} \nabla_{\mathbf{x}} f(\mathbf{x}) \tag{4} \]
여기서 \(\Delta \mathbf{x}\) 를 뉴턴스텝(Newton step) 이라고 한다. 결국 \(\hat{f}(\mathbf{x})\) 의 최소값은 \(\mathbf{x}+\Delta \mathbf{x}\) 에서 얻을 수 있으며, 이 값은 다음 이터레이션의 시작값으로 설정된다.
\[ \mathbf{x} \gets \mathbf{x} - \left( \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \right)^{-1} \nabla_{\mathbf{x}} f(\mathbf{x}) \tag{5} \]
뉴턴스텝 \(\Delta \mathbf{x}\) 는 \(\nabla_{\mathbf{x}}^2 f(\mathbf{x}) \gt 0 \) 이고 \(\nabla_{\mathbf{x}} f(\mathbf{x}) \ne 0\) 이라면 목적함수의 하강 방향(descent direction)을 가리킨다. 즉 \(\Delta \mathbf{x}\) 는 \(f(\mathbf{x}+\eta \Delta \mathbf{x}) \lt f(\mathbf{x})\) 이 되도록 만드는 \(0\) 보다 큰 어떤 스칼라 값 \(\eta\) 가 존재한다. 증명은 다음과 같다.
먼저 \(\phi (\eta)=f(\mathbf{x}+\eta \Delta \mathbf{x})\) 로 놓고 \(\phi\) 를 \(\eta\) 로 미분한다.
\[ \phi^\prime (\eta)=\nabla_{\mathbf{x}}^T f(\mathbf{x})\Delta \mathbf{x} + \eta \Delta \mathbf{x}^T \nabla_{\mathbf{x}}^T f(\mathbf{x}) \Delta \mathbf{x} + \cdots \tag{6} \]
\(\eta=0\) 에서 위 미분을 계산하면 식 (3)과 (4)에 의해서 다음과 같이 된다.
\[ \begin{align} \phi^\prime (0) &= \nabla_{\mathbf{x}}^T f(\mathbf{x}) \Delta \mathbf{x} \tag{7} \\ \\ &= - \Delta \mathbf{x}^T \left( \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \right)^{-1} \Delta \mathbf{x} \lt 0 \end{align} \]
식 (7)에 의하면 결국 \(\phi(\eta) \lt \phi(0)\) 이 되는 \(\eta \gt 0\) 이 존재한다는 것이며 이는 어떤 \(\eta \gt 0 \) 에 대해서 다음 부등식이 성립함을 의미한다.
\[ f(\mathbf{x}+ \eta \Delta \mathbf{x}) \lt f(\mathbf{x}) \tag{8} \]
그렇다면 뉴턴방법으로 이터레이션하면서 구한 \(f(\mathbf{x})\) 의 값과 식 (1)의 최적해 \(p^\star\) 의 차이는 어떻게 계산할 수 있을까. 이터레이션을 어딘가에서 멈추려면 이 값을 아는 것이 중요하다. \(f(\mathbf{x})-p^\star\) 는 식 (2)와 (4)를 이용하여 다음과 같이 근사적으로 계산할 수 있다.
\[ \begin{align} f(\mathbf{x})-p^\star & \approx f(\mathbf{x})-f(\mathbf{x}+\Delta \mathbf{x}) \tag{9} \\ \\ &= - \nabla_{\mathbf{x}}^T f(\mathbf{x}) \Delta \mathbf{x}-\frac{1}{2} \Delta \mathbf{x}^T \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \Delta \mathbf{x} \\ \\ &= \frac{1}{2} \Delta \mathbf{x}^T \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \Delta \mathbf{x} \\ \\ &= \frac{1}{2} \nabla_{\mathbf{x}}^T f(\mathbf{x}) \left( \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \right)^{-1} \nabla_{\mathbf{x}} f(\mathbf{x}) \\ \\ &= \frac{1}{2} q^2 (\mathbf{x}) \end{align} \]
여기서 \(q (\mathbf{x})\) 를 뉴턴감소량(Newton decrement)이라고 한다.
\[ q (\mathbf{x}) = \left( \nabla_{\mathbf{x}}^T f(\mathbf{x}) \left( \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \right)^{-1} \nabla_{\mathbf{x}} f(\mathbf{x}) \right)^{\frac{1}{2}} \tag{10} \]
뉴턴감소량이 일정 수준 이하로 작아지면 최적해에 거의 근접했다는 신호로 볼 수 있으므로 이테레이션을 멈출 수 있다.
뉴턴방법을 정리하면 다음과 같다.
0. 시작값 \(\mathbf{x}\) 와 종료조건 값 \(\epsilon \) 을 설정한다.
1. 다음을 반복한다.
[1] 뉴턴스텝과 뉴턴감소량을 계산한다.
\( \Delta \mathbf{x} = - \left( \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \right)^{-1} \nabla_{\mathbf{x}} f(\mathbf{x}) \)
\( q^2 (\mathbf{x})= \nabla_{\mathbf{x}}^T f(\mathbf{x}) \left( \nabla_{\mathbf{x}}^2 f(\mathbf{x}) \right)^{-1} \nabla_{\mathbf{x}} f(\mathbf{x}) \)
[2] 뉴턴감소량을 종료조건 값 \(\epsilon\) 보다 작으면 이터레이션을 중지한다.
\( \frac{1}{2} q^2 ( \mathbf{x}) \le \epsilon \)
[3] 스텝사이즈 \(\eta\) 를 계산한다(백트래킹 라인서치 방법이나 미리 설정된 값 등 사용).
[4] \(\mathbf{x}\) 를 업데이트 한다.
\( \mathbf{x} \gets \mathbf{x}+ \eta \Delta \mathbf{x} \)
뉴턴방법의 단점은 최적화 변수의 개수가 클 때 헤시안 행렬 \(\nabla_{\mathbf{x}}^2 f(\mathbf{x})\) 과 식 (4)를 계산하는데 많은 자원이 소요된다는 데에 있다. 몇가지 보완 알고리즘이 있는데 이에 대해서는 나중에 알아보도록 하자. 그리고 헤시안 행렬이 정정행렬(positive-definite matrix)이 아닌 경우에도 문제가 되는데, 이는 Levenberg-Marquardt 수정 알고리즘을 통해서 극복할 수 있다.
'AI 수학 > 최적화' 카테고리의 다른 글
장벽 내부점 방법 (Barrier Interior-Point Method) (0) | 2022.04.13 |
---|---|
등식 제약조건에서의 뉴턴방법 (Newton’s Method) (0) | 2022.04.10 |
내부점 방법 (Interior-Point Method)의 개념 (0) | 2022.04.06 |
프라이멀 문제와 듀얼 문제의 유도 (0) | 2022.04.04 |
역전파 (Backpropagation) 계산 (0) | 2021.03.31 |
댓글