Skip to main content
IBM Quantum Platform

최적화 루프

이 강의에서는 최적화 도구를 사용하여 매개변수화된 양자 상태를 반복적으로 탐색하는 방법을 배웁니다:

  • 최적화 루프 부트스트랩
  • 로컬 및 글로벌 최적화 도구 사용 시 장단점 이해하기
  • 척박한 고원 탐험과 이를 피하는 방법

높은 수준에서 최적화 도구는 검색 공간을 탐색하는 데 있어 핵심적인 역할을 합니다. 최적화 도구는 비용 함수 평가를 사용하여 가변 루프에서 다음 매개변수 집합을 선택하고 안정 상태에 도달할 때까지 이 과정을 반복합니다. 이 단계에서는 최적의 매개변수 값 집합 θ\vec\theta^* 이 반환됩니다.

불모지, 그라데이션과 그라데이션이 없는 최적화 도구, 부트스트랩 등 최적화에 있어 중요한 몇 가지 요소에 대한 다이어그램입니다.

국소 최적화기 및 전역 최적화기

각 옵티마이저 클래스를 살펴보기 전에 먼저 문제를 설정하겠습니다. 8개의 변형 매개변수가 포함된 회로부터 시작하겠습니다:

from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.circuit.library import TwoLocal
import numpy as np

theta_list = (2 * np.pi * np.random.rand(1, 8)).tolist()
observable = SparsePauliOp.from_list([("XX", 1), ("YY", -3)])

reference_circuit = QuantumCircuit(2)
reference_circuit.x(0)

variational_form = TwoLocal(
    2,
    rotation_blocks=["rz", "ry"],
    entanglement_blocks="cx",
    entanglement="linear",
    reps=1,
)
ansatz = reference_circuit.compose(variational_form)

ansatz.decompose().draw("mpl")

Output:

Output of the previous code cell
def cost_func_vqe(params, ansatz, hamiltonian, estimator):
    """Return estimate of energy from estimator

    Parameters:
        params (ndarray): Array of ansatz parameters
        ansatz (QuantumCircuit): Parameterized ansatz circuit
        hamiltonian (SparsePauliOp): Operator representation of Hamiltonian
        estimator (Estimator): Estimator primitive instance

    Returns:
        float: Energy estimate
    """
    pub = (ansatz, hamiltonian, params)
    cost = estimator.run([pub]).result()[0].data.evs
    return cost
from qiskit.primitives import StatevectorEstimator

estimator = StatevectorEstimator()

국소 최적화기

로컬 옵티마이저는 초기 지점( C(θ0)C(\vec{\theta_0}) )에서 시작하여 비용 함수를 최소화하는 지점을 검색하고 연속적인 반복에서 현재 평가 중인 영역에서 관찰한 내용을 기반으로 다른 지점으로 이동합니다. 이는 이러한 알고리즘의 수렴이 일반적으로 빠르지만 초기 지점에 따라 크게 달라질 수 있음을 의미합니다. 로컬 옵티마이저는 평가하는 지역 너머를 볼 수 없으며, 특히 지역 최소값에 취약하여 한 지역을 발견하면 수렴을 보고하고 더 유리한 평가를 받은 다른 주를 무시할 수 있습니다.

# SciPy minimizer routine
from scipy.optimize import minimize

x0 = np.ones(8)

result = minimize(
    cost_func_vqe, x0, args=(ansatz, observable, estimator), method="SLSQP"
)

result

Output:

 message: Optimization terminated successfully
 success: True
  status: 0
     fun: -3.9999999964520634
       x: [ 1.000e+00  1.000e+00 -1.571e+00 -4.556e-05 -1.207e+00
           -1.935e+00  4.079e-01 -4.079e-01]
     nit: 12
     jac: [ 0.000e+00  0.000e+00 -7.957e-04  2.543e-04  1.381e-03
            1.381e-03  5.430e-04  5.431e-04]
    nfev: 112
    njev: 12

글로벌 최적화기

글로벌 옵티마이저는 도메인의 여러 영역(즉, 비로컬)에서 비용 함수를 최소화하는 지점을 검색하여 옵티마이저가 결정한 파라미터 벡터 집합 Θi:=θi,jjJopti\Theta_i := \\{ {\vec\theta_{i,j} | j \in \mathcal{J}_\text{opt}^i} \\} 에 대해 반복적으로(즉, 반복에서 ii ) 평가합니다. 따라서 로컬 최소값에 덜 민감하고 초기화와는 어느 정도 독립적이지만 제안된 솔루션으로 수렴하는 속도가 상당히 느립니다.

