翻訳者 | Bugatti
レビュアー | Sun Shujuan
量子の世界へようこそ機械学習!このチュートリアルでは、サンプル データセットを使用したスターター プロジェクトを通じて、コードによる段階的なガイダンスを提供します。このチュートリアルを終えると、量子コンピューターを使用して機械学習タスクを実行し、最初の量子モデルの構築を支援する方法の基本を理解できるようになります。
しかし、このチュートリアルに入る前に、量子機械学習とは何か、そしてなぜそれがそれほど魅力的なのかを理解しましょう。
量子機械学習は、量子コンピューティングと機械学習が融合した分野です。量子コンピューターを使用して、分類、回帰、クラスタリングなどの機械学習タスクを実行します。量子コンピューターは、情報の保存と処理に従来のビットの代わりに量子ビット (量子ビット) を使用する強力なマシンです。これにより、特定のタスクを従来のコンピューターよりもはるかに高速に実行できるため、大量のデータを含む機械学習タスクに特に適しています。
今すぐチュートリアルを開始してください!
このチュートリアルでは、量子機械学習には PennyLane ライブラリ、数値計算には NumPy、データ視覚化には Matplotlib を使用します。 pip を使用してこれらのライブラリをインストールするには、次のコマンドを実行します。
!pip install pennylane !pip install numpy !pip install matplotlib
このチュートリアルでは、アヤメ データセットを使用します。このデータセットは、がく片の長さ、がく片の幅、花弁の長さ、花弁の幅という 4 つの特徴を持つアヤメの花の 150 個のサンプルで構成されます。データセットは sklearn ライブラリに含まれているため、次のコードを使用して読み込むことができます。
from sklearn import datasets # Load the iris dataset iris = datasets.load_iris() X = iris['data'] y = iris['target']
トレーニング セットを使用して量子モデルをトレーニングし、テスト セットを使用してそのパフォーマンスを評価します。 sklearn.model_selection モジュールの train_test_split 関数を使用してデータセットを分割できます。
from sklearn.model_selection import train_test_split # Split the dataset into training and test sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
データを使用して量子モデルをトレーニングする前に、データを前処理する必要があります。一般的な前処理ステップは正規化です。これは、平均と単位分散がゼロになるようにデータを調整することです。 sklearn.preprocessing モジュールの StandardScaler クラスを使用して、正規化を実行できます。
from sklearn.preprocessing import StandardScaler # Initialize the scaler scaler = StandardScaler() # Fit the scaler to the training data scaler.fit(X_train) # Scale the training and test data X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test)
このコードは、StandardScaler オブジェクトを初期化し、fit メソッドを使用してトレーニング データに適合させます。次に、transform メソッドを使用してトレーニング データとテスト データを調整します。
正規化が重要な前処理ステップである理由は、正規化によりデータのすべての特徴が同じスケールになることが保証され、量子モデルのパフォーマンスを向上させることができるためです。
これで、PennyLane ライブラリを使用して量子モデルを定義する準備が整いました。最初のステップは、必要な関数をインポートして量子デバイスを作成することです。
import pennylane as qml # Choose a device (e.g., 'default.qubit') device = qml.device('default.qubit')
次に、データを入力として受け取り、予測を返す量子関数を定義します。量子ニューロンが 1 層だけある単純な量子ニューラル ネットワークを使用します。
@qml.qnode(device) def quantum_neural_net(weights, data): # Initialize the qubits qml.templates.AmplitudeEmbedding(weights, data) # Apply a layer of quantum neurons qml.templates.StronglyEntanglingLayers(weights, data) # Measure the qubits return qml.expval(qml.PauliZ(0))
この量子関数は、重み (量子ニューラル ネットワークのパラメーター) とデータ (入力) の 2 つの変数を受け取ります。データ) 。
最初の行は、PennyLane の AmplitudeEmbedding テンプレートを使用して量子ビットを初期化します。テンプレートは、データ ポイント間の距離が維持されるように、データを量子ビットの振幅にマッピングします。
2 行目では、StronglyEntanglingLayers テンプレートを使用して、量子ニューロンの層を適用します。このテンプレートは一連のもつれ操作を量子ビットに適用し、ユニバーサル量子コンピューティングの実装に使用できます。
最後に、最後の行は、Pauli-Z メトリックベースで量子ビットを測定し、期待値を返します。
量子モデルをトレーニングするには、モデルのパフォーマンスを測定するコスト関数を定義する必要があります。このチュートリアルでは、コスト関数として平均二乗誤差 (MSE) を使用します。
def cost(weights, data, labels): # Make predictions using the quantum neural network predictions = quantum_neural_net(weights, data) # Calculate the mean squared error mse = qml.mean_squared_error(labels, predictions) return mse
このコスト関数は、重み (これは量子モデルのパラメーターです)、データという 3 つの変数を受け取ります。 (これは入力データです) とラベル (データの実際のラベルです)。量子ニューラル ネットワークを使用して入力データに基づいて予測を行い、予測と真のラベルの間の MSE を計算します。
MSE は機械学習における一般的なコスト関数で、予測値と真の値の間の平均二乗差を測定します。 MSE が小さいほど、モデルがデータによりよく適合していることを示します。
これで、勾配降下法を使用して量子モデルをトレーニングする準備が整いました。 PennyLane の AdamOptimizer クラスを使用して最適化を実行します。
# Initialize the optimizer opt = qml.AdamOptimizer(stepsize=0.01) # Set the number of training steps steps = 100 # Set the initial weights weights = np.random.normal(0, 1, (4, 2)) # Train the model for i in range(steps): # Calculate the gradients gradients = qml.grad(cost, argnum=0)(weights, X_train_scaled, y_train) # Update the weights opt.step(gradients, weights) # Print the cost if (i + 1) % 10 == 0: print(f'Step {i + 1}: cost = {cost(weights, X_train_scaled, y_train):.4f}')
このコードは、オプティマイザーをステップ サイズ 0.01 で初期化し、トレーニング ステップ数を 100 に設定します。次に、モデルの初期重みを、平均 0、標準偏差 1 の正規分布から抽出されたランダムな値に設定します。
各トレーニング ステップで、コードは qml.grad 関数を使用して、重みに対するコスト関数の勾配を計算します。次に、opt.step メソッドを使用して重みを更新し、10 ステップごとのコストを出力します。
梯度下降法是机器学习中常见的优化算法,它迭代更新模型参数以最小化成本函数。AdamOptimizer是梯度下降的一种变体,它使用自适应学习率,这可以帮助优化更快地收敛。
我们已经训练了量子模型,可以评估它在测试集上的性能。我们可以使用以下代码来测试:
# Make predictions on the test set predictions = quantum_neural_net(weights, X_test_scaled) # Calculate the accuracy accuracy = qml.accuracy(predictions, y_test) print(f'Test accuracy: {accuracy:.2f}')
这段代码使用量子神经网络基于测试集做预测,并使用qml.accuracy 函数计算预测准确性。然后,它输出测试准确性。
最后,我们可以使用Matplotlib直观显示量子模型的结果。比如说,我们可以对照真实标签绘制出测试集的预测结果:
import matplotlib.pyplot as plt # Plot the predictions plt.scatter(y_test, predictions) # Add a diagonal line x = np.linspace(0, 3, 4) plt.plot(x, x, '--r') # Add axis labels and a title plt.xlabel('True labels') plt.ylabel('Predictions') plt.title('Quantum Neural Network') # Show the plot plt.show()
这段代码将对照真实标签创建预测的散点图,增添对角线以表示完美预测。然后它为散点图添加轴线标签和标题,并使用plt.show函数来显示。
现在,我们已成功地构建了一个量子机器学习模型,并在示例数据集上评估了性能。
为了测试量子模型的性能,我们运行了教程中提供的代码,获得了以下结果:
Step 10: cost = 0.5020 Step 20: cost = 0.3677 Step 30: cost = 0.3236 Step 40: cost = 0.3141 Step 50: cost = 0.3111 Step 60: cost = 0.3102 Step 70: cost = 0.3098 Step 80: cost = 0.3095 Step 90: cost = 0.3093 Step 100: cost = 0.3092 Test accuracy: 0.87
这些结果表明,量子模型能够从训练数据中学习,并基于测试集做出准确的预测。在整个训练过程中,成本稳步下降,这表明模型在学习过程中不断改进。最终的测试准确率为0.87,表现相当好,这表明该模型能够正确地分类大部分测试样例。
量子机器学习是一个令人兴奋的领域,有许多潜在的应用,从优化供应链到预测股价,不一而足。我们希望本教程能让您了解量子计算机和机器学习的可能性,并激励您深入了解这个诱人的话题。
原文标题:Quantum Machine Learning: A Beginner’s Guide,作者:SPX
以上が量子機械学習: 初心者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。