首頁  >  文章  >  科技週邊  >  量子機器學習:新手指南

量子機器學習:新手指南

WBOY
WBOY轉載
2023-04-14 23:40:011410瀏覽

譯者| 布加迪

審校| 孫淑娟

量子機器學習:新手指南

#歡迎來到量子機器學習世界!本教學將透過使用範例資料集的入門級項目,提供附有程式碼的分步走指導。當本教程結束時,您將對如何使用量子電腦來執行機器學習任務有一番基本的理解,並幫助建立您的第一個量子模型。

但在深入學習本教學之前,先了解量子機器學習是什麼、為什麼它如此令人興奮。

量子機器學習是量子運算和機器學習交會的領域。它使用量子電腦來執行機器學習任務,例如分類、迴歸和聚類。量子電腦是一種功能強大的機器,使用量子位元(量子位元)而不是傳統位元來儲存和處理資訊。這使得它們執行某些任務的速度比傳統電腦快得多,特別適合涉及大量資料的機器學習任務。

現在直接開始教學吧!

第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​


以上是量子機器學習:新手指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除