4. 表面码与拓扑码
表面码是量子纠错工程中最具代表性的一类拓扑码。它把物理量子比特排布在二维网格上,用局域稳定子反复测量,把量子错误转化为可被经典解码器处理的“综合征”。理解表面码的关键,不是记住某个公式,而是看清三件事:数据比特与辅助比特如何摆放、稳定子如何定义、边界如何决定逻辑信息。这三者共同决定了综合征图的形状,也决定了解码器能做什么。
一、表面码的物理结构
以最常见的旋转表面码为例,数据比特(data qubit)放在方格顶点上,辅助比特(ancilla)放在方格面心和边上。每个面心辅助比特测量一个 X 型稳定子,即它周围四个数据比特的 X 算符乘积;每个边辅助比特测量一个 Z 型稳定子,即它两端两个数据比特的 Z 算符乘积。稳定子彼此对易,因此可以同时测量,测量结果构成一个二进制串,就是综合征。
稳定子本征值为 +1 表示“无激发”,为 −1 表示“有激发”。在无噪声情况下,所有稳定子都是 +1;一旦某个数据比特发生 X 错误,会翻转相邻两个 Z 稳定子的本征值,于是综合征上出现一对相邻的 −1。若发生 Z 错误,则翻转相邻两个 X 稳定子。注意:X 错误只能被 Z 稳定子探测,Z 错误只能被 X 稳定子探测,这种“交叉探测”关系是表面码能同时纠正两类错误的基础。
示例参数(合理假设):取距离 d=3 的旋转表面码,共 9 个数据比特、8 个辅助比特(4 个面心 X 稳定子、4 个边 Z 稳定子)。逻辑错误率随 d 增大而指数下降,但物理比特数与测量轮次也随之增加。d=3 时单轮测量约需 8 次辅助比特测量,完整一轮纠错通常需要 d 轮重复测量以应对测量错误。
二、综合征图:把错误变成图上的路径
综合征图(syndrome graph)是解码的核心数据结构。它的顶点是“可能被激发的稳定子”,边是“一个物理错误可能同时激发这两个稳定子”的假设。对 X 错误而言,每个数据比特连接它相邻的两个 Z 稳定子,形成一条边;对 Z 错误而言,每个数据比特连接它相邻的两个 X 稳定子。这样,一次物理错误就对应综合征图上的一条边,而一组错误对应一组边,其端点正是观测到的 −1 稳定子。
解码问题于是转化为:给定综合征上若干被激发的顶点,在图上找一组边,使这些边的端点恰好等于被激发的顶点,且总权重最小。这就是最小权重完美匹配(MWPM)问题。对表面码,常用 Blossom 类算法求解。若考虑测量错误,还需把时间维度加入,形成三维时空图:每个稳定子在每个测量轮次是一个顶点,测量错误对应连接同一稳定子相邻轮次的竖直边。
三、边界条件:逻辑信息藏在哪里
表面码不是无限网格,它有边界。边界分两类:X 边界和 Z 边界。在 X 边界上,X 稳定子可以“终止”,不再需要成对出现;在 Z 边界上,Z 稳定子可以终止。边界的存在使逻辑算符成为可能:逻辑 X 算符是一条连接两个 X 边界的 X 型链,逻辑 Z 算符是一条连接两个 Z 边界的 Z 型链。逻辑算符的具体路径可以连续变形,只要不跨越另一类边界,这就是拓扑保护的直观含义。
边界条件直接改变解码图。在有限网格中,综合征图不再要求所有激发顶点都两两配对:靠近边界的激发顶点可以连接到边界顶点,边界顶点相当于“可以吸收奇偶性”的终端。因此,构建解码图时必须显式加入边界节点,并给边界边赋予合理权重。若忽略边界,解码器会把本可连到边界的激发强行配对,导致逻辑错误率上升。
工程要点:边界类型决定了哪些稳定子可以单独终止。绘制解码图时,先标注四条边界属于 X 还是 Z,再把边界节点加入顶点集合。边界边的权重通常取该数据比特到边界的等效距离,而不是固定常数。
四、解码图构建的实际流程
构建解码图可以按以下顺序进行。第一步,确定码距 d 和旋转/非旋转布局,列出所有数据比特坐标与稳定子坐标。第二步,对每个数据比特,找出它同时参与的两个 Z 稳定子和两个 X 稳定子,分别生成 X 错误边和 Z 错误边。第三步,加入边界节点:对每个位于边界附近的数据比特,若它只参与一个同类稳定子,则生成一条连到对应边界节点的边。第四步,若考虑测量错误,为每个稳定子增加时间方向的竖直边,连接第 t 轮与第 t+1 轮的同一稳定子。第五步,给每条边赋权重,通常取负对数似然 −log(p/(1−p)),其中 p 是该错误通道的发生概率。
# 伪代码:构建 X 错误解码图(简化)
graph = {}
for data in data_qubits:
z1, z2 = adjacent_Z_stabilizers(data)
if z1 and z2:
add_edge(graph, z1, z2, weight=w(data))
elif z1: # 靠近 Z 边界
add_edge(graph, z1, BOUNDARY_Z, weight=w(data))
elif z2:
add_edge(graph, z2, BOUNDARY_Z, weight=w(data))
# 加入时间边(测量错误)
for stab in all_stabilizers:
for t in range(rounds - 1):
add_edge(graph, (stab,t), (stab,t+1), weight=w_meas(stab))
得到图后,把每轮测量得到的综合征作为输入:被激发的稳定子作为需要匹配的顶点集合,调用 MWPM 求解器输出一组边,这些边对应的数据比特翻转就是解码器给出的纠正操作。最后把纠正操作与后续测量结果比对,判断是否发生逻辑错误。若逻辑算符的奇偶性被改变,则本次纠错失败。
五、结果判读与常见问题
判断解码是否成功,不能只看单轮综合征是否被“消掉”,而要看逻辑算符是否被意外翻转。工程上通常统计逻辑错误率随码距 d 的变化:若物理错误率低于阈值,逻辑错误率应随 d 增大而指数下降;若高于阈值,增大 d 反而更差。另一个常见问题是边界节点缺失或权重设置不当,表现为靠近边界的错误被错误配对,逻辑错误率异常偏高。此时应检查解码图中边界节点是否完整、边界边权重是否与数据比特错误率一致。
表面码与拓扑码的解码图构建,本质上是把“量子错误”翻译成“图上的匹配问题”。结构决定稳定子,稳定子决定综合征,边界决定逻辑算符,而解码图把这三者统一到一张可计算的图上。掌握这条链路,后续的 MWPM、Union-Find、神经网络解码器才有落地的对象。