📄 arXiv: 2511.14786 · 2025年11月

量子-古典混合機器學習
完整互動教學

使用 PennyLane 框架探索量子計算與機器學習的交叉前沿,從量子比特的疊加態到實際的量子化學應用

👤 Sidney Shapiro 著 📅 2025年11月13日 🏷️ 量子機器學習 🐍 Python / PennyLane

📋 論文核心摘要

本論文是 PennyLane 框架的實用指南,展示如何將量子計算的潛在優勢與古典機器學習技術相結合。

混合量子-古典機器學習結合量子電路(用於特殊計算)與古典優化算法(用於訓練參數),代表計算研究的前沿方向。

論文通過具體的 Python 代碼示例,展示如何用 scikit-learn、pandas、matplotlib 配合 PennyLane 構建完整的量子機器學習工作流。

🎯 本論文涵蓋的主題

  • 1
    量子核方法(Quantum Kernel Methods) 利用量子特徵映射提升支持向量機的分類能力
  • 2
    變分量子本徵求解器(VQE) 求解量子化學問題,如分子基態能量
  • 3
    投資組合優化(Portfolio Optimization) 用量子近似優化算法 QAOA 解決金融問題
  • 4
    與深度學習整合 無縫接入 PyTorch、TensorFlow、JAX 框架

🔄 混合計算架構

理解量子-古典混合系統的核心是了解兩種計算資源各自的角色:

⚛️ 量子設備
製備量子態 | 疊加 | 糾纏
⟵ 參數 ↕ 測量結果 ⟶
💻 古典電腦
優化 | 預處理 | 後處理
量子設備負責:
  • 利用疊加態同時探索多個解
  • 利用量子糾纏建立特徵關聯
  • 執行某些指數加速的計算
古典電腦負責:
  • 數據預處理和後處理
  • 優化量子電路參數
  • 解讀量子測量結果

🌍 為什麼量子機器學習重要?

潛在加速
某些問題可獲得指數級計算優勢
🧬
量子化學
精確模擬分子和材料的量子特性
🔮
NISQ 時代
近期量子硬體即可運行混合算法
🔬 量子計算基礎
理解量子比特、疊加態、糾纏與量子門

⚛️ 量子比特(Qubit)

古典比特只能是 0 或 1,而量子比特可以同時處於 0 和 1 的疊加態

|ψ⟩ = α|0⟩ + β|1⟩

其中 |α|² + |β|² = 1,α 和 β 是複數振幅

0
古典比特
確定性:只能是 0
|ψ⟩
量子比特
同時為 0 和 1 的疊加
📊
測量後
塌縮為確定的 0 或 1

🌀 互動:疊加態機率分佈

調整量子態參數 θ,觀察測量到 |0⟩ 和 |1⟩ 的機率變化:

P(|0⟩) = 50% P(|1⟩) = 50%
|0⟩ 機率
|1⟩ 機率
θ=90°:|+⟩ 態,測量結果完全隨機(50/50)—— Hadamard 閘的輸出

🚪 基本量子門

Hadamard 門 (H)

將量子比特從計算基底態轉換為疊加態,是量子算法的基礎構建塊。

H|0⟩ = (|0⟩ + |1⟩)/√2 = |+⟩
H|1⟩ = (|0⟩ − |1⟩)/√2 = |−⟩
H 門是量子計算中最重要的閘之一,它創造了真正的量子疊加態!
量子電路圖示:
q₀: |0⟩ —
H
📊 → |+⟩
Python import pennylane as qml dev = qml.device('default.qubit', wires=1) # 用 H 門創建疊加態 @qml.qnode(dev) def superposition_circuit(): qml.Hadamard(wires=0) return qml.probs(wires=0)
X 門(NOT 門)
X|0⟩ = |1⟩
X|1⟩ = |0⟩

量子版本的 NOT 閘,翻轉量子比特狀態

Y 門
Y|0⟩ = i|1⟩
Y|1⟩ = −i|0⟩

繞 Y 軸旋轉,引入複數相位

Z 門
Z|0⟩ = |0⟩
Z|1⟩ = −|1⟩

相位翻轉,不改變測量機率

