TensorFlow Quantum 0.2.0 概要 / 量子機械学習コンセプト / 設計 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/12/2020 (0.2.0)
* 本ページは、TensorFlow Quantum の以下のページを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
概要
TensorFlow Quantum (TFQ) は 量子機械学習 のための Python フレームワークです。アプリケーション・フレームワークとして、TFQ は量子アルゴリズム研究者と ML 応用研究者に総て TensorFlow の中から、Google の量子計算フレームワークを活用することを可能にします。
TensorFlow Quantum は量子データとハイブリッド量子古典的モデルを構築することに焦点を当てています。それは量子アルゴリズムと TensorFlow を伴い Cirq で設計されたロジックを交互配置するためのツールを提供します。TensorFlow Quantum を効果的に利用するためには量子計算の基本的な理解が必要とされます。
デザイン
TensorFlow Quantum は TensorFlow を量子計算ハードウェアと統合するために必要なコンポーネントを実装しています。その目的で、TensorFlow Quantum は 2 つのデータ型プリミティブを導入します :
- 量子回路 — これは TensorFlow 内での Cirq-定義の量子回路を表します。異なる実数値データポイントのバッチに類似して、様々なサイズの回路のバッチを作成します。
- Pauli sum — Cirq で定義された Pauli 演算子の tensor 積の線形結合を表します。回路のように、様々なサイズの演算子のバッチを作成します。
量子回路を表すためにこれらのプリミティブを使用し、TensorFlow Quantum は次の演算を提供します :
- 回路のバッチの出力分布からのサンプリング。
- 回路のバッチ上の Pauli sum のバッチの期待値を計算します。TFQ は逆伝播互換な勾配計算を実装しています。
- 回路と状態のバッチをシミュレートします。量子回路を通して総ての量子状態振幅を直接調べることが現実世界で大規模には役立たない一方で、状態シミュレーションは研究者が量子回路が状態を近い正確なレベルの精度でどのようにマップするかを理解する助けることができます。
量子機械学習コンセプト
Google の 量子超越性実験 は実演するために 53 noisy 量子ビットを使用し、それは既存のアルゴリズムを使用して最も巨大な古典的コンピュータ上で 10,000 年かかるであろう計算を量子コンピュータ上で 200 秒で遂行できました。これは NISQ ( ノイズあり中規模量子 ) 計算時代の始まりを記録しました。今後数年間で、数 10 〜 数 100 の noisy 量子ビットを持つ量子デバイスが現実になることが期待されます。
量子計算
量子計算は古典的コンピュータでは届かないような問題を計算するために量子力学の特性に頼ります。量子コンピュータは量子ビットを使用します。量子ビットはコンピュータの通常のビットのようなものですが、重ね合わせに置かれたり他のもう一つとエンタングルメントを共有する追加の能力を伴います。
古典的コンピュータは決定論的な古典的演算を遂行するか、サンプリング法を使用して確率的プロセスをエミュレートできます。重ね合わせとエンタングルメントを利用することにより、量子コンピュータは古典的コンピュータでは巨大規模でエミュレートすることが困難な量子演算を遂行できます。NISQ 量子計算を活用するためのアイデアは最適化、量子シミュレーション、暗号と機械学習を含みます。
量子機械学習
量子機械学習 (QML) は 2 つのコンセプト上で構築されています : 量子データとハイブリッド量子古典的モデルです。
量子データ
量子データは自然なあるいは人工の量子系で発生する任意のデータソースです。これは量子超越性の Google の実演のための Sycamore プロセッサ から集められたサンプルのような、量子コンピュータにより生成されるデータであり得ます。量子データは重ね合わせとエンタングルメントを示し、これは古典的計算リソースの指数関数的総量を必要とする可能性のある同時確率分布につながります。量子超越性実験は 2^53 Hilbert 空間の非常に複雑な同時確率分布からのサンプリングが可能であることを示しました。
NISQ プロセッサにより生成された量子データは測定が発生する直前には noisy で典型的には entangled です。ヒューリスティックな機械学習テクニックは noisy entangled データから有用な古典的データの抽出を最大化するモデルを作成できます。TensorFlow Quantum (TFQ) ライブラリはもつれを解き量子データの相関性を一般化するモデルを開発するためのプリミティブを提供します — 既存の量子アルゴリズムを改良したり新しい量子アルゴリズムを発見するための機会を広げます。
以下は量子デバイス上で生成されるかシミュレート可能な量子データの例です :
- 化学的なシミュレーション — 物質科学、計算化学、計算生物と創薬 (新薬発見) への潜在的な応用を持つ化学構造とダイナミクスについての情報を抽出する。
- 量子物質 (= matter) シミュレーション — 高温超伝導や多体量子効果を示す他のエキゾチックな物質状態をモデル化して設計する。
- 量子制御 — ハイブリッド量子古典的モデルが最適な open や closed-ループ制御、キャリブレーションそして誤り軽減を遂行するために変分的に訓練できます。これは量子デバイスと量子プロセッサのためのエラー検出と訂正ストラテジーを含みます。
- 量子通信ネットワーク — 非直交量子状態の中で識別するために機械学習を使用します、これは構造化量子 repeater、量子レシーバーそして purification ユニットの設計と構築への応用を伴います。
- 量子計測 — 量子センシングと量子イメージングのような量子拡張高精度測定は小さいスケールの量子デバイスである probe 上で本質的に行なわれ、そして変分量子モデルにより設計あるいは改良できるでしょう。
ハイブリッド量子古典的モデル
量子モデルは量子力学的起源を持つデータを表して一般化することができます。当面の量子プロセッサが依然として非常に小さくて noisy ですので、量子モデルは量子プロセッサを単独で使用しても量子データを一般化できません。NISQ プロセッサは効果的になるためには古典的なコプロセッサと共同して動作しなければなりません。TensorFlow は既に CPU, GPU と TPU に渡る異種計算をサポートしていますので、それはハイブリッド量子古典的アルゴリズムによる実験をするベースプラットフォームとして使用されます。
量子コンピュータ上で最善に実行されるパラメータ化された量子計算モデルを記述するために量子ニューラルネット (QNN) が使用されます。この用語はパラメータ化された量子回路 (PQC) としばしば置き換えられます。
研究
NISQ-時代の間、古典的アルゴリズムに渡る既知のスピードアップを伴う量子アルゴリズム — Shor の因数分解アルゴリズム や Grover の探索アルゴリズム のような — は意味のあるスケールではまだ可能ではありません。
TensorFlow Quantum のゴールは以下への特定の関心とともに、NISQ 時代のためのアルゴリズムを発見するに役立つことです :
- NISQ アルゴリズムを拡張するために古典的機械学習を使用します。期待は古典的機械学習からのテクニックが量子計算の私達の理解を強化できることです。古典的リカレント・ニューラルネットワークを通した量子ニューラルネットワークのためのメタ学習 では、リカレント・ニューラルネットワーク (RNN) は QAOA と VQE のようなアルゴリズムのための制御パラメータの最適化は単純ないつでも使える optimizer よりも効率的であることを見出すために使用されます。そして 量子制御のための機械学習 はエラーを軽減して高い品質の量子ゲートを生成することを助けるために強化学習を使用します。
- 量子回路で量子データをモデル化する。データソースの正確な記述を持つのであれば量子データを古典的にモデル化することは可能です — しかし時にこれは不可能です。この問題を解くために、量子コンピュータ自身の上でモデル化を試みて重要な統計情報を測定/観測することができます。量子畳込みニューラルネットワーク は異なる物質のトポロジカル層を検出するために畳込みニューラルネットワーク (CNN) に類似した構造で設計された量子回路を示します。量子コンピュータはデータとモデルを保持します。古典的プロセッサはモデル出力からの測定サンプルだけを見て、決してデータ自身ではありません。noisy 量子コンピュータ上の robust なエンタングルメント繰り込み では、著者は DMERA モデルを使用して量子多体系についての情報を圧縮することを学習しています。
量子機械学習における他の関心のある領域は以下を含みます :
- 量子コンピュータ上で純粋に古典的なデータをモデリング。
- 量子-inspired 古典アルゴリズム。
- 量子分類器で教師あり学習。
- 量子ニューラルネットワークのための adaptive layer-wise 学習。
- 量子ダイナミクス学習。
- 混合量子状態の生成モデリング。
- 当面のプロセッサ上の量子ニューラルネットワークで分類。
TensorFlow Quantum 設計
TensorFlow Quantum (TFQ) は NISQ-時代の量子機械学習の問題のために設計されています。それは — 量子回路を構築するような —量子計算プリミティブを TensorFlow に持ち込みます。TensorFlow で構築されたモデルと演算はパワフルな量子古典的ハイブリッドシステムを作成するためにこれらのプリミティブを使用します。
TFQ を利用すれば、量子データセット、量子モデルそして古典的制御パラメータを使用して研究者は TensorFlow グラフを構築できます。これらは単一の計算グラフ内の tensor として総て表わされます。量子測定の結果 — 古典的な確率的イベントに繋がります — は TensorFlow ops により得られます。訓練は標準的な Keras API で行なわれます。tfq.datasets モジュールは研究者に新しいそして興味深い量子データセットで実験することを可能にします。
Cirq
Cirq は Google からの量子プログラミングフレームワークです。それは量子コンピュータ、あるいはシミュレートされた量子コンピュータ上で量子回路を作成し、変更して起動するための — 量子ビット、ゲート、回路と測定 — のような 基本的な演算の総てを提供します。TensorFlow Quantum は TensorFlow をバッチ計算、モデル構築と勾配計算について拡張するためにこれらの Cirq プリミティブを使用します。TensorFlow Quantum で効果的であるために、Cirq で効果的であることは良い考えです。
TensorFlow Quantum プリミティブ
TensorFlow Quantum は TensorFlow を量子計算ハードウェアと統合するために必要なコンポーネントを実装しています。その目的で、TFQ は 2 つのデータ型プリミティブを導入します :
- 量子回路: これは TensorFlow 内の Cirq-定義の量子回路 (cirq.Circuit) を表します。異なる実数値データポイントのバッチに類似した、様々なサイズの回路のバッチを作成します。
- Pauli sum: Cirq (cirq.PauliSum) で定義された Pauli 演算子の tensor 積の線型結合を表します。回路のように、様々なサイズの演算子のバッチを作成します。
基礎的な ops
tf.Tensor 内で量子回路プリミティブを使用して、TensorFlow Quantum はこれらの回路を処理して意味のある出力を生成する ops を実装します。
TensorFlow ops は最適化された C++ で書かれています。これらの ops は回路からサンプリングし、期待値を計算し、そして与えられた回路から生成された状態を出力します。柔軟で高パフォーマンスな ops を書くことは幾つかの課題を持ちます :
- 回路は同じサイズではありません。シミュレートされた回路について、(tf.matmul と tf.add のような) 静的演算を作成することはできません、そして異なるサイズの回路の代わりに異なる数を用います。これらの ops は静的なサイズの TensorFlow 計算グラフが許さない動的サイズを可能にしなければなりません。
- 量子データは異なる回路構造を全体として誘導することができます。これは TFQ ops で動的サイズをサポートするもうひつとの理由です。量子データは、元の回路への変更により表わされる基礎的な量子状態への構造的な変更を表すことができます。新しいデータポイントは実行時にスワップインとアウトされますので、TensorFlow 計算グラフはそれが構築された後には変更できませんので、これらの変化する構造のためのサポートが必要とされます。
- cirq.Circuits はそれらが演算のシリーズであり — そして幾つかはシンボル/プレースホルダーを含むかもしれないという点で計算グラフに類似しています。これをできる限り TensorFlow と互換にすることは重要です。
パフォーマンスの理由で、Eigen (多くの TensorFlow ops で使用される C++ ライブラリ) は量子回路シミュレーションのためには上手く適しません。代わりに、量子超越性実験 で使用された回路シミュレータは検証器 (= verifier) として使用されそして (AVX2 と SSE 命令で総て書かれた) TFQ ops の基礎として拡張されました。同一の関数シグネチャーを持つ ops が作成されました、これらは物理的な量子コンピュータを使用します。シミュレートされたものと物理的量子コンピュータの間で切り替えることはコードの単一行を変更するほどに容易です。これらの ops は circuit_execution_ops.py にあります。
層
TensorFlow Quantum 層は tf.keras.layers.Layer インターフェイスを使用して開発者にサンプリング、期待 (値) と状態計算を公開します。古典的な制御パラメータは読み出し演算のために回路層を作成することは便利です。更に、バッチ回路、バッチ制御パラメータ値をサポートする高度な複雑さを持つ層を作成してバッチ読み出し演算を遂行することができます。例として tfq.layers.Sample を見てください。
微分器 (= Differentiators)
多くの TensorFlow 演算とは違い、量子回路の可観測量は比較的計算が容易な勾配のための式を持ちません。これは古典的コンピュータが量子コンピュータ上で実行される回路からのサンプリングだけを読むことができるためです。この問題を解くため、tfq.differentiators モジュールは幾つかの標準的な微分テクニックを提供します。ユーザはまた — サンプリングベースの期待値計算の「現実世界」設定と解析的な正確な世界の両者で — 勾配を計算するための彼ら自身のメソッドを定義することもできます。有限差分のようなメソッドがしばしば解析的/正確な環境で最速 (実測時間) です。より遅い (実測時間) 一方で、パラメータシフト や 確率的 (= stochastic) 手法 のようなより実践的なメソッドはしばしばより効果的です。tfq.differentiators.Differentiator はインスタンス化されて generate_differentiable_op で既存の op に装着されるか、tfq.layers.Expectation や tfq.layers.SampledExpectation のコンストラクタに渡されます。カスタム微分器を実装するには、tfq.differentiators.Differentiator クラスを継承します。サンプリングや状態ベクトル計算のための勾配演算を定義するには、tf.custom_gradient を使用します。
データセット
量子計算の分野が成長するにつれて、より多くの量子データとモデルの結合が発生し、構造的な比較を困難にします。tfq.datasets モジュールは量子機械学習タスクのためのデータソースとして使用されます。それはモデルとパフォーマンスのために構造化比較を確実なものにします。
巨大なコミュニティの貢献により、tfq.datasets モジュールがより透過で再現可能な研究を可能にするために成長することが望まれます。注意深く厳選された: 量子制御、フェルミオン・シミュレーション、相転移近傍の分類、量子センシング等の問題は総て tfq.datasets への追加のための素晴らしい候補です。To propose a new dataset open a GitHub issue.
以上