Path: blob/master/site/ja/quantum/tutorials/quantum_data.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
量子データ
MNIST チュートリアルで行われた比較を基に用意されたこのチュートリアルでは、様々なデータセットがパフォーマンスの比較にどのように影響するかを示す Huang et al. の最近の研究を説明します。この研究において、著者は古典的な機械学習モデルが量子モデルと同様に(またはそれ以上に)学習できる仕組みとそのタイミングについて理解しようとしています。この研究ではまた、慎重に作成されたデータセットによる、古典的機械学習モデルと量子機械学習モデルの経験的なパフォーマンスの分離についても示しています。ここでは、以下のことを行います。
次元を縮小した Fashion-MNIST データセットを準備します。
量子回路を使用して、データセットのラベルを付け直し、投影量子カーネル(PQK: Projected Quantum Kernel)の特徴量を計算します。
ラベルの付け直しを行ったデータセットで古典ニューラルネットワークをトレーニングし、そのパフォーマンスを PQK 特徴量にアクセスできるモデルのパフォーマンスと比較します。
MNIST モデルをビルドする
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
1. データの準備
まず、量子コンピューターで実行するための fashion-MNIST データセットの準備から始めます。
1.1 fashion-MNIST をダウンロードする
初めに、従来の fashion-mnist データセットを取得します。これは、tf.keras.datasets
モジュールを使って行います。
T シャツ/トップスとドレスのみを保持して他のクラスを取り除くように、データセットを絞り込みます。同時に、ラベル y
をブール型に変換し、True を 0、False を 3 にします。
1.2 画像を縮小する
MNIST の例と同様に、現在の量子コンピューターの境界内に収まるように、これらの画像を縮小する必要があります。ただし、今回は、tf.image.resize
演算ではなく PCA 変換を使用して寸法を縮小します。
最後に、データセットのサイズを、トレーニングデータポイントを 1000、テストデータポイントを 200 となるように縮小します。
2. ラベルを付け直して、PQK 特徴量を計算する
これから、量子コンポーネントを組み込み、上記で作成した切り捨てられた fashion-MNIST データセットのラベルを付け直して、STILT を適用した量子データセットを準備します。量子メソッドと古典メソッドの分離を最大限にするために、先に PQK 特徴量を準備してから、出力の値に基づいてラベルの付け直しを行います。
2.1 量子エンコーディングと PQK 特徴量
x_train
と y_train
、x_test
と y_test
に基づいて、以下のすべての量子ビットで 1-RDM となるように定義された新しい特徴量セットを作成します。
ここで、 は、単一量子ビットの回転の壁で、 です。
まず、単一量子ビットの回転の壁を生成できます。
これが動作するかどうかは、回路を見てすぐに確認できます。
次に、行き来するあらゆる cirq.PauliSum
オブジェクトを指数関数化できる tfq.util.exponential
を使用して、 を準備します。
この回路は、見るだけでは確認が多少困難かもしれませんが、2 つの量子ビットケースを調べて、何が起きているかを確認することは可能です。
必要なすべてのビルディングブロックが揃ったので、すべてのエンコーディング回路を組み上げましょう。
いくつかの量子ビットを選択し、データエンコーディング回路を準備します。
次に、上記のデータセット回路の 1-RDM に基づいて PQK を計算し、その結果を、[n_points, n_qubits, 3]
の形状を持つ tf.Tensor
である rdm
に格納します。エントリは rdm[i][j][k]
= となり、i
はデータポイントのインデックス、j
は量子ビットのインデックス、k
は のインデックスです。
2.2 PQK 特徴量に基づいてラベルを付け直す
x_train_pqk
and x_test_pqk
に量子で生成した特徴量を用意できたので、データセットのラベルを付け直すことにしましょう。量子パフォーマンスと古典パフォーマンスの最大限の分離を達成するには、x_train_pqk
と x_test_pqk
にあるスペクトル情報に基づいて、データセットのラベルを付け直します。
注意: 古典モデルと量子モデルの間のパフォーマンスの分離を明示的に最大化するためのデータセットの準備は、ごまかしのように感じるかもしれませんが、古典的なコンピューターにとっては難しく、量子コンピューターにとってはモデル化が容易なデータセットに対して、非常に重要な存在証明を得られます。最初にこのようなものを作成してメリットを実証できなければ、QML で量子のメリットを探る意味がありません。
これで、データセットのラベルの付け直しに必要なものがすべて揃いました!フローチャートを参照して、データセットのラベルを付け直すする際のパフォーマンスの分離を最大化する方法をよりよく理解できます。
量子モデルと古典モデルの分離を最大化するには、元のデータセットと PQK 特徴量カーネルの指標 の幾何学的な違いを、S_pqk, V_pqk
と S_original, V_original
を使って最大化するように試みます。 の値が大きいと、最初はフローチャートの右側に移動して、量子の場合の予測のメリットに向かって下がります。
注意: と の量を計算するのも、パフォーマンスの分離をさらによく理解する上で非常に役立ちます。この場合は、大きな 値を確保することで、パフォーマンスの分離を十分に確認できます。
3. モデルを比較する
データセットの準備ができたので、モデルのパフォーマンスを比較することにしましょう。2 つの小さなフィードフォワードニューラルネットワークを作成し、x_train_pqk
にある PQK 特徴量にアクセスできるようにしたときのパフォーマンスを比較します。
3.1 PQK 強化モデルを作成する
標準の tf.keras
ライブラリ機能を使用してモデルを作成し、x_train_pqk
と y_train_new
データポイントでそのモデルをトレーニングします。
3.2 古典モデルを作成する
上記のコードと同様に、STILT データセットの PQK 特徴量にアクセスできない古典モデルも作成できます。このモデルは、x_train
と y_label_new
を使ってトレーニング可能です。
3.3 パフォーマンスを比較する
2 つのモデルをトレーニングしたので、次は 2 つのモデルの検証データのパフォーマンスのギャップを素早くプロットしましょう。通常、いずれのモデルもトレーニングデータでは > 0.9 の精度を達成しますが、検証データでは、PQK 特徴量に含まれる情報のみが、モデルを目に見えないインスタンスに適切に一般化するのに十分であることが明らかになります。
成功: 公正な(ただしわざと行われた)設定で意図的に古典モデルを打ち負かす STILT 量子データセットを作成しました。他の種類の古典モデルを使用して結果を比較して見てください。次のステップでは、自分で作成しなくても、古典モデルを打ち負かせる新しい興味深いデータセットを見つけられるか試してみましょう!
4. 重要な結論
この実験と MNIST の実験から導き出せる重要な結論がいくつかあります。
古典的なデータにおいて、現在の量子モデルが古典モデルのパフォーマンスを超すことはあまりあり得ません。100 万件のデータポイントを持てる現在の古典データセットであれば、尚さら困難と言えます。
古典的なシミュレーションが困難な量子回路からデータを得たからと言って、必ずしも古典モデルにおいて、データの学習が困難になるというわけではありません。
どんなモデルアーキテクチャやトレーニングアルゴリズムを使用したとしても、量子モデルにとって学習しやすく、古典モデルにとって学習しにくいデータセット(性質上最終的に量子)は実際に存在します。