旋轉門是變分量子算法的核心,其角度參數可以被訓練優化:

RX(θ) — 繞 X 軸旋轉
RX(θ) = e^(-iθX/2)
RY(θ) — 繞 Y 軸旋轉
RY(θ) = e^(-iθY/2)
RZ(φ) — 繞 Z 軸旋轉
RZ(φ) = e^(-iφZ/2)
Python # PennyLane 中的旋轉門 import pennylane as qml import numpy as np params = np.array([0.3, 1.2, 0.8]) @qml.qnode(dev) def rotation_circuit(params): qml.RX(params[0], wires=0) qml.RY(params[1], wires=0) qml.RZ(params[2], wires=0) return qml.expval(qml.PauliZ(0))

CNOT 門(受控非門)

CNOT 是最重要的雙量子比特門,用於創建量子糾纏。當控制量子比特為 |1⟩ 時,翻轉目標量子比特。

|00⟩ → |00⟩
|01⟩ → |01⟩
|10⟩ → |11⟩
|11⟩ → |10⟩
Bell 態(最大糾纏態):
H⊗I → CNOT → (|00⟩+|11⟩)/√2
Bell 態電路:
q₀: |0⟩ —
H
—●—
📊
q₁: |0⟩ — ————
CNOT
📊
Python @qml.qnode(dev2) def bell_state(): qml.Hadamard(wires=0) qml.CNOT(wires=[0, 1]) return qml.probs(wires=[0,1]) # 結果: [0.5, 0, 0, 0.5] # |00⟩ 和 |11⟩ 各 50% — 完美糾纏!
🛠️ PennyLane 框架
Python 量子-古典混合計算框架的核心功能

🏗️ PennyLane 架構

PennyLane 是一個 Python 框架,核心特點是支持量子電路的自動微分,使其與古典深度學習無縫整合。

核心設計原則:像訓練神經網絡一樣訓練量子電路!
🔧 量子電路構建
📐 自動微分
🖥️ 多設備支持
🔗 深度學習整合
⚗️ 量子化學
📊 梯度計算
🌐 PennyLane 框架
量子硬體
IBM / Xanadu
量子模擬器
default.qubit
PyTorch
TensorFlow
JAX

🔑 核心概念:QNode(量子節點)

QNode 是 PennyLane 的基本構建塊,它將量子電路封裝成一個可微分的函數:

Python import pennylane as qml import numpy as np # 1. 選擇設備(模擬器或硬體) dev = qml.device('default.qubit', wires=2) # 2. 用 @qml.qnode 定義量子電路 @qml.qnode(dev) def my_circuit(theta): qml.RY(theta, wires=0) qml.CNOT(wires=[0, 1]) return qml.expval(qml.PauliZ(0)) # 3. 像普通函數一樣調用 theta = np.array(0.5) result = my_circuit(theta) # 4. 自動計算梯度! grad = qml.grad(my_circuit)(theta) print(f"梯度: {grad:.4f}")
  • 1
    選擇計算設備 可選本地模擬器 (default.qubit) 或雲端量子硬體 (IBM、Xanadu、Amazon Braket)
  • 2
    定義量子電路 用 Python 函數描述量子門操作,PennyLane 將其轉換為量子電路
  • 3
    執行電路 直接調用函數即可,PennyLane 處理量子模擬或硬體通信
  • 4
    計算梯度 使用 qml.grad() 自動計算梯度,用於優化電路參數

📐 梯度計算方法

PennyLane 支持多種梯度計算策略,這是量子機器學習訓練的核心:

參數偏移規則
∂f/∂θ = [f(θ+π/2) - f(θ-π/2)] / 2

適合真實量子硬體,僅需兩次額外電路執行

推薦用於硬體
反向傳播
類似神經網絡的 backprop

在模擬器上最高效,可與 PyTorch/TF 整合

推薦用於模擬器
有限差分
∂f/∂θ ≈ [f(θ+ε) - f(θ)] / ε

最通用但精度較低,主要用於驗證

通用備選

🔗 與 PyTorch 整合

PennyLane 可以將量子電路作為 PyTorch 的一個神經網絡層使用:

