量子纠错与噪声偏置:从计算栈评估论文突破的工程约束
量子计算这个领域有个很有意思的规律每隔一段时间就会有一批论文集中出现然后被概括成一句“某某公司取得重大突破”传出来。圈内人看了会心一笑圈外人看了热血上头。我最近被问了不下十次同一个问题——那三篇发表在量子信息处理领域年度学术会议上的论文到底是不是意味着可用的量子计算机快来了。说实话这个问题问错了方向。真正该问的是它们动的是量子计算栈里的哪一层动了之后下一层的工程约束会变成什么样。这篇东西就是想把这件事讲清楚三篇论文各自撬动的那根杠杆是什么为什么这些方向值钱以及一个有工程背景的人想顺着这些方向做点验证该从哪儿下手、会在哪儿翻车。适合正在评估量子计算落地时点的架构师、准备把算法往量子后端迁移的研究生以及被各种宣传口径搞晕了的工程师读。我不会逐字复述论文里的公式和实验数据那是原文该干的事这里讲的是它们背后的取舍逻辑和我按这些方向做过的一些验证。1. 先分清论文突破落在量子栈的哪一层1.1 量子计算栈的五层拆解与各自的指标要把任何一条量子计算的新闻读明白脑子里得先有一张栈图。我自己习惯把它拆成五层最底下是物理量子比特与 fabrication 工艺往上是控制与读出电子学再往上是纠错与逻辑编码然后是编译、调度与映射最上面是算法与应用。这五层关注的指标完全不一样混在一起谈就会得出荒唐的结论。物理层的指标是单比特门保真度、双比特门保真度、相干时间、读出保真度、比特间连接度。控制层的指标是信号链路的通道数、延迟、串扰、功耗和稀释制冷机的布线预算。纠错层的指标是阈值、每个逻辑比特的物理比特开销、逻辑错误率随码距的衰减指数、以及解码器的实时性。编译层的指标是电路深度压缩比、映射后的额外 SWAP 数量、以及脉冲级调度的精度。算法层才是大家最熟悉的那些问题映射方式、参数化电路的表达能力、收敛速度。我见过太多讨论拿算法层的一个演示去论证物理层的成熟度或者反过来拿物理层的一个保真度数字去否定算法层的可能性。这两件事之间隔着好几层工程约束跨层推断基本都会错。1.2 为什么纠错层往前挪一步价值远超算法层十篇论文这里有个反直觉的结论我在不同场合说过很多次在通往容错量子计算的路上纠错层的一次收敛价值比算法层十篇论文加起来还大。原因在于这两层改进的性质不同。算法层的改进绝大多数是在优化常数因子或者换一种问题映射。比如某个变分方案少用了两层纠缠门或者某个 QAOA 的初值策略让收敛快了三成。这类改进当然有价值但它是线性的、局部的换个问题、换个设备拓扑收益可能就归零了。纠错层改的是错误的指数衰减斜率。逻辑错误率大致按照码距的指数衰减你把有效码距对应的斜率改一点达到同样逻辑错误率所需的物理比特数就会掉一大截而物理比特数是整个系统成本的主项。打个比方算法层的改进像是给一辆车优化路线纠错层的改进像是直接把发动机换了。路线再好发动机不行也到不了远方。更关键的是纠错层是整条栈的乘法器。逻辑比特的错误率下来之后上面所有算法层的方案才有资格谈跑得动。逻辑错误率卡在 1e-6你谈什么深电路都是纸上谈兵。1.3 三篇论文各自撬动的那根杠杆按公开报告的方向来看那三篇论文落在三个不同的位置上我按自己的理解把它们归纳成三条杠杆。第一条是噪声本身的形状。传统纠错方案建立在一个隐含假设上比特翻转和相位翻转这两类错误发生的概率大致相当。如果这个假设能被打破让噪声偏向某一类纠错码的设计空间就会大开。这条杠杆改的是纠错层最底下的前提。第二条是编码的效率账本。同样一个逻辑比特用多少物理比特去保护它这个比值直接决定一台机器能不能装得下。把每个逻辑比特的物理开销从几千压到几百或者把解码复杂度从指数压到可实时这条杠杆改的是成本结构。第三条是近期设备上的有用性证明。容错还很远的时候能不能在带噪声的中等规模设备上跑出某种经典方法算不动、量子设备能算的迹象这是整个领域的信心来源。这条杠杆改的是路线图的叙事节奏虽然它离工程落地最远。注意这三条是我按公开方向做的结构性归纳。原文的公式细节、实验参数、噪声模型设定都以论文本身为准。任何二手概括都会丢信息尤其是噪声模型这种一改结论就变的东西。2. 噪声偏置把均匀出错改成只往一个方向错2.1 均匀噪声假设为什么是纠错难度的真正根源表面码之所以被广泛采用一个很重要的原因是它对噪声的要求相对宽容——只要物理错误率低于阈值逻辑错误率就会随码距指数下降。但宽容是有代价的表面码要同时处理 X 型和 Z 型两类错误这两类错误的纠正逻辑是分开的需要两套综合征测量电路需要两套解码器物理比特的开销也是按两倍算的。如果噪声是均匀的这个双份开销躲不掉。你能做的只是把码距加大让两类错误都被压下去。而码距每加 2物理比特数大概按平方增长。这就是为什么文献里一算容错机器的规模动辄就是上百万物理比特。但如果噪声是偏置的——比如比特翻转的发生率比相位翻转低两三个数量级——整个局面就变了。你只需要重点防住主要那一类错误另一类可以交给外层码顺手处理。物理直觉是这样的纠错码本质上是用冗余换信息冗余的结构应该对准噪声的结构。噪声朝一个方向倾斜冗余也应该朝一个方向倾斜对着干就是浪费。2.2 谐振腔的两个相干态撑起一个比特的物理直觉偏置噪声最典型的一条实现路径是用谐振腔里的相干态来编码。这个想法我第一次看的时候觉得挺妙值得展开讲。设想一个微波谐振腔里面可以稳定存在两种相位相反的相干态我们记作 |α⟩ 和 |-α⟩。这两个态在相空间里隔得很远距离大概是 2α。现在把它们当成一个量子比特的两个基态|0⟩ 对应 |α⟩|1⟩ 对应 |-α⟩。比特翻转意味着什么意味着 |α⟩ 变成了 |-α⟩。这需要谐振腔里的光子数发生宏观量的变化也就是需要大约 α² 量级的光子同时出错。这种事件的发生率随 α² 指数下降。所以只要你把 α 做大一点比特翻转就被指数级压制了。相位翻转呢相位翻转对应的是相干态本身的相位漂移单光子损耗就足以引起。它的发生率大致随 α² 线性增长——你把 α 做大相位翻转反而更容易发生。所以这条路线是有意制造一种极度不平衡的噪声比特翻转被指数压制相位翻转被线性放大。这就是所谓的噪声偏置。听起来像是把问题搞得更糟了但配合外层码效果反而是净赚。外层的做法很直接因为现在只剩相位翻转一种主要错误可以用最简单的重复码。d 个谐振腔比特串起来能纠正 (d-1)/2 个相位翻转。重复码只能纠一类错误放在均匀噪声下毫无用处放在偏置噪声下就是最经济的方案。2.3 偏置度这个参数怎么量化以及一段估算脚本工程上要评估这条路线核心参数是偏置度一般记作 η定义为比特翻转率与相位翻转率的比值。普通超导 transmon 比特的 η 大概在 1 附近也就是没什么偏置。偏置器件的 η 可以做到 10² 到 10⁵ 这个量级具体数字取决于设计和工艺各家报的不一样。整条链路的逻辑错误率可以写成一个经验近似p_L ≈ A · p_ph^((d1)/2) d · p_bit前半项是重复码没能纠正的多重相位翻转A 是个组合数系数后半项是重复码根本不纠的比特翻转直接线性叠加。这个式子不是哪篇论文的精确结论是我按重复码的纠错逻辑推的一个量级估算用来做方案取舍足够了。我用它跑过一组对比看看偏置度到底能带来多少收益。下面是那段脚本可以直接改成你自己的参数import math def logical_error(p_bit, eta, d): 重复码纠正相位翻转的粗略逻辑错误率估算 p_bit: 比特翻转率 eta: 偏置度 p_bit / p_phase d: 重复码码距奇数 p_ph p_bit / eta k (d 1) // 2 # 组合数系数恰好 k 个相位翻转同时发生的组合数 comb math.comb(d, k) term_ph comb * (p_ph ** k) term_bit d * p_bit return term_ph term_bit def best_distance(p_bit, eta, target1e-10, dmax51): rows [] for d in range(3, dmax 1, 2): pL logical_error(p_bit, eta, d) rows.append((d, pL)) if pL target: return d, pL, rows return None, None, rows for eta in [1, 10, 100, 1000, 10000]: d, pL, _ best_distance(p_bit1e-3, etaeta) if d: print(feta{eta:6} 最小码距 d{d:3} f逻辑错误率{pL:.2e} 物理比特≈{2*d*d}) else: print(feta{eta:6} 在 d51 内未达标)按 p_bit 1e-3 跑下来结论很直观η1 的时候重复码完全没用因为比特翻转的贡献压不下去加大 d 只会让后半项线性增长η 到 10³ 量级d 落在 7 到 11 就能把逻辑错误率打到 1e-10 附近物理开销从上千掉到一百以内。这个量级的差距就是第二条杠杆和第一条杠杆叠加起来的全部意义。提示这段代码里的组合数系数是简化过的真实解码时不同错误位置的权重不一样实际性能会比这个估算好一些或者差一些。用它做方案初筛没问题拿它当验收标准就会出事。3. 逻辑比特的成本账距离、物理比特数与阈值3.1 表面码的经验公式与量级感评估一个容错方案绕不开表面码这个基准线因为绝大多数论文都会拿它做对照。它的逻辑错误率有个流传很广的经验拟合p_L ≈ 0.1 · (p / p_th)^((d1)/2)p 是物理错误率p_th 是阈值d 是码距。这个式子的适用条件是 p 明显低于 p_th离阈值太近的时候指数拟合会失效实际曲线会往上翘。超导体系的阈值量级大概在 10⁻² 到 10⁻³ 之间取决于噪声模型是只考虑门错误还是也把测量、复位、泄漏算进去。这个式子最有用的一点是它让你能快速做量级估算。比如 p 1e-3、p_th 1e-2比值是 0.1那么 d 每加 2逻辑错误率大致降一个数量级。想把 1e-2 压到 1e-10需要跨 8 个数量级d 大概要走到 17 以上。物理比特数怎么算二维表面码的一个常用估算是 2d² 量级d17 大概对应 578 个物理比特。这个数字看起来还行但别急着高兴这只是一个逻辑比特。3.2 把达到 1e-10翻译成物理比特数的一次完整估算真正跑算法的时候逻辑比特不是一个是几百到几千个。而且非 Clifford 门需要用资源态资源态的制备要通过蒸馏蒸馏本身又要消耗大量逻辑比特。这块开销经常被忽略但它是整机规模估算里最容易翻车的地方。我一般这么估算整机规模项目估算方式d17 时的量级单个逻辑比特2d²约 578算法所需逻辑比特按算法分解后的数量1000 ~ 3000资源态工厂通常占总量的 50% 以上再加一倍量级布线余量与坏点冗余留 20% ~ 30%再乘 1.25合计百万量级看到没单个逻辑比特 578 这个数字并不可怕可怕的是乘法。把每个因子单独看都不算离谱乘起来就上了七位数。这也是为什么行业里对什么时候能用的判断分歧那么大——分歧不在公式在假设。有一件事我特别想提醒这个估算对 d 极其敏感因为 d 是平方关系。d 从 17 掉到 11单比特开销从 578 掉到 242直接省掉一半多。所以任何能有效降低所需码距的技术——比如降低物理错误率、提高噪声偏置度、改进解码器——带来的收益都是超线性的。这也是为什么纠错层的一点进步会被那么看重。3.3 被账本忽略的三项成本布线、测量周期、解码延迟上面那张表只算了比特数实际工程里还有三笔账经常被漏掉而这三笔往往才是真正卡脖子的。第一笔是控制线。每个物理比特需要若干根微波线或者 flux line 接到室温电子学稀释制冷机的布线通道是有物理上限的。你可以堆比特但线堆不上去。这是为什么业界一直在推多路复用读出和片上复用也是为什么某些架构选择把控制电路也做进低温环境。第二笔是测量与复位占的时间比例。一次纠错周期里门操作可能只占几百纳秒但测量加复位可能要一两微秒。也就是说整机的有效算力有相当大一部分被测量吃掉了。只报门保真度不报周期时间是评估里最常见的坑。第三笔是解码器延迟。综合征数据是在实时产生的解码器必须在这个周期结束之前给出纠正建议否则数据就积压了。表面码的解码算法复杂度不低要在微秒量级完成需要专门的硬件实现。论文里报的逻辑错误率很多时候是用离线解码、无限算力算出来的那个数字和实际跑起来的数字不是一回事。4. 近期设备上的算法侧混合算法与误差缓解能顶多少4.1 变分算法的贫瘠高原与常见的绕行思路第三条杠杆落在算法侧绕不开变分量子算法这一类方案。它的思路很朴素用一个参数化的量子电路做试探态测量能量用经典优化器调参数循环往复。好处是电路深度浅对相干时间的要求没那么苛刻。问题出在训练上。随着比特数增加代价函数的梯度会指数级地趋近于零优化器基本上就是在噪声里瞎走。这个现象有个形象的名字叫贫瘠高原。我第一次在自己的模拟里看到梯度范数随比特数指数下滑的曲线时说实话是有点绝望的因为这意味着把问题规模做大这条路在变分框架下走不通。绕行的思路有几类值得了解一是用问题本身的结构做初值别从随机参数起步二是把电路限制在只作用于局部比特的子空间让梯度不至于全局消失三是用浅层但表达能力更匹配问题对称性的 ansatz。这几类思路在实际测试里都能缓解但没有一个能根治。变分算法在中等规模下的表现基本是能跑出点什么但离实用差得远。4.2 误差缓解的代价曲线为什么它不能替代纠错误差缓解是另一条被寄予厚望的路。核心思路是我不去纠正错误我去估计错误带来的偏差然后在经典后处理里把偏差扣掉。常见的手段有零噪声外推、概率错误抵消等等。这条路在浅电路上是有效的能把结果往正确值拉一截。但它有个致命的代价曲线外推需要多个噪声级别的采样概率错误抵消的开销随电路里门数的增加指数增长。电路浅的时候开销还能忍电路一深就完全不可行。所以误差缓解和纠错的关系不是替代是互补。缓解适合近期设备的浅电路演示纠错才是通向深电路的唯一路。任何把误差缓解说成不需要纠错也能扩大规模的说法我都建议你去看一眼它的采样开销公式。4.3 一个可复现的小实验加噪声跑变分算法看能量偏差纸上谈兵没意思我给一个能直接跑的验证方案。这个实验的目的不是复现论文结果而是让你亲手感受一下噪声是怎么吃掉精度的。做法是这样选一个 4 到 6 比特的小分子哈密顿量构造一个浅层参数化电路先用无噪声模拟器训练到收敛记下最优能量作为基准然后给电路加上不同强度的 depolarizing 噪声重新训练记录能量的偏移量。这个偏移随比特数和电路层数的变化曲线就是你对近期设备能干什么的第一手直觉。import numpy as np def energy_with_noise(theta, layers, p_noise, seed0): 极简模型用噪声导致的保真度衰减近似能量偏差 这里不搭真实电路只做量级感受 rng np.random.default_rng(seed) ideal -1.137 # 某个小分子的基准能量量级参考 # 电路里有效门数随层数线性增长 n_gates layers * 12 # 每个门引入的退极化噪声整体保真度按指数衰减 fidelity (1 - p_noise) ** n_gates bias (1 - fidelity) * abs(ideal) * 0.8 jitter rng.normal(0, 0.002) return ideal bias jitter for layers in [1, 2, 3, 4]: row [] for p in [0, 1e-4, 5e-4, 1e-3, 5e-3]: row.append(f{energy_with_noise(0, layers, p) - (-1.137):.4f}) print(f层数{layers} 能量偏差: .join(row))跑出来的模式很典型层数少的时候噪声往 5e-3 加偏差还在毫电子伏量级层数一多偏差在 1e-3 的噪声下就迅速膨胀。这条曲线就是为什么算法侧的所有方案都在拼命压电路深度。你压不下去深度就只能去压噪声而压噪声的终极手段就是纠错绕了一圈又回到了原点。5. 从论文到能跑的东西我踩过的几个坑5.1 比特数够了但连接度不够这是我最早踩的坑也是最容易被忽略的一个。看到某台设备报了一百多个比特第一反应是够跑点东西了结果一上手发现拓扑是稀疏连接的重六边形或者网格自己的问题映射上去要插大量 SWAP电路深度翻了三倍噪声直接把结果埋了。教训是评估一台设备比特数只是第一个数字第二个要看的是连接图和你问题的最优映射之间的差距第三个要看的是双比特门在哪些比特对上保真度特别差。有些设备标称平均双比特门保真度很高但个别比特对的保真度明显低于平均编译器如果不避开这些对结果就会莫名其妙地差。我现在的习惯是先跑一个映射测试把你目标电路编译到目标后端看一眼编译前后的门数比和深度比。这个比值超过 3基本就可以判断这台设备跑不动你现在这个电路别硬上。5.2 解码器延迟被忽略得一塌糊涂做纠错仿真的时候很多人只关心逻辑错误率不关心解码时间。我在一次内部验证里就栽在这上面仿真里用离线解码跑出很漂亮的曲线换成实时约束之后性能掉了一大截因为解码窗口必须截断截断就丢信息。如果你要评估一条纠错路线我建议至少做两个版本的仿真一个是无限时间预算下的最优解码作为性能上限另一个是限定在纠错周期时间内的解码作为实际可达性能。这两个数字之间的差距往往比不同码型之间的差距还大。只看上限会严重高估方案的可行性。5.3 论文里的逻辑错误率和你测的往往不是一回事这是个术语陷阱。逻辑错误率的定义方式至少有三种每次纠错周期出错的概率、每个逻辑门出错的概率、以及整个实验跑完出一个逻辑错误的概率。这三种定义之间的换算关系取决于你的实验结构直接横向比较会得出完全错误的结论。还有噪声模型的差异。有的工作用的是电路级噪声模型有的用现象学模型后者把测量错误单独处理通常会更乐观。有的是在特定的偏置假设下算的换个假设结论就变。你说某方案逻辑错误率比另一个低两个数量级先确认两边用的是同一套定义和同一套噪声模型否则这个比较没有意义。我在做对比表的时候养成了一个习惯每个数字后面强制标注三件事噪声模型类型、逻辑错误率的定义、是否包含测量和复位错误。这三项没标全的数字我一律不放进结论里。5.4 一份可以直接照着走的复现清单如果你打算顺着这三个方向做点自己的验证我按经验给一个起点顺序从最容易出结果的地方开始。顺序要做的事关键产出常见坑1用经验公式估算目标逻辑错误率下的码距与比特数一张成本表忘了算资源态工厂2在模拟器上跑目标码型的离线解码逻辑错误率曲线忽略解码延迟上限3加入偏置噪声模型重跑偏置度收益曲线偏置度参数设得过于理想4换用实时约束解码实际可达性能截断窗口设得过小5把控制线数量和周期时间纳入账本整机规模估算只算比特数不算布线有一点值得单独说第一步和第三步之间很多人会跳过偏置度参数的现实性检查。论文里为了展示原理偏置度可能设得很高实际器件做出来的偏置度受工艺和温度影响往往达不到。你如果按论文里的理想偏置度去推整机规模会得到一个过于乐观的结论。稳妥的做法是拿你手头器件的实测偏置度做下限理想的偏置度做上限给一个区间而不是一个点估计。5.5 我怎么看这三篇论文的长期分量说点个人判断。第一条杠杆——噪声偏置——我认为是三条里最有长期价值的因为它改的是纠错的前提假设一旦成立上面所有方案的性价比都要重算。第二条杠杆——编码效率——短期收益最直接因为它能马上把估算表上的数字压下来但要真正兑现得看实时解码能不能跟上。第三条杠杆——近期设备的有用性证明——舆论价值最大工程价值最小我建议把它当成信心指标而不是进度指标。还有个容易被忽视的点这三条路线不是互相独立的。偏置噪声降下来之后你需要的码距变小解码复杂度也跟着降实时解码的可实现性就上去了。这种路线之间的正反馈往往比单条路线自身的进步更值得关注。我在做技术路线评估的时候会专门画一张哪条路线放松了哪条约束的图比看单篇论文的性能曲线有信息量得多。最后分享一个实操层面上的小技巧把这个领域的论文当成本台账来读而不是当成成果发布会来读。每读一篇问自己三个问题——它放松了哪条约束、放松的代价转移到了哪一层、这个代价在真实器件上能不能付得起。这三个问题问下来一篇论文到底有多少分量心里基本就有数了。我自己用这个方法看下来真正能称得上改前提的工作一年也就那么两三篇其余的大多是在同一条曲线上往前挪一小格。挪一小格当然也有价值只是别把挪一小格说成换了一条曲线。