メインコンテンツへスキップ

古典的な最適化手法

最適化手法とは?

Victoria Lipinska が、古典的な最適化手法とそれが VQE の一部としてどのように機能するかを説明します。

いくつかの最適化手法の例と、ノイズがある場合とない場合それぞれにおけるパフォーマンスについて学びます。

参考文献

以下の論文は上記の動画で参照されています。

古典的な最適化手法のコーディング

前のレッスンでは、量子コンピュータで使用するのに適したハミルトニアンの作り方と、変分回路の作り方を学びました。また、変分回路(アンザッツ)には変化させるパラメータが含まれており、コスト関数またはエネルギーが最も低くなるパラメータの選択が最適であることも学びました。つまり、問題は最適なパラメータの組み合わせをパラメータ空間の中から探し出すことに帰着します。古典的な最適化手法については、複数のソースから優れた最適化アルゴリズムが提供されているため、その多くはすでに私たちのために実装されています。

このレッスンで学ぶ内容は以下の通りです:

  • 古典的な最適化手法が 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)

Some example code is shown below. We restrict our discussion here to the last two arguments.

    cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})

SciPy では利用可能なすべての minimize メソッドに関するドキュメントが提供されています。以下は注目すべきいくつかの例で、いずれも 1 つ以上の変数のスカラー関数を最小化するメソッドです:

  • cobyla:線形近似による最適化(COBYLA)アルゴリズム。
  • slsqp:逐次最小二乗法プログラミング(SLSQP)。
  • nelder-mead:ネルダー・ミード法アルゴリズム。

利用可能な古典的な最適化アルゴリズムのほとんどは局所最小化器であり、さまざまな方法で局所最小値を探索しますが、大域的な最小値を見つけることは保証されていません。一部の古典的な最適化手法は勾配を明示的に推定し、それを用いて局所最小値を探します。その他の手法は、目的関数を連続した線形または二次近似で置き換えて最小値を探す場合があります。

これらのアルゴリズムにはいくつかの共通オプションがありますが、細かな違いもあります。たとえば、すべてのアルゴリズムで上記の 'maxiter': 200 という記法を使って最大反復回数を指定できます。また、関数値または変数値に基づく別の停止基準を指定するオプションもありますが、アルゴリズムによって基準の内容が若干異なります。たとえば COBYLA では、「信頼領域」の下限となる許容誤差(例:'tol': 0.0001)を指定できます。一方、SLSQP では、停止基準に使用される関数の精度の目標値('ftol')を指定できます。ネルダー・ミード法では、連続するパラメータ(xx)の推測値の差に対する許容誤差(xatol)や、コスト関数 f(x)f(x) の連続する値の差に対する許容誤差(fatol)、またはその両方を指定できます。

利用可能なすべてのアルゴリズムとオプションの完全なリストについては、SciPy の minimize ドキュメントをご参照ください。