# 재시작 기법(Restart)과 초기값 선택

비선형 방정식을 근사적으로 풀어내는 반복법(iterative method)을 실제로 적용할 때, 주어진 함수의 특성이나 반복 과정에서 발생하는 수치적 문제로 인해 안정적으로 근사값을 얻기가 어려운 경우가 많다. 이러한 상황에서 여러 번의 반복을 실행한 후, 보다 적절한 상태로 다시 돌아가서 알고리즘을 재시작(Restart)하거나, 아예 새로운 지점에서부터 반복법을 새로 수행하여 수렴성을 높이는 접근을 고려하게 된다. 이는 단순히 기계적 반복을 수행하기보다, 여러 가지 지표나 조건을 확인한 뒤 재시작을 통해 보다 좋은 근사해로 수렴하려는 전략적 접근을 의미한다. 동시에 반복을 시작하기 위한 초기값(initial guess)을 어떻게 정할지도 상당히 중요하다. 초기값의 선택은 전체 반복 과정의 수렴 속도, 안정성, 심지어 수렴 여부 자체에까지 영향을 미치기 때문이다.

비선형 방정식이 한 개의 미지수를 다루는 단일 방정식인지, 혹은 여러 개의 미지수를 포함한 고차원 비선형 시스템인지에 따라 초기값 선택 전략과 재시작 기법이 조금 달라지기도 한다. 그러나 공통적으로, 반복법이 완전히 실패하거나 매우 느린 속도로 진행될 때, 한 단계 전 혹은 적절히 후퇴한 시점에서 다시 알고리즘을 시작하거나, 아예 새로운 공간적 지점에서 다시 출발하여 국소적 수렴이 아닌 좀 더 전역적 혹은 준전역적 수렴성을 확보하려 노력한다.

#### 재시작 기법의 필요성

