当前位置:首页|资讯|人工智能|编程|机器学习

量子机器学习:新手指南

作者:51CTO发布时间:2023-03-01

原标题:量子机器学习:新手指南

译者 | 布加迪

简介

欢迎来到量子机器学习世界!本教程将通过一个使用示例数据集的入门级项目,提供附有代码的分步走指导。本教程结束时,您将对如何使用量子计算机来执行机器学习任务有一番基本的理解,并帮助构建您的第一个量子模型。

但在深入学习本教程之前,先了解量子机器学习是什么、它为什么如此令人兴奋。

量子机器学习是量子计算和机器学习交汇的领域。它使用量子计算机来执行机器学习任务,比如分类、回归和聚类。量子计算机是一种功能强大的机器,使用量子比特(量子位)而不是传统比特来存储和处理信息。这使得它们执行某些任务的速度比传统计算机快得多,特别适合涉及大量数据的机器学习任务。

现在直接开始教程吧!

第1步:安装必要的库和依赖项。

我们在本教程中将使用PennyLane库用于量子机器学习,使用NumPy用于数值计算,使用Matplotlib用于数据可视化。您可以通过运行以下命令使用pip安装这些库:

复制

!pip install pennylane

!pip install numpy

!pip install matplotlib

第2步:加载示例数据集。

我们在本教程中将使用Iris数据集,该数据集由鸢尾花的150个样本组成,这些鸢尾花有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。该数据集包含在sklearn库中,所以我们可以使用以下代码来加载它:

复制

from sklearn import datasets

# Load the iris dataset

iris = datasets.load_iris()

X = iris['data']

y = iris['target']

第3步:将数据集分割成训练集和测试集。

我们将使用训练集来训练我们的量子模型,使用测试集来评估其性能。我们可以使用来自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)

第4步:预处理数据。

在我们可以使用数据来训练量子模型之前,我们需要预处理数据。一个常见的预处理步骤是规范化,即调整数据,以便它有零平均值和单位方差。我们可以使用来自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方法来调整训练和测试数据。

规范化之所以是一个重要的预处理步骤,是由于它确保数据的所有特征都在同一尺度上,这可以改善量子模型的性能。

第5步:定义量子模型。

现在我们准备使用 PennyLane库来定义量子模型。第一步是导入必要的函数,并创建量子设备:

复制

import pennylane as qml

# Choose a device (e.g., 'default.qubit')

device = qml.device('default.qubit')

下一步,我们将定义一个量子函数,它摄入数据作为输入,返回预测。我们将使用一个简单的量子神经网络,只有一层量子神经元:

复制

@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))

该量子函数摄取两个变量:weights(这是量子神经网络的参数)和data(这是输入数据)。

第一行使用来自 PennyLane的AmplitudeEmbedding模板初始化量子位。该模板将数据映射到量子位的振幅上,以便保留数据点之间的距离。

第二行使用StronglyEntanglingLayers模板来应用一层量子神经元。该模板将一系列纠缠操作应用到量子位上,然后量子位可用于实现通用量子计算。

最后,最后一行以Pauli-Z度量基础测量量子位,并返回预期值。

第6步:定义成本函数。

为了训练量子模型,我们需要定义成本函数,以测量模型性能有多好。就本教程而言,我们将使用均方误差(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

该成本函数摄取三个变量:weights(这是量子模型的参数)、data(这是输入数据)和labels(这是数据的真实标签)。它使用量子神经网络基于输入数据做预测,并计算预测和真实标签之间的MSE。

MSE是机器学习中的常见成本函数,测量预测值和真实值之间的平均平方差。较小的MSE表明模型更拟合数据。

第7步:训练量子模型。

现在,我们准备使用梯度下降法来训练量子模型。我们将使用来自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是梯度下降的一种变体,它使用自适应学习率,这可以帮助优化更快地收敛。

第8步:评估量子模型。

我们已经训练了量子模型,可以评估它在测试集上的性能。我们可以使用以下代码来测试:

复制

# 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 函数计算预测准确性。然后,它输出测试准确性。

第9步:直观显示结果。

最后,我们可以使用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


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1