量子機械学習変分量子分類器 (VQC) の紹介

量子機械学習変分量子分類器 (VQC) の紹介

変分量子分類器 (VQC) は、量子コンピューティング技術を使用して分類タスクを実行する機械学習アルゴリズムです。これは、量子コンピュータの計算能力を活用して、従来の機械学習手法のパフォーマンスを向上させることを目的とした量子機械学習アルゴリズムのファミリーに属しています。

VQC の基本的な考え方は、変分量子回路とも呼ばれる量子回路を使用して、入力データを量子状態にエンコードしてマッピングすることです。これらの量子状態は、量子ゲートと測定操作を使用して操作され、分類タスクに関連する特徴が抽出されます。最後に、測定値が処理され、入力データにクラス ラベルを割り当てるために使用されます。

VQC は、従来の最適化手法と量子コンピューティングを組み合わせたものです。トレーニング中、変分量子回路は量子コンピュータまたはシミュレータ上で繰り返し実行され、その結果がトレーニング データの実際のラベルと比較されます。変分量子回路のパラメータは、予測ラベルと実際のラベルの差のコスト関数を最小化するように反復的に調整されます。この最適化プロセスの目的は、分類精度を最大化するために最適な量子回路構成を見つけることです。シンプルに見えますが、このハイブリッド コンピューティング アーキテクチャには多くの課題があります。

特徴マッピングは、データを量子ビットにエンコードする必要がある最初の段階です。特徴マップは、あるベクトル空間から別のベクトル空間への数学的な変換であるため、エンコード方法は多数あります。したがって、それぞれの問題に対して最適なマッピングを見つける方法を研究することは、研究すべき問題です。

マッピングが完了したら、量子回路をモデルとして設計する必要があります。これが第 2 段階です。ここでは好きなだけ創造性を発揮できますが、同じ古いルールが依然として重要であることを考慮する必要があります。つまり、単純な問題では、過剰適合を避けるためにパラメーターを使いすぎないこと、バイアスを避けるためにパラメーターを使いすぎないこと、そして量子コンピューティングを扱っているので、量子コンピューティングのパラダイムを最大限に活用するためには重ね合わせともつれを扱う必要があることです。

また、量子回路は線形変換であるため、その出力も処理する必要があります。たとえば、非線形活性化。

データセットと機能

ここでは、タイタニック号のデータセットに基づいて分類器を設計します。データセットには次の特徴があります。

  • 乗客ID
  • 乗客名
  • クラス(1、2、3)
  • 性別
  • SibSP(兄弟および/または配偶者が搭乗)
  • パーチ(親または子供が乗船)
  • チケット
  • 運賃
  • キャビン
  • 乗船
  • 生き残った

私たちは、乗客の特徴に基づいて、乗客が生き残ったかどうかを予測する分類器を構築したいと考えています。それでは、例としていくつかの変数を取り上げてみましょう。

  • is_child (年齢が12歳未満の場合)
  • is_class1 (人が最初のクラスに属している場合)
  • クラス2
  • 女性である

変数は 4 つしかないため、Basis Embedding を使用します。単純に、古典ビットを同等の量子ビットに変換します。たとえば、4 つの変数が 1010 の場合、これは |1010> に変換されます。

モデル

私たちのモデルはパラメータ化可能な量子回路です。この回路は、量子コンポーネントの使用を正当化するために、一定レベルの重ね合わせとエンタングルメントを備えている必要があり、そのモデルは次のとおりです。

このモデルは複雑に見えるかもしれませんが、考え方は非常に単純です。 コア構造が2回繰り返されているため、2層回路となっています。 まず、各量子ビットを Z、Y、Z 軸を中心に回転させます。ここでの考え方は、各量子ビットに個別にある程度の重ね合わせを挿入することです。 これらの回転はパラメータ化されており、アルゴリズムの各反復で、これらのパラメータは古典的なコンピュータによって更新されます。 次に、量子ビットのベクトル空間が球面 (ブロッホ球面) であるため、Y 軸と Z 軸上で回転が起こります。 RZ は量子ビットの位相のみを変更しますが、RY は量子ビットが |0> と |1> にどれだけ近いかに影響します。

