譯者| 布加迪
審校| 孫淑娟
#歡迎來到量子機器學習世界!本教學將透過使用範例資料集的入門級項目,提供附有程式碼的分步走指導。當本教程結束時,您將對如何使用量子電腦來執行機器學習任務有一番基本的理解,並幫助建立您的第一個量子模型。
但在深入學習本教學之前,先了解量子機器學習是什麼、為什麼它如此令人興奮。
量子機器學習是量子運算和機器學習交會的領域。它使用量子電腦來執行機器學習任務,例如分類、迴歸和聚類。量子電腦是一種功能強大的機器,使用量子位元(量子位元)而不是傳統位元來儲存和處理資訊。這使得它們執行某些任務的速度比傳統電腦快得多,特別適合涉及大量資料的機器學習任務。
現在直接開始教學吧!
我們將在本教程中使用PennyLane函式庫用於量子機器學習,使用NumPy用於數值計算,使用Matplotlib用於資料視覺化。您可以透過執行以下命令使用pip安裝這些庫:
!pip install pennylane !pip install numpy !pip install matplotlib
我們在本教程中將使用Iris資料集,該資料集由鳶尾花的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')
下一步,我們將定義一個量子函數,它攝取資料作為輸入,並返回預測。我們將使用一個簡單的量子神經網絡,只有一層量子神經元:
@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度量基礎測量量子位,並傳回預期值。
為了訓練量子模型,我們需要定義成本函數,以測量模型表現有多好。就本教學而言,我們將使用均方誤差(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表示模型更擬合數據。
現在,我們準備好使用梯度下降法來訓練量子模型。我們將使用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中文網其他相關文章!