QRAM(Quantum Random Access Memory,量子随机存取存储器)是量子计算中最具变革性但也最具争议的基础设施。它允许以量子叠加的方式并行访问经典数据库,是实现多项式加速的关键假设之一。本文详细分析 QRAM 的两种主要架构——Bucket Brigade 和基于魔幻资源态的方法——并讨论其物理可行性争议。
问题背景:为什么需要 QRAM
数据访问的瓶颈
大量量子算法的加速依赖于对经典数据的高效量子访问:
| 算法 | QRAM 需求 |
|---|---|
| HHL 线性方程组 | 制备 $\|b\rangle$(需访问 $\vec{b}$ 的所有分量) |
| 量子推荐系统 | 访问用户-商品评分矩阵 |
| 量子主成分分析 | 访问密度矩阵的经典描述 |
| 量子机器学习 | 访问训练数据 |
| Grover 搜索 | 访问数据库 $f(x)$ |
没有 QRAM,将 $N$ 个经典数据加载到量子态需要 $O(N)$ 步——抵消量子加速。
QRAM 的定义
定义:QRAM 是一个量子设备,给定地址寄存器 $|a\rangle$ 和数据寄存器 $|0\rangle$,实现:
$$|a\rangle|0\rangle \to |a\rangle|D_a\rangle$$
其中 $D_a$ 是存储在地址 $a$ 的数据。
关键要求:对叠加态也必须工作:
$$\sum_{a} \alpha_a |a\rangle|0\rangle \to \sum_{a} \alpha_a |a\rangle|D_a\rangle$$
即并行访问所有地址——这是 QRAM 的量子优势来源。
架构一:Bucket Brigade QRAM
基本思想
Bucket Brigade QRAM 由 Vittorio Giovannetti、Seth Lloyd 和 Lorenzo Maccone 于 2008 年提出,是目前最广泛讨论的 QRAM 架构。
核心结构:一棵二叉树,叶节点存储数据,内部节点为”路由器”量子比特。
架构细节
树结构:
- 深度 $d = \lceil\log_2 N\rceil$($N$ 个数据项)
- 每个内部节点是一个三态量子比特:$|0\rangle$(空闲)、$|L\rangle$(传递到左子树)、$|R\rangle$(传递到右子树)
- 叶节点存储数据 $D_k$
查询过程:
- 地址输入:将地址 $|a\rangle = |a_{d-1} a_{d-2} \cdots a_0\rangle$ 输入根节点
- 路由:从根到叶,每个内部节点根据地址比特 $a_k$ 将查询”路由”到左($a_k = 0$)或右($a_k = 1$)子树
- 读出:到达叶节点,将数据 $D_a$ 写入数据寄存器
对叠加地址的并行性:
$$|a\rangle|0\rangle \xrightarrow{\text{bucket brigade}} |a\rangle|D_a\rangle$$
由于每个节点只在其子树被查询时才被激活,同时只有一个路径被激活,避免了量子比特之间的大量纠缠。
Bucket Brigade 的物理实现
路由器节点:每个内部节点使用量子条件交换(Fredkin 门或受控 SWAP):
$$|s\rangle|L\rangle|0\rangle \xrightarrow{s=0} |s\rangle|L\rangle|0\rangle \quad \text{(idle)}$$
$$|s\rangle|L\rangle|0\rangle \xrightarrow{\text{right}} |L\rangle|0\rangle|s\rangle \quad \text{(query goes right)}$$
实际使用量子光开关或离子阱条件转移实现。
Bucket Brigade 的复杂度
| 资源 | 数量 |
|---|---|
| 路由器量子比特 | $O(N)$(树节点数 $\approx 2N$) |
| 量子比特总数 | $O(N)$ |
| 门深度 | $O(\log N)$ |
| 单次查询门数 | $O(\log N)$ |
看起来很高效:$O(\log N)$ 深度对 $N$ 个数据的并行访问。
关键争议:物理可行性
问题 1:退相干。每个路由器节点的量子比特必须在查询过程中保持相干。对 $d = \log N$ 层,相干时间需 $O(\log N)$ 倍于门时间——目前技术可及。
问题 2:存储稳定性。数据必须长期存储在叶节点。对超导量子比特,相干时间 $\sim 100 \mu s$,限制了数据存储时间。
问题 3(核心争议):操作精度。Kent 和 Siopsis 等人指出,bucket brigade 的路由门需要指数级精度才能保证叠加查询的正确性——对 $d$ 层树,每层误差 $\epsilon$ 导致总误差 $O(2^d \cdot \epsilon)$,要求 $\epsilon = O(2^{-d}) = O(1/N)$。
2024 年的争论:Joao Doriguello 等人的工作表明,bucket brigade 在最坏情况下的精度要求确实是指数严格的,这对其实际可行性构成根本质疑。
架构二:基于魔幻资源态(Magic State)的 QRAM
核心思想
另一种 QRAM 方案避免了 bucket brigade 的精度问题,转而使用预先制备的魔幻资源态(magic resource state)来实现数据加载。
原理:将经典数据库 $D_0, D_1, \ldots, D_{N-1}$ 编码为一个量子态:
$$|\mathcal{D}\rangle = \frac{1}{\sqrt{N}} \sum_{a=0}^{N-1} |a\rangle|D_a\rangle$$
这个态就是”资源态”——一旦制备好,查询就变为对 $|\mathcal{D}\rangle$ 的受控操作。
资源态的制备
方法一:门电路制备
直接用量子门电路制备 $|\mathcal{D}\rangle$。对 $N = 2^n$ 个数据,每个数据 $k$ 比特,制备 $|\mathcal{D}\rangle$ 需要 $O(N \cdot k)$ 门——本质上是 $O(N)$ 操作,没有加速。
方法二:经典预处理 + 量子加载
将经典数据预处理为一个量子态的制备序列,然后用 $O(\text{poly}(n))$ 门实现。这要求数据具有结构(稀疏、低秩等)。
方法三:基于 swap 测试的渐进制备
逐步将经典数据”注入”量子态,每步 $O(1)$ 门,共需 $O(N \cdot k)$ 步。
量子门 QRAM(Gate-based QRAM)
2023-2024 年的发展:新一代 QRAM 方案使用量子门直接实现,而非依赖 bucket brigade 的光学开关。
核心构造:
- 用 $O(N \cdot k)$ 量子比特存储数据
- 用 $O(N \cdot k)$ 门将数据加载为 $|\mathcal{D}\rangle$
- 查询:用 Grover-like 的方法或直接测量
复杂度:$O(N \cdot k)$ 门和量子比特——与经典数据库的 $O(N \cdot k)$ 存储完全相同。
魔幻资源态的优势与代价
优势:
- 门精度要求仅为 $O(1/\text{poly}(n))$(无指数精度问题)
- 可以用通用量子门实现
- 与量子纠错兼容
代价:
- 制备 $|\mathcal{D}\rangle$ 需要 $O(N \cdot k)$ 门——失去”量子加速”
- 对于无结构数据,QRAM 的量子优势消失了
QRAM 的根本限制:下界结果
Troyansky 和 Tishby 的下界(1996)
定理:从 $N$ 个经典数据项中读取 $k$ 个数据,无论使用何种量子算法,至少需要 $\Omega(k)$ 次数据访问。
含义:如果目标是读取所有 $N$ 个数据(如 HHL 需要 $\vec{b}$ 的所有分量),任何量子算法都需要 $\Omega(N)$ 操作——与经典相同。
QRAM 的量子优势在哪里?
QRAM 的加速不是在”读取所有数据”上,而是在以下场景:
- 叠加查询:$\sum_a \alpha_a |a\rangle|D_a\rangle$ 的并行制备——对需要同时访问多个数据的算法(如量子推荐系统)
- 数据结构操作:对数据库的结构化操作(如量子索引、量子搜索)
- 内积估计:$\langle a | D | b \rangle$ 的量子估计——仅需 $O(\text{poly}(n))$ 次访问
代码示例(uniqc 实现)
类型:核心子程序演示。下面用编译后的多控 X 门构造一个最小尺寸 QRAM oracle $|a\rangle|0\rangle \mapsto |a\rangle|D[a]\rangle$(数据库 $D = [0,1,1,0]$,2 个地址比特 + 1 个数据比特),并展示对地址叠加态的并行查询。真实硬件的 BBQRAM 树结构和 Fredkin 路由器更复杂,本例仅复现其逻辑功能。
import numpy as np
from uniqc import Circuit
DATA = [0, 1, 1, 0] # 4 项 1-bit 数据库
ADDR_QUBITS = 2 # q[0]=a0 (LSB), q[1]=a1 (MSB)
DATA_QUBIT = 2
N_QUBITS = 3
def build_qram_circuit(prepare_addr_superposition=False):
"""构造 |a⟩|0⟩ → |a⟩|D[a]⟩ 的电路。"""
circ = Circuit()
circ.identity(N_QUBITS - 1)
if prepare_addr_superposition:
circ.h(0); circ.h(1) # 均匀叠加地址
# 对每个 D[a]==1 的地址,构造受控 X 翻转数据比特
for a_val in range(2 ** ADDR_QUBITS):
if DATA[a_val] == 0:
continue
flip = [k for k in range(ADDR_QUBITS) if not ((a_val >> k) & 1)]
for q in flip: circ.x(q)
circ.toffoli(0, 1, DATA_QUBIT)
for q in flip: circ.x(q)
return circ
# 测试 1: 单地址检索
print('测试 1: 单地址检索')
for a_val in range(4):
circ = Circuit(); circ.identity(N_QUBITS - 1)
for k in range(ADDR_QUBITS):
if (a_val >> k) & 1: circ.x(k)
circ.add_circuit(build_qram_circuit())
psi = circ.get_matrix()[:, 0]
idx = int(np.argmax(np.abs(psi) ** 2))
print(f' |a={a_val}⟩|0⟩ → |{idx:03b}⟩ (期望 D[{a_val}]={DATA[a_val]})')
# 测试 2: 叠加地址查询(量子并行)
print('\n测试 2: 叠加地址查询')
psi = build_qram_circuit(prepare_addr_superposition=True).get_matrix()[:, 0]
print('输出态(振幅 > 0.01 的基态,|q2 q1 q0⟩ = |d a1 a0⟩):')
for idx in range(2 ** N_QUBITS):
if abs(psi[idx]) < 0.01: continue
bits = f'{idx:0{N_QUBITS}b}'
a_val = int(bits[1:], 2)
print(f' |{bits}⟩ → 地址 a={a_val}, D[{a_val}]={DATA[a_val]}, '
f'振幅 ={psi[idx].real:+.4f}')运行结果:
测试 1: 单地址检索
|a=0⟩|0⟩ → |000⟩ (期望 D[0]=0)
|a=1⟩|0⟩ → |101⟩ (期望 D[1]=1)
|a=2⟩|0⟩ → |110⟩ (期望 D[2]=1)
|a=3⟩|0⟩ → |011⟩ (期望 D[3]=0)
测试 2: 叠加地址查询
输出态(振幅 > 0.01 的基态,|q2 q1 q0⟩ = |d a1 a0⟩):
|000⟩ → 地址 a=0, D[0]=0, 振幅 = +0.5000
|011⟩ → 地址 a=3, D[3]=0, 振幅 = +0.5000
|101⟩ → 地址 a=1, D[1]=1, 振幅 = +0.5000
|110⟩ → 地址 a=2, D[2]=1, 振幅 = +0.5000观察:
- 单地址检索全部正确:对 $a = 0,1,2,3$ 输入,数据比特分别变成 $0,1,1,0 = D[a]$,与查表一致;
- 叠加查询展示了 QRAM 的关键量子能力——一次电路调用就同时”为每个地址附上其对应的数据”,输出 $\sum_a \alpha_a |a\rangle|D[a]\rangle$,这正是后续 HHL / 量子推荐系统 / Grover 等算法所赖以加速的输入接口;
- 编译后的电路只用 $|D|_{1} = 2$ 个 Toffoli 门($D$ 中非零元素的个数)——这是 $O(N)$ 复杂度的”完全展开”版本,没有 BBQRAM 的 $O(\log N)$ 查询时间优势。真实 BBQRAM 通过引入扇出树结构和 $N$ 个路由器节点实现 $O(\log N)$ 查询深度,代价是需要 $O(N)$ 的物理量子比特和精细的相干维持——这正是文章后续讨论的”QRAM 的物理可行性争议”的核心。
QRAM 在量子算法中的角色
HHL 和量子线性代数
原始 HHL 论文假设 $\vec{b}$ 已经以量子态 $|b\rangle$ 形式存在。若 $\vec{b}$ 来自经典数据,需要 QRAM 将其加载。
- 有 QRAM:$O(\text{poly}(n))$ 加载
- 无 QRAM:$O(N)$ 加载,抵消量子加速
量子推荐系统
Kerenidis 和 Prakash(2017)的量子推荐算法假设 QRAM 存储用户-商品评分矩阵,实现 $O(\text{poly}(n))$ 推荐。Tang(2019)的”去量子化”经典算法表明,该推荐系统没有真正的量子加速——部分原因是 QRAM 的假设过强。
量子主成分分析
Lloyd, Mohseni 和 Rebentrost(2014)的量子 PCA 算法假设密度矩阵以 QRAM 形式可访问。对大密度矩阵($N \times N$),这需要 $O(N^2)$ 存储——与经典相同。
当前实验进展
| 年份 | 平台 | 规模 | 方法 |
|---|---|---|---|
| 2019 | 光量子 | 8 项数据 | Bucket Brigade 原型 |
| 2021 | 超导 | 4 地址 | 受控路由 |
| 2023 | 离子阱 | $O(10)$ 项 | 门制备资源态 |
| 2024 | 多平台 | $O(100)$ 项 | 经典辅助量子加载 |
QRAM 的争议与展望
支持方论点
- QRAM 对多个量子算法的加速是必要的
- 小规模 QRAM 已在实验上实现
- 量子纠错技术的进步将改善 QRAM 的可行性
质疑方论点
- Bucket Brigade 的精度要求是指数严格的
- 门制备 $|\mathcal{D}\rangle$ 需要 $O(N)$ 门——失去量子优势
- Tang 的去量子化结果表明,许多”需要 QRAM”的算法可以用经典方法匹配
- QRAM 的物理实现面临根本性的退相干和可扩展性挑战
当前共识
谨慎乐观:QRAM 可能在小规模、特定结构的数据上实用,但作为通用的量子数据库基础设施,其物理可行性仍存重大疑问。算法设计者应尽量减少对 QRAM 的依赖,或明确标注 QRAM 假设。
总结
QRAM 是量子计算中最具变革性潜力但也最具争议的基础设施。Bucket Brigade 架构以 $O(\log N)$ 深度实现查询,但面临指数精度要求;基于魔幻资源态的方法规避了精度问题,但代价是 $O(N)$ 的制备成本。理解 QRAM 的原理、局限和争议,对于正确评估量子算法的实际加速潜力至关重要。
参考文献:
- Giovannetti, V., Lloyd, S., & Maccone, L. (2008). Quantum random access memory. Physical Review Letters, 100(16), 160501.
- Arunachalam, S., Gheorghiu, V., Jochym-O’Connor, T., Mosca, M., & Srinivasan, P. V. (2015). On the robustness of bucket brigade quantum RAM. New Journal of Physics, 17(12), 123010.
- Tang, E. (2019). A quantum-inspired classical algorithm for recommendation systems. STOC 2019.
- Doriguello, J. F., et al. (2024). Quantum and classical complexity of QRAM. arXiv:2401.03822.
返回目录:量子计算算法教程系列


Comments | NOTHING
该文章已经关闭评论