各量子ビットのペアの間には、4 つの制御されない (CNOT) 状態があります。これは、もう一方の量子ビット (それぞれターゲットと制御) の状態に応じて 1 つの量子ビットの状態を反転する量子ゲートです。 つまり、このゲートは回路内のすべての量子ビットをエンタングルメントし、すべての状態がエンタングルメントされます。 2 番目のレイヤーでは、新しい回転セットを適用します。これは、最初のレイヤーの単なる論理的な繰り返しではありません。すべての状態がエンタングルされているため、最初の量子ビットを回転させると、他の量子ビットにも影響が及ぶからです。 ついに新しい CNOT ゲートのセットができました。

これは上記のモデルの非常に簡略化された説明であり、次のコードでより明確になります。

オプティマイザ

私は Adam Optimizer を使用していますが、このオプティマイザーは特別に処理されており、pennylane ライブラリを直接使用します。

コードの実装

ここでは、Pennylane と sklearn を直接使用してコードを実装します。

 import pennylane as qml from pennylane import numpy as np from pennylane.optimize import AdamOptimizer from sklearn.model_selection import train_test_split import pandas as pd from sklearn.metrics import accuracy_score from sklearn.metrics import f1_score from sklearn.metrics import precision_score from sklearn.metrics import recall_score import math num_qubits = 4 num_layers = 2 dev = qml.device("default.qubit", wires=num_qubits) # quantum circuit functions def statepreparation(x): qml.BasisEmbedding(x, wires=range(0, num_qubits)) def layer(W): qml.Rot(W[0, 0], W[0, 1], W[0, 2], wires=0) qml.Rot(W[1, 0], W[1, 1], W[1, 2], wires=1) qml.Rot(W[2, 0], W[2, 1], W[2, 2], wires=2) qml.Rot(W[3, 0], W[3, 1], W[3, 2], wires=3) qml.CNOT(wires=[0, 1]) qml.CNOT(wires=[1, 2]) qml.CNOT(wires=[2, 3]) qml.CNOT(wires=[3, 0]) @qml.qnode(dev, interface="autograd") def circuit(weights, x): statepreparation(x) for W in weights: layer(W) return qml.expval(qml.PauliZ(0)) def variational_classifier(weights, bias, x): return circuit(weights, x) + bias def square_loss(labels, predictions): loss = 0 for l, p in zip(labels, predictions): loss = loss + (l - p) ** 2 loss = loss / len(labels) return loss def accuracy(labels, predictions): loss = 0 for l, p in zip(labels, predictions): if abs(l - p) < 1e-5: loss = loss + 1 loss = loss / len(labels) return loss def cost(weights, bias, X, Y): predictions = [variational_classifier(weights, bias, x) for x in X] return square_loss(Y, predictions) # preparaing data df_train = pd.read_csv('train.csv') df_train['Pclass'] = df_train['Pclass'].astype(str) df_train = pd.concat([df_train, pd.get_dummies(df_train[['Pclass', 'Sex', 'Embarked']])], axis=1) # I will fill missings with the median df_train['Age'] = df_train['Age'].fillna(df_train['Age'].median()) df_train['is_child'] = df_train['Age'].map(lambda x: 1 if x < 12 else 0) cols_model = ['is_child', 'Pclass_1', 'Pclass_2', 'Sex_female'] X_train, X_test, y_train, y_test = train_test_split(df_train[cols_model], df_train['Survived'], test_size=0.10, random_state=42, stratify=df_train['Survived']) X_train = np.array(X_train.values, requires_grad=False) Y_train = np.array(y_train.values * 2 - np.ones(len(y_train)), requires_grad=False) # setting init params np.random.seed(0) weights_init = 0.01 * np.random.randn(num_layers, num_qubits, 3, requires_grad=True) bias_init = np.array(0.0, requires_grad=True) opt = AdamOptimizer(0.125) num_it = 70 batch_size = math.floor(len(X_train)/num_it) weights = weights_init bias = bias_init for it in range(num_it): # Update the weights by one optimizer step batch_index = np.random.randint(0, len(X_train), (batch_size,)) X_batch = X_train[batch_index] Y_batch = Y_train[batch_index] weights, bias, _, _ = opt.step(cost, weights, bias, X_batch, Y_batch) # Compute accuracy predictions = [np.sign(variational_classifier(weights, bias, x)) for x in X_train] acc = accuracy(Y_train, predictions) print( "Iter: {:5d} | Cost: {:0.7f} | Accuracy: {:0.7f} ".format( it + 1, cost(weights, bias, X_train, Y_train), acc ) ) X_test = np.array(X_test.values, requires_grad=False) Y_test = np.array(y_test.values * 2 - np.ones(len(y_test)), requires_grad=False) predictions = [np.sign(variational_classifier(weights, bias, x)) for x in X_test] accuracy_score(Y_test, predictions) precision_score(Y_test, predictions) recall_score(Y_test, predictions) f1_score(Y_test, predictions, average='macro')

