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

テンソルネットワークを用いた近似量子コンパイル(AQC-Tensor)

テンソルネットワークを用いた近似量子コンパイル(AQC-Tensor)Qiskit アドオンは、回路の初期部分をほぼ同等の近似表現にコンパイルしますが、層数を大幅に削減することができます。これは [1] で説明されている手法を用いたテンソルネットワークによって実現されます。主な用途は時間発展をシミュレートする回路ですが、以下の条件を満たす任意のクラスの回路にも適用可能です:

  1. テンソルネットワークシミュレーションによって達成できる「ターゲット状態」として知られる優れた中間状態、および、
  2. ターゲット状態への近似を準備する良い回路であるが、ターゲットハードウェアデバイスにコンパイルされたときにより少ない層数で済むもの。

この手法は、ユーザーが最終的に QPU 上で実行したいより大きなターゲット回路に基づいて、アンサッツ回路を生成します。これは、まずターゲット回路の一部をテンソルネットワーク法でシミュレートし、アンサッツ回路が近似する中間状態の正確な記述を取得することで実現されます。この中間状態が見つかると、アンサッツ回路のパラメーターを最適化するためのコスト関数として使用されます。最適化が完了すると、ターゲット回路の残りの部分がアンサッツに追加され、量子ハードウェア上で実行されます。

AQC-Tensor パッケージのインストール

AQC-Tensor パッケージをインストールするには、PyPI からのインストールとソースからのビルドの 2 つの方法があります。パッケージの依存関係を分離するために、仮想環境にインストールすることをお勧めします。

PyPI からのインストール

AQC-Tensor パッケージをインストールする最も簡単な方法は PyPI を使用することです。パッケージを使用するには、少なくとも 1 つのテンソルネットワークバックエンドもインストールする必要があります。以下のコードスニペットは、アドオンとともに quimb(テンソルネットワークサポート用)および jax(自動微分用)をインストールします。ご興味のある方は、GitHub でパッケージをご確認ください。

pip install 'qiskit-addon-aqc-tensor[quimb-jax]'

ソースからのインストール

このパッケージを手動でインストールする方法についてはここをクリックしてください。

このパッケージへの貢献を希望する場合、または手動でインストールする場合は、まずリポジトリをクローンしてください:

git clone git clone git@github.com:Qiskit/qiskit-addon-aqc-tensor.git

そして pip を使用してパッケージをインストールします。パッケージリポジトリにあるチュートリアルを実行する予定がある場合は、ノートブックの依存関係もインストールしてください。リポジトリで開発する予定がある場合は、dev 依存関係もインストールすることをお勧めします。

pip install tox jupyterlab -e '.[notebook-dependencies,dev]'

理論的背景

AQC-Tensor の手順は [1] で詳しく説明されています。このセクションでは、手法の概要を説明します。

近似量子コンパイル手順を示す図

一般に、AQC-Tensor は入力として 3 つのものを必要とします:

  1. テンソルネットワークの形式によるターゲット状態の記述。これはテンソルネットワークシミュレーター上で回路をシミュレートすることで生成できますが、別の方法(例えば、時間依存変分原理を用いた行列積状態上での時間発展を実行するなど)で生成することもできます。
  2. パラメーター化されたアンサッツ回路。理想的には、ターゲットハードウェア上で合理的な深さになるような、ハードウェア効率の良い接続性を持つもの。
  3. アンサッツ回路に代入する初期パラメーター。結果として得られる状態がターゲット状態の良い近似になっているもの。(これは原則として AQC には必須ではありませんが、オプティマイザーに合理的な出発点を与えるのに役立ちます。)

この手法では、アンサッツ回路が生成する状態がターゲット状態にできるだけ近くなるように、アンサッツ回路のパラメーターを反復的に最適化します。

アンサッツの生成

上記リストの (2) と (3) を生成するために、qiskit-addon-aqc パッケージは generated_ansatz_from_circuit() という関数を持っており、入力回路を受け取り、パラメーター化されたアンサッツと初期パラメーターのセットを出力します。この関数が返すパラメーターは、アンサッツに代入したときに、グローバル位相を除いて入力回路と完全に等価な状態を生成するものです。

この関数によって生成されるアンサッツは、2 量子ビットブロックごとに 9 つのパラメーターを使用し、KAK 分解に基づいています。KAK 分解は、任意の 2 量子ビットゲートを、1 量子ビット回転を除いて 3 つのパラメーターで記述します。1 量子ビット回転はさらに ZXZZXZ として分解され、それぞれ 3 つのパラメーターを持ちます。これにより、アンサッツ回路は元の回路の各 2 量子ビットブロックに 3 つのパラメーター、さらに 2 つの量子ビットそれぞれに対する出力側の 1 量子ビット回転に 3 つのパラメーター(合計 9 つのパラメーター)を含むことになります。これらのブロックを追加した後、回路の先頭で各アクティブな量子ビットに 1 量子ビット回転の層を追加することでアンサッツが完成します。

テンソルネットワークシミュレーション

所望のターゲット状態の記述を取得するために、このアドオンは行列積状態(テンソルネットワークの最もシンプルな形式)を使用し、以下のテンソルネットワークシミュレーターをサポートしています:

  • Qiskit Aer に搭載されている MPS シミュレーター
  • Quimb の eager CircuitMPS シミュレーター
  • Quimb の lazy Circuit シミュレーター

テンソルネットワークの最も重要なパラメーターは最大ボンド次元 χ\chi です。このパラメーターは、テンソルネットワークで表現できるエンタングルメントの量を制限し、したがって与えられた回路をどの深さまで忠実にシミュレートできるかを制限します。

LL 量子ビットの回路が与えられた場合、行列積状態が回路を任意の深さまで正確にシミュレートするためには、最大ボンド次元 χexact=2L/2\chi_{exact} = 2^{L/2} が必要です。これは 100 量子ビット以上を対象とした一般的なユーティリティスケールの回路では実現不可能です。このため、少数の量子ビットを使ったトイプロブレムでこのアドオンを試す場合は、χ<2L/2\chi < 2^{L/2} であることを確認することが重要です。こうすることで、問題をより大きな回路にスケールアップしても、ターゲット状態が古典的にシミュレート可能なままになります。

次のステップ

推奨事項

参考文献

[1] Robertson, Niall F., et al. "Approximate Quantum Compiling for Quantum Simulation: A Tensor Network based approach" arXiv preprint arXiv:2301.08609 (2023).