このページは Cloud Translation API によって翻訳されました。
Switch to English

TensorFlow Quantum設計

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

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

サーク

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

TensorFlow Quantumプリミティブ

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

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

基本操作

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

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

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

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

レイヤー

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

差別化要因

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

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

データセット

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

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