最終結果は次のとおりです。

 Accuracy: 78.89% Precision: 76.67% Recall: 65.71% F1: 77.12%

比較のために、古典的なロジスティック回帰を使用します。

 Accuracy: 75.56% Precision: 69.70% Recall: 65.71% F1: 74.00%

VQC のパフォーマンスはロジスティック回帰モデルよりもわずかに優れていることがわかります。これは、VQC が必ずしも優れているという意味ではなく、この特定のモデルとこの特定の最適化手順のパフォーマンスが優れているというだけです。しかし、この記事の主なポイントは、量子分類器の構築がシンプルかつ効果的であることを示すことです。

要約する

VQC アルゴリズムでは、古典的リソースと量子リソースの両方を活用する必要があります。古典的な部分は最適化とパラメータの更新を処理し、量子部分は量子状態の計算を実行します。 VQC のパフォーマンスと潜在的な利点は、分類問題の複雑さ、量子ハードウェアの品質、適切な量子特徴マップと量子ゲートの可用性などの要因によって異なります。

要するに、量子機械学習の分野はまだ初期段階にあり、VQC の実用的な実装と有効性は、大規模なエラー訂正量子コンピュータの構築という課題によって現在制限されています。しかし、この分野の研究は現在も進行中であり、量子ハードウェアとアルゴリズムの進歩により、将来的にはより強力で効率的な量子ソーターが実現する可能性があります。


<<:  重要インフラのサイバーセキュリティリスク管理における AI の影響

>>:  生成AIの可能性を活用してビジネスの成功を推進する

ブログ    

推薦する

...

...

【必見】機械学習分野の世界トップ16企業

[[227073]] [51CTO.com クイック翻訳] 機械学習は多くの企業が興味を持っている新...

中国の人工知能産業における4つの大きなトレンド

人工知能は新たな産業変革の中核的な原動力であり、これまでの科学技術革命と産業変革によって蓄積された膨...

AIは地球を救うことができるのか

メタバースは現実世界を揺るがしており、未知の部分が多すぎるため、賛否両論の評価を受けています。しかし...

MIT の驚くべき証明: 大きな言語モデルは「世界モデル」ですか?アンドリュー・ン氏の視点が再び確認され、LLMは空間と時間を理解できる

大きな言語モデルの中には世界モデルがあるのでしょうか? LLM には空間感覚がありますか?そして、こ...

マスク氏はOpenAIを訴えた。彼らはAGIを作成し、それをマイクロソフトにライセンス供与したが、これは設立協定に対する露骨な裏切りである。

つい先日、「劇的な対立に耽溺する」マスク氏は新たな行動を起こした。共同設立者の一人であるOpenAI...

...

NLP がヘルスケアにおける AI の価値を実現する方法

複雑な AI モデルを学習するには膨大な量のデータが必要であり、ヘルスケア データは全データのほぼ ...

AIがIoTの状況をどう変えるのか

人工知能 (AI) はモノのインターネット (IoT) の世界に革命をもたらし、IoT の人工知能 ...

人工知能は第4世代に入り、人工直感が開発の次のステップとなる

AI はこれまでに開発された最も強力なテクノロジーの 1 つですが、すでに 4 回の進化を経ています...

...

データが人工知能の基盤となる理由

データ注釈とは何ですか?ほとんどのデータはラベル付けされておらず、非構造化データですが、人工知能のト...

スマートカーの時代において、あなたの安全とプライバシーを誰が保証するのでしょうか?

電気スマートカーの発展により、自動車はもはや独立した機械的なハードウェアボックスではなく、センシング...