재시작 기법은 반복 과정에서 누적되는 오차나 해석적 비선형성, 병목현상 등을 극복하기 위해서 사용된다. 고차원 시스템에서 특히 자주 활용된다. 예컨대, 뉴턴 방법(Newton's method) 또는 준뉴턴 방법(quasi-Newton method)에서 야코비 행렬 혹은 헤세 행렬을 근사하거나 저장하는 과정에서 수치적 부정합이 쌓일 때가 있다. 이러한 오차가 반복을 진행할수록 커지면 해 근사치를 상당히 왜곡시키거나 특정 지점에 머물러 제대로 근사해를 찾지 못하는 상황에 빠질 수 있다. 이럴 때 재시작(Restart)을 통해 이러한 정보(근사 야코비나 헤세 행렬 등)를 리셋하고, 새로운 기울기나 야코비 행렬을 다시 계산하여 수렴 성능을 회복시키는 것이다.

고차원 문제에서 더 일반적인 방식은, 어떤 횟수만큼 반복을 수행한 뒤, 일정 조건(잔차 크기, 갱신 벡터의 노름, 혹은 내적 등을 활용한 판단)이 충족되지 않으면 직전의 근사해를 어느 정도 조정하거나 전혀 다른 후보 근사해로 변경하여 알고리즘을 다시 시도한다. 라인서치(line search)와 트러스트 리전(trust region) 개념을 결합하기도 하며, 대규모 선형계 반복해법(예: GMRES)과 결합하여 뉴턴-크릴로프(Newton-Krylov) 방식으로 구현할 때도 재시작 횟수를 조정하는 것이 핵심이 된다.

#### 초기값 선택의 중요성

초기값 선정은 어떤 반복법을 사용하든지 간에 필수적으로 고민해야 하는 요소다. 많은 비선형 문제들은 여러 개의 근을 갖거나, 혹은 어느 구간 혹은 구역에서만 수렴이 보장되는 국소적 방법을 사용할 수 있다. 뉴턴 방법은 근방 수렴(local convergence) 특성을 갖기 때문에, 매우 좋지 않은 초기값에서는 빠르게 발산하거나, 다른 근으로 치우쳐 버려 원하는 해를 놓칠 수 있다.

초기값을 선택하는 가장 간단한 방식은 주어진 문제의 물리적, 구조적, 혹은 기하학적 정보를 참조하는 것이다. 예를 들어, 물리학 모델이나 공학 시스템에서 특정 변수가 항상 양의 값을 가진다고 알려져 있다면, 음의 초기값을 고르는 것은 실효성이 떨어질 가능성이 높다. 다차원 문제에서도 비슷하게, 모델이 실제로 반영해야 하는 변수들의 대략적 범위를 추정하여 초기값을 잡는다.

함수 자체로부터 단순히 구간을 나누어 적절한 부근을 선택할 수도 있다. 단변수 문제에서 $f(x)$가 구간 $\[a, b]$에서 부호가 바뀌어야 근의 존재가 보장되는 브래킷팅(bracketing) 기법이 가능하다. 이런 단변수 케이스에서는 2분법(bisection) 등 안정적인 방법으로 거친 근사값을 얻은 뒤, 좀 더 고급 반복법(예: 뉴턴 또는 할선(secant) 방법)을 적용할 때 그 근사값을 초기값으로 활용하기도 한다. 다변수 문제에서도 반직교 조건이나, 미분정보를 일부 반영한 간단한 루틴을 미리 수행하여 후보점을 얻은 뒤 그 점을 초기값으로 삼기도 한다.

#### 초기값 선택과 함수의 구조적 특성

함수 $f(\mathbf{x})$가 다변수라면, 초기값 $\mathbf{x}\_0$을 설정할 때, 함수의 기울기(gradient)나 야코비(Jacobian) 행렬을 통해 얻을 수 있는 초깃단계 정보를 최대한 활용하는 것이 좋다. 어떤 경우에는 고차원 공간에서 다중 극값(local minimum, maximum) 혹은 안장점(saddle point)이 존재할 수 있고, 각 극값 근처에서 $f(\mathbf{x})=0$을 만족하는 해가 여러 개 존재할 수 있다. 이러한 상황에서 하나의 초기값만을 이용할 경우, 특정 해로만 빠르게 수렴하는 국소적 특성이 나타난다. 이렇게 복수의 근이 존재할 때, 여러 후보 초기값을 두어서 병렬적으로 계산을 진행한 뒤 가장 합리적인 결과를 선택하는 방법도 있다.

또 다른 전략으로, $f(\mathbf{x})$의 지오메트리를 일정 수준 추정하는 프리 스캐닝(pre-scanning) 기법이 있다. 예를 들어, 파라메터를 조금씩 변화시키며 $f(\mathbf{x})$의 노름이 작은 지점을 찾거나, 부분적으로 선형화를 시도해 근사모델(특정 구간이나 영역에서의 1차 또는 2차 근사)을 만들어 낸 뒤, 그 근사모델을 풀어 얻은 해를 초기값으로 활용한다. 이러한 접근은 계산 비용이 추가로 들지만, 전체 반복법이 더 빠르고 안전하게 수렴하도록 돕는다.

#### 뉴턴 방법에서의 재시작과 초기값

뉴턴 방법은 고전적인 비선형 방정식 근사 알고리즘으로, 일반적 형태의 단변수 문제에서 다음과 같이 구현된다.

$$
\begin{align} x\_{n+1} &= x\_n - \frac{f(x\_n)}{f'(x\_n)} \end{align}
$$

고차원 시스템에서는, $f: \mathbb{R}^N \to \mathbb{R}^N$ 일 때 반복 갱신식을

$$
\begin{align} \mathbf{x}\_{n+1} &= \mathbf{x}\_n - \mathbf{J}^{-1}(\mathbf{x}\_n) , f(\mathbf{x}\_n) \end{align}
$$

와 같이 표현한다. 여기서 $\mathbf{J}(\mathbf{x}\_n)$은 $f(\mathbf{x})$의 야코비 행렬이다. 이때 재시작 기법은 크게 두 가지 이유로 적용된다. 첫째, 야코비 행렬이 너무 자주 변하거나, 근방에서 제대로 근사를 하지 못해 발산하는 문제가 발생할 때 유용하다. 둘째, 실제 구현에서 $\mathbf{J}^{-1}(\mathbf{x}\_n)$을 직접 구하지 않고, 그 근사 $\mathbf{B}\_n$을 업데이트하는 준뉴턴 방법(ex. Broyden) 등을 사용하다가 근사 오차가 커진 경우에 이를 리셋하기 위해 적용한다.

재시작은 보통 다음 단계에서 시도된다. 예컨대, $n$회의 반복 후에도 $||f(\mathbf{x}\_n)||$가 특정 기준 이하로 줄어들지 않으면, 혹은 행렬 업데이트에 사용되는 스키마가 수치적으로 불안정해졌다고 판단되면, $\mathbf{B}\_n$을 처음 상태(혹은 간단한 근사 예측 행렬)로 되돌리고 반복을 계속한다. 혹은 $\mathbf{x}\_n$ 자체를 다른 위치로 옮겨서 완전히 다른 시작점에서 다시 반복을 시작하기도 한다.

#### GMRES와 뉴턴-크릴로프 기법에서의 재시작

많은 고차원 선형계 해결에서 쓰이는 반복법인 GMRES는, 크릴로프(Krylov) 기반 투영 기법을 통해 선형계 $\mathbf{A}\mathbf{x} = \mathbf{b}$의 해를 찾는다. 뉴턴 방법과 결합하면, 각 스텝마다 발생하는 야코비나 야코비 근사 행렬계 $\mathbf{J}(\mathbf{x}\_n)\mathbf{\Delta x} = - f(\mathbf{x}\_n)$를 GMRES로 푼다. 여기서 GMRES가 내부 반복으로 쓰일 때, 잔차 차원(Krylov 차원)을 무한정 키우기 어려워서 보통 재시작 횟수(restart parameter)를 정해 일정 횟수마다 부분 공간을 다시 세팅한다.

이러한 ‘내부 재시작’은 GMRES가 축적해 온 직교 기저나 잔차 정보를 소멸시켜 버리지만, 메모리와 계산량을 제한하기 위한 필수적인 수단이 된다. 외부에서 뉴턴 반복 자체도 재시작 가능성을 고려하는 경우, 내부+외부 두 계층에서 모두 재시작이 이뤄지는 형태가 나타난다. 이중 재시작 구조는 방정식의 규모가 매우 클 때, 효율과 안정성을 함께 추구하기 위해 자주 도입된다.

#### 초기값에서의 전역적 탐색과 다중 근

여러 근이 존재하거나, 초기값에 따라 다른 해로 수렴하는 경우가 흔하다. 전역 탐색(global search) 측면에서 대략적인 지도(mapping)을 만든 후, 뉴턴류의 국소 반복법을 적용하는 방식이 권장되기도 한다. 이를테면, 유전 알고리즘이나 입자 군집 최적화 기법 등을 활용해 $||f(\mathbf{x})||$가 작은 지점을 미리 탐색하고, 그 근방에서 국소적 뉴턴 반복을 수행하여 정밀 해를 구한다. 또는, 일정 격자나 랜덤 초기값을 다수 설정하여 반복을 동시에 실행해 본 뒤, 가장 잔차가 작은 해를 선택하는 식의 방법도 실용적이다.

이러한 전역 탐색 자체가 필연적으로 계산 비용이 큰 편이어서, 실제로는 문제의 스케일과 특징을 충분히 분석해 본 뒤 적용한다. 물리나 공학에서 시스템이 갖는 특별한 성질(예: 에너지가 최소가 되는 지점, 재료역학에서 응력 평형 조건 등)이 있으면, 그 성질을 고려해 초기값을 정하면 수렴이 훨씬 빠르고 신뢰성 있게 이뤄진다.

#### 재시작 주기의 설정

재시작(Restart)을 언제, 어떤 기준에 따라 수행할 것인지에 대한 정책은 알고리즘의 효율과 안정성에 큰 영향을 미친다. 과도하게 잦은 재시작은 계산 비용을 늘릴 수 있고, 반대로 재시작을 아예 사용하지 않으면 수치적 누적 오차나 발산 등의 문제가 해결되지 못할 수 있다. 따라서 특정 반복 알고리즘이 실행되는 동안, 다음과 같은 지표나 조건들을 사용하여 재시작 시점을 동적으로 결정한다.

* 잔차 규준(residual norm) $||f(\mathbf{x}\_n)||$이 일정 횟수($k$회) 반복 후에도 낮아지지 않으면 재시작을 고려한다.
* 야코비나 헤세 근사 행렬(예: $\mathbf{B}\_n$)의 대각 우세(diagonal dominance)나 조건수(condition number) 추정치가 임계값 이상으로 커질 때 재시작한다.
* 라인서치(line search)나 트러스트 리전(trust region) 기법에서 구한 스텝 크기가 지나치게 작아져, 더 이상 전진이 어려운 스톨(stall) 상태가 감지될 때 재시작을 시도한다.

구현 시에는, 재시작 횟수와 재시작 간격을 미리 일정하게 설정하기보다는, 위 조건들을 모니터링하다가 필요 시마다 수행하는 것이 좀 더 능동적이다. 내부 반복 방법(예: GMRES나 CG 등)을 병행해 사용하는 경우, 그 내부 방법의 수렴 특성이 악화될 때 재시작을 발동하는 기제로 삼을 수도 있다.

#### 선형화 및 신뢰구간(Trust-Region) 접근과 재시작

뉴턴 방법이든 준뉴턴 방법이든, 한 번의 반복 스텝에서 $f(\mathbf{x}\_n)$을 국소적으로 선형(또는 2차) 근사하여 스텝을 구한다. 선형화를 가정한 스텝이 실제 해석적 장벽에 부딪히면 발산이 발생할 수 있는데, 이런 상황을 막기 위해 신뢰구간(trust-region) 접근이 활용된다. 스텝 크기가 너무 크다면 근사식의 신뢰도가 낮아질 것이고, 너무 작다면 알고리즘의 진행 속도가 현저히 떨어질 것이다.

신뢰구간 방법에서는, 스텝 벡터 $\mathbf{p}\_n$의 크기를 제한하는 $\Delta\_n$이라는 신뢰 반경(trust radius)을 두고, 다음과 같이 보조 문제를 푼다.

$$
\begin{align} \min\_{\mathbf{p}} \quad m\_n(\mathbf{p}) &= f(\mathbf{x}\_n) + \mathbf{J}(\mathbf{x}\_n)\mathbf{p} + \cdots
\text{subject to} \quad ||\mathbf{p}|| \le \Delta\_n \\
\end{align}
$$

여기서 $m\_n(\mathbf{p})$는 $f(\mathbf{x}\_n)$ 주위에서 구성한 이차 근사 모델(혹은 일차 모델)이다. 만약 이 보조 문제를 풀어 얻은 스텝을 적용한 후, 실제 함수 값이 충분히 개선되지 않으면 신뢰 반경을 줄이는 식으로 조정한다. 이때도 여러 번의 신뢰구간 조절에도 개선이 보이지 않으면, 재시작 기법을 고려한다. 새로운 $\mathbf{x}\_0$을 설정하거나, 근사 행렬 $\mathbf{B}\_n$을 다시 초기화하여 신뢰반경의 조정 메커니즘 자체가 제대로 작동하도록 만든다.

#### 라인서치(Line Search)와 재시작 기법

뉴턴 방법 또는 그 변형들에서 라인서치는 고전적으로 널리 쓰이는 전략 중 하나다. 어떤 반복 단계에서, 구해진 스텝 $\mathbf{d}\_n$을 그대로 적용하는 대신, $\alpha \mathbf{d}\_n$ 형태의 단일 스칼라 배 $\alpha$를 찾기 위해 별도의 1차원 탐색을 수행한다. 예컨대, $f(\mathbf{x}*n + \alpha \mathbf{d}\*n)$의 노름이 충분히 줄어드는 $\alpha$를 구하면, $\mathbf{x}*{n+1} = \mathbf{x}\_n + \alpha \mathbf{d}\_n$으로 갱신한다.

라인서치에서 $\alpha$가 지나치게 작아지는 상황이 연속으로 발생하면, 사실상 알고리즘이 큰 폭으로 전진하지 못하고 있는 셈이다. 이를 통해 해가 잘못된 영역을 탐색하고 있거나, 근사 야코비/헤세가 매우 부정확해졌을 가능성을 짐작할 수 있다. 이런 신호가 확인되면 재시작을 통해, 새로운 $\mathbf{x}\_0$ 혹은 새롭게 초기화된 $\mathbf{B}\_0$(혹은 $\mathbf{J}\_0$)로 되돌아가는 작업을 수행한다.

또 다른 접근으로, 라인서치가 실패할 때(예: $f(\mathbf{x}\_n + \alpha \mathbf{d}\_n)$의 감소가 거의 없는 상황), 내부적으로 구간 축소나 역방향 탐색 등을 시도하되, 그마저도 실패하면 ‘지역 최적화 불가능’ 상태로 진단하고, 재시작 지점 탐색을 병행하는 식으로 구현하기도 한다.

#### 준뉴턴(Quasi-Newton) 방식과 보이덴(Broyden) 업데이트

뉴턴 방법에서 야코비 행렬을 직접 구하는 것이 너무 비싸거나(고차원, 복잡한 편미분) 심지어 기호적 표현이 불가능한 경우, 준뉴턴 방법이 큰 도움이 된다. 보이덴(Broyden) 업데이트는 크게 두 가지 형태가 있다: Good Broyden과 Bad Broyden. 각각 야코비 근사 행렬 $\mathbf{B}*n$의 갱신 규칙이 다르지만, 핵심은 $f(\mathbf{x}*{n+1}) - f(\mathbf{x}*n)$과 $\mathbf{x}*{n+1}-\mathbf{x}\_n$을 이용하여 순차적으로 근사 행렬을 수정해 가는 것이다.

이때 반복이 진전됨에 따라 $\mathbf{B}\_n$이 실제 야코비와 멀어지거나, 수치 오차로 인해 왜곡되기도 한다. 그런 상황에서 재시작은 $\mathbf{B}\_n$을 초기값(예: $\mathbf{I}$ 스케일링)으로 완전히 리셋하거나, 혹은 어느 특정 기법(예: SR1 업데이트)으로 다시 추정하여, 너무 망가진 근사 행렬로 인한 발산을 막는다. 경험적으로, 준뉴턴 방법에서 재시작을 적절히 수행하면, 연속된 실패 스텝 횟수를 크게 줄이고 수렴률을 안정적으로 유지할 수 있다.

#### 초기값 설정과 연속해 탐색(Continuation) 기법

비선형 시스템을 단계적으로 풀어나가는 방법 중 연속해 탐색(continuation) 기법이라는 것이 있다. 특정 파라메터 $\lambda$에 의존하는 방정식

$$
\begin{align} f(\mathbf{x}, \lambda) = \mathbf{0} \end{align}
$$

에서, $\lambda$ 값을 연속적으로 변화시키며 그에 대응되는 해 $\mathbf{x}$를 추적해 나가는 방식이다. 만약 $\lambda = 0$일 때의 해를 알고 있다면, $\lambda$를 조금씩 증가시키거나 감소시키면서, 이전 단계의 해를 다음 단계 해의 초기값으로 삼아 점진적으로 문제를 풀 수 있다. 이 과정에서 국소적 방법(뉴턴/준뉴턴 등)이 각 단계별로 빠르게 해를 찾도록 유도된다.

연속해 탐색 기법을 적용하다가, 특정 $\lambda$ 근방에서 이전 단계의 해를 초기값으로 사용해도 수렴이 잘되지 않을 수 있다. 이때 재시작 기법을 병행해, 완전히 다른 작은 $\lambda$ 구간으로 되돌아가거나, 추가적인 보조 방정식(가령, 다항식 근 분리법 등)을 사용해 근 근방을 추정한 뒤 다시 국소적 반복을 시작한다. 이를 통해 매개변수 변화 과정에서 발생할 수 있는 급격한 해의 이동이나 분기(branching) 현상을 좀 더 원활히 따라갈 수 있다.

#### 순차적 다중그리드(Multigrid) 접근과 초기값

편미분방정식을 수치 해석으로 풀 때 등장하는 대규모 비선형 방정식을 효율적으로 해결하기 위해서, 다중그리드(multigrid) 방법이 자주 쓰인다. 특히, 비선형 문제에서 점근적 스무딩(asymptotic smoothing) 전략과 함께 적용하는 경우, 저해상도(혹은 근사 해상도) 문제에서 빠르게 초기 근사값을 구한 뒤, 점차 그리드를 세분화하며 문제 크기를 키운다.

이 과정에서도 각 단계별로, 낮은 해상도 문제에서 얻은 근사해를 높은 해상도 문제의 초기값으로 삼아 반복법을 구동한다. 만일 높은 해상도 문제에서 국소 반복이 잘 수렴하지 않는다면, 저해상도 문제(혹은 중간 해상도 문제)로 다시 돌아가 조금 더 스무딩(smoothing)을 수행한 뒤, 재시작 형태로 새로운 초기값을 가져와서 다시 고해상도 문제를 푼다. 이를 통해 전역적인 해의 구조를 초기에 빠르게 찾아내고, 미세 구조까지 반영하는 과정을 유연하게 조절할 수 있다.

#### 병렬 구현과 재시작 기법

고차원 문제를 병렬 아키텍처(클러스터, GPU 등)에서 풀 때, 한 번의 반복 스텝에 소요되는 비용이 상당하다면, 재시작은 더더욱 전략적으로 사용되어야 한다. 큰 규모의 행렬 연산을 반복 수행하다가, 부정합이 심하거나 알고리즘이 이미 잘못된 방향으로 가고 있다는 것이 감지되면, 이를 빠르게 포착하여 재시작을 실행하는 편이 전체 계산량을 크게 줄인다.

예를 들어, 병렬 라이브러리(예: PETSc) 기반의 뉴턴-크릴로프 방법에서, 어느 시점 이후로 크릴로프 차원이 계속 증가해도 수렴을 전혀 개선하지 못한다면, 내부 GMRES의 잔차가 변동 없이 정체되는 상태일 수 있다. 이 상태에서 재시작을 시도해, 야코비 근사나 선형 솔버의 사전조건자(preconditioner)를 다시 구성하고, $\mathbf{x}\_0$을 다른 지점으로 초기화하면, 정체됐던 부분을 뚫고 새로운 수렴 궤적으로 진입할 가능성이 높아진다.

#### 적용 예시 (Python)

아래는 준뉴턴 방식 + 라인서치 + 재시작 구조를 단순화하여 모사한 Python 코드 예시다. 실제로는 훨씬 복잡한 루틴과 예외 처리가 필요하지만, 개념적으로 참고할 수 있다.

```python
import numpy as np

def f(x):
    # 비선형 함수 예시
    return np.array([x[0]**3 - 3.0*x[1],
                     x[1]**2 - 1.0])

def norm_f(x):
    return np.sqrt(np.sum(f(x)**2))

def broyden_update(B, s, y):
    # s = x_{n+1} - x_n
    # y = f(x_{n+1}) - f(x_n)
    # Good Broyden 업데이트 간단 형태
    denom = np.dot(s, s)
    if abs(denom) < 1.0e-14:
        return B
    return B + np.outer((y - B @ s), s) / denom

def line_search(x, d, f, c1=1e-4, alpha_init=1.0):
    alpha = alpha_init
    fx = f(x)
    f_norm = np.dot(fx, fx)
    grad_approx = np.dot(fx, d)  # 매우 단순화된 근사
    while True:
        newf = f(x + alpha*d)
        new_norm = np.dot(newf, newf)
        if new_norm <= f_norm + c1 * alpha * grad_approx:
            break
        alpha *= 0.5
        if alpha < 1e-8:
            alpha = 0.0
            break
    return alpha

def quasi_newton_restart(x0, f, max_iter=100, tol=1e-6):
    x = x0.copy()
    dim = len(x)
    B = np.eye(dim)
    for i in range(max_iter):
        fx = f(x)
        if np.linalg.norm(fx) < tol:
            break
        d = -np.linalg.solve(B, fx)
        alpha = line_search(x, d, f)
        if alpha == 0.0:
            # 재시작 발생: 완전히 정체된 상황으로 간주
            B = np.eye(dim)
            x = x0.copy()  # 혹은 다른 방식으로 x를 재설정
            continue
        s = alpha*d
        x_next = x + s
        y = f(x_next) - fx
        B = broyden_update(B, s, y)
        x = x_next
    return x

initial_guess = np.array([1.0, 1.0])
sol = quasi_newton_restart(initial_guess, f)
print("Solution:", sol)
print("Residual norm:", norm_f(sol))
```

이 예시에서 line\_search 함수는 매우 단순화된 Wolfe 조건 중 하나만을 반영하고 있으며, $\alpha$가 극단적으로 작아지면 곧장 0.0으로 세팅해 재시작을 유발한다. 실제로는 재시작 시에 $x$를 어떻게 재설정할지 더 정교한 규칙을 적용할 수 있다. 예컨대, 기록해 둔 이전 반복 중 상대적으로 작은 잔차를 가진 상태로 롤백(rollback)하거나, 혹은 전역 탐색 루틴으로부터 후보점을 받아오는 등 다양한 방식이 가능하다.

#### 사전조건화(Preconditioning)와 초기값 보강

비선형 문제를 반복적으로 풀 때, 특히 고차원 문제에서 발생하는 $\mathbf{J}(\mathbf{x})$ 또는 그 근사 행렬의 조건수가 매우 클 경우, 수렴 속도와 안정성은 급격히 악화될 수 있다. 사전조건화(preconditioning)는 원래 선형계에서 $\mathbf{A}\mathbf{x} = \mathbf{b}$를 풀 때, $\mathbf{M}^{-1}\mathbf{A}\mathbf{x} = \mathbf{M}^{-1}\mathbf{b}$와 같은 변환으로 조건수를 개선하는 기법이다. 이를 비선형 방정식의 국소 선형화 과정에 대입하면, 뉴턴 스텝을 구하는 선형계나 GMRES 반복의 내적 구조가 개선되어 수렴이 빨라질 수 있다.

사전조건화가 적용된 비선형 해법에서는, $\mathbf{J}(\mathbf{x}\_n)\mathbf{p} = -f(\mathbf{x}\_n)$와 같은 국소 방정식을 푸는 내부 반복 과정에서 $\mathbf{M}$이라는 사전조건 행렬(또는 연산)을 도입한다. 단순 스케일링(scaling)부터 대각 프리컨디셔너(diagonal preconditioner), 혹은 멀티그리드 기반 사전조건화까지 다양한 방안이 존재한다. 이러한 사전조건화도 계속 반복하는 과정에서 변경될 수 있고, 어떤 상황에서는 사전조건화 자체가 비효율적이 되어 역으로 수렴을 망치는 경우가 생길 수 있다. 그럴 때 재시작을 통해 이전 단계의 사전조건 연산을 폐기하고, 새로운 사전조건 연산이나 새로운 스케일링을 적용하여 알고리즘을 안정화시킨다.

초기값 선택에서도 사전조건화의 논리를 일부 적용할 수 있다. 예컨대, 해석적으로 각 물리 변수가 서로 다른 단위를 갖거나, 값의 스케일이 크게 다를 때, 미리 변수들을 스케일링하여 보정된 문제를 만들고 그 문제에 대해 초기값을 잡으면, 수렴 단계에서 일어나는 역수치 현상을 줄일 수 있다. 이렇게 하면 $\mathbf{x}\_0$ 자체가 단위가 정규화(normalized)되어 있기 때문에, 비선형 반복법이 진행되는 동안 잔차나 기울기 크기가 불균형해지는 문제도 완화된다.

#### 적응형 재시작(Adaptive Restart) 전략

최적의 재시작 횟수나 주기를 사전에 알 수 없는 상황이 많으므로, 적응형(adaptive) 기법을 통해 재시작 여부를 동적으로 조정하는 방식이 연구되고 있다. 잔차의 감소율(ratio), 라인서치에서 얻은 스텝 크기, 혹은 조건수나 야코비 근사 행렬이 가진 고윳값 분포 등을 실시간으로 평가하여, 일정 임계치를 넘으면 곧바로 재시작을 수행하고 그렇지 않으면 유지한다.

이와 같은 적응형 방식은 다음과 같은 특징을 갖는다. 잔차가 빠르게 줄어드는 구간에서는 불필요한 재시작을 하지 않아, 오버헤드를 줄인다. 반면에 잔차 감소가 정체(stagnation)되고 스텝이 작아지는 상황에서는 재시작을 비교적 신속히 수행하여, 그 주변에서 큰 폭의 검색이 가능하도록 만든다. 구현 난이도는 다소 올라가지만, 특정 유형의 비선형 문제에서 재시작 전략을 수작업으로 설정하기 어려울 때 매우 유용하다.

#### 결정적 초기값 vs. 확률적 초기값

초기값을 결정적(deterministic)으로 설정할 때는, 문제의 물리나 수학적 정보, 과거 해석 경험 등을 최대한 활용하려 한다. 예컨대, 근이 존재하는 구간이나 영역을 추정하고, 중간값 정리를 이용하거나, 간단한 역함수 유도 등을 통해 ‘합리적인’ 지점 한두 곳을 골라 쓴다. 이 방식은 한 번 잘 선택되면 매우 빠르게 수렴하는 장점이 있지만, 복수 근이 있거나, 문제 구조가 복잡하여 어디가 좋은 초기값인지 미리 가늠하기 어려운 경우에는 국소 최소해나 엉뚱한 근으로 빠질 위험도 있다.

확률적(stochastic) 초기값 접근은, 여러 후보 초기값을 랜덤 혹은 준랜덤(quasi-random)으로 생성하여 병렬적으로 반복법을 실행한다. 여러 실행 중 가장 작은 잔차를 달성한 결과를 최종 해로 결정하거나, 혹은 다중 근을 모두 찾아야 할 때는 각 실행에서 수렴한 해들을 모은다. 이는 전역 탐색 성격을 어느 정도 갖추게 해주지만, 계산량이 커지고, 완전히 구조가 모호한 문제에서는 여전히 특정 초기값들만 유독 발산하거나 이상 동작할 가능성도 있다. 따라서 확률적 접근 역시 재시작 기법과 연계하여, 임계 실패 횟수가 누적되면 다른 후보점들로 갈아타거나, 기존 점에서의 근사 행렬을 리셋하고 탐색을 계속한다.

#### 부분 선형화(Partial Linearization)와 초기값 분할 전략

비선형 문제에서, 일부 변수를 먼저 선형화하여 부분 문제를 푼 뒤, 그 결과를 다른 변수에 대한 초기값으로 재활용하는 기법이 있다. 예를 들어, $f(\mathbf{x}, \mathbf{y}) = \mathbf{0}$ 형태로 두 집합의 변수 $\mathbf{x}, \mathbf{y}$가 섞여 있는 문제에서, $\mathbf{x}$에 대해서는 근사 혹은 선형화로 빠르게 업데이트하고, 그 결과를 바탕으로 $\mathbf{y}$에 대한 단계적 갱신을 시도한다. 이를 교대로 반복하면, 전체 문제에 대해 순차적 수렴 과정을 밟는다.

이러한 접근은 순차적 스킴(sequential scheme)이나 블록 가우스-자이델(block Gauss-Seidel) 방법 등으로 불리기도 한다. 이 과정에서 한 블록(예: $\mathbf{x}$)에 대한 식이 정상적으로 수렴하지 않고 발산 조짐이 보이면, 그 블록에 대해서만 재시작을 적용하거나, 아예 두 블록 모두 초기화해 전체 문제를 다시 푸는 결정을 내릴 수 있다. 즉, 블록 단위로 재시작 수행 여부를 달리 정해, 불안정성이 발생하는 부분만 재조정하고 나머지는 유지하는 식의 유연한 전략도 가능하다.

#### 다중 근(Multiple Roots) 특성과 분기(Branch) 탐색

비선형 방정식 중에는 매개변수 변화에 따라 해가 갈라지는 분기(branch) 현상이 자주 나타난다. 대표적으로, 특정 매개변수 $\lambda$의 값이临계점(bifurcation point)을 지나며 기존 해가 두 개 이상의 분리된 가지(branch)로 갈라질 수 있다. 이때 일반적인 뉴턴 방법이나 단일 초기값 접근만으로는 새로운 가지 위의 해를 찾기 힘들다.

이를 해결하기 위해, 분기점 근처에서 여러 방향의 접선(tangent)을 추정한 뒤, 그 방향으로 초기값을 약간 이동시켜 서로 다른 가지 해를 병렬적으로 탐색하기도 한다. 또한, 분기점이나 임계점 부근에서는 재시작 기법을 이용해 ‘분기 예측 해’를 초기값으로 삼아 알고리즘을 여러 갈래로 시작시키는 것도 시도된다. 이 경우, 초기값 자체가 분기 현상을 적극적으로 활용해 다중 근을 발견하는 매개체가 된다.

#### 복합 혼합 기법(Hybrid Methods)과 재시작

하나의 고정된 알고리즘만으로는 복잡한 비선형 문제를 효율적으로 풀기 어렵기 때문에, 다양한 방법을 혼합하여 사용하는 경우가 많다. 예를 들어, 할선(secant) 방법과 뉴턴 방법을 번갈아 적용하는 하이브리드 방식이 있다. 초기에 야코비나 미분 정보를 구하기 어렵거나 신뢰하기 힘들면 할선 방법으로 대략적인 진행을 하고, 충분히 가까운 근방에 도달하면 뉴턴 방법으로 바꿔서 빠른 국소 수렴을 노린다.

이런 복합 기법 내에서, 특정 단계에서의 발산이나 수렴 정체가 감지되면 재시작을 적용하여 다른 알고리즘 구성이나 다른 초기값 전략으로 전환하는 것이다. 실제 해석 프로그램에서는, 예컨대 할선 스텝이 3번 이상 실패하면 곧장 준뉴턴 스키마로 재시작하여 초기화하거나, 라인서치가 모두 실패하면 2분법 등 보수적 접근으로 전환한 뒤, 잔차가 충분히 내려가면 다시 뉴턴 스텝으로 복귀하기도 한다.

#### 대규모 시스템과 사전 분석(Pre-Analysis)의 효용

수천만 개 이상의 자유도가 걸린 매우 복잡한 편미분방정식(PDE) 기반 문제에서, 단지 반복법을 돌려 보며 “잘 되나?”를 확인하는 방식으로는 해를 구하기가 매우 어렵다. 이러한 초대규모 시스템에서는, 해가 가지는 물리적 특성과 구조를 미리 파악하는 사전 분석(pre-analysis)이 필수에 가깝다.

공학 해석에서는 해석적 근사나 다중음해법(multiple shooting), 또는 심플한 모형 실험(mock-up) 결과를 활용해, 문제에서 중요한 해 영역(파이프 유동의 레이놀즈 수 구간, 열유동에서 누설 경계 조건 등)을 추정하고, 그 부근에 대해 초기값을 설정한다. 그런 다음, 재시작 기법의 트리거(trigger) 역시 이러한 물리량 기준으로 결정된다. 예컨대, 온도나 압력이 물리적으로 비정상적인 범위를 벗어나면, 수치 해석이 잘못된 방향으로 진행했다고 보고 자동 재시작을 수행하는 식이다.

#### 라지-스케일 해석에서의 데이터 기반 초기값

최근에는 머신러닝 또는 데이터 마이닝 기법을 결합해, 비선형 문제의 초기값을 추정하려는 시도가 많아지고 있다. 다양한 파라메터나 이전 시뮬레이션 데이터가 축적되어 있을 경우, 뉴럴 네트워크나 회귀 모델로부터 “가장 근접할 것으로 예상되는 해”를 빠르게 예측하여 초기값으로 제공한다. 이 방식을 사용하면, 문제마다 일일이 물리나 수학적 구조를 파악하기 어려운 상황에서도 전처리(training)를 통해 합리적인 초기 guess를 확보할 수 있다.

이러한 데이터 기반 접근 역시, 시뮬레이션을 진행하다가 예측이 엉뚱하게 벗어났다고 감지되면 재시작을 수행한다. 곧바로 다른 예측 모델(예: 서로 다른 파라메터 범위를 학습한 네트워크)로 초기값을 다시 생성하거나, 전통적 브래킷팅 방식이나 간단한 선형화 방식으로 초깃값을 다시 잡는 식이다. 따라서 재시작과 초기값 선택의 결합이 더욱 유연해지고 고차원/복잡 문제에서도 적용성을 확대한다.

#### 이론적 수렴 분석

재시작 기법과 초기값 선택에 대한 다양한 실무적·계산적 측면을 살펴보았지만, 이론적으로도 몇 가지 중요한 논점이 있다. 먼저, 재시작(Restart)이 추가되거나 초기값을 바꿔서 적용되는 비선형 반복법이 수렴한다는 것 자체를 보장하기 위해서는, 전체 알고리즘을 ‘하나의’ 압축 사상(contraction mapping)으로 다룰 수 있는지 여부가 관건이 된다. 고전적인 바나흐(Banach) 고정점 정리나, 혹은 국소적 뉴턴 수렴 정리를 그대로 적용하기가 어려워질 수 있는데, 그 이유는 매 스텝에서 함수나 야코비의 근사만이 아니라, 알고리즘의 진행 상태(예: 근사 행렬, 신뢰 반경 등)도 함께 변하기 때문이다.

정리 차원에서는 ‘재시작 포함 반복’을 $T(\mathbf{x};\theta)$와 같은 파라메터화된 사상으로 보고, $\theta$가 일정하게 고정되어 있지 않지만, 유한번의 변경 후에도 결국 어떤 범위 안에서 유사 압축 사상을 유지한다면 전체 반복이 수렴할 가능성을 보장할 수 있다. 예컨대, 뉴턴-크릴로프 방법에서 내부 GMRES가 충분히 작게 잔차를 만들어 내면 외부 반복이 국소 수렴하게 되고, 재시작은 그 기저공간을 소멸시키지만 근방에서의 수렴 특성(야코비의 스펙트럼)은 크게 바뀌지 않는다면 다시 비슷한 수렴 속도를 획득할 수 있다.

뉴턴 방법 자체에 대해서는, 고전적인 $\alpha$-근방 정리(혹은 오더 2 국소 수렴 정리)가 존재한다. 만약 처음 잡은 초기값이 해의 충분히 작은 근방에 있다면, 뉴턴 갱신이 2차 수렴을 보장한다. 그러나 초기값이 그 근방을 벗어났을 때 발산 가능성이 생기는데, 재시작이 이러한 발산을 완화해주는 역할을 할 수 있다. 물론, 재시작이 너무 잦으면 오히려 전형적 수렴 분석이 깨질 수 있고, “재시작을 하지 않았을 때 뉴턴이 수렴했을 구간”에서 불필요한 리셋이 자주 일어나면 전체 시간은 증가할 수 있다.

#### 안정성(Safeguard) 기법과 재시작

비선형 방정식을 풀 때, 알고리즘이 극단적인 값을 탐색하지 않도록 막아주는 안정화(safeguard) 장치가 종종 추가된다. 예를 들어, 반복 갱신에서 $\mathbf{x}*{n+1}$이 물리적으로 말이 안 되는 범위(음수가 되면 안 되는 변수, 혹은 폭발적으로 큰 값 등)로 이동하지 않도록, 라인서치나 트러스트 리전 단계에서 $\mathbf{x}*{n+1}$에 대한 제한을 둔다. 만약 이러한 제한 때문에 실제로 $\mathbf{x}\_{n+1}$를 취할 수 없다면, 더 작은 스텝이나 다른 방향을 모색하거나, 재시작을 통해 초기값을 근본적으로 다시 재조정하는 식이다.

다차원 PDE 문제에서는, 해석적으로 물리량의 upper bound나 lower bound가 존재할 때, 각 지점에서 변수값이 그 범위를 벗어나지 않도록 하는 ‘clip’ 연산이 들어가는 경우가 있다. 이때도 clip이 너무 자주 발생하면, 사실상 스텝이 제대로 반영되지 않아 수렴이 지연되거나 정체될 수 있다. 이를 진단하는 수단으로 clip 횟수나 clip 비율을 모니터링하고, 그 값이 임계치 이상이면 재시작을 수행한다.

#### Truncated Newton과 재시작

Truncated Newton 기법은 뉴턴 방법 스텝을 구하기 위해 발생하는 선형계 $\mathbf{J}(\mathbf{x}\_n)\mathbf{\Delta x} = -f(\mathbf{x}\_n)$를 정확히 풀지 않고, 내부적으로 잔차가 일정 수준 이하로 줄어들면 중단하는 방식을 사용한다. 대규모 문제에서 선형계 풀기에 드는 비용을 줄이기 위함이다. 내부 반복 중도 중단(truncation) 시, 해석적 장점과 함께 외부 뉴턴 반복 횟수가 증가할 수 있다는 단점이 존재한다.

Truncated Newton에서 재시작은, 내부 선형 솔버(예: CG, GMRES)의 기저공간 초기화와 결합하기도 하고, 외부 반복 측면에서 $\mathbf{x}\_n$이나 근사 행렬(혹은 전처리행렬)을 모두 리셋하는 형태로 나타나기도 한다. 어떤 시점에서 내부 선형 솔버가 더 이상 잔차를 충분히 줄이지 못해 정체 상태에 들어가면, 재시작을 통해 $\mathbf{x}\_n$ 근처에서 국소적이던 탐색을 좀 더 범용적인 방법으로 다시 시도해 볼 수 있다.

Truncated Newton은 이론적으로도, 내부 솔버가 매 회차마다 $\mathbf{\Delta x}\_n$을 정확히 구하지 않아도 전체 반복이 수렴하도록 보증하는 정리들이 알려져 있다. 이때 내부 잔차(혹은 오차) $\eta\_n$이 충분히 작아야 한다는 조건이 붙는데, 만약 $\eta\_n$이 특정 구간에서 너무 커서 실제 뉴턴 방향과 완전히 동떨어진 방향으로 진행된다면, “가짜 근사해”로 빠지거나 발산 가능성이 생긴다. 재시작 기법은 이러한 위험을 줄이기 위한 안전판이 되어 준다.

#### L-BFGS와 재시작

L-BFGS(Limited-memory BFGS)는 준뉴턴 방법 중에서도, 대규모 문제에서 메모리를 절약하기 위해 과거 스텝(s)과 변화(y)를 일정 개수만 저장하고, 적은 수의 벡터 연산으로 야코비 근사를 구하는 기법이다. 보이덴(Broyden)-Fletcher-Goldfarb-Shanno(BFGS) 업데이트의 변형으로, $N$차원 문제라도 ‘History size’라고 불리는 $m$개의 벡터쌍만 관리한다.

이때 mm은 작게 잡아야 메모리를 아낄 수 있지만, 너무 작으면 야코비 근사가 부정확해질 위험이 커진다. 반복이 진행되면서 (s, y) 쌍들이 누적되는 동안 문제가 잘 풀리면 괜찮지만, 어떤 이유로 정확도가 크게 저해된 (s, y)가 계속 쌓이면 야코비 근사 행렬이 심각하게 틀어질 수 있다. L-BFGS에서 재시작은 이 (s, y) 이력 자체를 완전히 비우거나, 지난 ℓ\ell단계 중 잔차 감소가 가장 좋았던 상태만 골라 남기는 등의 방식으로 구현된다. 이를 통해, 오염된 히스토리가 리셋되면 알고리즘의 수렴 궤도가 다시 정상화될 가능성이 높아진다.

#### 비선형 사후분석(Posteriori Analysis)

비선형 방정식을 푼 뒤, 실제로 구한 해가 올바른 해인지, 혹은 국소 해들 중 하나에 불과한지 판단하기 위해 사후분석(Posteriori Analysis)이 필요하다. 예를 들어, 다중 근이 존재할 때 우리가 얻은 해가 해당 문제의 ‘원하는 물리적 의미’를 갖는 해인지, 아니면 다른 해인지 구분해야 할 수도 있다. 국소 극값 문제에서는, 얻어진 해가 극소인지 극대인지, 안장점인지 가려내야 할 수도 있다.

이런 사후분석 정보는 재시작 기법에도 피드백으로 들어간다. 예컨대, 계산 결과가 실제로 필요치 않은 해(물리적으로 타당하지 않은 해, 혹은 원하는 범위를 크게 벗어난 해)였다는 것이 나중에 판명되면, 해당 지점으로부터 일정 거리 이상 떨어진 곳으로 초기값을 옮겨 재시작을 시행한다. 혹은 다중 근 문제가 의심되는 상황에서, 찾은 해의 안정도(stability)를 살펴보고, 만약 해당 해가 불안정한 해라면 그 근방을 피하여 다른 초기값에서 탐색을 시작한다.

#### 예측-수정(Predictor-Corrector) 프레임워크에서의 재시작

비선형 문제를 매개변수 $\lambda$와 결합하여 연속해 추적(continuation)하는 표준적 방법 중, 예측-수정(Predictor-Corrector) 방식이 자주 쓰인다. 먼저, 분기곡선(branch) 상의 어떤 해를 알고 있을 때, 작은 $\Delta \lambda$만큼 이동한 $\lambda + \Delta \lambda$ 부근의 해를 직선 근사나 탄젠트 근사로 ‘예측’하고(이를 predictor라 부른다), 그 예측값을 초기값으로 삼아 뉴턴 반복(또는 준뉴턴 등)을 통해 정확한 해로 ‘수정’한다(corrector).

만약 수정 과정에서 수렴이 어렵거나, 다중 근이 생기는 분기점 근방이라 뉴턴이 크게 도는 문제가 발생하면, 재시작을 적용해 더 작은 $\Delta \lambda$로 돌아가거나, 다른 방향의 접선을 따라 다시 예측값을 생성하기도 한다. 또는 예측값 생성을 좀 더 고차 적분 스킴(아담스-배쉬포스, 랑게-쿠타 등)으로 업그레이드하거나, 야코비 근사를 새롭게 초기화해서 한층 안정된 수정 단계를 시작한다. 이를 통해, 분기점 부근에서도 연속 해들을 놓치지 않고 추적할 가능성이 높아진다.

#### 실험적 튜닝(Heuristic Tuning)과 재시작

실제로 구현 시, 재시작 기법과 초기값 선택에 대한 매개변수(잦은 재시작 임계값, 라인서치 실패 한계, 잔차 감소율 한계, 신뢰반경 한계 등)가 여러 개 등장한다. 많은 경우, 이들은 문제별로 또는 범용적으로 경험적(heuristic)인 값들이 사용된다. 무작정 값을 높이거나 낮추는 것이 아니라, 여러 샘플 문제를 풀어보면서 평균 계산 시간, 발산률, 스텝 수, 잔차 등을 모니터링하고 적절한 절충점을 찾는다.

가령, 대규모 유체역학(CFD) 시뮬레이션에서 재시작 한 번이 매우 큰 비용(파일 재로딩, 병렬 통신 재설정 등)을 초래한다면, 재시작 트리거 임계값을 좀 더 보수적으로 설정해 가급적 재시작이 적게 발생하게 한다. 반면, 반도체 소자 시뮬레이션처럼 미분 방정식이 매우 강한 비선형성을 띠어, 잘못된 방향으로 조금만 가도 발산 위험이 큰 경우에는, 비교적 작은 지표 변화에도 재시작을 빠르게 수행하도록 튜닝한다.

#### 남은 이야기

비선형 방정식을 푸는 데 있어, 재시작 기법과 초기값 선택 전략은 단순히 “반복법을 돌리다 안 되면 다시 초기화”라는 수준을 넘어, 알고리즘 전체 구조와 수렴 이론, 물리적·수학적 특성, 그리고 대규모 계산 환경에서의 부담 등을 종합적으로 고려해야 한다. 여기서 제시한 내용은 여러 방식을 개략적으로 묶어 설명한 것이며, 실제로는 문제의 형태와 규모, 사용 가능한 미분 정보, 하드웨어 구조, 목표 정밀도 등에 따라 다양한 변형과 구현이 시도되고 있다.
