고전 옵티마이저
옵티마이저란 무엇인가요?
Victoria Lipinska가 고전 옵티마이저에 대해, 그리고 고전 옵티마이저가 VQE의 일부로서 어떻게 작동하는지에 대해 설명합니다.
몇 가지 옵티마이저 예시와 잡음이 있을 때와 없을 때 각각이 어떻게 동작하는지에 대해 듣게 됩니다.
참고 문헌
위의 영상에서 참고한 논문은 다음과 같습니다.
- A Comparison of Various Classical Optimizers for a Variational Quantum Linear Solver, Pellow-Jarman, et al.
- The Variational Quantum Eigensolver: A review of methods and best practices, Tilly, et al.
- Quantum computational chemistry, McArdle, et al.
- Barren plateaus in quantum neural network training landscapes, McClean, et al.
- Connecting Ansatz Expressibility to Gradient Magnitudes and Barren Plateaus, Holmes, et al.
- Effect of barren plateaus on gradient-free optimization, Arrasmith, et al.
고전 옵티마이저 코딩하기
이전 레슨에서는 양자 컴퓨터에서 사용하기에 적합한 Hamiltonian을 만드는 방법과 변분 Circuit을 만드는 방법을 배웠습니다. 또한 변분 Circuit(또는 ansatz)에는 변화시킬 매개변수가 포함되어 있으며, 최적의 매개변수 선택이란 가능한 가장 낮은 비용 함수 혹은 에너지를 산출하는 것이라는 사실도 배웠습니다. 따라서 우리의 문제는 매개변수 공간에서 최적의 집합을 탐색하는 것으로 귀결됩니다. 고전 옵티마이저에 관한 작업은 대부분 이미 되어 있으며, 여러 출처에서 우수한 옵티마이저를 이용할 수 있습니다.
이 레슨에서는 다음 내용을 배웁니다.
- 고전 옵티마이저가 VQE 계산에 어떻게 들어맞는지
- SciPy에서 어떤 고전 옵티마이저를 사용할 수 있는지
- SciPy를 통해 아직 사용할 수 없는 옵티마이저는 무엇이며, 그동안
qiskit.algorithms를 이용해 이를 어떻게 보완할 수 있는지 - 이 옵티마이저들에서 어떤 옵션을 사용할 수 있으며, 양자 컴퓨팅에서 어떤 의의를 갖는지
SciPy는 최적화를 포함하여 과학 컴퓨팅의 여러 분야와 관련된 패키지를 갖춘 무료 오픈 소스 Python 라이브러리입니다. 특히, SciPy에는 minimize를 포함하는 최적화 패키지가 있습니다.
from scipy.optimize import minimize
This minimize function has several arguments, but the most relevant arguments for quantum chemistry are:
- The cost function (
cost_func). This is related to the Hamiltonian, but also includes some complexities, such as determining the expectation value by using Estimator, and in the case of excited state calculations, might include orthogonality conditions. - An initial state (x0) for the system, often the Hartree Fock state
- Other arguments, including arguments of the cost function itself
- The method set to the classical optimizer you select
- Options for the classical optimizer (not to be confused with Session options discussed in the next section)
몇 가지 예제 코드가 아래에 나와 있습니다. 여기서는 마지막 두 인수에 대해서만 논의를 제한하겠습니다.
cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})
SciPy는 사용 가능한 모든 최소화 메서드에 대한 문서를 제공합니다. 다음은 몇 가지 주목할 만한 예시로, 모두 하나 이상의 변수를 가진 스칼라 함수를 최소화하는 메서드입니다:
- cobyla: 선형 근사에 의한 최적화(COBYLA) 알고리즘.
- slsqp: 순차 최소 제곱 프로그래밍(SLSQP).
- nelder-mead Nelder-Mead 알고리즘.
대부분의 사용 가능한 고전 최적화 알고리즘은 지역 최소화기(local minimizer)로, 다양한 방법을 사용하여 지역 최솟값을 찾지만 전역 최솟값을 찾는다는 보장은 없습니다. 일부 고전 옵티마이저는 명시적으로 기울기를 추정하고 이를 사용하여 지역 최솟값을 찾습니다. 다른 것들은 목적 함수의 연속적인 선형 또는 2차 근사를 사용하여 최솟값을 찾을 수도 있습니다.
이러한 알고리즘들은 몇 가지 공통 옵션을 가지고 있지만 미묘한 차이가 있습니다. 예를 들어, 모두 위의 'maxiter': 200 표기법을 사용하여 최대 반복 횟수를 지정하는 옵션이 있습니다. 모두 함수 값 또는 변수 값을 기반으로 한 다른 종료 기준을 지정하는 옵션이 있지만, 이러한 기준은 알고리즘마다 약간 다릅니다. 예를 들어 COBYLA는 "신뢰 영역"의 하한인 허용 오차(예: 'tol': 0.0001)를 지정할 수 있게 해줍니다. 이에 비해 SLSQP는 종료 기준에 사용되는 함수의 정밀도에 대한 목표(‘ftol’)를 지정할 수 있게 해줍니다. Nelder-Mead는 연속적인 매개변수() 추측 값 사이의 차이에 대한 허용 오차(xatol) 또는 연속적으로 얻어지는 비용 함수 값 사이의 차이에 대한 허용 오차(fatol)를 지정할 수 있게 해줍니다(둘 다 지정할 수도 있습니다).
사용 가능한 알고리즘과 옵션의 전체 목록은 SciPy의 minimize 문서를 방문하십시오.