本节摘要:任意单比特错误都能拆成比特翻转、相位翻转、双翻转三种泡利错误的组合,这个离散化结果是量子纠错的第一根地基;而不可克隆定理堵死经典冗余后,防错只剩"查错不查态"一条窄门。本节用三比特重复码的攻防模拟,把窄门在哪里、多宽,演示得明明白白。
把镜头放进一次真实的数据复盘:某团队在含噪声设备上跑了八小时变分算法,凌晨对账时发现,能量曲线在几小时前开始缓慢爬升——不是优化在进步,是设备在退化,错误悄悄吃掉了梯度。复盘会上的第一问是"哪类错误变多了",而没人能回答,因为日志只记录了任务参数,没有按错误类型分桶统计。这个场景暴露了一个认知缺口:谈防御之前,得先把"错误"拆开看清——它不是一团模糊的"坏了",而是三种正交的面孔,各有各的成因、症状与克星。本节先立分型,再立防线,最后演示防线在哪儿失效。
单比特错误的完备基只有三味药:X(比特翻转,零一互换)、Z(相位翻转,叠加态的相对相位反号)、Y(双翻转,X 与 Z 的复合,差一个相位因子)。任意单比特错误——不管物理上是电压毛刺、磁通抖动还是杂散耦合——都能写成这三者的线性组合。纠错码之所以敢跟"连续的错误空间"叫板,靠的正是这个离散化结果:只需要甄别三种离散错误,连续的病害就自动落网。量子纠错的第一性巧思就藏在这里,它把一个看似要用无穷精度对付的问题,化简成一道有限选项的分类题。
| 面孔 | 泡利算符 | 对布洛赫球的效果 | 主要物理来源 | 与第 2 章通道的对应 |
|---|---|---|---|---|
| 比特翻转 | X | 北极与南极互换 | 控制脉冲过冲、杂散能级 | 比特翻转通道 |
| 相位翻转 | Z | 沿赤道镜面翻转 | 磁通噪声、频率抖动 | 相位翻转通道(纯退相干) |
| 双翻转 | Y | 球心对称翻转 | 前两者的复合 | 退极化通道的成分 |
分型表还附带一个战略推论:经典世界里只有第一副面孔(零一互换),量子世界凭空多出两副——相位类错误不能靠"看结果"发现,因为计算基的测量分布根本不变。这就是量子纠错与经典纠错真正的分水岭:敌人多了两维,而侦查手段(直接读态)恰恰被禁止。
经典老路是"三份副本加多数表决":把零抄三遍,谁坏了一眼看出。量子世界这条路被两头堵死——不可克隆定理禁止复制未知态,测量坍缩禁止翻看内容。绕行的办法在 2.2 节已埋了伏笔:伴随式测量,用辅助比特去问"有没有错、错在哪类",绝不问"态是什么"。以三比特比特翻转码为例:逻辑零编码为 |000\rangle,逻辑一编码为 |111\rangle,任意叠加态则编码为 \alpha|000\rangle + \beta|111\rangle——注意这不是复制(复制 \alpha|0\rangle + \beta|1\rangle 会得到 \alpha|0\rangle\alpha|0\rangle 那样的乘积,而这里是纠缠整体),编码变换本身是合法的幺正操作,与不可克隆定理不冲突。
解码时测量两个奇偶校验:第一二位相同吗、第二三位相同吗?两个答案的组合精确指出哪一位翻转了(或没翻转),而 \alpha 与 \beta 始终没被读出——查错不查态,窄门就是这门宽。代码演算一遍:
# repetition.py:三比特比特翻转码的攻防模拟(仅标准库) import random def encode(a, b): """把单比特态 (a, b) 编码为 alpha*000 + beta*111 的振幅表 [000..111]。""" s = [0.0] * 8 s[0] = a # |000> s[7] = b # |111> return s def flip_bit(s, i): """对第 i 位施加 X 错误:振幅表中该位取反的分量两两互换。""" return [s[idx ^ (1 << i)] for idx in range(8)] def decode_majority(bits): """多数表决:三比特中出现多的那个值胜出。""" return 1 if sum(bits) >= 2 else 0 def run(p, trials=100000, seed=7): """发送逻辑零,逐位以概率 p 翻转,统计多数表决后的失败率。""" rng = random.Random(seed) fail = 0 for _ in range(trials): bits = [0, 0, 0] received = [1 if rng.random() < p else b for b in bits] if decode_majority(received) != 0: fail += 1 return fail / trials # 理论对照:三位中至少两位翻转的概率 3p平方(1-p) + p立方 for p in [0.01, 0.05, 0.10, 0.20, 0.30, 0.50]: theory = 3 * p**2 * (1 - p) + p**3 print(f"物理错误率 {p:.2f} -> 模拟逻辑错误率 {run(p):.4f} 理论值 {theory:.4f}")
输出的规律值得盯住:物理错误率百分之五时,三比特码把逻辑错误率压到千分之七上下(三位中至少两位坏的概率只有约百分之零点七),防御有效;可当错误率越过半数,逻辑错误率反超物理错误率——坏两位以上的概率超过了坏一位,多数表决开始"表决"出错误答案。这个小模拟提前预演了 4.3 节的核心概念:防线有效的前提是错误率低于某个门槛,门槛之下冗余是护甲,门槛之上冗余是累赘。还要强调这段模拟的一个偷懒:它把量子纠错简化成了经典纠错(只防比特翻转)。相位翻转怎么防?答案漂亮得像一句诗——先对每个比特做一次哈达玛变换,把相位错误"转"成比特错误,用同一套重复码防住,再变回来。把两套三比特码串联嵌套,就是肖尔九比特码。
误解一:以为编码就是复制。判断标准很简单——看编码后的态是乘积还是纠缠:|000\rangle 这样的基态确实是乘积(所以编码逻辑零不违反任何定理),但任意叠加态编码后是 \alpha|000\rangle + \beta|111\rangle,拆不开,信息分布在整体关联结构里而非任何单比特上。误解二:以为伴随式测量会坍缩逻辑态。事实上伴随式只与错误空间正交:测量后态坍缩到"某个错误已发生"的分支上,逻辑信息 \alpha、\beta 原封不动——坍缩发生了,但坍缩的是"错误的不确定性",不是"数据的值"。这两条想通了,4.2 节的稳定子形式化就只剩语法问题。
下一节把九比特原型机一路推演到今天的战场主力——表面码,看防御工事如何从实验室原型进化为可平面化、可规模化的制式装备。