量子機械学習
何らかの意味で量子計算を取り入れた機械学習を 量子機械学習 といいます。
一口に量子機械学習といっても「量子計算をどこに取り入れたか」で様々あります。
- 古典機械学習において、計算が重い部分を量子アルゴリズムで高速計算する (計算結果は古典と同じ)
- 古典機械学習において、カーネルを、量子状態という高次の空間を用いて定義する(計算結果は古典と異なるが、高速性は不明)
- ブラックボックスモデルをニューラルネットワークからパラメータ付き量子回路へ変更して機械学習を行う(計算結果は古典と異なるが、高速性は不明)
- ブラックボックスであるニューラルネットワークを2つ用意して、固定の量子回路を挟み込み、ニューラルネットワーク部分だけ学習させる(計算結果は古典と異なるが、高速性は不明)
などなど。
量子機械学習は古典機械学習と量子計算の両方を使うので、プログラミングが結構大変です。
ライブラリが使いたいですよね。
そんなあなたにPennyLane!
PennyLaneとは?
PennyLaneは、光量子コンピューターの大家であるXANADU社が開発しているオープンソースのpython SDKです。
古典機械学習ユーザーでも使えるように、Tensor flow およびその抽象化であるKerasをベースにしています。
PennyLaneは連続量量子計算(光量子)でも離散量量子計算(超電導やイオントラップ)でも扱えますし、
実行させるバックエンドとしてもIBMQやIonQなど一通り指定できるようです。
すごいですね。
連続量のほうはStrawberry field, 離散量のほうはCirqが裏で動いているぽいです。
チュートリアルは、日本語版はないですが、アプリケーション毎に最先端のものが公開されています。
(https://pennylane.ai)
PennyLaneでの量子機械学習
ニューラルネットワーク部分だけ学習させるタイプのデモがあります。
https://pennylane.ai/qml/demos/tutorial_qnn_module_tf.html
ここでは分類問題ですが、改造すれば色々出来ると思います。
ちなみに量子回路学習とは違って、全量子ビットを測定し、それを後段の古典NNで処理して値を1つ取り出す形になっていますね。
量子回路学習的なやつ(ブラックボックスモデルとして量子回路を使う)は、以下のようです。
https://pennylane.ai/qml/demos/quantum_neural_net.html
連続量量子の変分回路で書かれてますが、たぶん離散量の量子に書き換えるのはそれほど大変ではないです。
PennyLaneのすごいところとして、まだqiskitも対応していない「量子勾配による勾配降下」が既に入っています。
勾配計算の方法も色々あるようです。
- parameter shift rule に基づくもの。パラメータの数値微分に似た方法。
- back propagation に類似の方法を使うもの。
parameter shift ruleのほうは、コスト関数の計算をパラメータ数程度繰り返す必要があることがネックです。
back propagation類似のほうは、コスト関数の計算は1度だけでよいですが、”中間状態を測定”する必要があるので、実機では使えません。
(中間状態を測定すると量子状態は破壊されて、計算結果が変わるため)
PennyLaneの難点?
- そもそも量子計算が最低限わかってないと無理。(基礎があまり説明ない)
- 連続量量子と離散量量子がデモによって混ざっていて、もどかしい。
- 全部英語。
- 日本では、マニアック。(そもそも"PennyLane"タグでのQiita記事は、本記事が初めてである)
まぁ、qiskitのtutorialが読めるレベルであれば、全く問題なく使えます。
まとめ
量子機械学習がやりたいKerasユーザーはPennyLaneがいいかも。
(Tensor flow Quantum でも良いと思うけど)