🔴何をビジュアル化するのか
ビジュアル化のための小さなデータセット、Gaussian Parityの16サンプルを用意した。2つのfeatureとラベルから成る。QSVC全体の流れにおいて、ビジュアル化する箇所を以下に示す。
- 入力データの正規化(スケーリング):ビジュアル化の必要は特になし。
- 入力データの次元削減:今回は2次元(2 features)なので不要。
- 入力データの表示:データサンプルを2D散布図に描く。→図2
- 入力データを量子状態に変換:ブロッホ球に量子状態を表示。→図3
- 量子カーネル行列の作成:ヒートマップとして表現。→図4
- SVC学習を行う:結果としての分類決定境界を2D表示。→図5
🔴Quantum Feature Mapの可視化
ここでは、Qiskitに装備されているZZFeatureMapによって、図2の入力データを量子状態(特徴ベクトル)に変換する。その結果を、図3の示すとおり、2つのブロッホ球に描いた。ZZFeatureMapは、図の通り、2量子ビットのEntanglementとPhase Shiftを含む一つの(4次元と見做せる)システムであるため、q0とq1の両方に量子状態を表示する。
🔴Quantum Kernel Matrixの可視化
次に、Feature Mapの結果を使って量子カーネル行列を作る。その各要素は、2つの量子状態の組合わせについて、その内積で計算された類似度(fidelity)である。この行列を、ヒートマップとして表現したものが図4である。明るいほど、類似度が高い。
古典SVCでも、これに該当する類似度を学習中に暗黙にカーネル関数で計算する。一方、量子QSVCの場合は、予め全部の類似度を計算してカーネル行列を作り、古典SVCの学習へ渡すのである。SVCの学習には、kernel='precomputed'というオプションがある。QSVCでは、入力の全ての組み合わせについて、量子回路を繰り返し実行し、量子カーネル行列を作る。
さて、この量子カーネル行列には、元のラベル情報は一切入っていない。したがって、これだけで分類を行うことはできない。この行列とラベル情報を使った学習(SVC学習)が必要である。だが、図4だけでも、2つのサンプルが同じクラスに入り易いか、または別々のクラスになり易いかを予想することはできる。
例えば、サンプル番号0と2のベクトルの類似度は図4の[A]の通りかなり低い。図3でも両者はほぼ直交している。そして、両者は異なるラベルを持っている。したがって、両者は別々のクラスに入る可能性が高いであろう。
また、サンプル番号4と8のベクトルの類似度は図4の[B]の通りかなり高い。図3でも両者の向きは近い。そして、両者は同一ラベルを持っている。したがって、両者は同じクラスに入る可能性が高いと予想できる。
🔴分類の決定境界の可視化
次に、図4の量子カーネル行列と元のラベル情報を使って、クラス分けの学習が行われる。この学習は、古典SVCの学習と同じものである。その結果としての決定境界を図5に示した。データポイント0と2の関係[A]、4と8の関係[B]は、上述の予想通りである。
🔴量子QSVCと古典SVCの決定的な違い
QSVCと古典SVCの決定的な違いは、カーネル行列を事前に計算するか否かではなく、どの空間においてベクトルの内積(類似度)を計算するかである。古典SVCにおいても、カーネル関数を用いることで入力データを高次元空間へ写像した後に分類を行う。しかし、その空間の性質や構造はQSVCとは異なる。
QSVCでは、どのような量子Feature Mapによって入力を量子状態に変換するかが重要である。QSVCの優位性が発揮されるか否かは、そのFeature Mapが古典的には実現困難な写像を実現できるか否かによる。
🔴[参考書] "QML Unlocked"(量子機械学習の扉を開く)の紹介
量子機械学習を学ぶための日本語の書籍は少ない。既刊のものは理論的側面が強く初心者にはあまり向かない。そんななか、図6に示した、Javier Mancilla Montero氏による英語の書籍は説明がとてもわかりやすい。今回の上述の事例は私のオリジナルではあるが、この書籍から大いに参考になる情報を得たので、簡単に本書の内容を紹介したい。
小型本(全228ページ)で、10章からなる。第1〜3章は、量子コンピューティングと機械学習の概説である。第4〜7章はQSVCを、また、第8〜10章はより進んだVQC(Variational Quantum Classifier)などを扱っている。
全体的に見て、QSVCの解説に重点が置かれている。数式はほとんど出てこないが、叙述は精緻であり、かなり深い。いくつかの種類のFeature Mapを使って量子カーネルを作る説明が優れている。さらに進んで、それらを組み合わせてSVC学習させること(Multi Kernel Learning)も試みている。それを、QiskitやPennyLaneなどの量子プラットフォームを用いて具体的に説明している。提供されている全てのコードは、私のローカル環境で完全に動かすことができた。
初めてChapter4に達した人は、ちょっと戸惑うかもしれない。そこでは、20 featuresの1000サンプルからなる大きなデータセットに対して、(1)MinMaxScaling、(2)主成分分析による次元削減、(3)ZZFeatureMapによる量子状態生成、(4)量子カーネル行列の生成、(5)SVC学習、の全てを一気にデモするコードを解説しているからである。しかし、心配ご無用である。続くChapter5では次元削減が、Chapter6ではFeatureMapが、Chapter7では量子カーネルを使ったSVC学習が、詳細に説明されているからである。つまり、先に全体像が示され、その後、各論が続いている。
大規模入力データの場合、Feature Mapと量子カーネル行列の作成、およびそれを用いた学習には、シミュレーションでは多くの時間を要する。本書は、プログラミングの本ではないが、その対策として、PennyLaneのライブラリとPythonのjoblibを使って、マルチコア向け並列処理コードも提供している。実際、私のM1-mac-mini(8コア)では、4倍を超える高速化が実現できた。
0 件のコメント:
コメントを投稿