量子機械学習変分量子分類器 (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の可能性を活用してビジネスの成功を推進する

ブログ    
ブログ    
ブログ    

推薦する

...

「顔認識」に関する法的問題

[[403922]]漫画 孟賢東インターネットの急速な発展に伴い、顔認識技術は生活のあらゆる場所に応...

拡散+超解像モデルの強力な組み合わせ、Googleの画像ジェネレーターImagenの背後にある技術

近年、マルチモーダル学習は、特にテキストと画像の合成や画像とテキストの対照学習の分野で大きな注目を集...

Pangu-Agentの5つのイノベーション

大規模言語モデル (LLM) の開発と応用により、人工知能の分野で LLM ベースの自律エージェント...

...

ジェネレーティブ AI が画像検索をどのように再定義するか

翻訳者 | 李睿レビュー | Chonglou生成 AI は、ユニークなテキスト、サウンド、画像を作...

プログラマーの面接でよく聞かれる質問: スケジュールされたタスク スケジューラを設計し、どのようなアルゴリズムとデータ構造を使用するか

学生時代、私は Huya の面接を受けたことがあります。今でもはっきりと覚えている面接の質問がありま...

人工知能企業が利益を上げるのは難しいと言われていますが、具体的に何が難しいのでしょうか?

[[272155]] 2016年にAlphaGoが「人間対機械」の競争に勝利して以来、人工知能への...

ロボット革命はビジネス環境を変えている

今世紀の前半には、巨大な片腕の巨人のような産業用ロボットがロボット工学の分野を支配していました。産業...

自動運転車の危険性: 自動運転車が世界中で実現できないのはなぜか

テスラは2020年10月、車の所有者が駐車し、巡航速度で車線を自動的に維持し、赤信号で停止することを...

ChatGPT のセキュリティ制限が「謎のコード」によって侵害されました!人類を滅ぼすための手順が口から出され、アルパカとクロードも逃れられない

大型模型の「堀」が再び破られた。謎のコードを入力することで、ビッグモデルは有害なコンテンツを生成する...

面接中にアルゴリズムの質問を解く際にプログラマーが知っておくべきこと

面接でアルゴリズムのみをテストする質問は、一般的に多くのプログラマーの友人から嫌われます。ここでは、...

...