TensorFlowQuantumデザイン

TensorFlow Quantum(TFQ)は、NISQ時代の量子機械学習の問題に対応するように設計されています。量子回路の構築などの量子コンピューティングプリミティブをTensorFlowエコシステムにもたらします。 TensorFlowで構築されたモデルと操作は、これらのプリミティブを使用して、強力な量子クラシックハイブリッドシステムを作成します。

TFQを使用すると、研究者は量子データセット、量子モデル、および古典制御パラメーターを使用してTensorFlowグラフを作成できます。これらはすべて、単一の計算グラフでテンソルとして表されます。量子測定の結果(古典的な確率的イベントにつながる)は、TensorFlowopsによって取得されます。トレーニングは標準のKerasAPIを使用して行われます。 tfq.datasetsモジュールを使用すると、研究者は新しく興味深い量子データセットを試すことができます。

Cirq

Cirqは、Googleの量子プログラミングフレームワークです。量子ビット、ゲート、回路、測定などの基本的な操作をすべて提供して、量子コンピューターまたはシミュレートされた量子コンピューターで量子回路を作成、変更、および呼び出します。 TensorFlow Quantumは、これらのCirqプリミティブを使用して、バッチ計算、モデル構築、および勾配計算のためにTensorFlowを拡張します。 TensorFlow Quantumで効果を発揮するには、Cirqで効果を発揮することをお勧めします。

TensorFlowQuantumプリミティブ

TensorFlow Quantumは、TensorFlowを量子コンピューティングハードウェアと統合するために必要なコンポーネントを実装しています。そのために、TFQは2つのデータ型プリミティブを導入します。

  • 量子回路:これは、TensorFlow内のCirq定義の量子回路( cirq.Circuit )を表します。さまざまな実数値のデータポイントのバッチと同様に、さまざまなサイズの回路のバッチを作成します。
  • パウリ和:Cirq( cirq.PauliSum )で定義されたパウリ演算子のテンソル積の線形結合を表します。回路と同様に、さまざまなサイズの演算子のバッチを作成します。

基本的な操作

tf.Tensor内の量子回路プリミティブを使用して、TensorFlow Quantumは、これらの回路を処理し、意味のある出力を生成するopsを実装します。

TensorFlowopsは最適化されたC++で記述されています。これらのopsは回路からサンプリングし、期待値を計算し、指定された回路によって生成された状態を出力します。柔軟でパフォーマンスの高いオペレーションを作成するには、いくつかの課題があります。

  1. 回路は同じサイズではありません。シミュレートされた回路の場合、静的操作( tf.matmultf.addなど)を作成してから、異なるサイズの回路を異なる番号に置き換えることはできません。これらの操作では、静的サイズのTensorFlow計算グラフでは許可されていない動的サイズを許可する必要があります。
  2. 量子データは、まったく異なる回路構造を引き起こす可能性があります。これは、TFQ操作で動的サイズをサポートするもう1つの理由です。量子データは、元の回路への変更によって表される、基礎となる量子状態への構造変化を表すことができます。新しいデータポイントは実行時にスワップインおよびスワップアウトされるため、TensorFlow計算グラフは構築後に変更できないため、これらのさまざまな構造のサポートが必要です。
  3. cirq.Circuitsは、一連の操作であるという点で計算グラフに似ています。一部には、記号/プレースホルダーが含まれている場合があります。これをTensorFlowと可能な限り互換性を持たせることが重要です。

パフォーマンス上の理由から、Eigen(多くのTensorFlowオペレーションで使用されるC ++ライブラリ)は量子回路シミュレーションにはあまり適していません。代わりに、古典を超えた量子実験で使用される回路シミュレーターは、検証者として使用され、TFQ opsの基盤として拡張されます(すべてAVX2およびSSE命令で記述されています)。物理的な量子コンピューターを使用する、同一の機能シグネチャを持つOpsが作成されました。シミュレートされた量子コンピューターと物理的な量子コンピューターの切り替えは、1行のコードを変更するのと同じくらい簡単です。これらの操作は、 circuit_execution_ops.pyにあります。

レイヤー

TensorFlow Quantumレイヤーは、 tf.keras.layers.Layerインターフェースを使用して、サンプリング、期待値、状態計算を開発者に公開します。従来の制御パラメータまたは読み出し操作用の回路層を作成すると便利です。さらに、バッチ回路、バッチ制御パラメーター値をサポートする高度な複雑さのレイヤーを作成し、バッチ読み出し操作を実行できます。例については、 tfq.layers.Sampleを参照してください。

差別化要因

多くのTensorFlow操作とは異なり、量子回路のオブザーバブルには、比較的簡単に計算できる勾配の式がありません。これは、従来のコンピューターは、量子コンピューターで実行されている回路からのサンプルしか読み取れないためです。

この問題を解決するために、 tfq.differentiatorsモジュールはいくつかの標準的な差別化手法を提供します。ユーザーは、サンプルベースの期待値計算の「実世界」設定と分析の正確な世界の両方で、勾配を計算するための独自の方法を定義することもできます。有限差分のような方法は、分析/正確な環境で最も速い(壁掛け時計の時間)ことがよくあります。遅い(壁掛け時計の時間)一方で、パラメータシフト確率論的方法のようなより実用的な方法がより効果的であることがよくあります。 tfq.differentiators.Differentiatorはインスタンス化され、 generate_differentiable_opを使用して既存の操作にアタッチされるか、 tfq.layers.Expectationまたはtfq.layers.SampledExpectationのコンストラクターに渡されます。カスタム微分器を実装するには、 tfq.differentiators.Differentiatorクラスから継承します。サンプリングまたは状態ベクトル計算の勾配演算を定義するには、 tf.custom_gradientを使用します。

データセット

量子コンピューティングの分野が成長するにつれて、より多くの量子データとモデルの組み合わせが発生し、構造化された比較がより困難になります。 tfq.datasetsモジュールは、量子機械学習タスクのデータソースとして使用されます。モデルとパフォーマンスの構造化された比較を保証します。

大規模なコミュニティの貢献により、 tfq.datasetsモジュールが成長し、より透明で再現性のある研究が可能になることが期待されています。量子制御、フェルミ粒子シミュレーション、相転移に近い分類、量子センシングなどの慎重にキュレートされた問題はすべて、 tfq.datasetsに追加するための優れた候補です。新しいデータセットを提案するには、 GitHubの問題を開きます。