Python + PyTorch import torch import pennylane as qml from pennylane import numpy as np # 創建量子電路 dev = qml.device('default.qubit', wires=4) @qml.qnode(dev, interface='torch') def quantum_layer(inputs, weights): qml.AngleEmbedding(inputs, wires=range(4)) qml.BasicEntanglerLayers(weights, wires=range(4)) return [qml.expval(qml.PauliZ(i)) for i in range(4)] # 封裝為 PyTorch 模組(QNN Layer) weight_shapes = {"weights": (3, 4)} qlayer = qml.qnn.TorchLayer(quantum_layer, weight_shapes) # 在 PyTorch 模型中使用 model = torch.nn.Sequential( torch.nn.Linear(4, 4), # 古典層 qlayer, # 量子層! torch.nn.Linear(4, 2) # 古典層 )
🌀 變分量子電路
VQC、量子核方法與自動微分優化

🎛️ 變分量子電路(VQC)

VQC 是量子機器學習的核心架構,類似於神經網絡,但計算在量子設備上進行。

三大組成部分:
  1. 數據嵌入層(Embedding)
  2. 變分層(Variational Layers)
  3. 測量層(Measurement)

VQC 的目標函數(損失函數)通過量子測量的期望值計算,參數通過古典優化器更新。

L(θ) = ⟨ψ(θ)|Ĥ|ψ(θ)⟩
VQC 電路結構:
q₀ —
Embed
x₀
RY
θ₀
CNOT
RY
θ₂
📊
q₁ —
Embed
x₁
RY
θ₁
RY
θ₃
📊
■ 數據嵌入 ■ 旋轉(可訓練) ■ 糾纏門

🔭 量子核方法(Quantum Kernel Methods)

量子核方法將數據映射到量子特徵空間,然後用支持向量機(SVM)進行分類。

核心思想:
量子特徵映射 φ(x) 可能捕獲古典計算難以表達的特徵模式。
K(x, x') = |⟨φ(x)|φ(x')⟩|²

量子核矩陣通過測量兩個數據點對應量子態的重疊度來計算。

Python import pennylane as qml from sklearn import svm # 定義量子特徵映射 @qml.qnode(dev) def feature_map(x): qml.AngleEmbedding(x, wires=range(n_qubits)) qml.BasicEntanglerLayers(weights, wires=range(n_qubits)) return qml.state() # 計算量子核矩陣 def quantum_kernel(x1, x2): state1 = feature_map(x1) state2 = feature_map(x2) return np.abs(np.dot(state1.conj(), state2))**2 # 構建核矩陣並訓練 SVM K_train = np.array([[quantum_kernel(x1, x2) for x2 in X_train] for x1 in X_train]) clf = svm.SVC(kernel='precomputed') clf.fit(K_train, y_train)

⚗️ 變分量子本徵求解器(VQE)

VQE 是混合量子-古典算法的旗艦應用,用於求解量子化學問題(分子基態能量)。

  • 1
    構造分子哈密頓量 將分子的量子力學描述轉化為泡利矩陣的線性組合
  • 2
    準備嘗試態(Ansatz) 設計參數化量子電路,用於近似基態波函數
  • 3
    量子測量期望值 在量子設備上測量哈密頓量的期望值(即能量)
  • 4
    古典優化最小化 用梯度下降更新電路參數,使能量最小化
變分原理: E₀ ≤ ⟨ψ(θ)|Ĥ|ψ(θ)⟩
任何嘗試態的能量期望值都不低於真實基態能量!
VQE in PennyLane import pennylane as qml from pennylane import qchem # 1. 建立 H₂ 分子哈密頓量 H, n_qubits = qchem.molecular_hamiltonian( ['H', 'H'], np.array([0.0, 0.0, 0.74]) ) # 2. 定義 Ansatz 量子電路 @qml.qnode(dev) def vqe_circuit(params): qml.templates.AllSinglesDoubles( params, wires, hf_state, singles, doubles ) return qml.expval(H) # 測量能量 # 3. 古典優化(梯度下降) opt = qml.optimizers.AdamOptimizer(stepsize=0.02) for step in range(100): params = opt.step(vqe_circuit, params) energy = vqe_circuit(params) print(f"Step {step}: E = {energy:.6f} Ha")
🚀 實際應用案例
QAOA 投資組合優化與量子機器學習工作流