부트스트래핑 최적화

부트스트랩 또는 이전 최적화를 기반으로 매개변수 θ\vec\theta 의 초기 값을 설정하면 옵티마이저가 솔루션에 더 빠르게 수렴하는 데 도움이 될 수 있습니다. 이를 초기 지점 θ0\vec\theta_0, ψ(θ0)=UV(θ0)ρ|\psi(\vec\theta_0)\rangle = U_V(\vec\theta_0)|\rho\rangle 을 초기 상태라고 합니다. 이 초기 상태는 참조 상태( ρ|\rho\rangle )와 다르며, 전자는 최적화 루프 중에 설정된 초기 파라미터에 초점을 맞추고 후자는 알려진 '참조' 솔루션을 사용하는 데 중점을 두기 때문입니다. UV(θ0)IU_V(\vec\theta_0) \equiv I (즉, ID 연산)이 일치하는 경우 일치할 수 있습니다.

로컬 옵티마이저가 최적이 아닌 로컬 최소값으로 수렴하는 경우 글로벌 최적화를 부트스트랩하고 로컬에서 수렴을 개선할 수 있습니다. 이를 위해서는 두 가지 변형 워크로드를 설정해야 하지만 로컬 옵티마이저만 사용하는 것보다 옵티마이저가 더 최적의 솔루션을 찾을 수 있습니다.


경사 기반 및 경사 자유 최적화기

경사 기반

비용 함수 C(θ)C(\vec\theta) 의 경우, 초기 지점에서 시작하여 C(θ)\vec{\nabla} C(\vec\theta) 함수의 기울기에 액세스할 수 있는 경우 함수를 최소화하는 가장 간단한 방법은 함수의 가장 가파른 하강 방향으로 매개 변수를 업데이트하는 것입니다. 즉, 파라미터를 θn+1=θnηC(θ)\vec\theta_{n+1} = \vec\theta_n - \eta \vec{\nabla} C(\vec\theta) 로 업데이트하는데, 여기서 η\eta 은 학습률이며, 하이퍼파라미터는 알고리즘을 제어하는 데 사용하는 매개변수입니다. 하이퍼라는 용어는 알고리즘이 찾으려는 매개변수(θ)와 구별됩니다. 은 업데이트의 크기를 제어하는 작고 양수입니다. 비용 함수의 국부 최소값은 세타 값의 작은 범위에서 함수의 가장 낮은 지점입니다. 반면, 글로벌 최소값은 함수의 어느 위치에서든(즉, θ의 모든 값에 대해) 가장 낮은 지점입니다. 에 수렴할 때까지 이 작업을 계속 수행합니다( C(θ)C({\vec\theta^*}) ).

이 비용 함수와 최적화 도구를 사용하여 최적의 매개 변수를 계산할 수 있습니다

# SciPy minimizer routine
from scipy.optimize import minimize

x0 = np.ones(8)

result = minimize(
    cost_func_vqe, x0, args=(ansatz, observable, estimator), method="BFGS"
)

result

Output:

  message: Optimization terminated successfully.
  success: True
   status: 0
      fun: -3.9999999999997025
        x: [ 1.000e+00  1.000e+00  1.571e+00  3.220e-07  2.009e-01
            -2.009e-01  6.342e-01 -6.342e-01]
      nit: 14
      jac: [-1.192e-07 -2.980e-08  8.345e-07  1.103e-06  5.960e-08
             0.000e+00 -5.960e-08  2.980e-08]
 hess_inv: [[ 1.000e+00  1.872e-10 ...  5.077e-05  3.847e-05]
            [ 1.872e-10  1.000e+00 ... -5.208e-05 -4.060e-05]
            ...
            [ 5.077e-05 -5.208e-05 ...  7.243e-01 -2.604e-01]
            [ 3.847e-05 -4.060e-05 ... -2.604e-01  8.179e-01]]
     nfev: 144
     njev: 16

이러한 유형의 최적화의 가장 큰 단점은 수렴 속도가 매우 느릴 수 있으며 최적의 솔루션을 얻을 수 있다는 보장이 없다는 것입니다.

f(theta)와 세타의 그래프에서 여러 개의 점은 곡선의 최소값을 찾는 그라데이션 하강 알고리즘의 다양한 상태를 나타냅니다.

경사도 없음

