qml.阴影

概述

测量

classical_shadow(导线[, 种子])

经典阴影测量协议。

shadow_expval(H[, k, seed])

以可微分的方式使用经典阴影计算期望值。

经典后处理的影子类

ClassicalShadow(位, 配方[, 导线图])

用于经典影子后处理期望值、近似状态和熵的类。

QNode 转换

shadow_state(tape, wires[, diffable])

将一个返回经典阴影的电路转换为以可微分的方式返回重构状态的电路。

经典阴影形式

注意

根据 arXiv:2103.07510,在计算多个期望值时,建议通过同时测量量子位对易项直接估计所需的可观察量。在PennyLane中实现这一点的一种方法是通过Hamiltonian并设置grouping_type="qwc"。有关此主题的更多细节,请参见PennyLane在使用经典阴影估计期望值上的演示。

一个 ClassicalShadow 是对量子态的经典描述,能够重现局部保利可观测量的期望值,见 arXiv:2002.08953

这个想法是通过在每个量子位上进行随机保利基底的测量,捕捉\(T\)的本地快照(由设备中的shots设置给出)。测量结果,用bits表示,以及测量基底的选择recipes,分别记录在两个(T, len(wires))整数张量中。

\(t\)-th 测量开始,我们可以重构local_snapshots(见ClassicalShadow方法)

\[\rho^{(t)} = \bigotimes_{i=1}^{n} 3 U^\dagger_i |b_i \rangle \langle b_i | U_i - \mathbb{I},\]

其中 \(U_i\) 是对应于测量的旋转(例如,在 \(X\) 中测量时 \(U_i=H\))的量子比特 \(i\) 在快照 \(t\) 时,以及 \(|b_i\rangle = (1 - b_i, b_i)\) 根据输出比特 \(b_i\) 给出的相应计算基态。

从这些本地快照中,可以计算本地Pauli字符串的期望值,其中局部性指的是非单位算符的数量。 该过程的准确性由测量的数量 \(T\) (shots) 决定。 为了达到错误度 \(\epsilon\),需要大约 \(T = \mathcal{O}\left( \log(M) 4^\ell/\epsilon^2 \right)\) 次测量来确定 \(M\) 个不同的, \(\ell\)-局部可观测量。

原则上也可以重建全局状态 \(\sum_t \rho^{(t)}/T\),但由于其指数级扩展,对于较大的系统来说,这并不可取也不实用。

基本用法

在PennyLane中,通过经典阴影计算期望值的最简单方法是直接从qnode返回 shadow_expval()

H = qml.Hamiltonian([1., 1.], [qml.Z(0) @ qml.Z(1), qml.X(0) @ qml.Z(1)])

dev = qml.device("default.qubit", shots=10000)

# shadow_expval + mid-circuit measurements require to defer measurements
@qml.defer_measurements
@qml.qnode(dev)
def qnode(x):
    qml.Hadamard(0)
    qml.CNOT((0,1))
    qml.RX(x, wires=0)
    qml.measure(1)
    return qml.shadow_expval(H)

x = np.array(0.5, requires_grad=True)

这种计算期望值的方法的一个重大优点是它是可微的。

>>> qnode(x)
array(0.8406)
>>> qml.grad(qnode)(x)
-0.49680000000000013

ClassicalShadow中有更多后处理经典影像的选项。