量子機械学習におけるライブラリ/チュートリアル開発状況まとめ [2020.0919ver]

# はじめに
社内の勉強会で量子機械学習について情報収集し3社(IBM, Google, Xanadu)のライブラリ/チュートリアル開発状況について表にまとめました。
Xanaduはカナダの量子ベンチャーで量子機械学習に特化した会社です。
使い勝手の良い表だと評価をもらえたのでQiitaにて外部公開していこうと思います。

この表に関する現状は今後どんどんにアップデートされていくと思います。
githubのリンクなどはフォルダ再構築されると失効される可能性があるのでご了承ください。
なので2020年5月時点の現状としてお読みください。

量子機械学習モデルの原案として引用してる論文は、基本的に最初にその名前でアルゴリズムが世に出た時のものを引用しており、NISQ版アルゴリズムとは対応していない場合があります。

この表に言及されてない量子機械学習モデルやライブラリ/チュートリアルなどご存知でしたらコメントいただけると幸いです。



# 量子機械学習概略表
Qiskit, Cirq, PennyLaneはそれぞれIBM, Google, Xanaduの量子コンピュータのPythonライブラリです。

|量子機械学習モデル|説明|Qiskit実装|Cirq実装|PennyLane実装|
|---|---|---|---|---|---|
|量子敵対的生成ネットワーク(QGAN) [原案: [1](https://arxiv.org/pdf/1804.09139), [2](https://arxiv.org/pdf/1804.08641.pdf), [3](https://arxiv.org/pdf/1806.00463.pdf) 実装: [4](https://arxiv.org/pdf/1904.00043.pdf), [5](https://arxiv.org/pdf/1905.02666.pdf)]|擬似データを生成(教師なし学習)|  ◯ [[ref](https://github.com/Qiskit/qiskit-tutorials/blob/master/legacy_tutorials/aqua/machine_learning/qgans_for_loading_random_distributions.ipynb)]|◯ [[ref](https://pennylane.ai/qml/demos/tutorial_QGAN.html)<sup>*1</sup>]|◯ [[ref](https://pennylane.ai/qml/demos/tutorial_QGAN.html)<sup>*1</sup>]|
|量子回路学習 [原案 [1](https://arxiv.org/pdf/1803.00745.pdf), [2](https://arxiv.org/pdf/1802.06002.pdf), [3](https://arxiv.org/pdf/1612.01045.pdf) 実装: [4](https://arxiv.org/pdf/1804.11326.pdf), [5](https://arxiv.org/pdf/1802.06002.pdf), [6](https://arxiv.org/pdf/1804.00633.pdf)]  |データを分類(教師あり学習)  |◯ [[ref](https://github.com/Qiskit/qiskit-community-tutorials/blob/master/machine_learning/vqc.ipynb)]|◯ [[ref](https://www.tensorflow.org/quantum/concepts)]|◯ [[ref](https://pennylane.ai/qml/demos/tutorial_variational_classifier.html)]|
|量子サポートベクターマシン(QSVM) [原案: [1](https://arxiv.org/pdf/1307.0471.pdf) 実装: [2](https://arxiv.org/pdf/1804.11326.pdf)]  |データを分類(教師あり学習)|◯ [ref [1](https://github.com/Qiskit/qiskit-community-tutorials/blob/master/machine_learning/qsvm.ipynb), [2](https://github.com/qiskit-community/qiskit-community-tutorials/blob/master/machine_learning/custom_feature_map.ipynb), [3](https://github.com/Qiskit-Challenge-India/2020/blob/master/Day%206%2C%207%2C8/VQC_notebook.ipynb)]|Not Found|Not Found|
|量子ニューラルネットワーク [原案 [1](https://arxiv.org/pdf/1802.06002.pdf), [2](https://arxiv.org/pdf/1805.08654.pdf), [3](https://arxiv.org/pdf/1408.7005.pdf)  実装: [4](https://arxiv.org/pdf/2003.02989.pdf), [5](https://arxiv.org/pdf/1802.06002.pdf)]|データを分類(教師あり学習)|◯ [[ref](https://qiskit.org/textbook/ch-machine-learning/machine-learning-qiskit-pytorch.html)]|◯ [[ref](https://www.tensorflow.org/quantum/tutorials/hello_many_worlds)]|◯ [[ref](https://pennylane.ai/qml/demos/quantum_neural_net.html)]|
|量子畳み込みニューラルネットワーク [実装: [1](https://arxiv.org/pdf/1810.03787.pdf), [2](https://arxiv.org/pdf/1904.04767.pdf)]|画像データを分類(教師あり学習)|Not Found|◯ [[ref](https://www.tensorflow.org/quantum/tutorials/qcnn)]|◯ [[ref](https://pennylane.ai/qml/demos/tutorial_quanvolution.html)]|
|量子k-means [原案: [1](https://arxiv.org/pdf/1307.0411.pdf) 実装: [2](https://arxiv.org/pdf/1909.04226.pdf)]|データをクラスタリング(教師なし学習)|◯ [ref [1](https://developer.ibm.com/recipes/tutorials/kmeans-clusterization-algorithm-with-quantum-circuit-part-1/),[2](https://github.com/Qiskit/qiskit-community-tutorials/blob/ae7da09c51dabf5a08576987f47f56af2404f98c/awards/teach_me_qiskit_2018/quantum_machine_learning/1_K_Means/Quantum%20K-Means%20Algorithm.ipynb), [3](https://note.com/utaka233/n/n06e345cf776e)]|Not Found|Not Found|
|量子データフィッティング<sup>*2</sup> [原案 [1](https://arxiv.org/pdf/1204.5242.pdf), [2](https://arxiv.org/pdf/1601.07823.pdf)]|関数のフィッティングに利用|◯ [[ref](https://developer.ibm.com/recipes/tutorials/multivariate-linear-regression-with-quantum-computer-a-school-case-1/)]|Not Found|◯ [[ref](https://pennylane.ai/qml/demos/quantum_neural_net.html)]|
|量子勾配法 [原案 [1](https://arxiv.org/pdf/1612.01789.pdf), [2](https://arxiv.org/pdf/1711.00465.pdf), [3](https://arxiv.org/pdf/1704.04992.pdf), [4](https://arxiv.org/pdf/1811.11184.pdf) 実装: [5](https://arxiv.org/pdf/1909.02108.pdf)]|パラメータ最適化に利用|◯ [[ref](https://qiskit.org/documentation/_modules/qiskit/aqua/components/optimizers/aqgd.html)]|◯ [[ref](https://www.tensorflow.org/quantum/tutorials/gradients)]|◯ [[ref](https://pennylane.ai/qml/demos/tutorial_quantum_natural_gradient.html)]|
|量子強化学習 [原案 [1](https://arxiv.org/pdf/0810.3828.pdf), [2](https://arxiv.org/pdf/1803.01857.pdf)]|マリオやテトリス等を上達させる機械学習|◯ [[ref](https://github.com/stefan-woerner/quantum_reinforcement_learning)<sup>*3</sup>]|Not Found|Not Found|
|量子主成分分析(PCA) [原案 [1](https://arxiv.org/pdf/1307.0401.pdf)]|多次元データを2,3次元に圧縮|Not Found|Not Found|Not Found|
|量子最適化近似(QAOA) [原案 [1](https://arxiv.org/pdf/1411.4028.pdf)]|組み合わせ最適化問題を近似的に解く|◯ [[ref](https://github.com/Qiskit/qiskit-aqua/blob/master/README.md#optimization)]|◯ [ref[1](https://github.com/quantumlib/Cirq/blob/master/examples/qaoa.py), [2](https://qiita.com/ryuNagai/items/c5bda3f26da507ce37ea)]|◯ [[ref](https://pennylane.ai/qml/demos/tutorial_qaoa_maxcut.html)]|
|量子自然言語処理 [原案 [1](https://arxiv.org/pdf/2005.04147.pdf)]|文を単語のネットワークとして解析|Not Found|Not Found|Not Found|
|量子Autoencoder [原案 [1](https://arxiv.org/pdf/1910.09169.pdf)]|データ圧縮|Not Found|Not Found|Not Found|

\*1 QGANの実装はCirqをバックエンドにしてPennyLaneの量子機械学習ライブラリを使用。
\*2 線形回帰モデルはデータフィッティングの一例とみなす(少し強引ですが。。)
\*3 現在Github工事中のようで以前のリンクが失効していたので関連フォルダをリンクしています。まだフォルダ構成変更などの工事が入りそうな予感。

こちらの表を作成にあたり@Ayumu_walkerさんに修正・追記していただきました、ありがとうございます。

# 追記
修正にあたり、[@med_quantum_men](https://twitter.com/med_quantum_men)さんにアドバイスを頂きました。(2020/5/20)
修正にあたり[@yoshi_and_aki](https://twitter.com/yoshi_and_aki)さんにアドバイスを頂きました。(2020/5/22)