Path: blob/master/site/ja/quantum/tutorials/qcnn.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
量子畳み込みニューラルネットワーク
このチュートリアルでは、単純な量子畳み込みニューラルネットワーク(QCNN)を実装します。QCNN は、並進的に不変でもある古典的な畳み込みニューラルネットワークに提案された量子アナログです。
この例では、デバイスの量子センサまたは複雑なシミュレーションなど、量子データソースの特定のプロパティを検出する方法を実演します。量子データソースは、励起の有無にかかわらずクラスタ状態です。QCNN はこの検出を学習します(論文で使用されたデータセットは SPT フェーズ分類です)。
セットアップ
TensorFlow Quantum をインストールします。
次に、TensorFlow とモジュールの依存関係をインポートします。
1. QCNN を構築する
1.1 TensorFlow グラフで回路を組み立てる
TensorFlow Quantum(TFQ)には、グラフ内で回路を構築するために設計されたレイヤークラスがあります。たとえば tfq.layers.AddCircuit
レイヤーがあり、tf.keras.Layer
を継承しています。このレイヤーは、次の図で示すように、回路の入力バッチの前後いずれかに追加できます。
次のスニペットには、このレイヤーが使用されています。
入力テンソルを調べます。
次に、出力テンソルを調べます。
以下の例は tfq.layers.AddCircuit
を使用せずに実行できますが、TensorFlow 計算グラフに複雑な機能を埋め込む方法を理解する上で役立ちます。
1.2 問題の概要
クラスター状態を準備し、「励起」があるかどうかを検出する量子分類器をトレーニングします。クラスター状態は極めてこじれていますが、古典的コンピュータにおいては必ずしも困難ではありません。わかりやすく言えば、これは論文で使用されているデータセットよりも単純です。
この分類タスクでは、次の理由により、ディープ MERA のような QCNN アーキテクチャを実装します。
QCNN と同様に、リングのクラスター状態は並進的に不変である
クラスター状態は非常にもつれている
このアーキテクチャはエンタングルメントを軽減し、単一のキュービットを読み出すことで分類を取得する上で効果があります。
「励起」のあるクラスター状態は、cirq.rx
ゲートがすべてのキュービットに適用されたクラスター状態として定義されます。Qconv と QPool については、このチュートリアルの後の方で説明しています。
1.3 TensorFlow のビルディングブロック
TensorFlow Quantum を使ってこの問題を解決する方法として、次を実装することが挙げられます。
モデルへの入力は回路で、空の回路か励起を示す特定のキュー人における X ゲートです。
モデルの残りの量子コンポーネントは、
tfq.layers.AddCircuit
レイヤーで作成されます。たとえば
tfq.layers.PQC
レイヤーが使用されているとした場合、 を読み取って、励起のある状態には 1 のラベルと、励起のない状態には -1 のラベルと比較します。
1.4 データ
モデルを構築する前に、データを生成することができます。この場合には、クラスター状態に励起がは一斉思案す(元の論文では、より複雑なデータセットが使用されています)。励起は、cirq.rx
ゲートで表されます。十分に大きい回転は励起と見なされ、1
とラベル付けされ、十分に大きくない回転は -1
とラベル付けされ、励起ではないと見なされます。
通常の機械学習と同じように、モデルのベンチマークに使用するトレーニングとテストのセットを作成していることがわかります。次のようにすると、データポイントを素早く確認できます。
1.5 レイヤーを定義する
上記の図で示すレイヤーを TensorFlow で定義しましょう。
矩形の cirq.GridQubit
のクラスター状態回路を表示します。
1.5.2 QCNN レイヤー
Cong and Lukin の QCNN に関する論文を使用して、モデルを構成するレイヤーを定義します。これには次の前提条件があります。
Tucci の論文にある 1 キュービットと 2 キュービットのパラメータ化されたユニタリ―行列
一般的なパラメータ化された 2 キュービットプーリング演算
作成したものを確認するために、1 キュービットのユニタリー回路を出力しましょう。
次に、2 キュービットのユニタリー回路を出力します。
そして 2 キュービットのプーリング回路を出力します。
1.5.2.1 量子畳み込み
Cong と Lukin の論文にあるとおり、1 次元量子畳み込みを、ストライド 1 の隣接するすべてのキュービットペアに 2 キュービットのパラメーター化されたユニタリの適用として定義します。
(非常に水平な)回路を表示します。
1.5.2.2 量子プーリング
量子プーリングレイヤーは、上記で定義された 2 キュービットプールを使用して、 キュービットから キュービットまでをプーリングします。
プーリングコンポーネント回路を調べます。
1.6 モデルの定義
定義したレイヤーを使用して純粋な量子 CNN を構築します。8 キュービットで開始し、1 キュービットまでプールダウンしてから、 を測定します。
1.7 モデルをトレーニングする
この例を単純化するために、完全なバッチでモデルをトレーニングします。
2. ハイブリッドモデル
量子畳み込みを使用して 8 キュービットから 1 キュービットにする必要はありません。量子畳み込みの 1~2 ラウンドを実行し、結果を従来のニューラルネットワークにフィードすることも可能です。このセクションでは、量子と従来のハイブリッドモデルを説明します。
2.1 単一量子フィルタを備えたハイブリッドモデル
量子畳み込みのレイヤーを 1 つ適用し、すべてのビットの を読み取り、続いて密に接続されたニューラルネットワークを読み取ります。
2.1.1 モデルの定義
2.1.2 モデルをトレーニングする
ご覧のとおり、非常に控えめな古典的支援により、ハイブリッドモデルは通常、純粋な量子バージョンよりも速く収束します。
2.2 多重量子フィルタを備えたハイブリッド畳み込み
多重量子畳み込みと従来のニューラルネットワークを使用してそれらを組み合わせるアーキテクチャを試してみましょう。