무경사 최적화 알고리즘은 경사 정보가 필요하지 않으므로 경사 계산이 어렵거나 비용이 많이 들거나 노이즈가 너무 많은 상황에서 유용할 수 있습니다. 또한 그라데이션 기반 방법은 로컬 최적값에 수렴하는 경향이 있는 반면, 글로벌 최적값을 찾는 데 더 강력한 경향이 있습니다. 그라데이션 없는 옵티마이저를 사용하면 막막한 정체기를 피할 수 있는 몇 가지 사례를 살펴보겠습니다. 그러나 그라데이션이 없는 방법은 특히 고차원 검색 공간의 문제에서 더 많은 계산 리소스를 필요로 합니다.

다음은 COBYLA 옵티마이저를 사용하는 예제입니다:

# SciPy minimizer routine
from scipy.optimize import minimize

x0 = np.ones(8)

result = minimize(
    cost_func_vqe, x0, args=(ansatz, observable, estimator), method="COBYLA"
)

result

Output:

 message: Optimization terminated successfully.
 success: True
  status: 1
     fun: -3.999999973369678
       x: [ 1.631e+00  1.492e+00  1.571e+00  3.142e+00  1.375e+00
           -1.767e+00  1.484e+00  1.658e+00]
    nfev: 137
   maxcv: 0.0

황량한 고원

실제로 아래 예시의 언덕과 계곡에서 볼 수 있듯이 비용 환경은 매우 복잡할 수 있습니다. 최적화 방법은 검은색 점과 선으로 표시된 것처럼 비용 환경을 탐색하여 최소값을 찾습니다. 세 가지 검색 중 두 가지 검색이 글로벌 검색이 아닌 최소한의 로컬 검색으로 끝나는 것을 볼 수 있습니다.

최고점과 최저점이 많은 복잡한 곡선형 매니폴드입니다.

사용된 최적화 방법의 유형에 관계없이 비용 환경이 비교적 평탄한 경우, 해당 방법이 적절한 검색 방향을 결정하기 어려울 수 있습니다. 이 시나리오를 매개변수화된 양자 회로의 기울기가 큐비트 수에 비해 기하급수적으로 작아지면 최적화가 어려워지고 잠재적으로 불가능해질 수 있습니다. 비용 환경이 점점 더 평평해지는(따라서 최소한의 방향을 결정하기가 더 어려워지는) 시나리오라고 합니다. 광범위한 매개변수화된 양자 회로의 경우, 어떤 합리적인 방향에 따른 기울기가 0이 아닌 고정된 정밀도가 될 확률은 큐비트 수가 증가함에 따라 기하급수적으로 감소합니다.

지리적 고원을 산의 경사면과 비교한 다이어그램으로, 경사면은 최소값을 찾는 데 도움이 되고 고원은 우리의 노력을 방해하는 이유를 설명합니다.

이 영역은 아직 활발히 연구 중이지만 최적화 성능을 개선하기 위한 몇 가지 권장 사항이 있습니다:

  • 부트스트랩을 사용하면 최적화 루프가 그라데이션이 작은 매개변수 공간에서 멈추는 것을 방지할 수 있습니다.
  • 하드웨어 효율이 높은 안사츠 실험 : 노이즈가 많은 양자 시스템을 블랙박스 오라클로 사용하기 때문에 이러한 평가의 품질이 최적화 도구의 성능에 영향을 미칠 수 있습니다. 와 같은 하드웨어 효율이 높은 안사츠를 사용하면 EfficientSU2를 사용하면 기하급수적으로 작은 그라데이션을 만들지 않을 수 있습니다.
  • 오류 억제 및 오류 완화 실험 : IBM Quantum 의 기본 요소는 optimization_level``resilience_setting 각각과에 대해 다양한 값을 실험할 수 있는 간단한 인터페이스를 제공합니다. 이를 통해 소음의 영향을 줄일 수 있으며, 최적화 과정을 더욱 효율적으로 진행할 수 있습니다.
  • 그라데이션이 없는 최적화 도구로 실험하기 : 기울기 기반 최적화 알고리즘과 달리 COBYLA 같은 최적화 도구는 매개변수를 최적화하기 위해 기울기 정보에 의존하지 않으므로 불모의 고원에 영향을 덜 받습니다.

요약

이 단원에서는 최적화 루프를 정의하는 방법을 배웠습니다:

  • 최적화 루프 부트스트랩
  • 로컬 및 글로벌 최적화 도구 사용 시 장단점 이해하기
  • 척박한 고원 탐험과 이를 피하는 방법

높은 수준의 변형 워크로드가 완성되었습니다:

이제 기준 상태를 준비하는 단일체와 가변 파라미터를 사용하여 상태를 변화시키는 두 번째 단일체를 모두 갖춘 양자 회로입니다.

다음으로 이 프레임워크를 염두에 두고 구체적인 변형 알고리즘을 살펴보겠습니다.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.