初态为 ∣ 0 ⋯ 00 ⟩ |0\cdots00\rangle ∣0 ⋯ 00 ⟩ ,电路输出为 ∣ ψ ⟩ = S ( x 2 ) † S ( x 1 ) ∣ 0 ⋯ 00 ⟩ |\psi\rangle=S(x_2)^{\dagger}S(x_1)|0\cdots00\rangle ∣ ψ ⟩ = S ( x 2 ) † S ( x 1 ) ∣0 ⋯ 00 ⟩ 、
示例中构造一个厄米矩阵
M = [ 1 0 ⋯ 0 0 0 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 0 ] = ∣ 0 ⋯ 00 ⟩ ⟨ 00 ⋯ 0 ∣ M=\begin{bmatrix}
1 &0&\cdots&0\\
0&0&\cdots&0\\
\vdots&\vdots&\ddots&\vdots\\
0&0&\cdots&0
\end{bmatrix}=|0\cdots00\rangle\langle 00\cdots 0|
M = 1 0 ⋮ 0 0 0 ⋮ 0 ⋯ ⋯ ⋱ ⋯ 0 0 ⋮ 0 = ∣0 ⋯ 00 ⟩ ⟨ 00 ⋯ 0∣
计算投影测量的期望值为
⟨ ψ ∣ M ∣ ψ ⟩ = ⟨ 00 ⋯ 0 ∣ S ( x 1 ) † S ( x 2 ) ∣ 0 ⋯ 00 ⟩ ⟨ 00 ⋯ 0 ∣ S ( x 2 ) † S ( x 1 ) ∣ 0 ⋯ 00 ⟩ \langle\psi|M|\psi\rangle=\langle 00\cdots 0|S(x_1)^{\dagger}S(x_2)|0\cdots00\rangle\langle 00\cdots 0|S(x_2)^{\dagger}S(x_1)|0\cdots00\rangle
⟨ ψ ∣ M ∣ ψ ⟩ = ⟨ 00 ⋯ 0∣ S ( x 1 ) † S ( x 2 ) ∣0 ⋯ 00 ⟩ ⟨ 00 ⋯ 0∣ S ( x 2 ) † S ( x 1 ) ∣0 ⋯ 00 ⟩
以分类任务为例,引入了软间隔和核函数的SVM形式如下:
max α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j κ ( x i , x j ) s.t. ∑ i = 1 m α i y i = 0 , 0 ⩽ α i ⩽ C , i = 1 , 2 , … , m \begin{aligned}
\max _{\boldsymbol{\alpha}} & \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \kappa\left(\boldsymbol{x}_{i},\boldsymbol{x}_{j} \right)\\
\text { s.t. } & \sum_{i=1}^{m} \alpha_{i} y_{i}=0, \\
& 0\leqslant\alpha_{i} \leqslant C, \quad i=1,2, \ldots, m
\end{aligned}
α max s.t. i = 1 ∑ m α i − 2 1 i = 1 ∑ m j = 1 ∑ m α i α j y i y j κ ( x i , x j ) i = 1 ∑ m α i y i = 0 , 0 ⩽ α i ⩽ C , i = 1 , 2 , … , m
1 2 3 4 5 6 7 8 import numpy as npfrom sklearn.svm import SVCfrom sklearn import datasetsfrom sklearn.preprocessing import StandardScalerimport pennylane as qmlfrom pennylane.kernels import kernel_matrixfrom sklearn.model_selection import cross_val_scorefrom pennylane.templates import AngleEmbedding
1 2 3 X, y = datasets.load_iris(return_X_y=True ) X_scaled = StandardScaler().fit_transform(X) y_scaled = y
使用RBF核
1 np.average(cross_val_score(SVC(), X, y))
0.9666666666666666
1 2 3 4 5 6 7 8 9 10 dev_kernel = qml.device('lightning.qubit' , wires=n_qubits) projector = np.zeros((2 ** n_qubits, 2 ** n_qubits)) projector[0 , 0 ] = 1 @qml.qnode(dev_kernel ) def circuit (x1, x2 ): AngleEmbedding(x1, wires=range (n_qubits)) qml.adjoint(AngleEmbedding)(x2, wires=range (n_qubits)) return qml.expval(qml.Hermitian(projector, wires=range (n_qubits)))
用量子电路计算核函数
1 np.average(cross_val_score(SVC(kernel=lambda X1, X2: kernel_matrix(X1, X2, lambda x1, x2: circuit(x1, x2))), X, y))
0.9800000000000001