💼 QAOA 投資組合優化

量子近似優化算法(QAOA)能解決組合優化問題,如馬克維茲投資組合優化:

問題表達:QUBO 格式
min: xᵀΣx − μᵀx
約束: Σxᵢ = k(選 k 支股票)

Σ 是協方差矩陣,μ 是預期收益,x 是二進制選擇向量

  • 1
    問題編碼 將投資組合選擇問題轉化為量子哈密頓量
  • 2
    QAOA 電路 交替應用問題哈密頓量和混合哈密頓量
  • 3
    採樣最佳解 測量最高機率態即為近似最優解
QAOA Portfolio import pennylane as qml import numpy as np # 股票收益和協方差矩陣 returns = np.array([0.08, 0.12, 0.06, 0.15]) cov = np.array([...]) # 協方差矩陣 n_assets = 4 # 定義 QAOA 電路 @qml.qnode(dev) def qaoa_circuit(gammas, betas, p): # 初始化均勻疊加態 for i in range(n_assets): qml.Hadamard(wires=i) # p 層 QAOA for layer in range(p): problem_unitary(gammas[layer]) mixer_unitary(betas[layer]) return qml.probs(wires=range(n_assets)) # 優化 QAOA 參數 opt = qml.optimizers.GradientDescentOptimizer() gammas, betas = optimize(qaoa_circuit)

📊 完整工作流比較

應用 量子部分 古典部分 PennyLane 工具
🔬 量子核 SVM 計算量子核矩陣 SVM 訓練和預測 AngleEmbedding + sklearn
⚗️ VQE 量子化學 製備 Ansatz 態,測量能量 梯度下降優化參數 qchem + Adam Optimizer
💼 QAOA 優化 執行 p 層 QAOA 電路 優化 γ,β 參數 qaoa.cost_layer + mixer
🤖 量子神經網絡 變分量子電路作為層 反向傳播訓練 TorchLayer / KerasLayer

🔧 支持的後端設備

PennyLane 支持多種量子計算後端:

🖥️
default.qubit
本地 Python 模擬器,適合開發和測試
🔵
IBM Quantum
真實超導量子比特硬體
🟠
Amazon Braket
雲端量子計算服務,多種硬體選擇
🟣
Xanadu Cloud
光子量子計算,PennyLane 原創公司

🏁 NISQ 時代的挑戰

當前量子硬體(NISQ 設備)面臨的主要挑戰:

🔴 量子噪聲(Noise)

量子比特容易受到環境干擾,導致計算錯誤

🟡 退相干(Decoherence)

量子態只能保持非常短的時間(微秒級)

🟢 混合算法的解決方案

使用淺層電路 + 古典優化,降低對量子硬體的要求

🧠 知識測驗
測試你對量子-古典混合機器學習的理解

📝 互動測驗

問題 1:量子比特與古典比特最主要的區別是什麼?

問題 2:在 PennyLane 中,用於量子硬體的最佳梯度計算方法是?

問題 3:VQE(變分量子本徵求解器)主要用於解決什麼問題?

問題 4:在混合量子-古典架構中,古典電腦負責什麼?

問題 5:QAOA 算法最適合用來解決哪類問題?

📚 深入學習資源

想進一步探索量子機器學習:

  • 📄
    原始論文 arXiv: 2511.14786 — Hybrid QML with PennyLane
  • 🌐
    PennyLane 官方文檔 pennylane.ai — 包含大量互動教程和代碼示例
  • 🐍
    安裝 PennyLane pip install pennylane (支持 Python 3.7+)
  • 🤝
    整合深度學習 pip install pennylane-torch 或 pennylane-tf
論文的核心貢獻
  1. 提供 PennyLane 的完整入門指南
  2. 展示量子核方法的完整工作流
  3. 用 VQE 求解真實分子能量
  4. 演示 QAOA 解決投資組合問題
  5. 展示與 PyTorch/TF/JAX 的無縫整合